From 2c41e37c2de3aea8a332d382d3ffc971d053e0b3 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 7 Jan 2024 20:42:50 +0100 Subject: [PATCH 01/91] Remove copy-to-tmp option Found by: Geo Patch by: michaelortmann Fixes: #1503 This PR removes the copy-to-tmp from the config and hard-codes the previous '1' functionality, requiring the file to be coped to a tmpfile before being sent. For eggdrop 2.0 remaining bits of copy-to-tmp should be removed from module API --- doc/sphinx_source/modules/mod/transfer.rst | 9 +------ doc/sphinx_source/using/tcl-commands.rst | 5 ++-- eggdrop.conf | 6 ----- src/dccutil.c | 4 +-- src/mod/filesys.mod/filesys.c | 1 + src/mod/share.mod/share.c | 9 +++---- src/mod/transfer.mod/help/set/transfer.help | 7 ----- src/mod/transfer.mod/help/transfer.help | 4 +-- src/mod/transfer.mod/transfer.c | 30 ++++++++++----------- src/modules.c | 4 ++- src/tcl.c | 2 -- src/users.c | 6 +++-- 12 files changed, 33 insertions(+), 54 deletions(-) diff --git a/doc/sphinx_source/modules/mod/transfer.rst b/doc/sphinx_source/modules/mod/transfer.rst index d914c64c6..1d804c229 100644 --- a/doc/sphinx_source/modules/mod/transfer.rst +++ b/doc/sphinx_source/modules/mod/transfer.rst @@ -1,4 +1,4 @@ -Last revised: January 1, 2002 +Last revised: November 29, 2023 .. _transfer: @@ -27,13 +27,6 @@ There are also some variables you can set in your config file: but admits that may be too small. 1024 is standard these days. Set this to 0 to use turbo-dcc (recommended). - set copy-to-tmp 1 - Enable this setting if you want to copy files to a temporary location - before sending or receiving them. This might be useful for file - stability, but if your directories are NFS mounted, it's a pain. - Setting this to 1 is not advised for big files or if you're low on - disk space. - set xfer-timeout 30 Set here the time (in seconds) to wait before an inactive transfer times out. diff --git a/doc/sphinx_source/using/tcl-commands.rst b/doc/sphinx_source/using/tcl-commands.rst index 9d0f53df1..34a318b53 100644 --- a/doc/sphinx_source/using/tcl-commands.rst +++ b/doc/sphinx_source/using/tcl-commands.rst @@ -1,7 +1,7 @@ .. highlight:: text Eggdrop Tcl Commands -Last revised: January 24, 2021 +Last revised: January 6, 2024 ==================== Eggdrop Tcl Commands @@ -2011,8 +2011,7 @@ dccsend | 4 | the file was queued for later transfer, which means that person has | | | too many file transfers going right now | +-------+---------------------------------------------------------------------+ - | 5 | copy-to-tmp is enabled and the file already exists in the temp | - | | directory | + | 5 | the file could not be opened or temporary file could not be created | +-------+---------------------------------------------------------------------+ Module: transfer diff --git a/eggdrop.conf b/eggdrop.conf index 1b8de6651..fedb6d919 100755 --- a/eggdrop.conf +++ b/eggdrop.conf @@ -1445,12 +1445,6 @@ set max-dloads 3 # 0 is turbo-dcc (recommended). set dcc-block 0 -# Enable this setting if you want to copy files to a temporary location before -# sending or receiving them. This might be useful for file stability, but if -# your directories are NFS mounted, it's a pain. Setting this to 1 is not -# advised for big files or if you're low on disk space. -set copy-to-tmp 1 - # Set here the time (in seconds) to wait before an inactive transfer times out. set xfer-timeout 30 diff --git a/src/dccutil.c b/src/dccutil.c index b3a80e2cb..ece4d895d 100644 --- a/src/dccutil.c +++ b/src/dccutil.c @@ -33,7 +33,7 @@ #include "tandem.h" extern struct dcc_t *dcc; -extern int dcc_total, dcc_flood_thr, backgrd, copy_to_tmp, max_socks; +extern int dcc_total, dcc_flood_thr, backgrd, max_socks; extern char botnetnick[], version[]; extern time_t now; extern sock_list *socklist; @@ -318,7 +318,7 @@ void killtransfer(int n) fclose(dcc[n].u.xfer->f); dcc[n].u.xfer->f = NULL; } - if (dcc[n].u.xfer->filename && copy_to_tmp) { + if (dcc[n].u.xfer->filename) { for (i = 0; i < dcc_total; i++) { if ((i != n) && (dcc[i].type->flags & DCT_FILETRAN) && (dcc[i].u.xfer->filename) && diff --git a/src/mod/filesys.mod/filesys.c b/src/mod/filesys.mod/filesys.c index 5b40ffebd..f5ef33533 100644 --- a/src/mod/filesys.mod/filesys.c +++ b/src/mod/filesys.mod/filesys.c @@ -791,6 +791,7 @@ static void filesys_dcc_send_hostresolved(int i) /* Put uploads in a temp file first */ dcc[i].u.xfer->f = tmpfile(); if (dcc[i].u.xfer->f == NULL) { + debug1("filesys: filesys_dcc_send_hostresolved(): tmpfile(): error: %s", strerror(errno)); dprintf(DP_HELP, "NOTICE %s :Can't create file `%s' (temp dir error)\n", dcc[i].nick, dcc[i].u.xfer->origname); diff --git a/src/mod/share.mod/share.c b/src/mod/share.mod/share.c index 40452536a..9e7bc519a 100644 --- a/src/mod/share.mod/share.c +++ b/src/mod/share.mod/share.c @@ -24,6 +24,7 @@ #define MODULE_NAME "share" #define MAKING_SHARE +#include #include "src/mod/module.h" #include @@ -1242,12 +1243,10 @@ static void share_ufsend(int idx, char *par) putlog(LOG_MISC, "*", "NO MORE DCC CONNECTIONS -- can't grab userfile"); dprintf(idx, "s e I can't open a DCC to you; I'm full.\n"); zapfbot(idx); - } else if (copy_to_tmp && !(f = tmpfile())) { + } else if (!(f = tmpfile())) { + debug1("share: share_ufsend(): tmpfile(): error: %s", strerror(errno)); putlog(LOG_MISC, "*", "CAN'T WRITE TEMPORARY USERFILE DOWNLOAD FILE!"); zapfbot(idx); - } else if (!copy_to_tmp && !(f = fopen(s, "wb"))) { - putlog(LOG_MISC, "*", "CAN'T WRITE USERFILE DOWNLOAD FILE!"); - zapfbot(idx); } else { /* Ignore longip and use botaddr, arg kept for backward compat for pre 1.8.3 */ newsplit(&par); @@ -2353,7 +2352,7 @@ char *share_start(Function *global_funcs) global = global_funcs; - module_register(MODULE_NAME, share_table, 2, 4); + module_register(MODULE_NAME, share_table, 2, 5); if (!module_depend(MODULE_NAME, "eggdrop", 108, 0)) { module_undepend(MODULE_NAME); return "This module requires Eggdrop 1.8.0 or later."; diff --git a/src/mod/transfer.mod/help/set/transfer.help b/src/mod/transfer.mod/help/set/transfer.help index 1a5b01505..959b4d448 100644 --- a/src/mod/transfer.mod/help/set/transfer.help +++ b/src/mod/transfer.mod/help/set/transfer.help @@ -16,13 +16,6 @@ mode, the bot will dump transfers as fast as possible, only stopping to count acks after it's finished. This can dramatically improve the speed of file transfers, and is recommended. -%{help=set copy-to-tmp}%{+n} -### %bset copy-to-tmp%b <0/1> - Enable this setting if you want to copy files to a temporary location - before sending or receiving them. This might be useful for file - stability, but if your directories are NFS mounted, it's a pain. - Setting this to 1 is not advised for big files or if you're low on - disk space. %{help=set xfer-timeout}%{+n} ### %bset xfer-timeout%b <#> This is the number of seconds to wait before a dcc send or get is diff --git a/src/mod/transfer.mod/help/transfer.help b/src/mod/transfer.mod/help/transfer.help index bc64802ac..2af240cf3 100644 --- a/src/mod/transfer.mod/help/transfer.help +++ b/src/mod/transfer.mod/help/transfer.help @@ -4,6 +4,6 @@ support for userfile sharing. Config file variables for configuring the transfer module: - %bxfer-timeout copy-to-tmp dcc-block%b - %bmax-dloads sharefail-unlink%b + %bxfer-timeout dcc-block max-dloads%b + %bsharefail-unlink%b (Use %b'.help set '%b for more info) diff --git a/src/mod/transfer.mod/transfer.c b/src/mod/transfer.mod/transfer.c index 1c7c39342..0171b6fbc 100644 --- a/src/mod/transfer.mod/transfer.c +++ b/src/mod/transfer.mod/transfer.c @@ -291,7 +291,7 @@ static void eof_dcc_send(int idx) + strlen(dcc[idx].u.xfer->origname) + 1); sprintf(nfn, "%s%s", dcc[idx].u.xfer->dir, dcc[idx].u.xfer->origname); - if (copy_to_tmp && (l = fcopyfile(dcc[idx].u.xfer->f, nfn))) { + if ((l = fcopyfile(dcc[idx].u.xfer->f, nfn))) { putlog(LOG_MISC | LOG_FILES, "*", TRANSFER_FAILED_MOVE, nfn); } /* Only close now in case it was a tmpfile, as it's deleted upon close */ @@ -302,8 +302,8 @@ static void eof_dcc_send(int idx) u = get_user_by_host(s); hand = u ? u->handle : "*"; - /* Add to file database if not tmpfile or if copyfile succeeded */ - if (!copy_to_tmp || !l) { + /* Add to file database if copyfile succeeded */ + if (!l) { module_entry *fs = module_find("filesys", 0, 0); if (fs != NULL) { @@ -961,8 +961,10 @@ static int raw_dcc_resend_send(char *filename, char *nick, char *from, zz = -1; f = fopen(filename, "r"); - if (!f) + if (!f) { + debug2("transfer: raw_dcc_resend_send(): fopen(%s): error: %s", filename, strerror(errno)); return DCCSEND_BADFN; + } fseeko(f, 0, SEEK_END); dccfilesize = ftello(f); fclose(f); @@ -988,19 +990,15 @@ static int raw_dcc_resend_send(char *filename, char *nick, char *from, else nfn++; - if (copy_to_tmp) { - f = tmpfile(); - if (!f) - return DCCSEND_BADFN; - if (copyfilef(filename, f)) { - fclose(f); - return DCCSEND_FCOPY; - } - } else - f = fopen(filename, "r"); - - if (!f) + f = tmpfile(); + if (!f) { + debug1("transfer: raw_dcc_resend_send(): tmpfile(): error: %s", strerror(errno)); return DCCSEND_BADFN; + } + if (copyfilef(filename, f)) { + fclose(f); + return DCCSEND_FCOPY; + } if ((i = new_dcc(&DCC_GET_PENDING, sizeof(struct xfer_info))) == -1) { fclose(f); diff --git a/src/modules.c b/src/modules.c index 29045cd1c..932794df8 100644 --- a/src/modules.c +++ b/src/modules.c @@ -82,9 +82,11 @@ extern int parties, noshare, dcc_total, egg_numver, userfile_perm, ignore_time, must_be_owner, raw_log, max_dcc, make_userfile, default_flags, require_p, share_greet, use_invites, use_exempts, password_timeout, force_expire, protect_readonly, reserved_port_min, reserved_port_max, - copy_to_tmp, quiet_reject; + quiet_reject; extern volatile sig_atomic_t do_restart; +int copy_to_tmp = 1; /* TODO: remove from module API for eggdrop 2.0 */ + #ifdef IPV6 extern int pref_af; #endif diff --git a/src/tcl.c b/src/tcl.c index bbd12fcbc..6557645d5 100644 --- a/src/tcl.c +++ b/src/tcl.c @@ -86,7 +86,6 @@ int remote_boots = 2; int allow_dk_cmds = 1; int must_be_owner = 1; int quiet_reject = 1; -int copy_to_tmp = 1; int max_socks = 100; int quick_logs = 0; int par_telnet_flood = 1; @@ -498,7 +497,6 @@ static tcl_ints def_tcl_ints[] = { {"force-expire", &force_expire, 0}, {"dupwait-timeout", &dupwait_timeout, 0}, {"userfile-perm", &userfile_perm, 0}, - {"copy-to-tmp", ©_to_tmp, 0}, {"quiet-reject", &quiet_reject, 0}, {"cidr-support", &cidr_support, 0}, {"remove-pass", &remove_pass, 0}, diff --git a/src/users.c b/src/users.c index e99f6f9c2..2e8f5ff5c 100644 --- a/src/users.c +++ b/src/users.c @@ -35,6 +35,7 @@ #include "modules.h" #include "tandem.h" +#include #include #include @@ -698,9 +699,10 @@ int readuserfile(char *file, struct userrec **ret) global_invites = NULL; } lasthand[0] = 0; - f = fopen(file, "r"); - if (f == NULL) + if (!(f = fopen(file, "r"))) { + debug2("users: fopen(%s): %s", file, strerror(errno)); return 0; + } noshare = noxtra = 1; /* read opening comment */ s = buf; From bf2c80b848029c4a327f3b750f93a93b81c86b96 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 7 Jan 2024 21:12:11 +0100 Subject: [PATCH 02/91] Enhance crash reporting Patch by: michaelortmann --- src/eggdrop.h | 8 ----- src/main.c | 81 +++++++++--------------------------------------- src/mod/module.h | 12 ++----- src/modules.c | 12 ++----- src/net.c | 3 -- src/proto.h | 2 -- src/tclhash.c | 27 +++++----------- 7 files changed, 26 insertions(+), 119 deletions(-) diff --git a/src/eggdrop.h b/src/eggdrop.h index bf901c008..964a63c28 100644 --- a/src/eggdrop.h +++ b/src/eggdrop.h @@ -240,14 +240,6 @@ #define nrealloc(x,y) n_realloc((x),(y),__FILE__,__LINE__) #define nfree(x) n_free((x),__FILE__,__LINE__) -#ifdef DEBUG_CONTEXT -# define Context eggContext(__FILE__, __LINE__, NULL) -# define ContextNote(note) eggContextNote(__FILE__, __LINE__, NULL, note) -#else -# define Context do {} while (0) -# define ContextNote(note) do {} while (0) -#endif - #ifdef DEBUG_ASSERT # define Assert(expr) do { \ if (!(expr)) \ diff --git a/src/main.c b/src/main.c index e7fb8f79a..3d9cac074 100644 --- a/src/main.c +++ b/src/main.c @@ -30,7 +30,7 @@ */ /* We need config.h for CYGWIN_HACKS, but windows.h must be included before - * eggdrop headers, because the malloc/free/Context macros break the inclusion. + * eggdrop headers, because the malloc/free macros break the inclusion. * The SSL undefs are a workaround for bug #2182 in openssl with msys/mingw. */ #include @@ -166,11 +166,7 @@ unsigned long itraffic_unknown = 0; unsigned long itraffic_unknown_today = 0; #ifdef DEBUG_CONTEXT -/* Context storage for fatal crashes */ -char cx_file[16][32]; -char cx_note[16][256]; -int cx_line[16]; -int cx_ptr = 0; +extern char last_bind_called[]; #endif #ifdef TLS @@ -255,31 +251,25 @@ static void write_debug() { int x; char s[25]; - int y; if (nested_debug) { /* Yoicks, if we have this there's serious trouble! * All of these are pretty reliable, so we'll try these. - * - * NOTE: don't try and display context-notes in here, it's - * _not_ safe */ x = creat("DEBUG.DEBUG", 0644); if (x >= 0) { setsock(x, SOCK_NONSOCK); strlcpy(s, ctime(&now), sizeof s); - dprintf(-x, "Debug (%s) written %s\n", ver, s); - dprintf(-x, "Please report problem to https://github.com/eggheads/eggdrop/issues\n"); + dprintf(-x, "Debug (%s) written %s\n" + "Please report problem to https://github.com/eggheads/eggdrop/issues\n" + "Check doc/BUG-REPORT on how to do so.", ver, s); #ifdef EGG_PATCH dprintf(-x, "Patch level: %s\n", EGG_PATCH); #else dprintf(-x, "Patch level: %s\n", "stable"); #endif - dprintf(-x, "Context: "); - cx_ptr = cx_ptr & 15; - for (y = ((cx_ptr + 1) & 15); y != cx_ptr; y = ((y + 1) & 15)) - dprintf(-x, "%s/%d,\n ", cx_file[y], cx_line[y]); - dprintf(-x, "%s/%d\n\n", cx_file[y], cx_line[y]); + if (*last_bind_called) + dprintf(-x, "Last bind (may not be related): %s\n", last_bind_called); killsock(x); close(x); } @@ -288,10 +278,10 @@ static void write_debug() * have caused the fault last time. */ } else nested_debug = 1; - putlog(LOG_MISC, "*", "* Last context: %s/%d [%s]", cx_file[cx_ptr], - cx_line[cx_ptr], cx_note[cx_ptr][0] ? cx_note[cx_ptr] : ""); - putlog(LOG_MISC, "*", "* Please REPORT this BUG!"); + putlog(LOG_MISC, "*", "* Please report problem to https://github.com/eggheads/eggdrop/issues"); putlog(LOG_MISC, "*", "* Check doc/BUG-REPORT on how to do so."); + if (*last_bind_called) + putlog(LOG_MISC, "*", "* Last bind (may not be related): %s", last_bind_called); x = creat("DEBUG", 0644); setsock(x, SOCK_NONSOCK); if (x < 0) { @@ -347,14 +337,7 @@ static void write_debug() #ifdef STRIPFLAGS dprintf(-x, "Strip flags: %s\n", STRIPFLAGS); #endif - - dprintf(-x, "Context: "); - cx_ptr = cx_ptr & 15; - for (y = ((cx_ptr + 1) & 15); y != cx_ptr; y = ((y + 1) & 15)) - dprintf(-x, "%s/%d, [%s]\n ", cx_file[y], cx_line[y], - (cx_note[y][0]) ? cx_note[y] : ""); - dprintf(-x, "%s/%d [%s]\n\n", cx_file[cx_ptr], cx_line[cx_ptr], - (cx_note[cx_ptr][0]) ? cx_note[cx_ptr] : ""); + dprintf(-x, "Last bind (may not be related): %s\n", last_bind_called); tell_dcc(-x); dprintf(-x, "\n"); debug_mem_to_dcc(-x); @@ -439,40 +422,12 @@ static void got_ill(int z) { check_tcl_signal("sigill"); #ifdef DEBUG_CONTEXT - putlog(LOG_MISC, "*", "* Context: %s/%d [%s]", cx_file[cx_ptr], - cx_line[cx_ptr], (cx_note[cx_ptr][0]) ? cx_note[cx_ptr] : ""); + putlog(LOG_MISC, "*", "* Please REPORT this BUG!"); + putlog(LOG_MISC, "*", "* Check doc/BUG-REPORT on how to do so."); + putlog(LOG_MISC, "*", "* Last bind (may not be related): %s", last_bind_called); #endif } -#ifdef DEBUG_CONTEXT -/* Called from the Context macro. - */ -void eggContext(const char *file, int line, const char *module) -{ - eggContextNote(file, line, module, NULL); -} - -/* Called from the ContextNote macro. - */ -void eggContextNote(const char *file, int line, const char *module, - const char *note) -{ - char *p; - - p = strrchr(file, '/'); - cx_ptr = ((cx_ptr + 1) & 15); - if (!module) - strlcpy(cx_file[cx_ptr], p ? p + 1 : file, sizeof cx_file[cx_ptr]); - else - snprintf(cx_file[cx_ptr], sizeof cx_file[cx_ptr], "%s:%s", module, p ? p + 1 : file); - cx_line[cx_ptr] = line; - if (!note) - cx_note[cx_ptr][0] = 0; - else - strlcpy(cx_note[cx_ptr], note, sizeof cx_note[cx_ptr]); -} -#endif /* DEBUG_CONTEXT */ - #ifdef DEBUG_ASSERT /* Called from the Assert macro. */ @@ -604,8 +559,6 @@ static time_t then; static struct tm nowtm; /* Called once a second. - * - * Note: Try to not put any Context lines in here (guppy 21Mar2000). */ static void core_secondly() { @@ -1026,12 +979,6 @@ int main(int arg_c, char **arg_v) setrlimit(RLIMIT_CORE, &cdlim); #endif -#ifdef DEBUG_CONTEXT - /* Initialise context list */ - for (i = 0; i < 16; i++) - Context; -#endif - argc = arg_c; argv = arg_v; diff --git a/src/mod/module.h b/src/mod/module.h index f39b86c8c..ca7f4081e 100644 --- a/src/mod/module.h +++ b/src/mod/module.h @@ -90,11 +90,7 @@ typedef void (*chanout_butfunc)(int, int, const char *, ...) ATTRIBUTE_FORMAT(pr /* 0 - 3 */ #define nmalloc(x) (((void *(*)())global[0])((x),MODULE_NAME,__FILE__,__LINE__)) #define nfree(x) (global[1]((x),MODULE_NAME,__FILE__,__LINE__)) -#ifdef DEBUG_CONTEXT -# define Context (global[2](__FILE__, __LINE__, MODULE_NAME)) -#else -# define Context do {} while (0) -#endif +#define Context do {} while (0) /* For backward compatibility only */ #define module_rename ((int (*)(char *, char *))global[3]) /* 4 - 7 */ #define module_register ((int (*)(char *, Function *, int, int))global[4]) @@ -396,11 +392,7 @@ typedef void (*chanout_butfunc)(int, int, const char *, ...) ATTRIBUTE_FORMAT(pr #define nrealloc(x,y) (((void *(*)())global[230])((x),(y),MODULE_NAME,__FILE__,__LINE__)) #define xtra_set ((int(*)(struct userrec *,struct user_entry *, void *))global[231]) /* 232 - 235 */ -#ifdef DEBUG_CONTEXT -# define ContextNote(note) (global[232](__FILE__, __LINE__, MODULE_NAME, note)) -#else -# define ContextNote(note) do {} while (0) -#endif +#define ContextNote(note) do {} while (0) /* For backward compatibility only */ #ifdef DEBUG_ASSERT # define Assert(expr) do { \ if (!(expr)) \ diff --git a/src/modules.c b/src/modules.c index 932794df8..b8368944f 100644 --- a/src/modules.c +++ b/src/modules.c @@ -186,11 +186,7 @@ Function global_table[] = { /* 0 - 3 */ (Function) mod_malloc, (Function) mod_free, -#ifdef DEBUG_CONTEXT - (Function) eggContext, -#else - (Function) 0, -#endif + (Function) 0, /* was eggContext() */ (Function) module_rename, /* 4 - 7 */ (Function) module_register, @@ -495,11 +491,7 @@ Function global_table[] = { (Function) mod_realloc, (Function) xtra_set, /* 232 - 235 */ -#ifdef DEBUG_CONTEXT - (Function) eggContextNote, -#else - (Function) 0, -#endif + (Function) 0, /* was eggContextNote() */ #ifdef DEBUG_ASSERT (Function) eggAssert, #else diff --git a/src/net.c b/src/net.c index 5eba848d0..85f353d7e 100644 --- a/src/net.c +++ b/src/net.c @@ -1097,7 +1097,6 @@ int sockread(char *s, int *len, sock_list *slist, int slistmax, int tclonly) * dcc functions. Simply ignore it. * Returns -5 if tcl sockets are busy but not eggdrop sockets. */ - int sockgets(char *s, int *len) { char xx[READMAX + 2], *p, *px, *p2; @@ -1283,8 +1282,6 @@ int sockgets(char *s, int *len) } /* Dump something to a socket - * - * NOTE: Do NOT put Contexts in here if you want DEBUG to be meaningful!! */ void tputs(int z, char *s, unsigned int len) { diff --git a/src/proto.h b/src/proto.h index 7b1eb1257..9183dfa32 100644 --- a/src/proto.h +++ b/src/proto.h @@ -188,8 +188,6 @@ int exist_lang_section(char *); /* main.c */ void fatal(const char *, int); int expected_memory(void); -void eggContext(const char *, int, const char *); -void eggContextNote(const char *, int, const char *, const char *); void eggAssert(const char *, int, const char *); void backup_userfile(void); int expmem_modules(int); diff --git a/src/tclhash.c b/src/tclhash.c index 4b7160383..1028471a6 100644 --- a/src/tclhash.c +++ b/src/tclhash.c @@ -58,6 +58,10 @@ static int builtin_chat STDVAR; static int builtin_dcc STDVAR; static int builtin_log STDVAR; +#ifdef DEBUG_CONTEXT +char last_bind_called[512] = ""; +#endif + /* Allocate and initialise a chunk of memory. */ static void *n_malloc_null(int size, const char *file, int line) @@ -215,7 +219,6 @@ static cd_tcl_cmd cd_cmd_table[] = { void init_bind(void) { bind_table_list = NULL; - Context; add_cd_tcl_cmds(cd_cmd_table); H_unld = add_bind_table("unld", HT_STACKABLE, builtin_char); H_time = add_bind_table("time", HT_STACKABLE, builtin_5int); @@ -243,7 +246,6 @@ void init_bind(void) H_tls = add_bind_table("tls", HT_STACKABLE, builtin_idx); #endif add_builtins(H_dcc, C_dcc); - Context; } void kill_bind(void) @@ -726,35 +728,22 @@ static int trigger_bind(const char *proc, const char *param, char *mask) int x; struct rusage ru1, ru2; int r = 0; -#ifdef DEBUG_CONTEXT - #define FORMAT "Tcl proc: %s, param: %s" - char *buf; - /* We now try to debug the Tcl_VarEval() call below by remembering both - * the called proc name and it's parameters. This should render us a bit - * less helpless when we see context dumps. - */ - Context; - /* reuse x */ - x = snprintf(NULL, 0, FORMAT, proc ? proc : "", param ? param : ""); - buf = nmalloc(x + 1); - sprintf(buf, FORMAT, proc ? proc : "", param ? param : ""); - ContextNote(buf); - nfree(buf); -#endif /* DEBUG_CONTEXT */ /* Set the lastbind variable before evaluating the proc so that the name * of the command that triggered the bind will be available to the proc. * This feature is used by scripts such as userinfo.tcl */ - Tcl_SetVar(interp, "lastbind", (char *) mask, TCL_GLOBAL_ONLY); + Tcl_SetVar(interp, "lastbind", mask, TCL_GLOBAL_ONLY); if(proc && proc[0] != '*') { /* proc[0] != '*' excludes internal binds */ +#ifdef DEBUG_CONTEXT + snprintf(last_bind_called, sizeof last_bind_called, proc); +#endif debug1("triggering bind %s", proc); r = getrusage(RUSAGE_SELF, &ru1); } x = Tcl_VarEval(interp, proc, param, NULL); - Context; if (proc && proc[0] != '*' && !r) { if (!getrusage(RUSAGE_SELF, &ru2)) { debug3("triggered bind %s, user %.3fms sys %.3fms", proc, From 4146828150c3ccf2a3d35c646afb2a33fb5d9b13 Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 14 Jan 2024 15:15:56 -0500 Subject: [PATCH 03/91] Add Python intpreter to Eggdrop Patch by: Geo, thommey PYTHON! - Adds the .python partyline command to run a python command, similar to .tcl - Adds the pysource Tcl command to load a python file, similar to the source Tcl command - Imports the existing Tcl API (run via the eggdrop.tcl module) --- .gitignore | 1 + Makefile.in | 3 +- aclocal.m4 | 3 + configure | 48 + configure.ac | 4 + doc/sphinx_source/modules/mod/python.rst | 149 + doc/sphinx_source/using/tcl-commands.rst | 3 + m4/python.m4 | 53 + src/main.c | 2 + src/mod/Makefile.in | 14 +- src/mod/module.h | 6 +- src/mod/python.mod/Makefile.in | 46 + src/mod/python.mod/configure | 3232 ++++++++++++++++++++++ src/mod/python.mod/configure.ac | 78 + src/mod/python.mod/pycmds.c | 435 +++ src/mod/python.mod/pymod.h | 4 + src/mod/python.mod/python.c | 163 ++ src/mod/python.mod/python.h | 4 + src/mod/python.mod/scripts/bestfriend.py | 30 + src/mod/python.mod/scripts/greet.py | 23 + src/mod/python.mod/scripts/imdb.py | 26 + src/mod/python.mod/scripts/listtls.py | 30 + src/mod/python.mod/scripts/urlTitle.py | 27 + src/mod/python.mod/tclpython.c | 89 + src/modules.c | 7 +- src/tclhash.c | 46 +- src/tclhash.h | 5 +- 27 files changed, 4506 insertions(+), 25 deletions(-) create mode 100644 doc/sphinx_source/modules/mod/python.rst create mode 100644 m4/python.m4 create mode 100644 src/mod/python.mod/Makefile.in create mode 100755 src/mod/python.mod/configure create mode 100644 src/mod/python.mod/configure.ac create mode 100644 src/mod/python.mod/pycmds.c create mode 100644 src/mod/python.mod/pymod.h create mode 100644 src/mod/python.mod/python.c create mode 100644 src/mod/python.mod/python.h create mode 100644 src/mod/python.mod/scripts/bestfriend.py create mode 100644 src/mod/python.mod/scripts/greet.py create mode 100644 src/mod/python.mod/scripts/imdb.py create mode 100644 src/mod/python.mod/scripts/listtls.py create mode 100644 src/mod/python.mod/scripts/urlTitle.py create mode 100644 src/mod/python.mod/tclpython.c diff --git a/.gitignore b/.gitignore index 52806ce03..37ee0f2d9 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,4 @@ config.cache eggdrop EGGMOD.stamp mod.xlibs +__pycache__ diff --git a/Makefile.in b/Makefile.in index 733e3e613..93de77211 100644 --- a/Makefile.in +++ b/Makefile.in @@ -490,6 +490,7 @@ install-doc: install-start cd doc/ && $(MAKE_INSTALL) install install-scripts: install-start - +@cd scripts/ && $(MAKE_INSTALL) install + +@cd scripts/ && $(MAKE_INSTALL) install; \ + cd ../src/mod && $(MAKE_INSTALL) install-scripts #safety hash diff --git a/aclocal.m4 b/aclocal.m4 index 76c93ec25..ee4ad28b7 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -20,6 +20,9 @@ dnl dnl Load tcl macros builtin(include,m4/tcl.m4) +dnl Load python macros +builtin(include,m4/python.m4) + dnl Load gnu autoconf archive macros builtin(include,m4/ax_create_stdint_h.m4) builtin(include,m4/ax_lib_socket_nsl.m4) diff --git a/configure b/configure index 29ca7c103..0330a48b8 100755 --- a/configure +++ b/configure @@ -659,6 +659,8 @@ EGG_CROSS_COMPILING MOD_UPDIR DEST EGGVERSION +egg_with_python_config +egg_enable_python SSL_LIBS SSL_INCLUDES DEBCFLGS @@ -801,6 +803,8 @@ enable_tls with_sslinc with_ssllib enable_tdns +enable_python +with_python_config ' ac_precious_vars='build_alias host_alias @@ -1458,6 +1462,9 @@ Optional Features and Packages: --with-sslinc=PATH Path to OpenSSL headers --with-ssllib=PATH Path to OpenSSL libraries --disable-tdns disable threaded DNS core + --enable-python enable Python support (autodetect) + --disable-python disable Python support + --with-python-config=PATH Path to python-config Some influential environment variables: CC C compiler command @@ -10603,6 +10610,47 @@ printf "%s\n" "#define EGG_TDNS 1" >>confdefs.h fi +# Check for Python + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile the Python module" >&5 +$as_echo_n "checking whether to compile the Python module... " >&6; } + # Check whether --enable-python was given. +if test "${enable_python+set}" = set; then : + enableval=$enable_python; egg_enable_python="$enableval" +fi + + # Check whether --enable-python was given. +if test "${enable_python+set}" = set; then : + enableval=$enable_python; egg_enable_python="$enableval" +else + egg_enable_python="autodetect" +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $egg_enable_python" >&5 +$as_echo "$egg_enable_python" >&6; } + + + + +# Check whether --with-python-config was given. +if test "${with_python_config+set}" = set; then : + withval=$with_python_config; + if test "x$enable_python" != "xno"; then + if test -d "$withval" || test -x "$withval"; then + egg_with_python_config="$withval" + else + egg_with_python_config="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Invalid path to python-config. $withval is not a directory and not an executable." >&5 +$as_echo "$as_me: WARNING: Invalid path to python-config. $withval is not a directory and not an executable." >&2;} + fi + fi + +fi + + + + # Substitute Makefile variables. diff --git a/configure.ac b/configure.ac index 61c67d4e4..7329c813f 100644 --- a/configure.ac +++ b/configure.ac @@ -164,6 +164,10 @@ EGG_TLS_DETECT # Threaded DNS core EGG_TDNS_ENABLE +# Check for Python +EGG_PYTHON_ENABLE +EGG_PYTHON_WITHCONFIG + # Substitute Makefile variables. EGG_SUBST_EGGVERSION diff --git a/doc/sphinx_source/modules/mod/python.rst b/doc/sphinx_source/modules/mod/python.rst new file mode 100644 index 000000000..1a26a291c --- /dev/null +++ b/doc/sphinx_source/modules/mod/python.rst @@ -0,0 +1,149 @@ +Last revised: November 03, 2023 + +.. _python: + +============ +Python Module +============ + +This module adds a Python interpreter to Eggdrop, allowing you to run Python scripts. + +-------------- +Loading Python +-------------- + +Put this line into your Eggdrop configuration file to load the python module:: + + loadmodule python + +To load a python script from your config file, place the .py file in the scripts/ folder and add the following line to your config:: + + pysource scripts/myscript.py + +------------------ +Partyline Commands +------------------ + +^^^^^^^^^^^^^^^^^^^ +python +^^^^^^^^^^^^^^^^^^^ + +You can run a python command from the partyline with the .python command, such as:: + + .python 1 + 1 + Python: 2 + .python from eggdrop.tcl import putmsg; putmsg('#chan', 'Hello world!') + Python: None + +^^^^^^^^^^^^^ +.binds python +^^^^^^^^^^^^^ + +The python module extends the core ``.binds`` partyline command by adding a ``python`` mask. This command will list all binds for python scripts. + +------------ +Tcl Commands +------------ + +^^^^^^^^^^^^^^^^^^^^^^^ +pysource +^^^^^^^^^^^^^^^^^^^^^^^ + +The ``pysource`` command is analgous to the Tcl ``source`` command, except that it loads a Python script into Eggdrop instead of a Tcl script. + +----------------------- +Eggdrop Python Commands +----------------------- + +The Python module is built to use the existing core Tcl commands integrated into Eggdrop via the ``eggdrop.tcl`` module. To call an existing Tcl command from Python, you can either load the entire catalog by running ``import eggdrop.tcl``, or be more specific by ``from eggdrop.tcl import putserv, putlog, chanlist``, etc. + +Arguments to the Tcl functions are automatically converted as follows: + +* ``None`` is converted to an empty Tcl object (the empty string, ``""``) +* ``List`` and ``Tuple`` is converted to a ``Tcl list`` +* ``Dict`` is converted to a ``Tcl dictionary`` +* Everything else is converted to a string using the str() method + +Return values from Tcl functions must be manually converted: + +* ``""`` the empty string is automatically converted to None +* everything else is returned as string +* ``Tcl list`` as string can be converted to a Python ``List`` using ``parse_tcl_list`` +* ``Tcl dictionary`` as string can be converted to a Python ``Dict`` using ``parse_tcl_list`` + +Additionally, a few extra python commands have been created for use without these conversions: + +^^^^^^^^^^^^^^^^ +bind +^^^^^^^^^^^^^^^^ + +The python version of the bind command is used to create a bind that triggers a python function. The python bind takes the same arguments as the Tcl binds, for more information on bind argument syntax please see tcl_binds_. The eggdrop.tcl.bind command should not be used as it will attempt to call a Tcl proc. + +^^^^^^^^^^^^^^^^^^^^^^^ +parse_tcl_list +^^^^^^^^^^^^^^^^^^^^^^^ + +When a python script calls a Tcl command that returns a list via the eggdrop.tcl module, the return value will be a Tcl-formatted list- also simply known as a string. The ``parse_tcl_list`` command will convert the Tcl-formatted list into a Python list, which can then freely be used within the Python script. + +^^^^^^^^^^^^^^^^^^^^^^^ +parse_tcl_dict +^^^^^^^^^^^^^^^^^^^^^^^ + +When a python script calls a Tcl command that returns a dict via the eggdrop.tcl module, the return value will be a Tcl-formatted dict- also simply known as a string. The ``parse_tcl_dict`` command will c +onvert the Tcl-formatted dict into a Python list, which can then freely be used within the Python script. + +---------------- +Config variables +---------------- + +There are also some variables you can set in your config file: + + set allow-resync 0 + When two bots get disconnected, this setting allows them to create a + resync buffer which saves all changes done to the userfile during + the disconnect. When they reconnect, they will not have to transfer + the complete user file, but, instead, just send the resync buffer. + +-------------------------------- +Writing an Eggdrop Python script +-------------------------------- + +This is how to write a python script for Eggdrop. + +You can view examples of Python scripts in the exampleScripts folder included with this module. + +.. glossary:: + bestfriend.py + This example script demonstrates how to use the parse_tcl_list() python command to convert a list returned by a Tcl command into a list that is usable by Python. + greet.py + This is a very basic script that demonstrates how a Python script with binds can be run by Eggdrop. + imdb.py + This script shows how to use an existing third-party module to extend a Python script, in this case retrieving information from imdb.com. + listtls.py + This script demonstrates how to use parse-tcl_list() and parse_tcl_dict() to convert a list of dicts provided by Tcl into something that is usuable by Python. + urltitle.py + This script shows how to use an existing third-party module to extend a Python script, in this case using an http parser to collect title information from a provided web page. + + +^^^^^^^^^^^^^^ +Header section +^^^^^^^^^^^^^^ + +An Eggdrop python script requires you to import X Y and Z, in this format. + +^^^^^^^^^^^^ +Code Section +^^^^^^^^^^^^ + +Normal python code works here. To run a command from the Eggdrop Tcl library, use this format. + +Use this format all over. + +------------------------------------- +Writing a module for use with Eggdrop +------------------------------------- + +This is how you import a module for use with an egg python script. + + +Copyright (C) 2000 - 2023 Eggheads Development Team diff --git a/doc/sphinx_source/using/tcl-commands.rst b/doc/sphinx_source/using/tcl-commands.rst index 34a318b53..e7a7c86e4 100644 --- a/doc/sphinx_source/using/tcl-commands.rst +++ b/doc/sphinx_source/using/tcl-commands.rst @@ -2227,6 +2227,8 @@ unbind binds [type/mask] ^^^^^^^^^^^^^^^^^ + Description: By default, lists Tcl binds registered with the Eggdrop. You can specify 'all' to view all binds, 'tcl' to view Tcl binds, and 'python' to view Python binds. Alternately, you can specify a bind type (pub, msg, etc) to view all binds that match that type of bind, or a mask that is matched against the command associated with the bind. + Returns: a list of Tcl binds, each item in the list is a sublist of five elements: { } @@ -2897,6 +2899,7 @@ Removing a bind To remove a bind, use the 'unbind' command. For example, to remove the bind for the "stop" msg command, use 'unbind msg - stop msg:stop'. +.. _tcl_binds: ^^^^^^^^^^ Flag Masks diff --git a/m4/python.m4 b/m4/python.m4 new file mode 100644 index 000000000..84dc338ba --- /dev/null +++ b/m4/python.m4 @@ -0,0 +1,53 @@ +dnl python.m4 -- Autoconf macros to compile python.mod +dnl +dnl Copyright (c) 2022 - 2022 Eggheads Development Team +dnl +dnl This program is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU General Public License +dnl as published by the Free Software Foundation; either version 2 +dnl of the License, or (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +dnl + +dnl EGG_PYTHON_ENABLE +dnl +AC_DEFUN([EGG_PYTHON_ENABLE], +[ + AC_MSG_CHECKING([whether to compile the Python module]) + AC_ARG_ENABLE(python, + [ --enable-python enable Python support (autodetect)], + [egg_enable_python="$enableval"]) + AC_ARG_ENABLE(python, + [ --disable-python disable Python support], [egg_enable_python="$enableval"], + [egg_enable_python="autodetect"]) + + AC_MSG_RESULT([$egg_enable_python]) + AC_SUBST(egg_enable_python) +]) + + +dnl EGG_PYTHON_WITHCONFIG +dnl +AC_DEFUN(EGG_PYTHON_WITHCONFIG, +[ + AC_ARG_WITH(python-config, [ --with-python-config=PATH Path to python-config], [ + if test "x$enable_python" != "xno"; then + if test -d "$withval" || test -x "$withval"; then + egg_with_python_config="$withval" + else + egg_with_python_config="no" + AC_MSG_WARN([Invalid path to python-config. $withval is not a directory and not an executable.]) + fi + fi + ]) + AC_SUBST(egg_with_python_config) +]) + diff --git a/src/main.c b/src/main.c index 3d9cac074..b4324f7ac 100644 --- a/src/main.c +++ b/src/main.c @@ -95,6 +95,7 @@ extern sigjmp_buf alarmret; time_t now; static int argc; static char **argv; +char *argv0; /* * Please use the PATCH macro instead of directly altering the version @@ -981,6 +982,7 @@ int main(int arg_c, char **arg_v) argc = arg_c; argv = arg_v; + argv0 = argv[0]; /* Version info! */ #ifdef EGG_PATCH diff --git a/src/mod/Makefile.in b/src/mod/Makefile.in index ca742f69a..4ba69f467 100644 --- a/src/mod/Makefile.in +++ b/src/mod/Makefile.in @@ -117,7 +117,7 @@ distclean: fi; \ done -install: install-help install-language +install: install-help install-language install-scripts install-help: @echo "Copying module help files." && \ @@ -169,4 +169,16 @@ install-language: fi; \ done; +install-scripts: + @for i in $(mods); do \ + if test ! "x`echo $(srcdir)/$$i/scripts/*`" = "x$(srcdir)/$$i/scripts/*"; then \ + echo "Installing example $$i scripts"; \ + for s in $(srcdir)/$$i/scripts/*; do \ + if test ! -f "$(DEST)/scripts/`basename "$$s"`"; then \ + $(INSTALL_DATA) $$s $(DEST)/scripts/; \ + fi; \ + done; \ + fi; \ + done; + #safety hash diff --git a/src/mod/module.h b/src/mod/module.h index ca7f4081e..594182a9f 100644 --- a/src/mod/module.h +++ b/src/mod/module.h @@ -520,8 +520,10 @@ typedef void (*chanout_butfunc)(int, int, const char *, ...) ATTRIBUTE_FORMAT(pr #define get_user_by_account ((struct userrec * (*)(char *))global[317]) #define delaccount_by_handle ((int(*)(char *,char *))global[318]) #define check_tcl_event_arg ((void (*) (const char *,const char *))global[319]) -/*320 - 323 */ - +/* 320 - 323 */ +#define bind_bind_entry ((int(*)(tcl_bind_list_t *, const char *, const char *, const char *))global[320]) +#define unbind_bind_entry ((int(*)(tcl_bind_list_t *, const char *, const char *, const char *))global[321]) +#define argv0 ((char *)global[322]) diff --git a/src/mod/python.mod/Makefile.in b/src/mod/python.mod/Makefile.in new file mode 100644 index 000000000..6b6c4ad5d --- /dev/null +++ b/src/mod/python.mod/Makefile.in @@ -0,0 +1,46 @@ +# Makefile for src/mod/python.mod/ + +srcdir = . +PYTHON_CFLAGS = @PYTHON_CFLAGS@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ + +doofus: + @echo "" && \ + echo "Let's try this from the right directory..." && \ + echo "" && \ + cd ../../../ && $(MAKE) + +static: ../python.o + +modules: ../../../python.$(MOD_EXT) + +../python.o: + $(CC) $(PYTHON_CFLAGS) $(CFLAGS) $(CPPFLAGS) -DMAKING_MODS -c $(srcdir)/python.c && mv -f python.o ../ + +../../../python.$(MOD_EXT): ../python.o + $(LD) $(PYTHON_CFLAGS) $(CFLAGS) -o ../../../python.$(MOD_EXT) ../python.o $(PYTHON_LDFLAGS) $(XLIBS) $(MODULE_XLIBS) && $(STRIP) ../../../python.$(MOD_EXT) + +depend: + $(CC) $(CFLAGS) -MM $(srcdir)/python.c -MT ../python.o > .depend + +clean: + @rm -f .depend *.o *.$(MOD_EXT) *~ + +distclean: clean + @rm -f Makefile config.cache config.log config.status + @rm -rf autom4te.cache + +#safety hash +../python.o: .././python.mod/python.c ../../../src/mod/module.h \ + ../../../src/main.h ../../../config.h ../../../eggint.h ../../../lush.h \ + ../../../src/lang.h ../../../src/eggdrop.h ../../../src/compat/in6.h \ + ../../../src/flags.h ../../../src/cmdt.h ../../../src/tclegg.h \ + ../../../src/tclhash.h ../../../src/chan.h ../../../src/users.h \ + ../../../src/compat/compat.h ../../../src/compat/base64.h \ + ../../../src/compat/inet_aton.h ../../../src/compat/snprintf.h \ + ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ + ../../../src/mod/modvals.h ../../../src/tandem.h \ + ../../../src/mod/irc.mod/irc.h ../../../src/mod/server.mod/server.h \ + ../../../src/mod/python.mod/python.h \ + ../../../src/mod/python.mod/tclpython.c \ + ../../../src/mod/python.mod/pycmds.c diff --git a/src/mod/python.mod/configure b/src/mod/python.mod/configure new file mode 100755 index 000000000..40bd0c84a --- /dev/null +++ b/src/mod/python.mod/configure @@ -0,0 +1,3232 @@ +#! /bin/sh +# From configure.ac 9fdf80a3. +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for Eggdrop Python Module 1.9.3. +# +# Report bugs to . +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +# +# Copyright (C) 1999 - 2022 Eggheads Development Team +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and bugs@eggheads.org +$0: about your system, including any error possibly output +$0: before this message. Then install a modern shell, or +$0: manually run the script under such a shell if you do +$0: have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='Eggdrop Python Module' +PACKAGE_TARNAME='eggdrop-python-module' +PACKAGE_VERSION='1.9.3' +PACKAGE_STRING='Eggdrop Python Module 1.9.3' +PACKAGE_BUGREPORT='bugs@eggheads.org' +PACKAGE_URL='' + +ac_unique_file="python.c" +ac_subst_vars='LTLIBOBJS +LIBOBJS +PYTHON_LDFLAGS +PYTHON_CFLAGS +PYTHON_CONFIG_ARGS +python_config_bin +egg_with_python_config +egg_enable_python +FGREP +GREP +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +runstatedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_python +with_python_config +' + ac_precious_vars='build_alias +host_alias +target_alias' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir runstatedir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures Eggdrop Python Module 1.9.3 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root + [DATAROOTDIR/doc/eggdrop-python-module] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of Eggdrop Python Module 1.9.3:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-python enable Python support (autodetect) + --disable-python disable Python support + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-python-config=PATH Path to python-config + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +Eggdrop Python Module configure 1.9.3 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. + +Copyright (C) 1999 - 2022 Eggheads Development Team +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by Eggdrop Python Module $as_me 1.9.3, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + +ac_aux_dir= +for ac_dir in ../../../misc "$srcdir"/../../../misc; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in ../../../misc \"$srcdir\"/../../../misc" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile the Python module" >&5 +$as_echo_n "checking whether to compile the Python module... " >&6; } + # Check whether --enable-python was given. +if test "${enable_python+set}" = set; then : + enableval=$enable_python; egg_enable_python="$enableval" +fi + + # Check whether --enable-python was given. +if test "${enable_python+set}" = set; then : + enableval=$enable_python; egg_enable_python="$enableval" +else + egg_enable_python="autodetect" +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $egg_enable_python" >&5 +$as_echo "$egg_enable_python" >&6; } + + + + +# Check whether --with-python-config was given. +if test "${with_python_config+set}" = set; then : + withval=$with_python_config; + if test "x$enable_python" != "xno"; then + if test -d "$withval" || test -x "$withval"; then + egg_with_python_config="$withval" + else + egg_with_python_config="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Invalid path to python-config. $withval is not a directory and not an executable." >&5 +$as_echo "$as_me: WARNING: Invalid path to python-config. $withval is not a directory and not an executable." >&2;} + fi + fi + +fi + + + + +python_avail="false" + +if test "x$egg_enable_python" != "xno"; then + if test "x$egg_with_python_config" = "x"; then + for ac_prog in python3-config python-config +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_python_config_bin+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $python_config_bin in + [\\/]* | ?:[\\/]*) + ac_cv_path_python_config_bin="$python_config_bin" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_python_config_bin="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +python_config_bin=$ac_cv_path_python_config_bin +if test -n "$python_config_bin"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_config_bin" >&5 +$as_echo "$python_config_bin" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$python_config_bin" && break +done + + else + if test -d "$egg_with_python_config"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Checking for python-config binaries in $egg_with_python_config" >&5 +$as_echo "$as_me: Checking for python-config binaries in $egg_with_python_config" >&6;} + for ac_prog in python3-config python-config +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_python_config_bin+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $python_config_bin in + [\\/]* | ?:[\\/]*) + ac_cv_path_python_config_bin="$python_config_bin" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $egg_with_python_config +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_python_config_bin="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +python_config_bin=$ac_cv_path_python_config_bin +if test -n "$python_config_bin"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_config_bin" >&5 +$as_echo "$python_config_bin" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$python_config_bin" && break +done + + else + if test -x "$egg_with_python_config"; then + python_config_bin="$egg_with_python_config" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Specified --with-python-config=$egg_with_python_config does not exist." >&5 +$as_echo "$as_me: WARNING: Specified --with-python-config=$egg_with_python_config does not exist." >&2;} + fi + fi + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: Python module disabled." >&5 +$as_echo "$as_me: Python module disabled." >&6;} +fi + +if test "x$python_config_bin" != "x"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether python-config supports --embed" >&5 +$as_echo_n "checking whether python-config supports --embed... " >&6; } + if $python_config_bin --help | $FGREP -q -- --embed; then : + + PYTHON_CONFIG_ARGS="--embed" + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + PYTHON_CONFIG_ARGS="" + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python C flags" >&5 +$as_echo_n "checking for python C flags... " >&6; } + PYTHON_CFLAGS=`$python_config_bin $PYTHON_CONFIG_ARGS --cflags` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_CFLAGS" >&5 +$as_echo "$PYTHON_CFLAGS" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python LD flags" >&5 +$as_echo_n "checking for python LD flags... " >&6; } + PYTHON_LDFLAGS=`$python_config_bin $PYTHON_CONFIG_ARGS --ldflags` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_LDFLAGS" >&5 +$as_echo "$PYTHON_LDFLAGS" >&6; } + + python_avail="true" +fi + +# Disable the module +if test "x$python_avail" = "xfalse"; then + if test "x$egg_enable_python" != "xno"; then + cat >&2 <confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} +t clear +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g +t quote +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g +t quote +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` + + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by Eggdrop Python Module $as_me 1.9.3, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +Eggdrop Python Module config.status 1.9.3 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + + +eval set X " :F $CONFIG_FILES " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + + + + esac + +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi diff --git a/src/mod/python.mod/configure.ac b/src/mod/python.mod/configure.ac new file mode 100644 index 000000000..b52a686b3 --- /dev/null +++ b/src/mod/python.mod/configure.ac @@ -0,0 +1,78 @@ +dnl configure.ac: this file is processed by autoconf to produce ./configure. + +AC_PREREQ(2.69) + +sinclude(../eggmod.m4) +builtin(include,../../../m4/python.m4) + +AC_INIT([Eggdrop Python Module],[1.9.3],[bugs@eggheads.org]) + +AC_CONFIG_SRCDIR(python.c) +AC_CONFIG_AUX_DIR(../../../misc) + +AC_COPYRIGHT([Copyright (C) 1999 - 2022 Eggheads Development Team]) +AC_REVISION([m4_esyscmd([../../../misc/getcommit])]) + +AC_PROG_FGREP +EGG_PYTHON_ENABLE +EGG_PYTHON_WITHCONFIG + +python_avail="false" + +if test "x$egg_enable_python" != "xno"; then + if test "x$egg_with_python_config" = "x"; then + AC_PATH_PROGS([python_config_bin], [python3-config python-config]) + else + if test -d "$egg_with_python_config"; then + AC_MSG_NOTICE([Checking for python-config binaries in $egg_with_python_config]) + AC_PATH_PROGS([python_config_bin], [python3-config python-config], [], [$egg_with_python_config]) + else + if test -x "$egg_with_python_config"; then + python_config_bin="$egg_with_python_config" + else + AC_MSG_WARN([Specified --with-python-config=$egg_with_python_config does not exist.]) + fi + fi + fi +else + AC_MSG_NOTICE([Python module disabled.]) +fi + +if test "x$python_config_bin" != "x"; then + AC_MSG_CHECKING([whether python-config supports --embed]) + AS_IF([$python_config_bin --help | $FGREP -q -- --embed], [ + AC_SUBST([PYTHON_CONFIG_ARGS], "--embed") + AC_MSG_RESULT([yes]) + ], [ + AC_SUBST([PYTHON_CONFIG_ARGS], "") + AC_MSG_RESULT([no]) + ]) + + AC_MSG_CHECKING([for python C flags]) + PYTHON_CFLAGS=`$python_config_bin $PYTHON_CONFIG_ARGS --cflags` + AC_MSG_RESULT([$PYTHON_CFLAGS]) + AC_SUBST(PYTHON_CFLAGS) + + AC_MSG_CHECKING([for python LD flags]) + PYTHON_LDFLAGS=`$python_config_bin $PYTHON_CONFIG_ARGS --ldflags` + AC_MSG_RESULT([$PYTHON_LDFLAGS]) + AC_SUBST(PYTHON_LDFLAGS) + python_avail="true" +fi + +# Disable the module +if test "x$python_avail" = "xfalse"; then + if test "x$egg_enable_python" != "xno"; then + cat >&2 < +#include +#include +#include "src/mod/module.h" + +struct py_bind { + tcl_bind_list_t *bindtable; + char tclcmdname[512]; + PyObject *callback; + struct py_bind *next; +}; + +typedef struct { + PyObject_HEAD + char tclcmdname[512]; +} TclFunc; + +static PyTypeObject TclFuncType; +static int eval_idx = -1; + +static struct py_bind *py_bindlist; + +static PyObject *EggdropError; //create static Python Exception object + +static Tcl_Obj *py_to_tcl_obj(PyObject *o); // generic conversion function + +static PyObject *py_displayhook(PyObject *self, PyObject *o) { + PyObject *pstr; + + if (o) { + pstr = PyObject_Repr(o); + if (pstr) { + dprintf(eval_idx, "Python: %s\n", PyUnicode_AsUTF8(pstr)); + Py_DECREF(pstr); + } + } + Py_RETURN_NONE; +} + +static void cmd_python(struct userrec *u, int idx, char *par) { + PyObject *pobj, *ptype, *pvalue, *ptraceback; + PyObject *pystr, *module_name, *pymodule, *pyfunc, *pyval, *item; + Py_ssize_t n; + int i; + + PyErr_Clear(); + + // Expression output redirection via sys.displayhook + eval_idx = idx; + pobj = PyRun_String(par, Py_single_input, pglobals, pglobals); + + if (pobj) { + // always None + Py_DECREF(pobj); + } else if (PyErr_Occurred()) { + PyErr_Fetch(&ptype, &pvalue, &ptraceback); + pystr = PyObject_Str(pvalue); + // Get "pretty" error result + dprintf(eval_idx, "Python Error: %s\n", PyUnicode_AsUTF8(pystr)); + module_name = PyUnicode_FromString("traceback"); + pymodule = PyImport_Import(module_name); + Py_DECREF(module_name); + // format backtrace and print + pyfunc = PyObject_GetAttrString(pymodule, "format_exception"); + if (pyfunc && PyCallable_Check(pyfunc)) { + pyval = PyObject_CallFunctionObjArgs(pyfunc, ptype, pvalue, ptraceback, NULL); + // Check if traceback is a list and handle as such + if (pyval && PyList_Check(pyval)) { + n = PyList_Size(pyval); + for (i = 0; i < n; i++) { + item = PyList_GetItem(pyval, i); + pystr = PyObject_Str(item); + dprintf(idx, "%s", PyUnicode_AsUTF8(pystr)); + } + } else { + pystr = PyObject_Str(pyval); + dprintf(idx, "%s", PyUnicode_AsUTF8(pystr)); + } + Py_XDECREF(pyval); + } + } + return; +} + +static PyObject *make_ircuser_dict(memberlist *m) { + PyObject *result = PyDict_New(); + PyDict_SetItemString(result, "nick", PyUnicode_FromString(m->nick)); + PyDict_SetItemString(result, "host", PyUnicode_FromString(m->userhost)); + if (m->joined) { + PyObject *tmp = PyTuple_New(1); + PyTuple_SET_ITEM(tmp, 0, PyFloat_FromDouble((double)m->joined)); + PyDict_SetItemString(result, "joined", PyDateTime_FromTimestamp(tmp)); + } + if (m->last) { + PyObject *tmp = PyTuple_New(1); + PyTuple_SET_ITEM(tmp, 0, PyFloat_FromDouble((double)m->last)); + PyDict_SetItemString(result, "lastseen", PyDateTime_FromTimestamp(tmp)); + } + PyDict_SetItemString(result, "account", m->account[0] ? PyUnicode_FromString(m->account) : Py_None); + return result; +} + +static PyObject *py_findircuser(PyObject *self, PyObject *args) { + char *nick, *chan = NULL; + + if (!PyArg_ParseTuple(args, "s|s", &nick, &chan)) { + PyErr_SetString(EggdropError, "wrong number of args"); + return NULL; + } + for (struct chanset_t *ch = chan ? findchan_by_dname(chan) : chanset; ch; ch = chan ? NULL : ch->next) { + memberlist *m = ismember(ch, nick); + if (m) { + return make_ircuser_dict(m); + } + } + Py_RETURN_NONE; +} + +static int tcl_call_python(ClientData cd, Tcl_Interp *irp, int objc, Tcl_Obj *const objv[]) +{ + PyObject *args = PyTuple_New(objc > 1 ? objc - 1: 0); + struct py_bind *bindinfo = cd; + + // objc[0] is procname + for (int i = 1; i < objc; i++) { + PyTuple_SET_ITEM(args, i - 1, Py_BuildValue("s", Tcl_GetStringFromObj(objv[i], NULL))); + } + if (!PyObject_Call(bindinfo->callback, args, NULL)) { + PyErr_Print(); + Tcl_SetResult(irp, "Error calling python code", NULL); + return TCL_ERROR; + } + return TCL_OK; +} + +static PyObject *py_parse_tcl_list(PyObject *self, PyObject *args) { + int max; + const char *str; + Tcl_Obj *strobj; + PyObject *result; + + if (!PyArg_ParseTuple(args, "s", &str)) { + PyErr_SetString(PyExc_TypeError, "Argument is not a unicode string"); + return NULL; + } + strobj = Tcl_NewStringObj(str, -1); + Tcl_IncrRefCount(strobj); + if (Tcl_ListObjLength(tclinterp, strobj, &max) != TCL_OK) { + Tcl_DecrRefCount(strobj); + PyErr_SetString(EggdropError, "Supplied string is not a Tcl list"); + } + result = PyList_New(max); + for (int i = 0; i < max; i++) { + Tcl_Obj *tclobj; + const char *tclstr; + int tclstrlen; + + Tcl_ListObjIndex(tclinterp, strobj, i, &tclobj); + tclstr = Tcl_GetStringFromObj(tclobj, &tclstrlen); + PyList_SetItem(result, i, PyUnicode_DecodeUTF8(tclstr, tclstrlen, NULL)); + } + Tcl_DecrRefCount(strobj); + return result; +} + +static PyObject *py_parse_tcl_dict(PyObject *self, PyObject *args) { + int done; + const char *str; + Tcl_Obj *strobj, *key, *value; + Tcl_DictSearch search; + PyObject *result; + + if (!PyArg_ParseTuple(args, "s", &str)) { + PyErr_SetString(PyExc_TypeError, "Argument is not a unicode string"); + return NULL; + } + strobj = Tcl_NewStringObj(str, -1); + if (Tcl_DictObjFirst(tclinterp, strobj, &search, &key, &value, &done) != TCL_OK) { + PyErr_SetString(EggdropError, "Supplied string is not a Tcl dictionary"); + } + result = PyDict_New(); + while (!done) { + int len; + const char *valstr = Tcl_GetStringFromObj(value, &len); + PyObject *pyval = PyUnicode_DecodeUTF8(valstr, len, NULL); + PyDict_SetItemString(result, Tcl_GetString(key), pyval); + Tcl_DictObjNext(&search, &key, &value, &done); + } + Tcl_DictObjDone(&search); + return result; +} + +static PyObject *py_bind(PyObject *self, PyObject *args) { + PyObject *callback; + char *bindtype, *mask, *flags; + struct py_bind *bindinfo; + tcl_bind_list_t *tl; + + // type flags mask callback + if (!PyArg_ParseTuple(args, "sssO", &bindtype, &flags, &mask, &callback) || !callback) { + PyErr_SetString(EggdropError, "wrong arguments"); + return NULL; + } + if (!(tl = find_bind_table(bindtype))) { + PyErr_SetString(EggdropError, "unknown bind type"); + return NULL; + } + if (callback == Py_None) { + PyErr_SetString(EggdropError, "callback is None"); + return NULL; + } + if (!PyCallable_Check(callback)) { + PyErr_SetString(EggdropError, "callback is not callable"); + return NULL; + } + Py_IncRef(callback); + + bindinfo = nmalloc(sizeof *bindinfo); + bindinfo->bindtable = tl; + bindinfo->callback = callback; + bindinfo->next = py_bindlist; + snprintf(bindinfo->tclcmdname, sizeof bindinfo->tclcmdname, "*python:%s:%s:%" PRIxPTR, bindtype, mask, (uintptr_t)callback); + py_bindlist = bindinfo; + // TODO: deleteproc + Tcl_CreateObjCommand(tclinterp, bindinfo->tclcmdname, tcl_call_python, bindinfo, NULL); + // TODO: flags? + bind_bind_entry(tl, flags, mask, bindinfo->tclcmdname); + Py_RETURN_NONE; +} + +static Tcl_Obj *py_list_to_tcl_obj(PyObject *o) { + int max = PyList_GET_SIZE(o); + Tcl_Obj *result = Tcl_NewListObj(0, NULL); + + for (int i = 0; i < max; i++) { + Tcl_ListObjAppendElement(tclinterp, result, py_to_tcl_obj(PyList_GET_ITEM(o, i))); + } + return result; +} + +static Tcl_Obj *py_tuple_to_tcl_obj(PyObject *o) { + int max = PyTuple_GET_SIZE(o); + Tcl_Obj *result = Tcl_NewListObj(0, NULL); + + for (int i = 0; i < max; i++) { + Tcl_ListObjAppendElement(tclinterp, result, py_to_tcl_obj(PyTuple_GET_ITEM(o, i))); + } + return result; +} + +static Tcl_Obj *py_dict_to_tcl_obj(PyObject *o) { + int max; + Tcl_Obj *result = Tcl_NewDictObj(); + + /* operate on list of (key, value) tuples instead */ + o = PyDict_Items(o); + max = PyList_GET_SIZE(o); + for (int i = 0; i < max; i++) { + PyObject *key = PyTuple_GET_ITEM(PyList_GET_ITEM(o, i), 0); + PyObject *val = PyTuple_GET_ITEM(PyList_GET_ITEM(o, i), 1); + Tcl_Obj *keyobj = py_to_tcl_obj(key); + Tcl_Obj *valobj = py_to_tcl_obj(val); + Tcl_DictObjPut(tclinterp, result, keyobj, valobj); + } + return result; +} + +static Tcl_Obj *py_str_to_tcl_obj(PyObject *o) { + Tcl_Obj *ret; + PyObject *strobj = PyObject_Str(o); + + if (strobj) { + ret = Tcl_NewStringObj(PyUnicode_AsUTF8(strobj), -1); + Py_DECREF(strobj); + } else { + ret = Tcl_NewObj(); + } + return ret; +} + +static Tcl_Obj *py_to_tcl_obj(PyObject *o) { + if (PyList_Check(o)) { + return py_list_to_tcl_obj(o); + } else if (PyDict_Check(o)) { + return py_dict_to_tcl_obj(o); + } else if (PyTuple_Check(o)) { + return py_tuple_to_tcl_obj(o); + } else if (o == Py_None) { + return Tcl_NewObj(); + } else { + return py_str_to_tcl_obj(o); + } +} + +static PyObject *python_call_tcl(PyObject *self, PyObject *args, PyObject *kwargs) { + TclFunc *tf = (TclFunc *)self; + Py_ssize_t argc = PyTuple_Size(args); + Tcl_DString ds; + const char *result; + int retcode; + + Tcl_DStringInit(&ds); + Tcl_DStringAppendElement(&ds, tf->tclcmdname); + for (int i = 0; i < argc; i++) { + PyObject *o = PyTuple_GetItem(args, i); + Tcl_DStringAppendElement(&ds, Tcl_GetString(py_to_tcl_obj(o))); + } + retcode = Tcl_Eval(tclinterp, Tcl_DStringValue(&ds)); + + if (retcode != TCL_OK) { + PyErr_Format(EggdropError, "Tcl error: %s", Tcl_GetStringResult(tclinterp)); + return NULL; + } + result = Tcl_GetStringResult(tclinterp); + //putlog(LOG_MISC, "*", "Python called '%s' -> '%s'", Tcl_DStringValue(&ds), result); + + if (!*result) { + // Empty string means okay + Py_RETURN_NONE; + } + + return PyUnicode_DecodeUTF8(result, strlen(result), NULL); +} + +static PyObject *py_findtclfunc(PyObject *self, PyObject *args) { + char *cmdname; + TclFunc *result; + + if (!PyArg_ParseTuple(args, "s", &cmdname)) { + PyErr_SetString(EggdropError, "wrong arguments"); + return NULL; + } + // TODO: filter a bit better what is available to Python, specify return types ("list of string"), etc. + if (!(Tcl_FindCommand(tclinterp, cmdname, NULL, TCL_GLOBAL_ONLY))) { + PyErr_SetString(PyExc_AttributeError, cmdname); + return NULL; + } + result = PyObject_New(TclFunc, &TclFuncType); + strcpy(result->tclcmdname, cmdname); + return (PyObject *)result; +} + +static PyMethodDef MyPyMethods[] = { + {"bind", py_bind, METH_VARARGS, "register an eggdrop python bind"}, + {"findircuser", py_findircuser, METH_VARARGS, "find an IRC user by nickname and optional channel"}, + {"parse_tcl_list", py_parse_tcl_list, METH_VARARGS, "convert a Tcl list string to a Python list"}, + {"parse_tcl_dict", py_parse_tcl_dict, METH_VARARGS, "convert a Tcl dict string to a Python dict"}, + {"__displayhook__", py_displayhook, METH_O, "display hook for python expressions"}, + {NULL, NULL, 0, NULL} /* Sentinel */ +}; + +static PyMethodDef EggTclMethods[] = { + // TODO: __dict__ with all valid Tcl commands? + {"__getattr__", py_findtclfunc, METH_VARARGS, "fallback to call Tcl functions transparently"}, + {NULL, NULL, 0, NULL} +}; + +static cmd_t mydcc[] = { + /* command flags function tcl-name */ + {"python", "", (IntFunc) cmd_python, NULL}, + {NULL, NULL, NULL, NULL} /* Mark end. */ +}; + +static struct PyModuleDef eggdrop = { + PyModuleDef_HEAD_INIT, + "eggdrop", /* name of module */ + 0, /* module documentation, may be NULL */ + -1, /* size of per-interpreter state of the module, + or -1 if the module keeps state in global variables. */ + MyPyMethods +}; + +static struct PyModuleDef eggdrop_tcl = { PyModuleDef_HEAD_INIT, "eggdrop.tcl", NULL, -1, EggTclMethods }; + +static PyTypeObject TclFuncType = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "eggdrop.TclFunc", + .tp_doc = "Tcl function that is callable from Python.", + .tp_basicsize = sizeof(TclFunc), + .tp_itemsize = 0, + .tp_flags = Py_TPFLAGS_DEFAULT, + .tp_new = PyType_GenericNew, + .tp_call = python_call_tcl, +}; + +PyMODINIT_FUNC PyInit_eggdrop(void) { + PyObject *pymodobj, *eggtclmodobj, *pymoddict; + + pymodobj = PyModule_Create(&eggdrop); + if (pymodobj == NULL) + return NULL; + + EggdropError = PyErr_NewException("eggdrop.error", NULL, NULL); + Py_INCREF(EggdropError); + if (PyModule_AddObject(pymodobj, "error", EggdropError) < 0) { + Py_DECREF(EggdropError); + Py_CLEAR(EggdropError); + Py_DECREF(pymodobj); + return NULL; + } + eggtclmodobj = PyModule_Create(&eggdrop_tcl); + PyModule_AddObject(pymodobj, "tcl", eggtclmodobj); + + pymoddict = PyModule_GetDict(pymodobj); + PyDict_SetItemString(pymoddict, "tcl", eggtclmodobj); + + pymoddict = PyImport_GetModuleDict(); + PyDict_SetItemString(pymoddict, "eggdrop.tcl", eggtclmodobj); + + PyType_Ready(&TclFuncType); + + return pymodobj; +} diff --git a/src/mod/python.mod/pymod.h b/src/mod/python.mod/pymod.h new file mode 100644 index 000000000..5d3ae0fd5 --- /dev/null +++ b/src/mod/python.mod/pymod.h @@ -0,0 +1,4 @@ +#define APIDEF_METHOD(symbol) static PyObject * api_##symbol(PyObject *self, PyObject *args) +#define APIDEF_KWMETHOD(symbol) static PyObject * api_##symbol(PyObject *self, PyObject *args, PyObject *kw) + +#undef putserv diff --git a/src/mod/python.mod/python.c b/src/mod/python.mod/python.c new file mode 100644 index 000000000..4cb3b70d4 --- /dev/null +++ b/src/mod/python.mod/python.c @@ -0,0 +1,163 @@ +/* + * python.c -- python interpreter handling for python.mod + */ + +/* + * Copyright (C) 2020 - 2021 Eggheads Development Team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#define MODULE_NAME "python" +#define MAKING_PYTHON +#define PY_SSIZE_T_CLEAN /* Not required for 3.13+ but here for back compat */ + +#define ARRAYCOUNT(x) (sizeof (x) / sizeof *(x)) + +#include "src/mod/module.h" +// HACK, but stable API +#undef interp +#define tclinterp (*(Tcl_Interp **)(global[128])) +#undef days +#include +#include +#include +#include "src/mod/irc.mod/irc.h" +#include "src/mod/server.mod/server.h" +#include "src/mod/python.mod/python.h" + +//static PyObject *pymodobj; +static PyObject *pirp, *pglobals; + +#undef global +static Function *global = NULL, *irc_funcs = NULL; +#include "src/mod/python.mod/pycmds.c" +#include "src/mod/python.mod/tclpython.c" + +EXPORT_SCOPE char *python_start(Function *global_funcs); + +static int python_expmem() +{ + return 0; // TODO +} + +// TODO: Do we really have to exit eggdrop on module load failure? +static void init_python() { + PyObject *pmodule; + PyStatus status; + PyConfig config; + + if (PY_VERSION_HEX < 0x0308) { + putlog(LOG_MISC, "*", "Python: Python version %d is lower than 3.8, not loading Python module", PY_VERSION_HEX); + return; + } + PyConfig_InitIsolatedConfig(&config); + config.install_signal_handlers = 0; + config.parse_argv = 0; + status = PyConfig_SetBytesString(&config, &config.program_name, argv0); + if (PyStatus_Exception(status)) { + PyConfig_Clear(&config); + putlog(LOG_MISC, "*", "Python: Fatal error: Could not set program base path"); + Py_ExitStatusException(status); + } + if (PyImport_AppendInittab("eggdrop", &PyInit_eggdrop) == -1) { + putlog(LOG_MISC, "*", "Python: Error: could not extend in-built modules table"); + exit(1); + } + status = Py_InitializeFromConfig(&config); + if (PyStatus_Exception(status)) { + PyConfig_Clear(&config); + putlog(LOG_MISC, "*", "Python: Fatal error: Could not initialize config"); + fatal(1); + } + PyConfig_Clear(&config); + PyDateTime_IMPORT; + pmodule = PyImport_ImportModule("eggdrop"); + if (!pmodule) { + PyErr_Print(); + putlog(LOG_MISC, "*", "Error: could not import module 'eggdrop'"); + fatal(1); + } + + pirp = PyImport_AddModule("__main__"); + pglobals = PyModule_GetDict(pirp); + + PyRun_SimpleString("import sys"); + // TODO: Relies on pwd() staying eggdrop main dir + PyRun_SimpleString("sys.path.append(\".\")"); + PyRun_SimpleString("import eggdrop"); + PyRun_SimpleString("sys.displayhook = eggdrop.__displayhook__"); + + return; +} + +static void kill_python() { + if (Py_FinalizeEx() < 0) { + exit(120); + } + return; +} + +static void python_report(int idx, int details) +{ + // TODO +} + +static char *python_close() +{ + Context; + kill_python(); + rem_builtins(H_dcc, mydcc); + rem_tcl_commands(my_tcl_cmds); + module_undepend(MODULE_NAME); + return NULL; +} + +static Function python_table[] = { + (Function) python_start, + (Function) python_close, + (Function) python_expmem, + (Function) python_report +}; + +char *python_start(Function *global_funcs) +{ + /* Assign the core function table. After this point you use all normal + * functions defined in src/mod/modules.h + */ + global = global_funcs; + + Context; + /* Register the module. */ + module_register(MODULE_NAME, python_table, 0, 1); + + if (!module_depend(MODULE_NAME, "eggdrop", 109, 0)) { + module_undepend(MODULE_NAME); + return "This module requires Eggdrop 1.9.0 or later."; + } + // TODO: Is this dependency necessary? It auto-loads irc.mod, that might be undesired + if (!(irc_funcs = module_depend(MODULE_NAME, "irc", 1, 5))) { + module_undepend(MODULE_NAME); + return "This module requires irc module 1.5 or later."; + } + // irc.mod depends on server.mod and channels.mod, so those were implicitely loaded + + init_python(); + + /* Add command table to bind list */ + add_builtins(H_dcc, mydcc); + add_tcl_commands(my_tcl_cmds); + return NULL; +} \ No newline at end of file diff --git a/src/mod/python.mod/python.h b/src/mod/python.mod/python.h new file mode 100644 index 000000000..a3c20f36a --- /dev/null +++ b/src/mod/python.mod/python.h @@ -0,0 +1,4 @@ +#define PY_SSIZE_T_CLEAN +#include +#define PY_OK 0 +#undef putserv diff --git a/src/mod/python.mod/scripts/bestfriend.py b/src/mod/python.mod/scripts/bestfriend.py new file mode 100644 index 000000000..2e61b7718 --- /dev/null +++ b/src/mod/python.mod/scripts/bestfriend.py @@ -0,0 +1,30 @@ +# GOAL: Demonstrate how to convert a list provided by a Tcl command into a Python list + +# Load bind from eggdrop, not eggdrop.tcl. Loading it from eggdrop.tcl would cause +# the bind to call a Tcl proc, not the python method. +from eggdrop import bind, parse_tcl_list + +# Load any Tcl commands you want to use from the eggdrop.tcl module. +from eggdrop.tcl import putmsg, putlog, chanlist + +# And now, a totally normal python module +import random + +# This is a proc that calls the putmsg Tcl command. Note that, slightly different than Tcl, +# each argument is separated by a comma instead of just a space +# +# This function is trivial and silly, but shows how Python can properly accept and type a Tcl list +def pickAFriend(nick, user, hand, chan, text, **kwargs): + users = chanlist(chan) + # Here we use a new python function called 'parse_tcl_list' to convert the Tcl list provided by chanlist + # into a python list. Without this, you just have a long space-separated string + userlist = parse_tcl_list(users) + putlog(f"This is a python list of the users: {userlist}") + bestFriend = random.choice(userlist) + putmsg(chan, f"The first user I found was {userlist[0]}") + putmsg(chan, f"But {bestFriend} is my new best friend!") + +# Call binds at the end of the script, not the top- the methods must be defined! +bind("pub", "*", "!friend", pickAFriend) + +print('Loaded bestfriend.py') diff --git a/src/mod/python.mod/scripts/greet.py b/src/mod/python.mod/scripts/greet.py new file mode 100644 index 000000000..9400f8d30 --- /dev/null +++ b/src/mod/python.mod/scripts/greet.py @@ -0,0 +1,23 @@ +# GOAL: Demonstrate how to use a Python bind to call a Python function + +# Load bind from eggdrop, not eggdrop.tcl. Loading it from eggdrop.tcl would cause +# the bind to call a Tcl proc, not the python function. +from eggdrop import bind + +# Load any Tcl commands you want to use from the eggdrop.tcl module. +from eggdrop.tcl import putmsg + +# This is a proc that calls the putmsg Tcl command. Note that, slightly different than Tcl, +# each argument is separated by a comma instead of just a space +def joinGreetUser(nick, host, handle, channel, **kwargs): + putmsg(channel, f"Hello {nick}, welcome to {channel}") + +def joinGreetOp(nick, host, handle, channel, **kwargs): + putmsg(channel, f"{nick} is an operator on this channel!") + +# Call binds at the end of the script, not the top- the functions must be defined! +bind("join", "*", "*", joinGreetUser) +# Again, arguments are separated with a comma. This bind requires the 'o' flag to be triggered. +bind("join", "o", "*", joinGreetOp) + +print('Loaded greet.py') diff --git a/src/mod/python.mod/scripts/imdb.py b/src/mod/python.mod/scripts/imdb.py new file mode 100644 index 000000000..d052377c3 --- /dev/null +++ b/src/mod/python.mod/scripts/imdb.py @@ -0,0 +1,26 @@ +# GOAL: Demonstrate how to use a third-party python module + +# Load bind from eggdrop, not eggdrop.tcl. Loading it from eggdrop.tcl would cause +# the bind to call a Tcl proc, not the python function. +from eggdrop import bind + +# Load any Tcl commands you want to use. +from eggdrop.tcl import putmsg, putlog + +# Load a python module as usual. +from imdb import Cinemagoer + +# Just a totally normal Python function, nothing special here! Note the Tcl command +# 'putlog' is called +def pubGetMovie(nick, user, hand, chan, text, **kwargs): + imdb = Cinemagoer() + putlog("IMDB: Searching for "+text) + results = imdb.search_movie(text) + movie = imdb.get_movie(results[0].movieID) + putmsg(chan, f"Movie: {movie['title']} ({movie['year']}): {movie['plot outline']}") + +# Call binds at the end of the script, not the top- the functions must be defined! +bind("pub", "*", "!movie", pubGetMovie) + +# Should we talk about print vs putlog? +print('Loaded imdb.py') diff --git a/src/mod/python.mod/scripts/listtls.py b/src/mod/python.mod/scripts/listtls.py new file mode 100644 index 000000000..1f802e904 --- /dev/null +++ b/src/mod/python.mod/scripts/listtls.py @@ -0,0 +1,30 @@ +# GOAL: Demonstrate how to convert Tcl dicts nested in a Tcl list to a Python list of Python dicts + +# Load bind from eggdrop, not eggdrop.tcl. Loading it from eggdrop.tcl would cause +# the bind to call a Tcl proc, not the python method. +from eggdrop import bind, parse_tcl_list, parse_tcl_dict + +# Load any Tcl commands you want to use from the eggdrop.tcl module. +from eggdrop.tcl import putmsg, putlog, socklist + +# This is a proc that calls the putmsg Tcl command. Note that, slightly different than Tcl, +# each argument is separated by a comma instead of just a space +# +# This function is trivial and silly, but shows how Python can properly accept and type a Tcl dict +def listInsecureSockets(nick, user, hand, chan, text, **kwargs): + sockets = socklist() + # socklist() will return us a Tcl-formatted list of dicts (aka, a string), so we have to first + # convert this to a Python list using parse_tcl_list(). + socketlist = parse_tcl_list(sockets) + # Now socklist contains a Python list of Tcl-formatted dicts (again, strings), so now we have + # to format each list item into a Python dict using parse_tcl_dict(). + for socket in socketlist: + socketdict = parse_tcl_dict(socket) + i = socketdict.get("idx") + status = socketdict.get("secure") + putmsg(chan, f"The TLS status of idx {i} is {status}") + +# Call binds at the end of the script, not the top- the methods must be defined! +bind("pub", "*", "!listtls", listInsecureSockets) + +print('Loaded listtls.py') diff --git a/src/mod/python.mod/scripts/urlTitle.py b/src/mod/python.mod/scripts/urlTitle.py new file mode 100644 index 000000000..60dc6ae00 --- /dev/null +++ b/src/mod/python.mod/scripts/urlTitle.py @@ -0,0 +1,27 @@ +# GOAL: Demonstrate how to use a third party python module + +# Load bind from eggdrop, not eggdrop.tcl. Loading it from eggdrop.tcl would cause +# the bind to call a Tcl proc, not the python function. +from eggdrop import bind + +# Load any Tcl commands you want to use from the eggdrop.tcl module. +from eggdrop.tcl import putmsg, putlog + +# Load a python module as usual. +from bs4 import BeautifulSoup +import requests + +# Just a totally normal Python function, nothing special here! Note the Tcl command +# 'putlog' is called +def pubGetTitle(nick, host, handle, channel, text, **kwargs): + try: + reqs = requests.get(text) + soup = BeautifulSoup(reqs.text, 'html.parser') + putmsg(channel, "The title of the webpage is: "+soup.find_all('title')[0].get_text()) + except Exception as e: + putmsg(channel, "Error: " + str(e)) + +# Call binds at the end of the script, not the top- the functions must be defined! +bind("pub", "*", "!title", pubGetTitle) + +print('Loaded example.py') diff --git a/src/mod/python.mod/tclpython.c b/src/mod/python.mod/tclpython.c new file mode 100644 index 000000000..88a89b2d7 --- /dev/null +++ b/src/mod/python.mod/tclpython.c @@ -0,0 +1,89 @@ +/* + * tclpython.c -- tcl functions for python.mod + */ +/* + * Copyright (C) 2000 - 2023 Eggheads Development Team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +static int tcl_pysource STDVAR +{ + FILE *fp; + PyObject *pobj, *ptype, *pvalue, *ptraceback; + PyObject *pystr; + Py_ssize_t n; + const char *res = NULL; + int i; + + BADARGS(2, 2, " script"); + + if (!(fp = fopen(argv[1], "r"))) { + Tcl_AppendResult(irp, "Error: could not open file ", argv[1],": ", strerror(errno), NULL); + return TCL_ERROR; + } + PyErr_Clear(); + // Always PyNone or NULL on exception + pobj = PyRun_FileEx(fp, argv[1], Py_file_input, pglobals, pglobals, 1); + Py_XDECREF(pobj); + + if (PyErr_Occurred()) { + PyErr_Fetch(&ptype, &pvalue, &ptraceback); + pystr = PyObject_Str(pvalue); + Tcl_AppendResult(irp, "Error loading python: ", PyUnicode_AsUTF8(pystr), NULL); + Py_DECREF(pystr); + // top level syntax errors do not have a traceback + if (ptraceback) { + PyObject *module_name, *pymodule, *pyfunc, *pyval, *item; + + module_name = PyUnicode_FromString("traceback"); + pymodule = PyImport_Import(module_name); + Py_DECREF(module_name); + // format backtrace and print + pyfunc = PyObject_GetAttrString(pymodule, "format_exception"); + + if (pyfunc && PyCallable_Check(pyfunc)) { + pyval = PyObject_CallFunctionObjArgs(pyfunc, ptype, pvalue, ptraceback, NULL); + + if (pyval && PyList_Check(pyval)) { + n = PyList_Size(pyval); + for (i = 0; i < n; i++) { + item = PyList_GetItem(pyval, i); + pystr = PyObject_Str(item); + res = PyUnicode_AsUTF8(pystr); + // strip \n + putlog(LOG_MISC, "*", "%.*s", (int)(strlen(res) - 1), res); + Py_DECREF(pystr); + } + } else { + putlog(LOG_MISC, "*", "Error fetching python traceback"); + } + Py_XDECREF(pyval); + } + Py_XDECREF(pyfunc); + Py_DECREF(pymodule); + } + Py_XDECREF(ptype); + Py_XDECREF(pvalue); + Py_XDECREF(ptraceback); + return TCL_ERROR; + } + return TCL_OK; +} + +static tcl_cmds my_tcl_cmds[] = { + {"pysource", tcl_pysource}, + {NULL, NULL} +}; diff --git a/src/modules.c b/src/modules.c index b8368944f..d85a09742 100644 --- a/src/modules.c +++ b/src/modules.c @@ -100,6 +100,8 @@ extern time_t now, online_since; extern tand_t *tandbot; extern Tcl_Interp *interp; extern sock_list *socklist; +extern char argv0; + int xtra_kill(); int xtra_unpack(); @@ -620,8 +622,11 @@ Function global_table[] = { (Function) & USERENTRY_ACCOUNT, /* struct user_entry_type * */ (Function) get_user_by_account, (Function) delhost_by_handle, - (Function) check_tcl_event_arg + (Function) check_tcl_event_arg, /* 320 - 323 */ + (Function) bind_bind_entry, + (Function) unbind_bind_entry, + (Function) & argv0 }; void init_modules(void) diff --git a/src/tclhash.c b/src/tclhash.c index 1028471a6..7f905e816 100644 --- a/src/tclhash.c +++ b/src/tclhash.c @@ -349,7 +349,7 @@ static void dump_bind_tables(Tcl_Interp *irp) } } -static int unbind_bind_entry(tcl_bind_list_t *tl, const char *flags, +int unbind_bind_entry(tcl_bind_list_t *tl, const char *flags, const char *cmd, const char *proc) { tcl_bind_mask_t *tm; @@ -381,7 +381,7 @@ static int unbind_bind_entry(tcl_bind_list_t *tl, const char *flags, /* Add command (remove old one if necessary) */ -static int bind_bind_entry(tcl_bind_list_t *tl, const char *flags, +int bind_bind_entry(tcl_bind_list_t *tl, const char *flags, const char *cmd, const char *proc) { tcl_cmd_t *tc; @@ -1272,6 +1272,7 @@ void tell_binds(int idx, char *par) tcl_bind_list_t *tl, *tl_kind; tcl_bind_mask_t *tm; int fnd = 0, showall = 0, patmatc = 0, maxname = 0; + int ok = 0, showpy = 0, showtcl = 0; tcl_cmd_t *tc; char *name, *proc, *s, flg[100]; @@ -1292,7 +1293,13 @@ void tell_binds(int idx, char *par) if ((name && name[0] && !strcasecmp(name, "all")) || (s && s[0] && !strcasecmp(s, "all"))) showall = 1; - if (tl_kind == NULL && name && name[0] && strcasecmp(name, "all")) + if ((name && name[0] && !strcasecmp(name, "tcl")) || + (s && s[0] && !strcasecmp(s, "all"))) + showtcl = 1; + if ((name && name[0] && !strcasecmp(name, "python")) || + (s && s[0] && !strcasecmp(s, "all"))) + showpy = 1; + if (tl_kind == NULL && !showpy && !showtcl && name && name[0] && strcasecmp(name, "all")) patmatc = 1; for (tl = tl_kind ? tl_kind : bind_table_list; tl; @@ -1314,7 +1321,6 @@ void tell_binds(int idx, char *par) dprintf(idx, "%s", MISC_CMDBINDS); dprintf(idx, " %*s FLAGS COMMAND HITS BINDING (TCL)\n", maxname, "TYPE"); - for (tl = tl_kind ? tl_kind : bind_table_list; tl; tl = tl_kind ? 0 : tl->next) { if (tl->flags & HT_DELETED) @@ -1327,26 +1333,28 @@ void tell_binds(int idx, char *par) continue; proc = tc->func_name; build_flags(flg, &(tc->flags), NULL); - if (!strcmp(flg, "-|-")) { - flg[0] = '*'; - flg[1] = '\0'; - } - if (showall || proc[0] != '*') { - int ok = 0; - - if (patmatc == 1) { + ok = 0; + if (showall) { + ok = 1; + } else if (patmatc || showpy || showtcl) { + if ((patmatc == 1) && (proc[0] != '*')) { if (wild_match_per(name, tl->name) || wild_match_per(name, tm->mask) || - wild_match_per(name, tc->func_name)) + wild_match_per(name, tc->func_name)) { ok = 1; - } else + } + } else if (showpy && !(strncasecmp(tc->func_name, "*python:", strlen("*python:")))) { + ok = 1; + } else if (showtcl && (strncasecmp(tc->func_name, "*", strlen("*")))) { ok = 1; - - if (ok) { - dprintf(idx, " %*s %-8s %-20s %4d %s\n", maxname, tl->name, flg, - tm->mask, tc->hits, tc->func_name); - fnd = 1; } + } else if (proc[0] != '*') { + ok = 1; + } + if (ok) { + dprintf(idx, " %*s %-8s %-20s %4d %s\n", maxname, tl->name, flg, + tm->mask, tc->hits, tc->func_name); + fnd = 1; } } } diff --git a/src/tclhash.h b/src/tclhash.h index 669d3bd37..c7ebb50b3 100644 --- a/src/tclhash.h +++ b/src/tclhash.h @@ -79,7 +79,10 @@ tcl_bind_list_t *add_bind_table(const char *nme, int flg, IntFunc func); void del_bind_table(tcl_bind_list_t *tl_which); tcl_bind_list_t *find_bind_table(const char *nme); - +int bind_bind_entry(tcl_bind_list_t *tl, const char *flags, + const char *cmd, const char *proc); +int unbind_bind_entry(tcl_bind_list_t *tl, const char *flags, + const char *cmd, const char *proc); int check_tcl_bind(tcl_bind_list_t *, const char *, struct flag_record *, const char *, int); int check_tcl_dcc(const char *, int, const char *); From 383a1a695ecbbe37a5fd9ca4b61f3e56c8fe67ff Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 14 Jan 2024 16:07:59 -0500 Subject: [PATCH 04/91] Update docs --- README | 2 +- doc/AUTOSCRIPTS | 249 ++++++++ doc/FIRST-SCRIPT | 36 +- doc/USERS | 20 +- doc/core.settings | 8 +- doc/html/_static/basic.css | 22 + doc/html/_static/documentation_options.js | 3 +- doc/html/_static/pygments.css | 1 + doc/html/_static/searchtools.js | 26 +- doc/html/_static/sphinx_highlight.js | 16 +- doc/html/about/about.html | 24 +- doc/html/about/legal.html | 24 +- doc/html/index.html | 46 +- doc/html/install/install.html | 30 +- doc/html/install/readme.html | 54 +- doc/html/install/upgrading.html | 40 +- doc/html/modules/included.html | 73 ++- doc/html/modules/index.html | 34 +- doc/html/modules/internals.html | 40 +- doc/html/modules/mod/assoc.html | 25 +- doc/html/modules/mod/blowfish.html | 25 +- doc/html/modules/mod/channels.html | 86 ++- doc/html/modules/mod/compress.html | 25 +- doc/html/modules/mod/console.html | 25 +- doc/html/modules/mod/ctcp.html | 25 +- doc/html/modules/mod/dns.html | 25 +- doc/html/modules/mod/filesys.html | 75 +-- doc/html/modules/mod/ident.html | 25 +- doc/html/modules/mod/irc.html | 25 +- doc/html/modules/mod/notes.html | 25 +- doc/html/modules/mod/pbkdf2.html | 31 +- doc/html/modules/mod/python.html | 274 ++++++++ doc/html/modules/mod/seen.html | 31 +- doc/html/modules/mod/server.html | 25 +- doc/html/modules/mod/share.html | 25 +- doc/html/modules/mod/transfer.html | 33 +- doc/html/modules/mod/twitch.html | 31 +- doc/html/modules/mod/uptime.html | 25 +- doc/html/modules/mod/woobie.html | 25 +- doc/html/modules/writing.html | 40 +- doc/html/objects.inv | Bin 1395 -> 1556 bytes doc/html/search.html | 20 +- doc/html/searchindex.js | 2 +- doc/html/tutorials/firstscript.html | 32 +- doc/html/tutorials/firststeps.html | 48 +- doc/html/tutorials/module.html | 40 +- doc/html/tutorials/setup.html | 7 +- doc/html/tutorials/tlssetup.html | 38 +- doc/html/using/accounts.html | 44 +- doc/html/using/autoscripts.html | 177 +++--- doc/html/using/bans.html | 24 +- doc/html/using/botnet.html | 42 +- doc/html/using/core.html | 48 +- doc/html/using/features.html | 24 +- doc/html/using/ipv6.html | 34 +- doc/html/using/ircv3.html | 30 +- doc/html/using/partyline.html | 30 +- doc/html/using/patch.html | 26 +- doc/html/using/pbkdf2info.html | 38 +- doc/html/using/tcl-commands.html | 721 +++++++++------------- doc/html/using/text-sub.html | 28 +- doc/html/using/tls.html | 42 +- doc/html/using/tricks.html | 36 +- doc/html/using/twitch-tcl-commands.html | 46 +- doc/html/using/twitchinfo.html | 34 +- doc/html/using/users.html | 30 +- doc/modules/MODULES | 40 +- doc/modules/mod.channels | 125 ++-- doc/modules/mod.server | 4 +- doc/modules/mod.transfer | 10 +- doc/sphinx_source/docutils.conf | 2 + doc/sphinx_source/modules/included.rst | 4 + doc/sphinx_source/modules/mod/python.rst | 11 +- doc/sphinx_source/using/tcl-commands.rst | 2 + doc/tcl-commands.doc | 29 +- 75 files changed, 2033 insertions(+), 1509 deletions(-) create mode 100644 doc/AUTOSCRIPTS create mode 100644 doc/html/modules/mod/python.html create mode 100644 doc/sphinx_source/docutils.conf diff --git a/README b/README index 9696eee5d..2d74900ca 100644 --- a/README +++ b/README @@ -61,7 +61,7 @@ FTP The latest Eggdrop stable source code is always located at https://geteggdrop.com. You can also download the current stable, previous stable, and development snapshot via FTP at - ftp.eggheads.org/pub/Eggdrop/source + ftp://ftp.eggheads.org/pub/eggdrop/source Git Development Snapshot diff --git a/doc/AUTOSCRIPTS b/doc/AUTOSCRIPTS new file mode 100644 index 000000000..fb427f1d8 --- /dev/null +++ b/doc/AUTOSCRIPTS @@ -0,0 +1,249 @@ +Eggdrop Autoscripts + +Since it's inception, users have needed to load a Tcl script into +Eggdrop by downloading a Tcl file, editing the file to customize +settings, and then sourceing that file in the config file. In v1.10, the +Autoscripts system was added to make this process a little more +user-friendly. The autoscripts system helps by: + +- Centralizing commonly-used scripts in a single location +- Allowing scripts to be downloaded via the partyline +- Allowing script settings to be configured via the partyline +- Allowing user-written scripts to be managed by the autoscripts + system +- Providing a documented API to write autoscripts-compatible scripts + +AUTOSCRIPTS USAGE + +To view available autoscript commands, type .autoscript on the +partyline. This will open up a special Eggdrop console that doesn't +require you to prefix commands with a '.' . The following sub-commands +are available for use with script: + +remote + +This command will list scripts hosted on the Eggdrop website that are +available to be downloaded and installed on your Eggdrop. + +fetch - - + + + + + @@ -45,6 +44,7 @@

Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -99,7 +99,7 @@

    Search

    About Eggdrop Last revised: July 27, 2010

    -

    About Eggdrop

    +

    About Eggdrop

    Eggdrop was created around December 1993 to help stop the incessant wars on #gayteen. It spawned from another bot that was in the process of being @@ -174,9 +174,9 @@

    About Eggdrop

    diff --git a/doc/html/about/legal.html b/doc/html/about/legal.html index 118cf44cf..e1454e427 100644 --- a/doc/html/about/legal.html +++ b/doc/html/about/legal.html @@ -1,17 +1,16 @@ - - + - + Boring legal stuff — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -42,6 +41,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -94,7 +94,7 @@

    Search

    diff --git a/doc/html/index.html b/doc/html/index.html index 8237db1da..b0440a2b4 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -1,17 +1,16 @@ - - + - + Eggdrop, an open source IRC bot — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -42,6 +41,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -94,10 +94,10 @@

    Search

    -

    Eggdrop, an open source IRC bot

    +

    Eggdrop, an open source IRC bot

    Eggdrop is a free, open source software program built to assist in managing an IRC channel. It is the world’s oldest actively-maintained IRC bot and was designed to be easily used and expanded on via it’s ability to run Tcl scripts. Eggdrop can join IRC channels and perorm automated tasks such as protecting the channel from abuse, assisting users obtain their op/voice status, provide information and greetings, host games, etc.

    -

    Some things you can do with Eggdrop

    +

    Some things you can do with Eggdrop

    Eggdrop has a large number of features, such as:

    -

    How to install Eggdrop

    +

    How to install Eggdrop

    -

    Installation Pre-requisites

    +

    Installation Pre-requisites

    Eggdrop requires Tcl (and its development header files) to be present on the system it is compiled on. It is also strongly encouraged to install openssl (and its development header files) to enable TLS-protected network communication.

    -

    Installation

    +

    Installation

    A guide to quickly installing Eggdrop can be found here.

    -

    Where to find more help

    +

    Where to find more help

    The Eggheads development team can be found lurking on #eggdrop on the Libera network (irc.libera.chat).

    Installing Eggdrop

    @@ -175,6 +175,13 @@

    Where to find more help
  • The Party Line
  • +
  • Eggdrop Autoscripts +
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -403,4 +411,4 @@

    Where to find more help - + \ No newline at end of file diff --git a/doc/html/install/install.html b/doc/html/install/install.html index ced86fd5e..60a857582 100644 --- a/doc/html/install/install.html +++ b/doc/html/install/install.html @@ -1,17 +1,16 @@ - - + - + Installing Eggdrop — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -50,6 +49,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -102,14 +102,14 @@

    Search

    -

    Installing Eggdrop

    +

    Installing Eggdrop

    This is the quick install guide; if you have had little or no experience with UNIX or Eggdrop, READ THE README FILE NOW! This file is best for experienced users.

    For more information on compiling Eggdrop, see the Compile Guide in doc/COMPILE-GUIDE (and of course, the README FILE).

    -

    Quick Startup

    +

    Quick Startup

    Eggdrop uses the GNU autoconfigure scripts to make things easier.

    1. @@ -220,7 +220,7 @@

      Quick Startup -

      Cygwin Requirements (Windows)

      +

      Cygwin Requirements (Windows)

      Eggdrop requires the following packages to be added from the Cygwin installation tool prior to compiling:

      Interpreters: tcl, tcl-devel
      @@ -231,7 +231,7 @@ 

      Cygwin Requirements (Windows) -

      Modules

      +

      Modules

      Modules are small pieces of code that can either be compiled into the binary or can be compiled separately into a file. This allows for a much smaller binary.

      @@ -280,9 +280,9 @@

      Modules

      diff --git a/doc/html/install/readme.html b/doc/html/install/readme.html index b573d5f99..c36eb5238 100644 --- a/doc/html/install/readme.html +++ b/doc/html/install/readme.html @@ -1,27 +1,22 @@ - - + - + README — Eggdrop 1.9.5 documentation - - - - - - + + + + +
      +
    +
    +

    Channel Settings

    +

    There are two types of channel settings: value-based settings (where you configure a setting with a number or string), and enable/disable-based settings (where you turn a setting on or off). These settings can be configured via Tcl using the ‘channel set’ command:

    +
    +
    +
    channel set <chan> <setting>

    This command modifies a specific channel setting for a channel. There are many different options for channels which you can define. Some settings are enabled or disabled by a plus or minus in front of them, and others directly take text or integer values.

    -
    -

    Channel Settings

    -

    Value-based Channel Settings

    +

    Value-based Channel Settings

    +
    chanmode +/-<modes>

    This setting makes the bot enforce channel modes. It will always enforce +the +<modes> and remove the -<modes> modes.

    +
    idle-kick 0

    This setting will make the bot check every minute for idle users. Set this to 0 to disable idle check.

    @@ -171,10 +176,6 @@

    Value-based Channel Settings - - - -

    0

    turn off

    @@ -209,10 +210,6 @@

    Value-based Channel Settings - - - -

    0

    Deop the user.

    @@ -234,10 +231,6 @@

    Value-based Channel Settings - - - -

    0 *!user@host

    @@ -291,10 +284,6 @@

    Value-based Channel Settings - - - -

    aop-delay 0

    No delay is used.

    @@ -365,17 +354,12 @@

    Value-based Channel Settings -

    Enable/Disable Channel Settings

    +

    Enable/Disable Channel Settings

    +

    These settings should be preceded by a + or - to enable or disable the setting, respctively.

    -
    chanmode +/-<modes>

    This setting makes the bot enforce channel modes. It will always enforce -the +<modes> and remove the -<modes> modes.

    -
    -
    channel set <chan> +/-<setting>

    There are many different options for channels which you can define. -They can be enabled or disabled by a plus or minus in front of them.

    -
    enforcebans

    When a ban is set, kick people who are on the channel and match -the ban?

    +the ban

    dynamicbans

    Only activate bans on the channel when necessary? This keeps the channel’s ban list from getting excessively long. The bot still @@ -403,21 +387,21 @@

    Enable/Disable Channel Settings -

    Default Channel Values

    +

    Default Channel Values

    The following settings are used as default values when you .+chan #chan or .tcl @@ -550,9 +534,9 @@

    Default Channel Values

    diff --git a/doc/html/modules/mod/compress.html b/doc/html/modules/mod/compress.html index 59c3e79ae..88924232b 100644 --- a/doc/html/modules/mod/compress.html +++ b/doc/html/modules/mod/compress.html @@ -1,17 +1,16 @@ - - + - + Compress Module — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -84,6 +84,7 @@

    Table of Contents

  • IRC Module
  • Notes Module
  • PBKDF2 Module
  • +
  • Python Module
  • Seen Module
  • Server Module
  • Share Module
  • @@ -119,7 +120,7 @@

    Search

    Last revised: May 27, 2004

    -

    Compress Module

    +

    Compress Module

    This module provides support for file compression. It can be used to compress files via Tcl or to transfer the userfile compressed during the share process, saving bandwidth.

    @@ -169,9 +170,9 @@

    Search

    diff --git a/doc/html/modules/mod/console.html b/doc/html/modules/mod/console.html index e7c98a632..f9d6a99ce 100644 --- a/doc/html/modules/mod/console.html +++ b/doc/html/modules/mod/console.html @@ -1,17 +1,16 @@ - - + - + Console Module — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -84,6 +84,7 @@

    Table of Contents

  • IRC Module
  • Notes Module
  • PBKDF2 Module
  • +
  • Python Module
  • Seen Module
  • Server Module
  • Share Module
  • @@ -119,7 +120,7 @@

    Search

    Last revised: January 1, 2002

    -

    Console Module

    +

    Console Module

    This module provides storage of console settings when you exit the bot or type .store on the partyline.

    This module requires: none

    @@ -171,9 +172,9 @@

    Search

    diff --git a/doc/html/modules/mod/ctcp.html b/doc/html/modules/mod/ctcp.html index 577039b4d..49be32ecb 100644 --- a/doc/html/modules/mod/ctcp.html +++ b/doc/html/modules/mod/ctcp.html @@ -1,17 +1,16 @@ - - + - + CTCP Module — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -84,6 +84,7 @@

    Table of Contents

  • IRC Module
  • Notes Module
  • PBKDF2 Module
  • +
  • Python Module
  • Seen Module
  • Server Module
  • Share Module
  • @@ -119,7 +120,7 @@

    Search

    Last revised: February 12, 2002

    -

    CTCP Module

    +

    CTCP Module

    This module provides the normal ctcp replies that you would expect. Without it loaded, CTCP CHAT will not work.

    This module requires: server

    @@ -183,9 +184,9 @@

    Search

    diff --git a/doc/html/modules/mod/dns.html b/doc/html/modules/mod/dns.html index 158605606..17d42f77b 100644 --- a/doc/html/modules/mod/dns.html +++ b/doc/html/modules/mod/dns.html @@ -1,17 +1,16 @@ - - + - + DNS Module — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -84,6 +84,7 @@

    Table of Contents

  • IRC Module
  • Notes Module
  • PBKDF2 Module
  • +
  • Python Module
  • Seen Module
  • Server Module
  • Share Module
  • @@ -119,7 +120,7 @@

    Search

    Last revised: September 26, 2010

    -

    DNS Module

    +

    DNS Module

    This module provides asynchronous dns support. This will avoid long periods where the bot just hangs there, waiting for a hostname to resolve, which will often let it timeout on all other connections.

    @@ -184,9 +185,9 @@

    Search

    diff --git a/doc/html/modules/mod/filesys.html b/doc/html/modules/mod/filesys.html index b1e78eb08..397a41817 100644 --- a/doc/html/modules/mod/filesys.html +++ b/doc/html/modules/mod/filesys.html @@ -1,17 +1,16 @@ - - + - + Filesys Module — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -84,6 +84,7 @@

    Table of Contents

  • IRC Module
  • Notes Module
  • PBKDF2 Module
  • +
  • Python Module
  • Seen Module
  • Server Module
  • Share Module
  • @@ -119,12 +120,12 @@

    Search

    Last revised: Dec 30, 2017

    -

    Filesys Module

    +

    Filesys Module

    This module provides an area within the bot where users can store and manage files. With this module, the bot is usable as a file server.

    This module requires: transfer

    -

    Config file setup

    +

    Config file setup

    Put this line into your Eggdrop configuration file to load the filesys module:

    loadmodule filesys
    @@ -159,9 +160,9 @@ 

    Config file setup -

    Partyline usage

    +

    Partyline usage

    -

    .files

    +

    .files

    Moves you into the file transfer sub-system, if it has been enabled on this bot. From there you can browse through the files online and use dcc file @@ -169,27 +170,27 @@

    .files

    -

    .cancel <file> [file] …

    +

    .cancel <file> [file] …

    Tells the bot to stop sending a file that is pending (either queued, waiting, or in the process of being transferred).

    -

    .cd <directory>

    +

    .cd <directory>

    Changes your current directory if possible. this works exactly like the unix command.

    -

    .cp <source> <dst>

    +

    .cp <source> <dst>

    Copies a file or group of files from one place to another.

    -

    .desc <file> <description>

    +

    .desc <file> <description>

    Changes the description for a file. if you are a master or file janitor, you can change the description for any file. @@ -201,20 +202,20 @@

    .desc <file> <description> -

    .filestats <user> [clear]

    +

    .filestats <user> [clear]

    Reports on the users upload & download statistics. Optional argument ‘clear’ clears a users upload and download statistics.

    -

    .stats

    +

    .stats

    Clears a users upload & download statistics.

    -

    .get <filename> [nickname]

    +

    .get <filename> [nickname]

    Sends you the file(s) requested, over IRC. you should get a DCC SEND notice on IRC, and have your client accept it. if @@ -231,14 +232,14 @@

    .get <filename> [nickname] -

    .hide <file> [files] …

    +

    .hide <file> [files] …

    Marks a file as hidden, so that normal users can’t see it. Only a master or file janitor using %b’lsa’%b can see hidden files.

    -

    .ln <bot:filepath> <localfile>

    +

    .ln <bot:filepath> <localfile>

    Creates a link to a file on another bot. The filepath has to be complete, like ‘/gifs/uglyman.gif’. If the bot is not @@ -249,7 +250,7 @@

    .ln <bot:filepath> <localfile> -

    .ls [filemask]

    +

    .ls [filemask]

    Displays the files in the current directory. Subdirectories are shown with “<DIR>” next to them, and other files will display @@ -260,7 +261,7 @@

    .ls [filemask] -

    .mkdir <dir> [flags [channel]]

    +

    .mkdir <dir> [flags [channel]]

    Creates a subdirectory from this one, with the given name. If flags are specified, then those flags are required to enter or @@ -270,14 +271,14 @@

    .mkdir <dir> [flags [channel]] -

    .mv <source> <dest>

    +

    .mv <source> <dest>

    Moves a file or group of files from one place to another (it can also be used to rename files).

    -

    .pending

    +

    .pending

    Gives you a listing of every file you’ve requested which is still waiting, queued, or in the process of transferring. @@ -287,31 +288,31 @@

    .pending -

    .pwd

    +

    .pwd

    Tells you what your current directory is.

    -

    .quit

    +

    .quit

    Exits the file system.

    -

    rm <file> [files] …

    +

    rm <file> [files] …

    Erase a file for good.

    -

    .rmdir <dir>

    +

    .rmdir <dir>

    Removes an existing directory, if there are no files in it.

    -

    .share <file> [files] …

    +

    .share <file> [files] …

    Marks a file as shared. This means that other bots can get the file remotely for users on their file systems. By default, @@ -319,7 +320,7 @@

    .share <file> [files] … -

    .optimize

    +

    .optimize

    Cleans up the current directory’s database. If you have a large directory with many files you may want to use this command if @@ -328,19 +329,19 @@

    .optimize -

    .unhide

    +

    .unhide

    Makes a file be not hidden any more.

    -

    .unshare <file> [file] …

    +

    .unshare <file> [file] …

    Removes the shared tag from a file.

    -

    .filesys module

    +

    .filesys module

    This module provides an area within the bot where users can store and manage files. With this module, the bot is usable as a file server.

    @@ -381,9 +382,9 @@

    .filesys module

    diff --git a/doc/html/modules/mod/ident.html b/doc/html/modules/mod/ident.html index 854645660..80ee7add4 100644 --- a/doc/html/modules/mod/ident.html +++ b/doc/html/modules/mod/ident.html @@ -1,17 +1,16 @@ - - + - + Ident Module — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -84,6 +84,7 @@

    Table of Contents

  • IRC Module
  • Notes Module
  • PBKDF2 Module
  • +
  • Python Module
  • Seen Module
  • Server Module
  • Share Module
  • @@ -119,7 +120,7 @@

    Search

    Last revised: June 27, 2019

    -

    Ident Module

    +

    Ident Module

    This module adds Eggdrop support for the externally-provided oident service, or alternatively the ability for Eggdrop to act as its own ident daemon.

    @@ -222,9 +223,9 @@

    Search

    diff --git a/doc/html/modules/mod/irc.html b/doc/html/modules/mod/irc.html index 7900995d7..88cf758c3 100644 --- a/doc/html/modules/mod/irc.html +++ b/doc/html/modules/mod/irc.html @@ -1,17 +1,16 @@ - - + - + IRC Module — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -84,6 +84,7 @@

    Table of Contents

  • IRC Module
  • Notes Module
  • PBKDF2 Module
  • +
  • Python Module
  • Seen Module
  • Server Module
  • Share Module
  • @@ -119,7 +120,7 @@

    Search

    Last revised: August 21, 2004

    -

    IRC Module

    +

    IRC Module

    This module controls the bots interaction on IRC. It allows the bot to join channels, etc. You have to load this if you want your bot to come on irc.

    @@ -292,9 +293,9 @@

    Search

    diff --git a/doc/html/modules/mod/notes.html b/doc/html/modules/mod/notes.html index 55227968f..efe43cd39 100644 --- a/doc/html/modules/mod/notes.html +++ b/doc/html/modules/mod/notes.html @@ -1,17 +1,16 @@ - - + - + Notes Module — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -84,6 +84,7 @@

    Table of Contents

  • IRC Module
  • Notes Module
  • PBKDF2 Module
  • +
  • Python Module
  • Seen Module
  • Server Module
  • Share Module
  • @@ -119,7 +120,7 @@

    Search

    Last revised: January 1, 2002

    -

    Notes Module

    +

    Notes Module

    This module provides support for storing of notes for users from each other. Note sending between currently online users is supported in the core, this is only for storing the notes for later retrieval.

    @@ -179,9 +180,9 @@

    Search

    diff --git a/doc/html/modules/mod/pbkdf2.html b/doc/html/modules/mod/pbkdf2.html index 7ca50bc9d..4e7b21bb7 100644 --- a/doc/html/modules/mod/pbkdf2.html +++ b/doc/html/modules/mod/pbkdf2.html @@ -1,19 +1,18 @@ - - + - + PBKDF2 Module — Eggdrop 1.9.5 documentation - - - - - + + + + + - + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -84,6 +84,7 @@

    Table of Contents

  • IRC Module
  • Notes Module
  • PBKDF2 Module
  • +
  • Python Module
  • Seen Module
  • Server Module
  • Share Module
  • @@ -119,7 +120,7 @@

    Search

    Last revised: October 28, 2020

    -

    PBKDF2 Module

    +

    PBKDF2 Module

    Eggdrop encrypts its userfile, so users can have secure passwords. Eggdrop will not start without an encryption module.

    @@ -168,7 +169,7 @@

    Search

    @@ -178,9 +179,9 @@

    Search

    diff --git a/doc/html/modules/mod/python.html b/doc/html/modules/mod/python.html new file mode 100644 index 000000000..7ed056faa --- /dev/null +++ b/doc/html/modules/mod/python.html @@ -0,0 +1,274 @@ + + + + + + + + Python Module — Eggdrop 1.9.5 documentation + + + + + + + + + + + +
    +
    + +
    + +
    +
    +
    + +

    Last revised: November 03, 2023

    +
    +

    Python Module

    +

    This module adds a Python interpreter to Eggdrop, allowing you to run Python scripts.

    +
    +

    Loading Python

    +

    Put this line into your Eggdrop configuration file to load the python module:

    +
    loadmodule python
    +
    +
    +

    To load a python script from your config file, place the .py file in the scripts/ folder and add the following line to your config:

    +
    pysource scripts/myscript.py
    +
    +
    +
    +
    +

    Partyline Commands

    +
    +

    python <expression>

    +

    You can run a python command from the partyline with the .python command, such as:

    +
    .python 1 + 1
    +Python: 2
    +.python from eggdrop.tcl import putmsg; putmsg('#chan', 'Hello world!')
    +Python: None
    +
    +
    +
    +
    +

    .binds python

    +

    The python module extends the core .binds partyline command by adding a python mask. This command will list all binds for python scripts.

    +
    +
    +
    +

    Tcl Commands

    +
    +

    pysource <path/to/file>

    +

    The pysource command is analgous to the Tcl source command, except that it loads a Python script into Eggdrop instead of a Tcl script.

    +
    +
    +
    +

    Eggdrop Python Commands

    +

    The Python module is built to use the existing core Tcl commands integrated into Eggdrop via the eggdrop.tcl module. To call an existing Tcl command from Python, you can either load the entire catalog by running import eggdrop.tcl, or be more specific by from eggdrop.tcl import putserv, putlog, chanlist, etc.

    +

    Arguments to the Tcl functions are automatically converted as follows:

    +
      +
    • None is converted to an empty Tcl object (the empty string, "")

    • +
    • List and Tuple is converted to a Tcl list

    • +
    • Dict is converted to a Tcl dictionary

    • +
    • Everything else is converted to a string using the str() method

    • +
    +

    Return values from Tcl functions must be manually converted:

    +
      +
    • "" the empty string is automatically converted to None

    • +
    • everything else is returned as string

    • +
    • Tcl list as string can be converted to a Python List using parse_tcl_list

    • +
    • Tcl dictionary as string can be converted to a Python Dict using parse_tcl_list

    • +
    +

    Additionally, a few extra python commands have been created for use without these conversions:

    +
    +

    bind <arguments>

    +

    The python version of the bind command is used to create a bind that triggers a python function. The python bind takes the same arguments as the Tcl binds, but here each argument is passed individually. For example, a bind that would look like bind pub * !foo myproc in Tcl is written as bind("pub", "*", "!foo", myproc). For more information on Eggsrop bind argument syntax please see Bind Types. The eggdrop.tcl.bind command should not be used as it will attempt to call a Tcl proc.

    +
    +
    +

    parse_tcl_list <string>

    +

    When a python script calls a Tcl command that returns a list via the eggdrop.tcl module, the return value will be a Tcl-formatted list- also simply known as a string. The parse_tcl_list command will convert the Tcl-formatted list into a Python list, which can then freely be used within the Python script.

    +
    +
    +

    parse_tcl_dict <string>

    +

    When a python script calls a Tcl command that returns a dict via the eggdrop.tcl module, the return value will be a Tcl-formatted dict- also simply known as a string. The parse_tcl_dict command will c +onvert the Tcl-formatted dict into a Python list, which can then freely be used within the Python script.

    +
    +
    +
    +

    Config variables

    +

    There are also some variables you can set in your config file:

    +
    +
    +
    set allow-resync 0

    When two bots get disconnected, this setting allows them to create a +resync buffer which saves all changes done to the userfile during +the disconnect. When they reconnect, they will not have to transfer +the complete user file, but, instead, just send the resync buffer.

    +
    +
    +
    +
    +
    +

    Writing an Eggdrop Python script

    +

    This is how to write a python script for Eggdrop.

    +

    You can view examples of Python scripts in the exampleScripts folder included with this module.

    +
    +
    bestfriend.py

    This example script demonstrates how to use the parse_tcl_list() python command to convert a list returned by a Tcl command into a list that is usable by Python.

    +
    +
    greet.py

    This is a very basic script that demonstrates how a Python script with binds can be run by Eggdrop.

    +
    +
    imdb.py

    This script shows how to use an existing third-party module to extend a Python script, in this case retrieving information from imdb.com.

    +
    +
    listtls.py

    This script demonstrates how to use parse-tcl_list() and parse_tcl_dict() to convert a list of dicts provided by Tcl into something that is usuable by Python.

    +
    +
    urltitle.py

    This script shows how to use an existing third-party module to extend a Python script, in this case using an http parser to collect title information from a provided web page.

    +
    +
    +
    +

    Header section

    +

    An Eggdrop python script requires you to import X Y and Z, in this format.

    +
    +
    +

    Code Section

    +

    Normal python code works here. To run a command from the Eggdrop Tcl library, use this format.

    +

    Use this format all over.

    +
    +
    +
    +

    Writing a module for use with Eggdrop

    +

    This is how you import a module for use with an egg python script.

    +

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/doc/html/modules/mod/seen.html b/doc/html/modules/mod/seen.html index da92f2fa2..b2ccae2aa 100644 --- a/doc/html/modules/mod/seen.html +++ b/doc/html/modules/mod/seen.html @@ -1,27 +1,26 @@ - - + - + Seen Module — Eggdrop 1.9.5 documentation - - - - - + + + + + - +
    -
    set copy-to-tmp 1

    Enable this setting if you want to copy files to a temporary location -before sending or receiving them. This might be useful for file -stability, but if your directories are NFS mounted, it’s a pain. -Setting this to 1 is not advised for big files or if you’re low on -disk space.

    -
    set xfer-timeout 30

    Set here the time (in seconds) to wait before an inactive transfer times out.

    @@ -183,9 +178,9 @@

    Search

    diff --git a/doc/html/modules/mod/twitch.html b/doc/html/modules/mod/twitch.html index c28643a25..216560543 100644 --- a/doc/html/modules/mod/twitch.html +++ b/doc/html/modules/mod/twitch.html @@ -1,17 +1,16 @@ - - + - + Twitch Module — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -84,6 +84,7 @@

    Table of Contents

  • IRC Module
  • Notes Module
  • PBKDF2 Module
  • +
  • Python Module
  • Seen Module
  • Server Module
  • Share Module
  • @@ -119,7 +120,7 @@

    Search

    Last revised: April 20, 2020

    -

    Twitch Module

    +

    Twitch Module

    This module attempts to provide connectivity with the Twitch gaming platform. While Twitch provides an IRC gateway to connect with it’s streaming service, it does not claim to (and certainly does not) follow the IRC RFC in any meaningful way. The intent of this module is not to provide the full spectrum of management functions typically associated with Eggdrop; instead it focuses around the following key functions:

    • Logging of general and Twitch-specific events (raids, blocks, bit donations)

    • @@ -133,7 +134,7 @@

      Search

    and set net-type “Twitch” in your config file.

    -

    Limitations

    +

    Limitations

    There are a few things you should know about how Twitch provides service through the IRC gateway that affects how well Eggdrop can function: * Twitch does not broadcast JOINs or PARTs for channels over 1,000 users. This renders tracking users on a channel unreliable. * Twitch does not broadcast MODE changes for moderator status. This (mostly) renders tracking the status of users infeasible. (See Tcl below section for workaround) @@ -142,7 +143,7 @@

    Limitations -

    Tcl API

    +

    Tcl API

    That last section was a little bit of a downer, but don’t worry, we added a TON of functionality to the Tcl API. This module adds binds for the following Twitch events:

    diff --git a/doc/html/modules/mod/uptime.html b/doc/html/modules/mod/uptime.html index 971d5676d..b93153160 100644 --- a/doc/html/modules/mod/uptime.html +++ b/doc/html/modules/mod/uptime.html @@ -1,17 +1,16 @@ - - + - + Uptime Module — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -84,6 +84,7 @@

    Table of Contents

  • IRC Module
  • Notes Module
  • PBKDF2 Module
  • +
  • Python Module
  • Seen Module
  • Server Module
  • Share Module
  • @@ -119,7 +120,7 @@

    Search

    Last revised: January 1, 2002

    -

    Uptime Module

    +

    Uptime Module

    This module reports uptime statistics to http://uptime.eggheads.org. Go look and see what your uptime is! It takes about 9 hours to show up, so if your bot isn’t listed, try again later.

    @@ -164,9 +165,9 @@

    Search

    diff --git a/doc/html/modules/mod/woobie.html b/doc/html/modules/mod/woobie.html index 53d098b1a..45607c452 100644 --- a/doc/html/modules/mod/woobie.html +++ b/doc/html/modules/mod/woobie.html @@ -1,17 +1,16 @@ - - + - + Woobie Module — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -84,6 +84,7 @@

    Table of Contents

  • IRC Module
  • Notes Module
  • PBKDF2 Module
  • +
  • Python Module
  • Seen Module
  • Server Module
  • Share Module
  • @@ -119,7 +120,7 @@

    Search

    Last revised: December 31, 2001

    -

    Woobie Module

    +

    Woobie Module

    This is for demonstrative purposes only. If you are looking for starting point in writing modules, woobie is the right thing.

    This module requires: none

    @@ -157,9 +158,9 @@

    Search

    diff --git a/doc/html/modules/writing.html b/doc/html/modules/writing.html index 7789198fa..61a994db3 100644 --- a/doc/html/modules/writing.html +++ b/doc/html/modules/writing.html @@ -1,17 +1,16 @@ - - + - + How to Write an Eggdrop Module — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -101,7 +101,7 @@

    Search

    -

    How to Write an Eggdrop Module

    +

    How to Write an Eggdrop Module

    Note: This is for a simple module of 1 source file.

      @@ -143,7 +143,7 @@

      Search

    -

    Module requirements

    +

    Module requirements

    In most modules, all functions/variables (except global and MODULE_start) should be static. This will drastically reduce the size of modules on decent systems.

    @@ -152,7 +152,7 @@

    Module requirements -

    MODULE_start

    +

    MODULE_start

    char *MODULE_start(Function *func_table)
     
     This function is called when the module is first loaded. There are
    @@ -189,7 +189,7 @@ 

    MODULE_start -

    MODULE_table

    +

    MODULE_table

    static Function *MODULE_table = {
            MODULE_start,
            MODULE_close,
    @@ -206,7 +206,7 @@ 

    MODULE_table -

    MODULE_close ()

    +

    MODULE_close ()

    static char *MODULE_close ()
     
     This is called when the module is unloaded. Apart from tidying any
    @@ -226,7 +226,7 @@ 

    MODULE_close () -

    MODULE_expmem

    +

    MODULE_expmem

    static int MODULE_expmem ()
     
     This should tally all memory you allocate/deallocate within the module
    @@ -236,7 +236,7 @@ 

    MODULE_expmem -

    MODULE_report

    +

    MODULE_report

    static void MODULE_report (int idx)
     
     This should provide a relatively short report of the module's status
    @@ -247,7 +247,7 @@ 

    MODULE_report -

    Additional functions

    +

    Additional functions

    void *nmalloc(int j);
     
     This allocates j bytes of memory.
    @@ -387,7 +387,7 @@ 

    Additional functions

    -

    What to do with a module?

    +

    What to do with a module?

    If you have written a module and feel that you wish to share it with the rest of the Eggdrop community, find us in #eggdrop on Libera. Make sure you @@ -423,9 +423,9 @@

    What to do with a module?

    diff --git a/doc/html/objects.inv b/doc/html/objects.inv index e31c384a3c6e9a8b95a981749c05e3ee6c600b15..f7c8aaf3d6de66398df425ff8a70e5e7ad0b4451 100644 GIT binary patch delta 1452 zcmV;d1ylO-3X}|xdViHzO>f&c5WV|X5NM8djqL(^SOf*~i3ZygLG7Z4q6jF8wuwlj zKvHr1?|1kmk`m=4mqzBB_e4^hH^bse^m>KOzewr&-&zo~{0reY{AsV-23^>Qo87LK zqFXq)p*!46S$5d5E`?-#heBY#-7c_F5Nt>du4rRut*HBks(%&yU0K+YKb)Zp8+&iz zMMag~N=AA8sXJN$O=UagcSpS!+zA+bd4`sYit+kUA3Lh@7xxNgx6-6p64ADp*UAx1 z{L;l=!Xw(4$3@kM!8r2}O55u23a3aFxbQv+{p)l?)2IVt<&t4e1`@B!9(qOG^q4aRNVXF0Suy22$Vc zB(9BIfj5AT`g4dKy&8rdsT;~Sy|jc6k+ck?(yHVM9|Care6W%J<26ia4cYnL@7H1t znXR>aoBy1lNH_-vs2lnPoo^ewQ(w?;?-73%@Vdeo?~cm=xJ`9)_oqEfm2uMaHLcT+ zGR9K6LVp9}!1R9D#K;+)& zn!M1I9DPnBbNq?lmz;f0DRcgb@0T2YRw=Cj6aOz*{k%}D1mij|cKun6P!Y0vFtYzS za;OYxT_}`*IeJ^ke5P`qZ_uD%BTE{4EN9QM z1-*ieD+p+bx!TT8Bj8SE6QWB>;E`n3G#u(xTx3C`?=)*?*W=JoHEm=;;~+%EW;Gn@ zG=F}%$dSfDGCiu?BgnD8iUZOD{em%S`jFh|7x9o6Yi&H{Q2DZho*eEXGdbQs%@26j z>za_a7F-{F&gvH^wVJ+YsI*Io4}TU(L4BptX4&BjZjxK&B_#dA*(kph#gdHf8*VJ* zg2f;3&cxCaZy7QW-jU{Dl6Nz_A@eLV&40a^Z)NI`afX@Z9PIz2xnjNXHfBa#_$_om z=pL&lwa9X{`2H+gVG84X)xCz>DRc}_C#2GfNY-Ulpcvq@#pgwG)YlfCsA}4&Q=$eR z3Uv#g{?-hmwHZ&u+``I24jWAjU1G(^I1wXBQQdcCJqv{crmfu1ZfN*o95liwRDS~M zdo_+L+k9`ntwELaFwY|rJjzDLEPu`DndVz&u9-Mxk(+oWaC5ipWuuvf?R#%a?@lWw zMD$!|pEyT+gXw-DIF#hc>;sES_wlfE?ueDdBAEBS7ZLC}73Kv2GwOR(c=`z5^bA(5 z%%!nLH!rkJ1cc^P7bNU>_V&-MTp2taU9L(e`VtQDGL+WQmlJP z3#$l7u5s%}J)L#W|4gZ7)Hh-e2JgF0NF6AWJpWzbnBk#&GZ7i9!%`pNP!|?DK)%TD zDVQ`2nO&j-ebgc(!@iuD$MnYPBW%%QaC<7S2Q1_rk;l$lu~uKP+Q$!++JEd+W@5s_ zW^agdDuVeB5leeNPwb)87N%l{eVb<^Os<(as1^s- z)C9}7meDh)oMzH+wFDCaA0-2Y*d7**GieZkp0|j;|9ea-(?lcf5kL4JOHX*EW&9ub GVIB!j!OfNc delta 1290 zcmV+l1@-!r4D$+*dVh^qO>f&c5WV|X5J->p8tnpmSQG{Fi3ZygL7k$9Vo}f(Z3~e} zfu!R2-|z67lt#{85^LVPCz2XI4(Ub?W<~8^qD}L6BNn*qcK~E?vg$Zr3Q; zFFf4w9qpzp7xt_xsamlkF>%;#7gTFVwxo`3cxPz`*$f@mD}VUEas#k=2MZBL*;XZoaJ}W!nONIztNyk$M;M1AWIuD;oY<^JCN($G!cz zXd5of{A(N>Uw?A%a>FaKeyF}eI@IZVLIsgM7evcJF;4EkUz3eAz}1F!-75UARVpYB z)jil+j$0t+DNdUM#}qu`1-{>2-aOnU($Mb|ZLA!^OQ5IzNV%g|L+Cg6p?dwWDO_aI zGLo=asWW>M!1N_xA;Wh#Py^e>7*!Jo4Z17Cx+QFh1Ai4wDwRz51lz0W_-FEI+tHo= zOn!w8`0oPVhZInMT1LPxjvqrPr8w4Bux@C0Q!efpE9sgf#<4Z~v>2H)s#vs%^A3QOqvqG%7otm?>tPb4r!1PD~ZE z&sn9?UVkU%iumZfP`25z$&M{`RwLSNWws-4og+uvEln5k*ExD=zhm>A_~)ERHrLu( zN1J|@9{iwkg8~=Q@YxAC(9^%UJVc=1JU82qa|#~y5|3B^+}wS{G&HyNk1JTr^Vc>D zWvdsi=J^(l3N91V*i$uIhYk!1E)NkfiVD4*AAd%~z06b0#+1O{*zAV)Xi)K)h{n*H z_AomikH(YBWg;3!DL3t`hDW`|PoFu`II7l+PR|kK*qRgT+fm#=5afZEdxILcCUW)pR)0`?c>VbVMmZ8HR>5eZ_>7!#z#SbGa z%YVNp`59g+ddDowK9@R9O~r1RWw}=+j&iFa2l}|o&0yfN0f!`5qtZq*)%KO~p$VbL zLOB%`vUc!9)$m@Q6Sa6cn-1{t?rfN>ZM+ck6T^i(HX0bYqPk_{`pqQG&Cug|4vNKL zoZOE-^*A}tboz`+L_>Qb=*IPpPhZ!d%6|qJ=ZQ#>WwX)XUo%^c{g##46b6HG3yT46 zZ8E;=q>RZynCeT_NNA1x6M@=d&vrU(o`KKbP=Tn}Xy}UI*L&ESFJLg*UN;(Y`^pc! z(NRDe!3`qe;_;U3a_oliRoIZPt*`?MB23l?NRHOs;Z8RMHj}{;LUMdqQioN`aaBMjB3pS%-^;DS?)D$w&1cjq%&%xgyWLJqN z`siRQ!of}L&+@JlGMrVn(61xxgvGLF>eSn&e)Wawef~h@HD@X_xdf%feq!DzEE1*o zt6Az{gUAFVtO7jQCXlR$jW#XpRDT#&66vsE#0K1M+IsPgYS}YJaq+NOninb<+>xHz zKE20n+~ph7pC*k~!Eb+TF&u(_oQ#znOCSz#N+CmW;n1A847=Cv?A>#5Y`cb0)#(3w zjeT$x2bUQz54fL!LT+kM-zwS~px2E}=vsak2g5|8>})Q=!!i)wXmtJqGz0J_aV39w AqW}N^ diff --git a/doc/html/search.html b/doc/html/search.html index 8eb843f1b..537f62159 100644 --- a/doc/html/search.html +++ b/doc/html/search.html @@ -1,17 +1,16 @@ - - + Search — Eggdrop 1.9.5 documentation - - + + - - - + + + @@ -44,6 +43,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -147,9 +147,9 @@

    Search

    diff --git a/doc/html/searchindex.js b/doc/html/searchindex.js index c047bfa80..40c05d72c 100644 --- a/doc/html/searchindex.js +++ b/doc/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["about/about", "about/legal", "index", "install/install", "install/readme", "install/upgrading", "modules/included", "modules/index", "modules/internals", "modules/mod/assoc", "modules/mod/blowfish", "modules/mod/channels", "modules/mod/compress", "modules/mod/console", "modules/mod/ctcp", "modules/mod/dns", "modules/mod/filesys", "modules/mod/ident", "modules/mod/irc", "modules/mod/notes", "modules/mod/pbkdf2", "modules/mod/seen", "modules/mod/server", "modules/mod/share", "modules/mod/transfer", "modules/mod/twitch", "modules/mod/uptime", "modules/mod/woobie", "modules/writing", "tutorials/firstscript", "tutorials/firststeps", "tutorials/module", "tutorials/setup", "tutorials/tlssetup", "using/accounts", "using/bans", "using/botnet", "using/core", "using/features", "using/ipv6", "using/ircv3", "using/partyline", "using/patch", "using/pbkdf2info", "using/tcl-commands", "using/text-sub", "using/tls", "using/tricks", "using/twitch-tcl-commands", "using/twitchinfo", "using/users"], "filenames": ["about/about.rst", "about/legal.rst", "index.rst", "install/install.rst", "install/readme.rst", "install/upgrading.rst", "modules/included.rst", "modules/index.rst", "modules/internals.rst", "modules/mod/assoc.rst", "modules/mod/blowfish.rst", "modules/mod/channels.rst", "modules/mod/compress.rst", "modules/mod/console.rst", "modules/mod/ctcp.rst", "modules/mod/dns.rst", "modules/mod/filesys.rst", "modules/mod/ident.rst", "modules/mod/irc.rst", "modules/mod/notes.rst", "modules/mod/pbkdf2.rst", "modules/mod/seen.rst", "modules/mod/server.rst", "modules/mod/share.rst", "modules/mod/transfer.rst", "modules/mod/twitch.rst", "modules/mod/uptime.rst", "modules/mod/woobie.rst", "modules/writing.rst", "tutorials/firstscript.rst", "tutorials/firststeps.rst", "tutorials/module.rst", "tutorials/setup.rst", "tutorials/tlssetup.rst", "using/accounts.rst", "using/bans.rst", "using/botnet.rst", "using/core.rst", "using/features.rst", "using/ipv6.rst", "using/ircv3.rst", "using/partyline.rst", "using/patch.rst", "using/pbkdf2info.rst", "using/tcl-commands.rst", "using/text-sub.rst", "using/tls.rst", "using/tricks.rst", "using/twitch-tcl-commands.rst", "using/twitchinfo.rst", "using/users.rst"], "titles": ["About Eggdrop", "Boring legal stuff", "Eggdrop, an open source IRC bot", "Installing Eggdrop", "README", "Upgrading Eggdrop", "Modules included with Eggdrop", "Eggdrop Module Information", "Eggdrop Bind Internals", "Assoc Module", "Blowfish Module", "Channels Module", "Compress Module", "Console Module", "CTCP Module", "DNS Module", "Filesys Module", "Ident Module", "IRC Module", "Notes Module", "PBKDF2 Module", "Seen Module", "Server Module", "Share Module", "Transfer Module", "Twitch Module", "Uptime Module", "Woobie Module", "How to Write an Eggdrop Module", "Writing an Eggdrop Script", "Common First Steps", "Writing a Basic Eggdrop Module", "Setting Up Eggdrop", "Enabling TLS Security on Eggdrop", "Account tracking in Eggdrop", "Bans, Invites, and Exempts", "Botnet Sharing and Linking", "Eggdrop Core Settings", "Eggdrop Features", "IPv6 support", "IRCv3 support", "The Party Line", "Patching Eggdrop", "Encryption/Hashing", "Eggdrop Tcl Commands", "Textfile Substitutions", "TLS support", "Advanced Tips", "Eggdrop Twitch Tcl Commands", "Twitch", "Users and Flags"], "terms": {"last": [0, 5, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 32, 35, 37, 39, 40, 41, 44, 45, 46, 47, 48, 50], "revis": [0, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 35, 37, 39, 40, 41, 44, 45, 46, 47, 48, 50], "juli": 0, "27": [0, 12, 17, 23, 40], "2010": [0, 11, 15, 22, 37, 39, 40, 45, 46], "wa": [0, 2, 8, 20, 25, 29, 31, 32, 36, 40, 43, 44, 46, 48, 49], "creat": [0, 3, 4, 8, 16, 17, 23, 28, 29, 30, 31, 32, 35, 37, 42, 43, 44, 46, 47, 49], "around": [0, 4, 25, 33, 39, 44, 49], "decemb": [0, 27, 38, 41], "1993": [0, 38], "help": [0, 3, 8, 14, 22, 28, 29, 30, 31, 32, 35, 36, 37, 39, 41, 44, 45, 50], "stop": [0, 11, 16, 18, 28, 30, 44, 48], "incess": 0, "war": 0, "gayteen": 0, "It": [0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 16, 18, 22, 26, 28, 30, 32, 34, 36, 37, 38, 39, 41, 44, 48, 49], "spawn": 0, "from": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 16, 17, 18, 19, 20, 22, 23, 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 41, 43, 45, 46, 47, 48, 49, 50], "anoth": [0, 8, 11, 16, 18, 19, 22, 23, 28, 32, 36, 37, 44, 45, 48], "bot": [0, 1, 3, 4, 5, 6, 7, 8, 11, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 26, 28, 29, 30, 32, 33, 35, 37, 38, 39, 40, 41, 43, 45, 46, 47, 48, 49, 50], "process": [0, 3, 4, 5, 12, 16, 17, 24, 30, 32, 36, 43, 44, 46], "being": [0, 4, 11, 16, 18, 22, 33, 34, 38, 39, 44, 48], "written": [0, 28, 31, 32, 44, 49], "time": [0, 3, 4, 11, 15, 16, 17, 18, 20, 23, 24, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 43, 45, 46, 47, 49], "call": [0, 3, 4, 8, 28, 29, 30, 36, 37, 44, 48], "unrest": 0, "The": [0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 14, 15, 16, 17, 20, 22, 23, 24, 25, 26, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 43, 44, 46, 47, 48, 49, 50], "purpos": [0, 1, 6, 8, 26, 27, 31, 36, 37, 44], "answer": [0, 7, 14, 17, 22, 29], "request": [0, 4, 5, 7, 11, 14, 16, 18, 22, 32, 34, 35, 37, 39, 40, 42, 44, 46, 47, 49], "other": [0, 1, 4, 6, 8, 10, 11, 15, 16, 17, 18, 19, 20, 22, 23, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 49, 50], "first": [0, 2, 4, 5, 8, 16, 20, 22, 28, 29, 31, 32, 33, 36, 37, 43, 44, 46, 47, 48], "public": [0, 1, 4, 29, 30, 31, 33, 37, 44, 46, 47, 50], "releas": [0, 1, 32, 43, 44], "version": [0, 1, 2, 3, 4, 5, 8, 14, 18, 26, 28, 29, 31, 39, 40, 45, 46, 48], "0": [0, 4, 8, 11, 13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 28, 29, 30, 31, 32, 36, 37, 39, 40, 41, 43, 44, 46, 47, 48], "6": [0, 5, 8, 11, 18, 30, 32, 37, 39, 44], "sinc": [0, 3, 5, 18, 32, 36, 37, 38, 39, 44, 46, 47], "ha": [0, 1, 2, 4, 5, 8, 11, 15, 16, 18, 22, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 43, 44, 46, 48, 49, 50], "grown": 0, "what": [0, 1, 2, 5, 6, 8, 11, 16, 18, 22, 26, 29, 30, 31, 32, 37, 40, 41, 43, 44], "you": [0, 1, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], "have": [0, 1, 3, 4, 5, 6, 8, 10, 11, 13, 16, 18, 19, 20, 22, 23, 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 43, 44, 46, 47, 48, 49, 50], "befor": [0, 4, 8, 11, 15, 17, 18, 19, 22, 23, 24, 28, 30, 31, 32, 34, 36, 37, 44, 49], "i": [0, 1, 2, 3, 5, 6, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], "world": [0, 2, 4, 33, 37], "": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 13, 16, 17, 18, 21, 22, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 36, 37, 39, 41, 43, 45, 46, 47, 48, 49, 50], "most": [0, 2, 4, 5, 17, 18, 22, 28, 29, 30, 32, 33, 37, 38, 41, 44, 48, 49], "popular": [0, 4, 5, 32, 37], "internet": [0, 4, 44, 46], "relai": [0, 4, 36, 37], "chat": [0, 2, 4, 6, 8, 14, 22, 30, 32, 36, 37, 38, 41, 44, 46, 48, 49], "irc": [0, 4, 6, 8, 16, 17, 22, 25, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 44, 45, 47, 48, 50], "freeli": [0, 4], "distribut": [0, 1, 4, 31, 32], "under": [0, 4, 31, 32, 38, 44], "gnu": [0, 1, 3, 4, 8, 12, 31], "gener": [0, 1, 3, 4, 8, 20, 25, 29, 30, 31, 32, 40, 43, 44, 46, 49], "licens": [0, 1, 4, 31], "gpl": [0, 4, 31], "featur": [0, 2, 4, 7, 11, 18, 22, 23, 30, 32, 34, 37, 39, 40, 42, 44, 46, 49, 50], "rich": [0, 4, 32], "program": [0, 2, 4, 17, 30, 31, 32], "design": [0, 2, 4, 20, 40, 48], "easili": [0, 1, 2, 4, 29, 38, 44], "us": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 22, 23, 24, 28, 29, 30, 31, 32, 33, 35, 37, 38, 39, 41, 43, 44, 45, 46, 47, 48, 49, 50], "expand": [0, 2, 4], "upon": [0, 4, 48, 50], "both": [0, 4, 11, 22, 24, 33, 34, 36, 39, 43, 44, 46], "novic": [0, 4], "advanc": [0, 2, 4, 6, 21, 29, 38], "user": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 28, 29, 31, 32, 33, 34, 35, 37, 38, 39, 41, 42, 43, 45, 46, 47, 48, 49], "varieti": [0, 4], "hardwar": [0, 4], "softwar": [0, 1, 2, 4, 31], "platform": [0, 4, 25, 44, 49], "an": [0, 3, 4, 5, 6, 7, 8, 10, 11, 15, 16, 17, 18, 20, 22, 24, 25, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49], "sit": [0, 4, 11, 37, 43], "channel": [0, 2, 4, 5, 6, 8, 9, 13, 18, 21, 22, 23, 25, 28, 29, 32, 34, 35, 36, 37, 38, 41, 45, 47, 49, 50], "perform": [0, 3, 4, 5, 8, 11, 31, 32, 44, 50], "autom": [0, 2, 4], "task": [0, 2, 4, 8, 36], "while": [0, 4, 5, 11, 17, 25, 32, 34, 35, 37, 41, 43, 44, 49], "look": [0, 4, 5, 6, 8, 11, 21, 26, 27, 29, 30, 31, 33, 34, 37, 38, 43, 44, 46, 49], "just": [0, 3, 4, 5, 6, 8, 15, 16, 18, 20, 23, 28, 30, 31, 32, 34, 36, 37, 41, 43, 44, 47, 48, 49], "like": [0, 1, 4, 6, 8, 10, 11, 14, 16, 18, 20, 28, 29, 30, 31, 32, 37, 38, 39, 41, 42, 43, 44, 46, 48, 49, 50], "normal": [0, 4, 6, 14, 15, 16, 17, 22, 28, 29, 33, 37, 44, 46, 47, 48, 49], "some": [0, 4, 5, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 28, 31, 32, 34, 35, 36, 37, 38, 39, 40, 44, 46, 47, 49, 50], "function": [0, 1, 2, 4, 6, 7, 8, 20, 25, 31, 32, 36, 37, 39, 43, 44, 47, 48], "includ": [0, 2, 3, 4, 7, 8, 18, 26, 28, 31, 32, 33, 35, 37, 38, 39, 43, 44, 46, 48, 49], "protect": [0, 2, 3, 4, 11, 20, 22, 30, 32, 35, 37, 43, 44, 46, 50], "abus": [0, 2, 4], "allow": [0, 3, 4, 5, 6, 7, 11, 12, 16, 17, 18, 19, 20, 22, 23, 24, 25, 28, 29, 30, 31, 32, 34, 36, 37, 38, 43, 44, 46, 47, 49], "privileg": [0, 4, 17, 50], "gain": [0, 4, 43, 50], "op": [0, 2, 4, 11, 18, 25, 34, 36, 38, 43, 44, 49, 50], "voic": [0, 2, 4, 11, 30, 44, 50], "statu": [0, 2, 4, 11, 25, 28, 31, 33, 37, 47, 48, 49], "log": [0, 2, 4, 11, 20, 25, 28, 31, 32, 34, 42, 43, 44, 49], "event": [0, 4, 25, 28, 31, 34, 36, 37, 48, 49], "provid": [0, 2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 28, 30, 31, 32, 37, 39, 40, 42, 44, 46, 48, 49], "inform": [0, 2, 3, 4, 5, 6, 8, 11, 16, 26, 28, 29, 30, 31, 32, 34, 36, 37, 39, 40, 44, 46], "host": [0, 2, 4, 11, 17, 22, 25, 29, 35, 36, 37, 46, 48, 50], "game": [0, 2, 4, 25, 49], "etc": [0, 2, 4, 8, 11, 18, 25, 28, 32, 34, 36, 37, 38, 44, 47, 50], "One": [0, 4, 29, 34, 44], "make": [0, 2, 3, 4, 5, 6, 7, 11, 14, 16, 20, 22, 23, 25, 28, 29, 30, 32, 33, 37, 39, 40, 42, 44, 46, 47, 49], "stand": [0, 4, 32], "out": [0, 3, 4, 8, 24, 26, 29, 30, 31, 32, 36, 37, 41, 43, 44, 46], "modul": [0, 4, 8, 32, 34, 36, 38, 43, 49], "tcl": [0, 1, 2, 3, 4, 6, 11, 12, 22, 28, 29, 32, 35, 37, 38, 39, 46, 47, 49], "script": [0, 2, 3, 4, 7, 8, 11, 22, 30, 31, 32, 35, 38, 39, 44, 47, 48, 49, 50], "support": [0, 2, 3, 4, 5, 6, 9, 11, 12, 15, 17, 18, 19, 22, 23, 24, 30, 32, 33, 35, 37, 38, 44, 47, 49], "With": [0, 4, 6, 16, 31, 36, 37, 43, 44, 46], "can": [0, 3, 4, 5, 6, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], "almost": [0, 4, 32, 35, 50], "ani": [0, 1, 2, 3, 4, 5, 7, 13, 16, 17, 18, 19, 22, 23, 25, 28, 29, 30, 31, 32, 35, 37, 38, 41, 43, 44, 46, 48, 49, 50], "want": [0, 3, 4, 6, 8, 11, 13, 15, 16, 18, 19, 22, 24, 28, 29, 30, 31, 32, 36, 37, 39, 44, 46, 47], "thei": [0, 3, 4, 5, 7, 8, 11, 13, 14, 18, 19, 22, 23, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 43, 44, 46, 48], "do": [0, 4, 8, 11, 13, 16, 17, 18, 20, 22, 26, 29, 30, 31, 32, 34, 36, 37, 38, 44, 45, 47, 48, 49], "anyth": [0, 4, 16, 29, 30, 31, 32, 36, 37, 41, 44, 48], "prevent": [0, 4, 11, 18, 19, 25, 30, 32, 36, 39, 44, 49], "flood": [0, 4, 11, 14, 19, 22, 36, 37, 38, 44, 50], "greet": [0, 2, 4, 11, 29, 34], "ban": [0, 2, 4, 11, 18, 25, 36, 37, 38, 49, 50], "advertis": [0, 4, 44], "also": [0, 2, 3, 4, 7, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 28, 29, 30, 31, 32, 35, 36, 37, 38, 41, 43, 44, 45, 46, 47, 48, 49, 50], "link": [0, 2, 3, 4, 5, 6, 7, 16, 23, 24, 28, 31, 37, 38, 40, 43, 46, 47], "multipl": [0, 2, 4, 8, 17, 29, 31, 32, 36, 37, 38, 44, 48], "togeth": [0, 2, 4, 22, 29, 36, 37, 38, 40, 44], "form": [0, 4, 28, 29, 44, 45], "botnet": [0, 2, 3, 4, 6, 9, 11, 13, 16, 22, 26, 32, 38, 39, 41, 43, 44, 47, 50], "thi": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 47, 48, 49, 50], "each": [0, 4, 6, 11, 16, 19, 24, 29, 30, 32, 34, 36, 37, 38, 41, 44, 47, 48, 50], "secur": [0, 2, 4, 6, 10, 20, 30, 32, 37, 38, 43, 44], "control": [0, 2, 4, 18, 22, 29, 30, 36, 37, 38, 46, 49, 50], "effici": [0, 4, 32, 36, 37, 38], "even": [0, 4, 7, 16, 18, 28, 31, 32, 35, 36, 37, 38, 41, 44, 49], "across": [0, 4, 36, 40, 42, 44, 47], "network": [0, 2, 4, 18, 22, 37, 44, 45], "share": [0, 2, 4, 6, 11, 12, 24, 28, 37, 38, 44], "list": [0, 4, 6, 8, 11, 15, 16, 20, 22, 23, 25, 26, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 40, 41, 46, 48, 49], "exempt": [0, 1, 2, 4, 11, 18, 25, 36, 38, 49, 50], "invit": [0, 2, 4, 11, 18, 25, 36, 38, 40, 49], "ignor": [0, 4, 8, 14, 22, 23, 29, 36, 37, 38, 44, 48], "userfil": [0, 2, 4, 5, 6, 10, 11, 12, 20, 23, 24, 28, 30, 32, 36, 37, 43, 44, 47], "enabl": [0, 2, 4, 7, 11, 13, 16, 18, 22, 24, 28, 29, 30, 32, 36, 37, 38, 39, 40, 46, 47, 49], "same": [0, 3, 4, 5, 7, 8, 11, 12, 17, 18, 28, 29, 32, 34, 36, 37, 40, 43, 44, 45, 46, 47, 48], "access": [0, 4, 17, 22, 28, 29, 30, 32, 38, 41, 43, 44, 46, 48, 49, 50], "everi": [0, 3, 4, 11, 16, 18, 22, 24, 28, 29, 30, 34, 35, 37, 39, 43, 44, 50], "your": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 39, 41, 42, 43, 44, 46, 49], "see": [0, 2, 3, 4, 5, 6, 8, 11, 16, 18, 22, 25, 26, 28, 29, 30, 31, 32, 33, 34, 36, 37, 39, 41, 42, 43, 44, 45, 48], "doc": [0, 3, 4, 5, 6, 22, 29, 31, 33, 37, 41, 44, 48, 49], "set": [0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 28, 29, 33, 34, 35, 36, 38, 40, 41, 43, 45, 47, 48, 49, 50], "up": [0, 2, 3, 4, 5, 6, 16, 22, 26, 28, 29, 33, 34, 36, 37, 41, 43, 44, 49], "alwai": [0, 3, 4, 11, 32, 34, 35, 44], "improv": [0, 4], "adjust": [0, 4, 18], "becaus": [0, 4, 8, 17, 22, 28, 29, 37, 44, 47, 48, 49], "ar": [0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 49, 50], "bug": [0, 3, 4, 29, 32, 42], "fix": [0, 3, 4, 28, 37, 44], "ad": [0, 2, 3, 4, 5, 7, 8, 20, 22, 23, 25, 28, 29, 32, 34, 37, 38, 39, 40, 43, 44, 46, 48, 49], "demand": [0, 4], "them": [0, 1, 3, 4, 5, 7, 11, 13, 14, 15, 16, 18, 19, 22, 23, 24, 28, 29, 30, 32, 33, 36, 37, 38, 39, 40, 43, 44, 47, 49, 50], "actual": [0, 4, 8, 16, 28, 29, 33, 37, 41, 44], "sens": [0, 4], "In": [0, 4, 5, 8, 15, 28, 30, 31, 32, 33, 34, 36, 37, 44, 46, 49], "fact": [0, 4, 48], "exist": [0, 4, 8, 16, 22, 28, 31, 34, 43, 44, 48, 49, 50], "sever": [0, 4, 14, 28, 32, 33, 40, 44, 47], "year": [0, 4, 32, 37, 44], "v0": [0, 4, 44], "7": [0, 4, 11, 32, 39, 44], "9": [0, 2, 4, 6, 7, 8, 11, 12, 20, 22, 24, 26, 30, 32, 34, 36, 37, 40, 43, 44, 45, 46, 48], "final": [0, 4, 8, 29, 30, 32, 37, 43], "go": [0, 3, 4, 6, 16, 22, 26, 29, 30, 32, 33, 34, 44], "1": [0, 1, 3, 4, 5, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 43, 44, 46, 48, 49], "part": [0, 4, 8, 22, 25, 29, 31, 37, 38, 44, 46, 47, 49], "tree": [0, 4, 32], "A": [0, 2, 4, 5, 11, 17, 29, 30, 31, 34, 36, 37, 38, 40, 41, 44, 45, 46, 48, 50], "valiant": [0, 4], "effort": [0, 2, 4, 44], "been": [0, 1, 4, 5, 16, 18, 22, 28, 35, 37, 38, 44, 48], "made": [0, 1, 3, 4, 5, 11, 23, 31, 42, 44, 46, 49], "chase": [0, 4], "down": [0, 3, 4, 16, 36, 44], "destroi": [0, 4], "To": [0, 3, 4, 5, 7, 8, 29, 30, 31, 32, 33, 34, 37, 39, 41, 42, 44, 46, 47, 48], "need": [0, 3, 4, 8, 11, 15, 17, 18, 22, 28, 29, 30, 31, 32, 33, 34, 36, 37, 39, 43, 44, 46, 48, 49, 50], "sort": [0, 4, 35], "unix": [0, 3, 16, 17, 32, 38], "account": [0, 2, 4, 17, 19, 28, 30, 32, 38, 40, 42, 43, 49], "pretti": [0, 41], "good": [0, 16, 22, 25, 29, 32, 37, 44, 49, 50], "knowledg": 0, "how": [0, 3, 6, 8, 11, 14, 15, 16, 19, 22, 23, 25, 29, 30, 31, 32, 33, 35, 36, 37, 44, 46, 47, 48, 49], "compil": [0, 2, 3, 4, 28, 31, 32, 33, 37, 39, 44, 46], "read": [0, 2, 3, 4, 6, 7, 17, 28, 29, 30, 32, 33, 37, 44, 45, 49], "dcc": [0, 2, 4, 6, 8, 16, 21, 22, 24, 28, 30, 31, 32, 36, 38, 39, 41, 43, 47], "absolut": [0, 33, 44, 50], "minimum": [0, 11, 31, 44, 48], "5": [0, 4, 8, 11, 22, 23, 28, 29, 32, 37, 39, 44, 45], "mb": 0, "disk": [0, 24, 32, 37, 38, 44], "space": [0, 24, 37, 40, 44], "tarbal": [0, 32], "4": [0, 3, 4, 8, 11, 15, 22, 28, 29, 30, 31, 32, 33, 36, 37, 39, 44], "unpack": 0, "cannot": [0, 28, 32, 34, 43, 44, 50], "without": [0, 2, 4, 5, 6, 10, 11, 14, 20, 28, 29, 30, 31, 32, 33, 36, 37, 38, 40, 43, 44, 46], "instal": [0, 4, 5, 29, 30, 33, 37], "shell": [0, 3, 4, 17, 30, 32, 37, 44], "copyright": [0, 1, 3, 4, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50], "c": [0, 1, 2, 3, 4, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50], "1999": [0, 3, 4, 7, 35, 36, 42, 44, 45, 47], "2022": [], "egghead": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 32, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50], "develop": [0, 1, 2, 3, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 50], "team": [0, 1, 2, 3, 4, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50], "eggdrop": [1, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 35, 39, 40, 43, 45, 46, 47, 49, 50], "robei": [1, 3, 4, 38, 45, 50], "pointer": [1, 3, 4, 8, 31, 38, 45], "As": [1, 16, 20, 29, 32, 33, 40, 44, 46, 49], "januari": [1, 9, 10, 13, 19, 21, 24, 26, 44], "1997": [1, 3, 4, 38, 45], "accord": [1, 44, 50], "There": [1, 3, 4, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 28, 29, 30, 31, 33, 34, 35, 37, 39, 43, 45, 46, 49, 50], "should": [1, 3, 4, 5, 8, 11, 13, 14, 15, 16, 18, 20, 22, 23, 25, 28, 29, 30, 31, 32, 36, 37, 39, 41, 43, 44, 46, 48, 49], "copi": [1, 2, 5, 7, 16, 24, 28, 31, 32, 44], "file": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 34, 35, 36, 38, 39, 43, 45, 46, 50], "If": [1, 3, 4, 5, 6, 7, 8, 11, 13, 16, 17, 18, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 46, 47, 48], "write": [1, 2, 6, 7, 27, 32, 37, 43, 44, 49], "free": [1, 2, 5, 28, 31], "foundat": [1, 31], "inc": [1, 31], "51": 1, "franklin": 1, "street": 1, "fifth": 1, "floor": 1, "boston": [1, 31], "ma": [1, 31], "02110": 1, "1301": 1, "usa": [1, 31], "3": [1, 8, 11, 14, 15, 16, 18, 22, 24, 30, 31, 32, 33, 34, 36, 37, 40, 44], "28": [1, 10, 20], "all": [1, 5, 6, 7, 8, 11, 14, 15, 16, 18, 20, 22, 23, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 46, 47, 48, 49, 50], "chang": [1, 2, 6, 8, 10, 11, 16, 18, 20, 22, 23, 25, 29, 31, 32, 33, 36, 37, 38, 40, 41, 42, 46, 48, 49], "sourc": [1, 3, 4, 5, 6, 7, 8, 28, 29, 31, 33, 37, 42, 44, 46, 47], "code": [1, 2, 3, 4, 7, 8, 28, 29, 44], "relat": [1, 6, 11, 29, 31, 39, 44], "still": [1, 4, 5, 11, 16, 23, 31, 32, 33, 34, 37, 38, 44, 49], "did": [1, 30, 43], "past": [1, 4, 28, 31, 37], "previou": [1, 3, 4, 5, 20, 32, 44, 49], "0m": 1, "were": [1, 17, 18, 32, 35, 36, 37, 39, 43, 44, 49], "differ": [1, 3, 4, 5, 11, 16, 22, 29, 31, 33, 34, 37, 43, 44, 47, 48], "scheme": 1, "mai": [1, 4, 5, 11, 12, 16, 17, 18, 24, 29, 32, 36, 37, 39, 40, 44, 47, 48, 49], "option": [1, 3, 4, 7, 11, 16, 17, 20, 22, 30, 31, 32, 37, 46, 49], "those": [1, 3, 7, 12, 16, 22, 28, 29, 30, 31, 32, 44, 47, 48, 49], "instead": [1, 4, 5, 11, 16, 17, 18, 23, 25, 32, 36, 37, 43, 44, 46, 47, 49, 50], "packag": [1, 3, 4, 32, 33], "bless": 1, "For": [1, 2, 3, 5, 7, 8, 16, 22, 30, 31, 32, 33, 36, 37, 39, 40, 41, 43, 44, 46, 47, 48, 49], "bear": 1, "date": [1, 4, 31, 32, 34, 37, 44], "later": [1, 3, 6, 8, 10, 19, 20, 26, 29, 31, 32, 37, 44, 46], "choic": [1, 22, 29], "must": [1, 2, 3, 4, 8, 11, 15, 17, 18, 22, 24, 28, 30, 31, 32, 33, 34, 36, 37, 43, 44, 46, 48], "match": [1, 2, 8, 11, 16, 18, 28, 29, 31, 35, 37, 43, 46, 48], "net": [1, 3, 18, 22, 25, 32, 34, 40], "blowfish": [1, 2, 5, 6, 20, 28, 37, 43, 44], "abov": [1, 4, 11, 18, 20, 28, 29, 30, 38, 44, 45], "restrict": [1, 16, 17, 22, 37, 44, 45, 49], "origin": [1, 8, 22, 32, 42, 44], "chri": 1, "fuller": 1, "place": [1, 3, 5, 7, 11, 16, 18, 29, 31, 32, 35, 37, 44, 46, 49], "him": 1, "domain": [1, 15, 36], "variou": [1, 8, 28, 32, 35, 37, 44], "well": [1, 8, 25, 29, 30, 31, 32, 33, 34, 37, 43, 44, 46, 49], "contain": [1, 3, 4, 5, 29, 32, 34, 36, 37, 39, 44, 46, 48], "could": [1, 8, 22, 29, 36, 37, 39, 42, 43, 44, 46, 49], "port": [1, 5, 15, 17, 22, 23, 30, 32, 33, 36, 37, 39, 46], "applic": [1, 37, 44], "john": 1, "ousterhout": 1, "wai": [1, 3, 17, 22, 25, 28, 29, 30, 32, 33, 34, 35, 36, 37, 41, 43, 44, 46, 49], "affili": [1, 49], "its": [1, 2, 4, 7, 11, 16, 17, 18, 20, 22, 23, 25, 29, 30, 31, 32, 34, 36, 37, 38, 42, 44, 47, 49], "own": [1, 7, 16, 17, 22, 23, 29, 30, 31, 32, 33, 40, 44, 46, 47, 49], "nots": 1, "warranti": [1, 31], "impli": [1, 28, 31], "whatev": [1, 3, 29, 37, 38, 44, 45], "risk": [1, 22], "matter": [1, 8, 15, 29, 30], "put": [1, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 32, 37, 44, 46], "built": [2, 17, 44, 47], "assist": [2, 32, 34, 46], "manag": [2, 4, 6, 16, 25, 33, 49], "oldest": [2, 44], "activ": [2, 11, 17, 31, 32, 34, 35, 41, 44, 46], "maintain": [2, 17, 32, 34, 47, 48], "via": [2, 3, 4, 6, 12, 17, 18, 21, 23, 28, 29, 30, 32, 34, 35, 36, 37, 38, 39, 40, 41, 43, 45, 46, 48, 49], "abil": [2, 7, 17, 33, 34, 36, 38, 44], "run": [2, 3, 4, 5, 7, 11, 17, 22, 28, 29, 30, 31, 32, 33, 34, 36, 37, 43, 45, 46, 48], "join": [2, 6, 8, 11, 13, 18, 19, 25, 29, 31, 32, 33, 35, 37, 38, 40, 41, 44, 48, 49, 50], "perorm": 2, "obtain": [2, 33, 46], "larg": [2, 16, 18, 22, 37], "number": [2, 11, 16, 18, 19, 20, 22, 24, 25, 28, 31, 32, 33, 36, 37, 43, 44, 46, 48, 49, 50], "integr": 2, "current": [2, 4, 6, 7, 8, 10, 16, 18, 19, 20, 25, 28, 30, 32, 34, 36, 37, 38, 41, 44, 45, 46, 48], "ircv3": [2, 34, 38, 44, 47], "capabl": [2, 37, 38, 44, 47, 49], "tl": [2, 3, 4, 5, 8, 30, 32, 37, 44], "ipv6": [2, 32, 37, 38, 44], "twitch": [2, 6, 38], "much": [2, 3, 8, 25, 28, 32, 41, 44], "project": [2, 42, 49], "http": [2, 4, 6, 21, 26, 32, 34, 40], "github": [2, 4, 32], "com": [2, 4, 5, 6, 21, 22, 29, 30, 32, 36, 37, 43, 44, 46], "egggdrop": 2, "clone": [2, 4, 11, 32], "git": [2, 3, 32, 42], "altern": [2, 4, 17, 22, 32, 33, 36, 37, 44, 46], "stabl": [2, 4, 32], "snapshot": [2, 32], "locat": [2, 4, 24, 29, 30, 33, 37, 46], "geteggdrop": [2, 4, 32], "addit": [2, 4, 5, 8, 17, 22, 32, 37, 44, 46, 48], "found": [2, 4, 8, 28, 37, 44, 48], "offici": [2, 4], "webpag": 2, "www": [2, 4, 6, 21], "org": [2, 4, 5, 6, 26, 29, 32, 33, 36, 37, 44], "requir": [2, 4, 5, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 30, 32, 37, 43, 46, 48], "header": [2, 4, 28, 29, 33, 46], "present": [2, 6, 29, 30, 34, 39, 44, 48, 49], "system": [2, 3, 7, 15, 16, 17, 28, 32, 37, 38, 39, 44, 45, 46], "strongli": [2, 4, 32], "encourag": [2, 32, 43], "openssl": [2, 3, 4, 20, 30, 32, 33, 37, 46], "commun": [2, 28, 36, 41, 42, 44], "guid": [2, 3, 29, 32, 33], "quickli": [2, 37], "here": [2, 4, 11, 14, 15, 16, 18, 19, 22, 24, 29, 30, 31, 32, 35, 36, 37, 44, 47, 48], "lurk": 2, "libera": [2, 4, 5, 22, 28, 29, 30, 32], "readm": [2, 3], "notic": [2, 14, 16, 29, 36, 37, 44, 49], "quick": [2, 28, 32, 37], "startup": [2, 8, 43, 44], "upgrad": [2, 43, 46], "command": [2, 3, 6, 8, 11, 13, 16, 17, 18, 21, 22, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 41, 43, 46, 49, 50], "line": [2, 3, 5, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 32, 33, 34, 36, 37, 38, 43, 44, 46, 47, 48, 49], "auto": [2, 3, 36, 50], "start": [2, 3, 5, 6, 10, 17, 20, 22, 27, 29, 30, 36, 37, 40, 41, 43, 44, 45, 48, 49], "document": [2, 8, 17, 29, 32, 33, 36, 39, 40, 42, 46, 47], "cygwin": [2, 39], "window": [2, 30, 39], "v1": [2, 23, 24, 29, 44, 45, 46, 48], "core": [2, 3, 6, 7, 8, 18, 19, 22, 28, 29, 31, 44, 47], "execut": [2, 3, 7, 28, 29, 30, 34, 44], "path": [2, 3, 16, 17, 32, 33, 44, 46], "basic": [2, 4, 6, 7, 21, 29, 32], "consol": [2, 4, 6, 11, 28, 38, 41], "directori": [2, 3, 4, 6, 7, 24, 28, 30, 32, 33, 38, 42, 46, 47], "telnet": [2, 30, 32, 36, 38, 39, 41, 43, 44, 45, 46], "ssl": [2, 3, 4, 5, 22, 30, 32, 33, 36, 38, 44], "parti": [2, 5, 13, 32, 36, 37, 38, 44, 46, 50], "flag": [2, 5, 6, 8, 11, 14, 18, 23, 28, 29, 31, 32, 37, 38, 45], "term": [2, 29, 31, 33, 44], "exampl": [2, 3, 4, 5, 7, 8, 16, 17, 22, 28, 29, 30, 31, 32, 33, 37, 41, 44, 46, 47, 48, 49], "bottre": 2, "botflag": [2, 23], "record": [2, 23, 28, 31, 34, 38, 50], "certif": [2, 3, 22, 30, 33, 37, 44], "authent": [2, 34, 43, 44, 49], "usag": [2, 4, 6, 28, 37, 44], "ctcp": [2, 6, 11, 22, 30, 32, 37, 44, 46], "chat4": 2, "chat6": 2, "kei": [2, 3, 11, 18, 25, 29, 30, 37, 43, 48, 49], "cap": [2, 28, 34, 38, 49], "track": [2, 3, 16, 25, 28, 30, 44, 49], "server": [2, 5, 6, 7, 11, 14, 15, 16, 17, 18, 20, 25, 26, 28, 30, 31, 32, 37, 38, 39, 40, 46, 47, 48, 49], "check": [2, 4, 5, 8, 11, 22, 28, 29, 30, 31, 33, 37, 43, 44, 46, 48], "determin": [2, 3, 17, 28, 30, 32, 36, 39, 44, 46], "best": [2, 3, 6, 17, 32, 36, 44, 48], "encrypt": [2, 5, 6, 10, 20, 30, 33, 36, 38, 46], "hash": [2, 5, 20, 32], "background": [2, 4, 29], "interfac": [2, 25, 44, 49], "disclaim": [2, 44], "regist": [2, 8, 11, 30, 31], "edit": [2, 3, 8, 29, 31, 47], "config": [2, 3, 4, 6, 7, 11, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 33, 34, 35, 36, 37, 39, 43, 45, 46], "web": [2, 6, 25, 37, 48], "ui": [2, 48], "limit": [2, 6, 8, 11, 16, 18, 22, 36, 39], "tip": [2, 44], "renam": [2, 16, 28, 32, 37, 44], "keep": [2, 4, 11, 16, 22, 24, 32, 37, 49], "self": [2, 22, 33, 37, 46], "modifi": [2, 6, 15, 18, 29, 31, 34, 37, 44], "default": [2, 3, 4, 11, 12, 15, 16, 18, 22, 24, 30, 32, 33, 34, 35, 37, 43, 44, 46], "string": [2, 8, 18, 28, 29, 30, 37, 43, 48, 49], "modular": 2, "variabl": [2, 5, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 28, 29, 34, 37, 39, 45, 48], "textfil": 2, "substitut": [2, 37], "output": [2, 3, 28, 30, 31, 33, 43, 45, 47, 48], "manipul": [2, 37], "note": [2, 3, 6, 7, 8, 10, 11, 15, 18, 20, 22, 23, 28, 30, 31, 32, 34, 36, 37, 43, 46, 48, 49], "assoc": [2, 6], "compress": [2, 6, 30], "filesi": [2, 6, 37], "miscellan": 2, "global": [2, 8, 13, 17, 18, 22, 23, 28, 29, 31, 35, 36, 48, 50], "bind": [2, 17, 18, 22, 25, 28, 29, 34, 37, 47, 49], "procedur": [2, 23, 34, 48, 50], "tcp": [2, 17, 39], "connect": [2, 4, 5, 6, 15, 16, 17, 22, 25, 28, 30, 32, 36, 37, 39, 41, 46, 49, 50], "charact": [2, 11, 16, 22, 32, 36, 37, 39, 43], "patch": [2, 39, 44], "submit": [2, 44], "prerequisit": 2, "super": 2, "short": [2, 28, 30, 39, 46], "configur": [2, 3, 4, 5, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 37, 39, 42, 44, 46], "common": [2, 22, 32, 33, 36, 37, 40, 46, 50], "step": [2, 3, 5, 28, 32, 49], "partylin": [2, 4, 6, 8, 13, 32, 33, 34, 36, 37, 39, 43, 44, 46, 47, 48, 49, 50], "automat": [2, 3, 4, 5, 8, 13, 17, 22, 32, 34, 35, 36, 37, 38, 39, 43, 44, 46, 49, 50], "restart": [2, 3, 4, 5, 7, 29, 32, 37], "nickserv": [2, 46], "sasl": [2, 32, 38, 40], "export": [2, 8, 47], "dynam": [2, 3, 11, 30, 32, 35, 44], "static": [2, 3, 8, 11, 28, 30, 31, 44], "dn": [2, 6, 37, 44], "ident": [2, 6, 7, 18, 22, 30, 37, 39, 43, 44], "pbkdf2": [2, 5, 6, 43], "seen": [2, 6, 11, 34, 37, 44], "transfer": [2, 6, 7, 12, 16, 23, 32, 36, 37, 39, 44, 46, 50], "woobi": [2, 3, 6, 28, 31], "uptim": [2, 6], "intern": [2, 22, 34, 37, 44, 48], "tabl": [2, 28, 31, 40, 44], "creation": [2, 30, 34], "stackabl": 2, "ht_stackabl": [2, 31], "trigger": [2, 11, 22, 28, 29, 31, 34, 44, 48], "handler": 2, "summari": 2, "bore": [2, 4], "legal": [2, 4], "stuff": [2, 4, 28, 29, 32, 37, 44], "had": [3, 5, 8, 11, 36, 37, 44, 49], "littl": [3, 5, 16, 25, 32, 36, 47], "experi": [3, 16, 29, 32], "THE": 3, "now": [3, 5, 8, 16, 17, 18, 29, 30, 31, 32, 33, 36, 37, 39, 43, 44, 48, 50], "experienc": 3, "more": [3, 4, 5, 6, 8, 14, 16, 18, 21, 28, 29, 30, 31, 32, 33, 36, 37, 38, 40, 42, 43, 44, 46], "cours": [3, 8, 29, 36, 37, 44], "autoconfigur": 3, "thing": [3, 4, 6, 25, 27, 28, 29, 30, 36, 37, 44, 49], "easier": [3, 20], "type": [3, 4, 6, 7, 8, 11, 13, 18, 22, 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 46], "figur": [3, 32], "correctli": [3, 44], "try": [3, 4, 6, 7, 21, 22, 26, 28, 29, 30, 32, 34, 37, 48], "find": [3, 6, 15, 18, 21, 28, 29, 30, 32, 41, 42, 44, 49], "which": [3, 5, 6, 8, 11, 13, 15, 16, 17, 22, 23, 28, 29, 30, 31, 32, 34, 35, 36, 37, 39, 41, 43, 44, 45, 46, 47, 48, 50], "either": [3, 4, 8, 16, 17, 30, 31, 32, 33, 34, 35, 36, 37, 39, 44, 46, 48], "iconfig": [3, 7, 32], "everyth": [3, 8, 29, 44], "mod": [3, 6, 7, 21, 25, 28, 37, 44, 48], "choos": [3, 7, 30, 32, 37, 38, 49], "forc": [3, 11, 13, 16, 20, 23, 29, 37, 39, 44], "otherwis": [3, 4, 13, 16, 29, 34, 35, 36, 37, 39, 43, 44, 46, 48], "makefil": [3, 28], "better": [3, 4, 6, 21, 30, 32, 37], "possibl": [3, 11, 14, 16, 22, 30, 33, 36, 37, 39, 40, 41, 44, 46, 48], "debug": [3, 26, 28, 29, 37, 44, 46, 48], "sdebug": 3, "give": [3, 4, 11, 16, 22, 29, 32, 36, 37, 38, 41, 43, 44, 50], "detail": [3, 4, 6, 8, 28, 31, 32, 34, 44, 46, 48], "highli": [3, 22, 32], "unlik": [3, 38], "crash": [3, 4, 8, 44], "take": [3, 4, 5, 6, 16, 20, 22, 26, 29, 31, 32, 37, 43, 44, 46], "longer": [3, 5, 16, 18, 20, 28, 32, 33, 44], "enlarg": 3, "binari": [3, 33], "bit": [3, 16, 25, 29, 32, 33, 37, 44, 46, 49], "worth": 3, "somewher": [3, 37], "accomplish": 3, "enter": [3, 11, 16, 30, 33, 37, 41, 42, 43, 44, 46, 48], "home": [3, 16, 17, 30, 32, 46], "e": [3, 6, 8, 9, 10, 11, 18, 20, 28, 30, 32, 36, 37, 44, 45, 50], "dest": [3, 6, 32, 33, 37, 44, 46], "otherdir": 3, "full": [3, 4, 5, 8, 25, 32, 39, 44, 46, 48, 49], "8": [3, 5, 8, 11, 15, 20, 22, 31, 32, 36, 37, 39, 43, 44, 46], "intend": [3, 8, 35, 44], "traffic": [3, 37, 47], "between": [3, 6, 11, 16, 19, 22, 23, 31, 33, 34, 36, 37, 39, 44], "sslcert": [3, 33, 37, 46], "Or": [3, 33, 44], "non": [3, 11, 15, 17, 18, 22, 28, 30, 35, 36, 44, 46, 49], "interact": [3, 4, 6, 17, 18, 31, 37, 44, 46, 49], "sslsilent": [3, 46], "info": [3, 4, 11, 13, 18, 28, 32, 37], "follow": [3, 4, 5, 8, 11, 16, 18, 22, 25, 28, 31, 32, 33, 36, 37, 38, 40, 42, 43, 44, 45, 46, 47, 48, 49], "complet": [3, 4, 11, 16, 23, 32, 38, 44, 46, 50], "m": [3, 4, 11, 22, 32, 37, 39, 43, 44, 45, 47, 48, 50], "lamestbot": [3, 11, 19, 22, 32, 36, 37, 44, 45], "conf": [3, 7, 17, 30, 32, 40, 44, 46], "when": [3, 4, 6, 7, 10, 11, 13, 16, 17, 18, 22, 23, 28, 29, 30, 31, 32, 34, 35, 36, 37, 39, 41, 43, 44, 46, 48, 49], "futur": [3, 18, 30, 32, 43, 44], "drop": [3, 4, 37, 44], "chmod": [3, 37], "u": [3, 5, 8, 28, 29, 30, 31, 36, 37, 44, 45, 50], "x": [3, 5, 7, 8, 11, 14, 31, 32, 33, 37, 39, 44, 50], "my": [3, 5, 37, 39, 46, 50], "name": [3, 4, 6, 8, 9, 16, 22, 28, 29, 30, 31, 32, 33, 34, 37, 48], "abl": [3, 6, 11, 16, 18, 22, 32, 34, 37, 41, 43, 44], "prompt": [3, 4, 34], "work": [3, 5, 6, 8, 11, 14, 16, 20, 21, 23, 28, 29, 30, 31, 32, 35, 36, 37, 39, 40, 42, 43, 44, 46, 47, 48], "top": [3, 4, 29, 42, 44], "correct": [3, 8, 31, 33, 37, 43], "advis": [3, 22, 24], "crontab": [3, 4, 44], "so": [3, 4, 6, 7, 8, 10, 16, 17, 18, 20, 26, 29, 30, 31, 32, 34, 35, 37, 38, 39, 43, 44, 48], "machin": [3, 4, 17, 32, 37], "goe": [3, 11, 30, 35, 36, 41, 44, 46], "heaven": 3, "forbid": 3, "helper": 3, "systemd": [3, 4], "entri": [3, 4, 8, 30, 32, 37], "add": [3, 4, 5, 7, 8, 11, 17, 18, 25, 28, 29, 31, 32, 33, 34, 36, 37, 38, 43, 49], "job": [3, 4, 30, 46], "autobotchk": [3, 4, 30], "yourconfig": 3, "smile": 3, "tool": [3, 32], "prior": [3, 30, 32, 34, 43, 46], "interpret": [3, 31, 39, 44, 45], "devel": 3, "autoconf": 3, "gcc": 3, "util": 3, "diffutil": 3, "small": [3, 24, 36, 47], "piec": [3, 29, 31], "separ": [3, 7, 8, 22, 32, 36, 37, 38, 39, 40, 44, 47, 48], "smaller": 3, "download": [3, 4, 5, 7, 16, 24, 37, 38, 44], "src": [3, 7, 8, 18, 28], "extens": [3, 32, 34], "dure": [3, 12, 23, 28, 30, 32], "valid": [3, 11, 22, 28, 36, 37, 38, 44, 46], "compat": [3, 5, 40, 44, 48, 49], "rest": [3, 28, 31, 36, 37, 43, 44, 48], "wish": [3, 5, 7, 17, 18, 26, 28, 32, 35, 36, 37, 44, 48], "paragraph": 3, "2": [3, 8, 11, 14, 18, 22, 30, 31, 32, 33, 34, 36, 37, 39, 40, 43, 44, 46], "after": [3, 4, 8, 11, 17, 18, 22, 28, 29, 30, 34, 35, 37, 44, 46, 47, 49], "move": [3, 4, 16, 22, 32, 44, 49], "appropri": [3, 5, 32, 36, 37, 40, 42, 43], "onli": [3, 4, 5, 6, 7, 8, 11, 16, 17, 18, 19, 21, 22, 23, 26, 27, 29, 30, 32, 34, 35, 36, 37, 39, 41, 43, 44, 45, 46, 47, 48, 50], "portion": [3, 7, 11, 44], "end": [3, 28, 30, 31, 37, 43, 44, 45], "point": [3, 6, 8, 22, 27, 31, 32, 36, 37, 44], "hopefulli": [3, 44], "IT": [3, 4], "fun": [3, 49], "pleas": [4, 5, 6, 7, 10, 11, 17, 20, 22, 33, 37, 40, 44], "least": [4, 18, 28, 31, 32, 35, 37], "skim": 4, "ask": [4, 18, 30, 32, 41, 44, 46], "question": [4, 30], "ve": [4, 16, 32, 35, 36, 41], "never": [4, 5, 11, 37, 44], "successfulli": [4, 28, 44, 48], "sure": [4, 11, 28, 29, 32, 33, 36, 37, 44, 49], "select": [4, 32, 37, 38, 42, 44], "n": [4, 5, 11, 30, 31, 36, 37, 41, 44, 45, 50], "owner": [4, 8, 11, 32, 37, 41, 44, 50], "wise": [4, 37], "100": [4, 18, 48], "power": [4, 38], "TO": 4, "someon": [4, 11, 18, 29, 32, 33, 44, 48], "trust": [4, 37, 50], "about": [4, 6, 25, 26, 28, 29, 30, 31, 37, 44, 47, 49], "older": [4, 39, 44], "frequent": [4, 32], "where": [4, 6, 8, 11, 15, 16, 19, 22, 28, 29, 30, 32, 33, 34, 37, 38, 43, 44, 46, 48], "might": [4, 18, 24, 28, 37, 44, 46], "two": [4, 6, 18, 23, 29, 31, 32, 34, 35, 36, 37, 43, 44, 46, 47], "method": [4, 6, 10, 17, 18, 20, 25, 29, 32, 33, 43, 47, 49], "come": [4, 6, 18, 22, 30, 32, 42, 44], "imag": 4, "latest": [4, 5, 32], "pub": [4, 5, 22, 30, 31, 34, 44], "cv": 4, "base": [4, 32, 34, 37, 43, 44], "interest": 4, "veri": [4, 6, 17, 21, 22, 29, 37], "updat": [4, 5, 20, 28, 32, 34, 37, 38, 43, 44, 48], "pull": [4, 42, 43], "recent": [4, 32, 44, 46], "BE": 4, "warn": [4, 17, 29, 44], "branch": [4, 42], "consid": [4, 32, 34, 35, 37, 41, 44], "haha": 4, "signific": [4, 6], "repositori": [4, 32], "simpli": [4, 5, 30, 32, 33, 40, 44, 49], "tar": [4, 7, 32], "archiv": 4, "gz": [4, 32], "hub": [4, 23, 32, 36, 37, 43, 46], "_": [4, 34, 45], "mani": [4, 5, 11, 15, 16, 18, 22, 28, 30, 31, 32, 33, 36, 37, 44], "tclsh": 4, "given": [4, 8, 15, 16, 17, 32, 36, 44, 48], "exit": [4, 6, 13, 16, 22, 44], "howev": [4, 7, 14, 22, 30, 33, 34, 37, 43, 44, 46, 47], "often": [4, 6, 15, 30, 37, 48], "o": [4, 11, 14, 18, 25, 32, 33, 36, 37, 39, 44, 48, 49, 50], "usual": [4, 30, 31, 32, 33, 35, 39, 42, 43, 44, 46, 49], "someth": [4, 8, 29, 32, 42, 44, 49], "similar": [4, 11, 30, 31, 32, 37, 41, 42, 44, 47], "dev": [4, 32, 33], "tk": 4, "tcltk": 4, "html": [4, 39], "recommend": [4, 5, 11, 24, 28, 32, 43, 44, 47, 48], "order": [4, 15, 29, 31, 34, 37, 43, 44, 46, 48], "data": [4, 11, 23, 28, 33, 43, 44], "libssl": [4, 32, 33], "finish": [4, 8, 16, 32, 44], "simpl": [4, 28, 29, 30, 31, 32, 44], "new": [4, 5, 7, 20, 25, 29, 30, 31, 32, 34, 37, 38, 39, 40, 41, 42, 43, 46, 47, 49], "repeat": [4, 34, 44], "defin": [4, 6, 8, 11, 12, 14, 18, 22, 28, 29, 32, 34, 35, 36, 37, 40, 44, 50], "through": [4, 11, 16, 22, 25, 29, 33, 38, 39, 40, 41, 44, 49, 50], "sometim": [4, 22, 32], "mode": [4, 5, 11, 14, 18, 22, 25, 28, 30, 34, 35, 37, 38, 40, 49], "let": [4, 6, 8, 11, 15, 19, 28, 29, 32, 36, 37, 38, 44], "avail": [4, 8, 11, 16, 20, 26, 28, 30, 31, 32, 33, 37, 38, 39, 41, 44, 49], "t": [4, 6, 7, 8, 10, 11, 13, 15, 16, 17, 18, 20, 22, 23, 25, 26, 28, 29, 30, 31, 32, 35, 36, 37, 41, 44, 45, 46, 47, 48, 50], "don": [4, 7, 11, 15, 16, 18, 22, 23, 25, 28, 29, 30, 31, 32, 36, 37, 41, 44, 46, 47], "termin": [4, 5, 8, 44], "session": [4, 39, 40], "troubleshoot": [4, 32], "issu": [4, 5, 17, 25, 32, 34, 37, 42, 44, 46, 48, 49], "show": [4, 6, 8, 11, 16, 26, 29, 36, 37, 44], "10": [4, 8, 11, 18, 30, 32, 36, 37, 44], "second": [4, 11, 14, 15, 18, 22, 24, 28, 29, 31, 37, 47], "screen": [4, 42, 45], "clear": [4, 6, 8, 42, 44, 46, 48, 49], "one": [4, 8, 11, 16, 17, 18, 22, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 41, 42, 43, 44, 46, 47], "person": [4, 29, 32, 37, 44], "introduc": [4, 32, 44], "himself": 4, "herself": 4, "ll": [4, 29, 30, 31, 32, 34, 37, 43, 44, 46], "h": [4, 8, 18, 28, 33, 36, 37, 44, 50], "quit": [4, 6, 22, 32, 37, 44], "v": [4, 8, 11, 18, 30, 37, 44, 45, 50], "peopl": [4, 11, 16, 17, 18, 19, 22, 23, 29, 32, 37, 38, 41, 44, 45, 50], "except": [4, 14, 22, 28, 37, 44, 46], "onc": [4, 11, 16, 18, 20, 22, 29, 30, 32, 36, 42, 44], "along": [4, 16, 31], "manual": [4, 30, 36, 37, 39, 44, 46, 48], "oper": [4, 14, 22, 29, 37, 39, 44, 45], "reason": [4, 28, 30, 32, 36, 37], "monitor": [4, 30, 35, 38, 40], "boot": [4, 8, 37], "b": [4, 11, 16, 18, 25, 29, 30, 36, 37, 42, 44, 45, 49, 50], "minut": [4, 11, 18, 24, 28, 30, 32, 35, 37], "attempt": [4, 5, 11, 17, 18, 22, 25, 33, 34, 35, 36, 37, 44, 46, 49], "geneer": 4, "setup": [4, 6, 7, 32, 37], "would": [4, 5, 14, 29, 30, 32, 33, 34, 36, 37, 44, 45, 46, 48, 49], "noemail": 4, "botchk": [4, 30, 32], "send": [4, 6, 12, 16, 18, 19, 22, 23, 24, 28, 29, 32, 34, 36, 39, 44, 47, 48], "email": [4, 30, 37, 44], "sai": [4, 11, 16, 29, 33, 36, 44], "we": [4, 5, 8, 18, 25, 28, 29, 30, 31, 32, 33, 36, 44, 49], "re": [4, 11, 17, 18, 22, 24, 29, 30, 32, 33, 34, 35, 37, 39, 41, 44, 49], "feel": [4, 5, 28, 42], "miss": [4, 32, 34, 44], "yet": [4, 22, 31, 32, 37, 44], "thank": 4, "discuss": [4, 42], "dalnet": [4, 18, 22], "efnet": [4, 18, 22], "egghelp": [4, 32], "ircnet": [4, 11, 18, 22], "quakenet": [4, 22], "undernet": [4, 18, 22, 44], "plan": [4, 29, 44], "familiar": [4, 29], "etiquett": 4, "capit": [4, 50], "letter": [4, 37, 50], "color": [4, 44], "bold": [4, 44, 45, 50], "excess": [4, 11, 22], "msg": [4, 6, 18, 21, 22, 30, 31, 32, 37, 38, 41, 43, 48], "permiss": [4, 37, 43], "than": [4, 8, 11, 14, 16, 18, 32, 33, 37, 43, 44, 46], "text": [4, 11, 22, 28, 30, 31, 37, 45, 46, 47, 48, 50], "state": [4, 44], "relev": [4, 28, 32], "error": [4, 22, 28, 32, 37, 44, 49], "messag": [4, 11, 22, 28, 29, 31, 32, 34, 37, 38, 40, 41, 43, 45, 47, 48], "easi": [5, 29, 32, 44, 46], "pictur": 5, "reus": [5, 44], "visit": [5, 49], "newer": [5, 32], "backup": [5, 28], "chan": [5, 8, 11, 18, 29, 30, 31, 32, 47], "save": [5, 6, 11, 12, 13, 23, 36, 37, 38, 43], "overwritten": [5, 37, 44], "hurt": 5, "another": 5, "next": [5, 8, 11, 16, 22, 28, 29, 31, 32, 33, 36, 37, 44], "view": [5, 7, 20, 30, 32, 38, 44, 48], "pai": [5, 34, 44], "particular": [5, 30, 31, 37], "attent": [5, 22, 34, 44], "section": [5, 8, 11, 18, 22, 25, 29, 31, 32, 36, 37, 44, 49], "Then": [5, 30, 32, 46], "previous": [5, 32, 44], "unzip": [5, 32], "untar": 5, "These": [5, 12, 18, 28, 32, 34, 35, 36, 37, 39, 45, 46, 48, 50], "NOT": [5, 29, 32, 34, 36, 37, 44, 48], "rather": [5, 44, 46], "killer": 5, "directli": [5, 6, 11, 17, 23, 31, 32, 44], "affect": [5, 11, 25, 37, 38, 39, 44, 49], "modif": [5, 32, 44], "migrat": 5, "suggest": [5, 28], "deprec": [5, 33, 44], "password": [5, 6, 10, 18, 20, 22, 23, 30, 32, 36, 37, 38, 41, 43, 46, 49], "favor": [5, 23], "big": [5, 24, 44, 47], "done": [5, 8, 23, 28, 30, 31, 32, 33, 36, 42, 43, 44, 49], "carelessli": 5, "potenti": [5, 17, 29, 44, 48], "render": [5, 25, 49], "store": [5, 6, 11, 13, 16, 19, 25, 26, 29, 32, 34, 36, 43, 44, 48, 49], "useless": [5, 25, 49], "properli": [5, 31, 32, 33, 36, 37], "switch": [5, 28, 32, 34, 37, 44, 46, 47], "syntax": [5, 8, 30, 37, 46, 50], "6667": [5, 22, 32, 44, 49], "3rd": [5, 8], "remov": [5, 11, 16, 20, 28, 30, 31, 32, 35, 38, 39, 43, 47, 48, 49], "ftp": [5, 32], "fulli": [5, 37, 44, 49], "explicitli": [5, 44, 46], "prefix": [5, 8, 18, 22, 29, 33, 36, 37, 41, 46, 48, 49], "advantag": [5, 32, 47], "chaddr": [5, 36], "lot": [5, 8, 18, 29, 32, 34], "backward": [5, 40], "reflect": [5, 44], "cancel": [6, 44], "cd": [6, 8, 28, 31, 32, 44], "cp": 6, "dst": 6, "desc": [6, 28], "descript": [6, 28, 29, 30, 37, 44, 48, 50], "filestat": 6, "stat": 6, "get": [6, 7, 8, 11, 22, 23, 24, 28, 29, 33, 34, 37, 41, 50], "filenam": [6, 11, 19, 32, 37, 46], "nicknam": [6, 8, 22, 29, 30, 32, 34, 37, 45, 47, 48, 50], "hide": [6, 39, 44], "ln": 6, "filepath": 6, "localfil": 6, "l": [6, 11, 18, 22, 30, 34, 36, 37, 50], "filemask": 6, "mkdir": 6, "dir": [6, 30], "mv": 6, "pend": [6, 11], "pwd": [6, 32], "rm": [6, 32], "rmdir": 6, "optim": [6, 8, 22], "unhid": 6, "unshar": [6, 50], "api": [6, 31], "md5": [6, 10], "anymor": [6, 10, 20, 37], "won": [6, 11, 23, 28, 29, 32, 35, 36, 37, 44, 46, 48], "specif": [6, 11, 15, 17, 18, 20, 22, 25, 31, 32, 36, 39, 40, 44, 46, 48, 49, 50], "therefor": [6, 18, 32, 37, 44], "amount": [6, 37], "bandwidth": [6, 12], "storag": [6, 13, 43], "repli": [6, 14, 15, 17, 18, 34, 37, 44], "d": [6, 11, 14, 16, 28, 30, 31, 32, 33, 36, 37, 42, 44, 47, 50], "expect": [6, 14, 37, 44], "load": [6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 34, 36, 37, 43, 44, 49], "asynchron": [6, 15, 44], "avoid": [6, 8, 15, 30], "long": [6, 11, 15, 19, 22, 23, 35, 37, 44, 45, 48], "period": [6, 15, 32, 44], "hang": [6, 15], "wait": [6, 15, 16, 18, 22, 24, 32, 34, 37, 44], "hostnam": [6, 11, 15, 30, 37, 39], "resolv": [6, 15, 37, 44], "timeout": [6, 15, 22, 24, 37, 48], "area": [6, 16, 37, 44, 47, 50], "within": [6, 16, 28, 32, 33, 35, 37, 40, 44], "usabl": [6, 16, 37], "onlin": [6, 16, 19, 30, 34], "retriev": [6, 19], "userlist": [6, 18, 21, 23], "gseen": [6, 21], "g": [6, 8, 21, 28, 32, 36, 37, 44, 50], "quann": [6, 21], "kreativrauschen": [6, 21], "Not": [6, 22, 30, 40], "equival": [6, 22, 33], "old": [6, 20, 22, 32], "no_irc": [6, 22], "servic": [6, 11, 17, 25, 30, 34, 44, 46, 49], "implement": [6, 7, 8, 17, 33, 34, 37, 40, 42, 43, 44, 49], "tiwtch": 6, "report": [6, 16, 26, 28, 32, 47], "statist": [6, 16, 26], "contest": 6, "site": [6, 50], "hour": [6, 26, 28, 35, 37, 44], "isn": [6, 16, 22, 23, 26, 32, 35, 44], "again": [6, 16, 26, 28, 31, 35, 36, 37, 43, 44, 48], "sent": [6, 16, 18, 23, 26, 30, 34, 37, 40, 41, 44, 46, 48, 50], "demonstr": [6, 27, 44], "right": [6, 8, 16, 17, 27, 29, 32, 44], "jul": 7, "25": [7, 11, 22, 37, 48], "2016": 7, "independ": 7, "main": [7, 29, 32, 33, 34, 41], "desir": [7, 8, 28, 30, 31, 32, 43], "extra": [7, 37, 40], "overhead": 7, "bloat": 7, "enhanc": 7, "instruct": [7, 32, 43], "direct": [7, 33, 36, 42, 44], "un": [7, 18, 35, 37, 44], "format": [7, 22, 28, 30, 32, 33, 37, 43, 44, 45, 48], "modulenam": [7, 28], "eggdrop1": 7, "folder": 7, "suffix": [7, 37], "rehash": [7, 28, 29, 30, 37], "ye": [7, 29, 30, 33, 44], "detect": [7, 22, 33, 39, 44, 46], "yourself": [7, 30, 32, 42, 43, 46], "until": [7, 11, 16, 35, 37, 44], "henc": [7, 28, 44], "nearli": 7, "who": [8, 11, 16, 18, 22, 29, 32, 34, 37, 41, 44, 50], "understand": [8, 31, 37, 44], "alreadi": [8, 11, 22, 28, 29, 31, 32, 33, 34, 36, 37, 43, 44, 49], "suitabl": [8, 48], "illustr": 8, "handl": [8, 29, 30, 31, 35, 37, 43, 46, 48], "snippet": 8, "alter": [8, 16, 38, 44, 49], "breviti": 8, "simplic": 8, "initi": [8, 28, 29, 32, 39, 40, 44, 46], "symbol": [8, 33, 44], "extern": [8, 17, 30, 37], "p_tcl_bind_list": [8, 31], "h_dcc": 8, "param": 8, "const": [8, 28], "char": [8, 28, 31, 37, 44], "length": [8, 18, 22, 28, 43, 44, 46], "tclhash": 8, "int": [8, 28, 31], "intfunc": 8, "return": [8, 18, 28, 31, 34, 43, 48], "aka": [8, 37], "tcl_bind_list_t": 8, "add_bind_t": [8, 31], "builtin_dcc": 8, "doe": [8, 11, 25, 29, 30, 34, 35, 37, 40, 41, 44, 48, 49, 50], "explain": [8, 11, 36, 44], "happen": [8, 29, 32, 35, 37, 44], "arbitrari": [8, 44], "argument": [8, 16, 18, 29, 30, 39, 44, 48], "import": [8, 28, 29, 30, 32, 34, 37, 41, 44], "That": [8, 25, 29, 32, 36, 44, 50], "mean": [8, 16, 18, 22, 29, 30, 31, 34, 35, 36, 37, 38, 39, 43, 44, 46, 48], "mask": [8, 16, 22, 29, 31, 37, 48], "test": [8, 29, 32, 50], "proc1": 8, "proc2": 8, "overwrit": [8, 17, 32, 44], "proc": [8, 22, 28, 29, 48], "myproc": [8, 44], "arg": [8, 28, 31], "putlog": [8, 22, 28, 29, 31], "Of": [8, 36, 37], "far": [8, 16], "against": [8, 11, 16, 20, 22, 29, 31, 32, 43, 44, 48], "receiv": [8, 15, 16, 22, 24, 30, 31, 36, 44, 48], "accept": [8, 16, 23, 25, 31, 33, 36, 37, 44, 46, 49], "check_tcl_dcc": 8, "cmd": [8, 37, 44], "idx": [8, 28, 31], "struct": [8, 31], "flag_record": [8, 31], "fr": [8, 31], "fr_global": [8, 31], "fr_chan": [8, 31], "11": [8, 44], "get_user_flagrec": 8, "con_chan": 8, "egg_snprintf": 8, "sizeof": [8, 31], "ld": 8, "sock": [8, 28, 37], "tcl_setvar": [8, 31], "interp": [8, 31], "_dcc1": 8, "nick": [8, 11, 18, 22, 26, 29, 30, 31, 32, 37, 50], "_dcc2": 8, "_dcc3": 8, "check_tcl_bind": [8, 31], "match_parti": 8, "bind_use_attr": 8, "bind_has_builtin": 8, "snip": 8, "temporari": [8, 11, 24, 26, 35, 37], "pass": [8, 29, 30, 31, 32, 34, 39, 41, 43, 48], "callback": [8, 34], "socket": [8, 17, 28, 33, 44, 46], "id": [8, 44], "putdcc": 8, "respond": [8, 11, 32, 44], "back": [8, 22, 29, 32, 37, 39, 42, 43, 44, 47], "depend": [8, 28, 34, 35, 42, 44, 46, 50], "caller": 8, "pars": [8, 44], "atr": 8, "match_typ": 8, "matchtyp": 8, "result": [8, 22, 34, 35, 37, 39, 44], "bind_nomatch": 8, "tm": 8, "tm_last": 8, "check_bind_match": 8, "continu": [8, 32, 44], "tc": 8, "suffic": [8, 29], "check_bind_flag": 8, "hit": [8, 44], "tcl_eval": 8, "procnam": [8, 29, 44, 48], "grab": [8, 44], "trigger_bind": 8, "func_nam": [8, 28], "suppli": [8, 37], "case": [8, 15, 20, 22, 29, 31, 32, 34, 37, 44], "uniqu": [8, 37, 44, 48], "identifi": [8, 30, 37, 43, 44, 50], "unsur": [8, 32], "wildcard": [8, 11, 29, 30, 44, 48], "exact": [8, 44], "tclegg": 8, "describ": [8, 28, 29, 32, 33, 36, 37], "AND": [8, 20, 32, 44], "bind_stack": [8, 31], "add_builtin": [8, 28], "cmd_t": [8, 28, 31], "null": [8, 28, 31], "mycmd": 8, "tcl_name": 8, "void": [8, 28, 31], "cc": [8, 28], "p": [8, 11, 17, 30, 32, 36, 37, 44, 50], "1024": [8, 16, 17, 24, 31, 32], "cd_tcl_cmd": 8, "tclcmd": 8, "func": [8, 28], "bindtyp": 8, "funcnam": 8, "h_raw": 8, "324": 8, "got324": 8, "raw": [8, 34, 37, 46], "cmd_boot": 8, "cdata": 8, "add_cd_tcl_cmd": 8, "bind_bind_entri": 8, "context": [8, 28], "suppos": 8, "typic": [8, 16, 25, 37, 38, 41, 44, 49], "tcl_command": 8, "tcl_putdcc": 8, "clientdata": 8, "tcl_interp": 8, "irp": [8, 31], "argc": 8, "argv": [8, 31], "f": [8, 11, 31, 36, 37, 44, 45, 48, 50], "okai": [8, 37], "verifi": [8, 22, 30, 37, 46], "count": [8, 22], "badarg": [8, 31], "hand": [8, 29, 37, 44], "macro": [8, 28, 31], "saniti": 8, "checkvalid": [8, 31], "findidx": 8, "atoi": 8, "tcl_appendresult": [8, 31], "invalid": [8, 44], "tcl_error": [8, 31], "tcl_resetresult": 8, "tcl_ok": [8, 31], "oppos": [8, 44], "userrec": [8, 31], "know": [8, 18, 19, 22, 25, 28, 29, 34, 35, 36, 37, 44, 47, 49], "valu": [8, 11, 14, 15, 18, 22, 25, 28, 29, 37, 43, 45, 46, 48, 49], "els": [8, 29, 31, 41, 44], "par": [8, 31], "associ": [8, 25, 34, 44, 49], "gbuildin_dcc": 8, "annot": 8, "gdb": 8, "backtrac": 8, "thommei": 8, "0x55e8bd8a49b0": 8, "0x55e8be6a0010": 8, "614": 8, "0x55e8bd8aec90": 8, "8977024": 8, "flags_udef": 8, "chanrec": [8, 18, 44], "0x55e8bd8aeae0": 8, "0x55e8bd8a4a10": 8, "0x55e8bbf002d0": 8, "0x55e8bd59b1c0": 8, "0x55e8bd7e3e00": 8, "678": 8, "0x55e8be642fa0": 8, "0x55e8be9f6bd0": 8, "0x55e8be7d9020": 8, "0x0": 8, "usr": 8, "lib": 8, "x86_64": 8, "linux": [8, 39], "libtcl8": 8, "lastbind": 8, "0x55e8bd5efda0": 8, "0x55e8bbf4112b": 8, "0x55e8bd5efd40": 8, "742": 8, "0x55e8bd5eecb0": 8, "0x7ffcf3f9dac1": 8, "0x7ffcf3f9d100": 8, "80": 8, "942": 8, "brkt": 8, "0x7ffcf3f9dac6": 8, "974": 8, "udef_glob": 8, "udef_chan": 8, "dcc_chat": 8, "buf": [8, 18], "1068": 8, "2002": [9, 13, 14, 19, 21, 24, 26, 35, 41, 45, 50], "none": [9, 10, 11, 13, 15, 19, 20, 21, 22, 24, 27, 44], "loadmodul": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 37, 43, 49], "2000": [9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 27, 37, 38, 43], "2003": [10, 23, 29], "octob": [11, 20, 22, 37], "chanfil": [11, 32, 47], "expir": [11, 18, 19, 22, 35, 37, 44, 46], "enforc": [11, 30, 34, 37], "chanmod": [11, 30], "mix": [11, 18], "endless": 11, "insert": [11, 45], "below": [11, 16, 17, 23, 25, 28, 29, 32, 37, 43, 44, 48], "idl": [11, 28, 44], "kick": [11, 18, 22, 34, 37, 44, 47, 50], "disabl": [11, 18, 22, 30, 37, 39, 44, 46], "stopnethack": [11, 50], "de": [11, 34, 44], "anyon": [11, 35, 44], "serverop": 11, "seven": [11, 44], "turn": [11, 17, 22, 37, 44], "off": [11, 17, 18, 22, 32, 36, 37, 41, 44], "isoptest": 11, "wasoptest": 11, "split": [11, 18, 39, 41, 44, 45], "isop": 11, "wasop": [11, 18, 50], "bitch": 11, "reveng": 11, "punish": [11, 44, 50], "bad": [11, 44, 50], "four": [11, 29, 34, 37, 39, 44, 45], "deop": [11, 44, 50], "k": [11, 18, 22, 37, 44, 50], "specifi": [11, 15, 16, 17, 19, 22, 23, 28, 30, 32, 35, 37, 38, 39, 43, 44, 46, 48], "19": [11, 44], "correspond": [11, 30, 35, 44], "replac": [11, 22, 28, 30, 37, 44, 45, 49], "20": [11, 16, 18, 25, 30, 37, 44], "29": [11, 44], "30": [11, 16, 18, 24, 30, 43, 44], "39": [11, 44], "120": [11, 22, 44], "60": [11, 16, 19, 22, 37, 44], "aop": 11, "delai": [11, 16, 18, 29], "maximum": [11, 15, 16, 18, 19, 22, 24, 31, 37, 43, 44, 46], "autoop": 11, "autohalfop": 11, "autovoic": [11, 50], "No": [11, 23, 30, 33, 44, 49], "y": [11, 14, 33, 37, 50], "random": [11, 22, 36, 44], "putserv": [11, 29, 30], "privmsg": [11, 29, 30, 44], "lamest": [11, 32, 36, 37, 45], "me": [11, 50], "co": 11, "lame": [11, 18, 36, 37, 44], "enclos": [11, 31, 39, 44, 48], "brace": 11, "shorter": 11, "getop": 11, "botnetop": 11, "unban": [11, 37, 44], "rais": [11, 22], "15": [11, 37, 43, 44, 45], "constitut": [11, 22, 37], "integ": [11, 44], "plu": [11, 22, 37, 44, 46], "minu": 11, "front": [11, 29, 32, 33, 44, 49], "enforceban": 11, "dynamicban": [11, 44], "necessari": [11, 33], "rememb": [11, 29, 30, 32], "userban": 11, "dynamicexempt": [11, 44], "remain": [11, 35, 44], "userexempt": 11, "dynamicinvit": [11, 44], "userinvit": 11, "soon": [11, 44], "insecur": 11, "halfop": [11, 44, 50], "protectop": 11, "protecthalfop": 11, "dehalfop": [11, 44, 50], "protectfriend": 11, "statuslog": 11, "total": [11, 28, 38, 44], "member": [11, 28, 34], "regular": [11, 44, 46], "sampl": [11, 31, 32, 49], "01": [11, 18, 44], "40": [11, 30], "istn": 11, "friend": [11, 50], "revengebot": 11, "secret": 11, "cycl": [11, 22, 37], "dontkickop": 11, "instanc": [11, 34], "attack": [11, 20, 43], "inact": [11, 24], "leav": [11, 22, 32, 37, 41, 44, 49], "lose": 11, "nodesynch": 11, "fight": 11, "chanserv": 11, "ircop": [11, 18], "perman": [11, 35, 37, 44], "explan": [11, 32, 33, 44, 48], "nt": [11, 32], "chanset": [11, 30, 36], "2004": [12, 18], "level": [12, 17, 30, 31, 34, 37, 50], "gzip": [12, 44], "autosav": 13, "doesn": [13, 15, 18, 31, 32, 41, 44, 47, 48], "displai": [13, 16, 18, 22, 30, 31, 32, 37, 44, 45, 48], "februari": 14, "12": [14, 44], "behavior": [14, 18, 35, 37, 39, 44], "ping": 14, "less": [14, 41, 44], "finger": [14, 32], "userinfo": [14, 44], "septemb": 15, "26": [15, 32, 46, 50], "troubl": [15, 37], "ones": [15, 23, 36, 39, 44], "rel": [15, 28, 32, 44], "standard": [15, 17, 18, 24, 28, 29, 40, 44, 46, 49, 50], "cach": [15, 44], "86400": 15, "respect": [15, 39, 44, 45], "ttl": 15, "upper": 15, "boundari": [15, 31], "negcach": 15, "600": [15, 18], "neg": [15, 37, 44], "nxdomain": 15, "lookup": [15, 37, 39, 44], "fail": [15, 24, 37, 44, 46], "maxsend": 15, "resend": [15, 44], "queri": [15, 17, 34, 39], "retrydelai": 15, "dec": [16, 44], "2017": 16, "mydir": 16, "root": [16, 17], "incom": [16, 37, 44], "upload": [16, 32, 38, 44, 47], "central": [16, 37], "filedb": [16, 44], "subdirectori": [16, 44], "databas": [16, 44], "max": [16, 18, 19, 22, 24, 37], "effect": [16, 35, 37, 44], "infinit": 16, "files": 16, "size": [16, 24, 28, 31, 37, 44], "kb": 16, "sub": [16, 44], "brows": 16, "tell": [16, 29, 30, 31, 32, 33, 34, 36, 37, 44, 49], "queu": [16, 22, 44], "exactli": [16, 18, 28, 29, 44], "group": [16, 17, 37, 40, 44], "master": [16, 30, 32, 35, 36, 37, 44, 45, 50], "janitor": [16, 50], "broken": [16, 29, 37, 44], "word": [16, 18, 30, 31, 32, 36, 44, 48, 49], "break": [16, 44], "comment": [16, 18, 26, 29, 32, 37, 43], "over": [16, 22, 25, 28, 29, 32, 37, 39, 44, 46, 47, 49], "client": [16, 17, 22, 25, 30, 32, 34, 37, 40, 44, 46, 49], "too": [16, 18, 22, 24, 28, 37, 44], "patient": 16, "simultan": [16, 24, 44], "remaind": [16, 48], "mark": [16, 31, 38, 44, 50], "hidden": [16, 32, 38], "lsa": 16, "gif": 16, "uglyman": 16, "nobodi": [16, 29], "local": [16, 29, 32, 37, 41, 42, 44, 46], "snowbot": 16, "ugli": 16, "shown": [16, 32, 37], "kilobyt": [16, 37], "progress": 16, "eras": [16, 44], "remot": [16, 36, 37, 44, 45], "By": [16, 18, 20, 22, 24, 30, 34, 36, 37, 44, 46, 49], "clean": 16, "slow": [16, 32, 37], "db": 16, "itself": [16, 28, 29, 30, 31, 37, 44], "though": [16, 22, 29, 32, 44, 46], "tag": [16, 38, 40, 48], "filesystem": [16, 44, 50], "june": 17, "2019": 17, "oident": 17, "act": [17, 28, 37, 38, 44, 46], "daemon": [17, 37], "tradition": 17, "113": 17, "usernam": [17, 30, 32, 37, 48, 49], "custom": [17, 22, 29, 30, 34, 38, 44, 46], "oidentd": 17, "nor": 17, "thu": [17, 29, 34, 39, 43, 44], "modern": [17, 43], "oss": 17, "sudo": [17, 32], "setcap": 17, "cap_net_bind_servic": 17, "ep": 17, "imperson": 17, "iptabl": 17, "rout": [17, 44], "destin": [17, 28], "nat": [17, 37, 39], "prerout": 17, "eth0": 17, "dport": 17, "j": [17, 28, 36, 37, 44, 50], "redirect": 17, "addition": [17, 32, 34, 44], "caus": [17, 31, 32, 36, 44, 47], "bound": [17, 37, 44], "netsplit": [17, 18, 37, 38, 44], "reboot": [17, 30], "conflict": 17, "suit": [17, 31, 32], "singl": [17, 18, 30, 44, 48], "environ": [17, 37, 38, 46], "spoof": 17, "open": [17, 30, 31, 37, 41, 42, 44, 46], "builtin": [17, 44], "identd": [17, 32], "shouldn": 17, "begin": [17, 29, 39, 44], "august": 18, "21": [18, 32], "bounc": 18, "reach": [18, 22, 31, 37], "45": 18, "left": [18, 31, 44], "unless": [18, 22, 29, 32, 35, 37, 44], "overridden": 18, "unabl": [18, 32, 36, 39, 44, 49], "learn": [18, 30, 31, 32, 37, 38, 44], "themselv": [18, 32, 36, 44, 47], "userflag": 18, "hello": [18, 22, 30, 32, 37, 38, 44], "afterward": [18, 37], "1500": 18, "180": 18, "200": [18, 41], "byte": [18, 22, 24, 28, 31, 44], "unbind": [18, 37, 47, 48], "myword": 18, "addhost": 18, "takeov": 18, "occur": [18, 29, 44], "due": [18, 22, 29, 37, 44, 48], "blindli": 18, "ing": [18, 25, 49], "guess": 18, "discourag": 18, "opchar": 18, "recogn": [18, 22, 30, 50], "fine": [18, 22, 37, 48], "unrealircd": [18, 44], "lazi": 18, "gone": [18, 44], "At": [18, 31, 36, 37, 41, 49], "moment": [18, 32, 33], "ircd": [18, 22, 44], "per": [18, 44, 48], "stack": [18, 39, 44], "guarante": [18, 34], "although": [18, 32, 37, 44], "higher": [18, 20, 23, 24, 32, 46], "modes_per_line_max": 18, "recompil": [18, 32], "lk": 18, "354": [18, 44], "ircu2": 18, "rfc": [18, 22, 25, 44, 49], "compliant": [18, 22, 44], "1459": 18, "routin": [18, 37, 44], "notefil": [19, 44], "privat": [19, 23, 29, 30, 32, 33, 37, 41, 44, 46], "50": [19, 30, 37], "life": [19, 32], "dai": [19, 24, 37, 44, 47], "fwd": 19, "forward": 19, "address": [19, 23, 26, 32, 36, 37, 39, 46], "notifi": [19, 22, 32, 37, 38, 40, 44], "hourli": [19, 28, 37], "onjoin": 19, "2020": [20, 25, 37, 46, 48], "transit": [20, 43, 44], "safe": [20, 30, 32, 33, 43, 49], "earlier": [20, 31], "seamlessli": 20, "eventu": 20, "altogeth": 20, "outsid": [20, 31, 33, 37], "rijndael": 20, "sha256": 20, "cryptograph": [20, 43, 44], "digest": [20, 44], "algorithm": [20, 43], "round": [20, 43], "1600": 20, "brute": 20, "freenod": 22, "rizon": 22, "sane": 22, "altnick": [22, 32], "stb": 22, "unavail": [22, 37], "hi": [22, 29, 32], "primari": [22, 37], "realnam": [22, 44], "real": [22, 28, 30, 44], "field": [22, 31, 34, 37, 44, 46], "evnt": [22, 44], "init": [22, 37, 44], "init_serv": 22, "botnick": [22, 29, 30, 32, 37], "putquick": 22, "w": [22, 37, 44, 45, 50], "immedi": [22, 31, 32, 34, 43, 44], "deprici": 22, "disconnect": [22, 23, 37, 44], "7000": [22, 32, 33, 44], "2001": [22, 26, 27, 32, 37, 41], "db8": [22, 32, 37], "618": [22, 32, 37], "5c0": [22, 32, 37], "263": [22, 32, 37], "6669": [22, 32], "6697": [22, 32, 44, 46], "whenev": [22, 28, 31, 34, 36, 44, 46], "sign": [22, 30, 33, 37, 44, 45, 46, 49], "jump": [22, 31, 36, 46], "rate": 22, "transmit": 22, "lower": 22, "known": [22, 30, 37, 43, 44], "512": [22, 24], "verif": [22, 37, 46], "assum": [22, 29, 32, 33, 34, 35, 37, 44], "peer": [22, 37, 46], "alt": [22, 37], "16": [22, 37, 43, 44], "32": [22, 37], "revok": [22, 37], "instantli": 22, "low": [22, 24], "respons": [22, 34, 44], "stone": 22, "di": 22, "hasn": 22, "serverror": 22, "queue": [22, 28], "300": [22, 37], "dump": [22, 37, 44], "chunk": 22, "probabl": [22, 30, 32, 33, 44], "quiet": [22, 37, 50], "reject": [22, 36, 37], "squelch": 22, "lowercas": 22, "mirc": [22, 44], "exclus": [22, 44], "pubm": [22, 44], "msgm": [22, 44], "doubl": 22, "penalti": 22, "calcul": 22, "measur": 22, "trace": 22, "accordingli": 22, "three": [22, 30, 31, 34, 35, 36, 37, 44], "summar": 22, "cpu": [22, 37, 44], "intens": 22, "r": [22, 30, 36, 37, 44, 50], "umod": 22, "understood": 22, "indic": [22, 28, 32, 44, 48], "len": 22, "novemb": [23, 40], "resync": 23, "buffer": 23, "reconnect": [23, 44], "900": 23, "hold": [23, 44], "flush": 23, "overrid": [23, 39, 46], "mnot": 23, "paranoid": [23, 37], "discard": [23, 44], "dload": 24, "block": [24, 25, 28, 32, 45, 49], "ircii": [24, 44], "admit": 24, "turbo": [24, 32], "tmp": [24, 44], "stabil": 24, "nf": 24, "mount": 24, "pain": [24, 32], "xfer": [24, 50], "sharefail": 24, "unlink": [24, 37], "abort": [24, 32, 44, 46], "retri": 24, "april": [25, 48], "gatewai": [25, 48, 49], "stream": [25, 49], "claim": [25, 49], "certainli": [25, 32, 49], "meaning": [25, 44, 49], "intent": [25, 49], "spectrum": [25, 49], "focus": [25, 49], "raid": [25, 49], "donat": [25, 49], "userst": [25, 49], "roomstat": [25, 49], "few": [25, 29, 31, 32, 33, 37, 44, 49], "broadcast": [25, 41, 44, 48, 49], "000": [25, 41, 49], "unreli": [25, 48, 49], "moder": [25, 30, 48, 49], "mostli": [25, 44, 49], "infeas": [25, 49], "workaround": [25, 34], "tradit": [25, 39, 47, 48, 49], "extend": [25, 38, 40, 44], "downer": 25, "worri": 25, "ton": 25, "clearchat": [25, 48], "clearmsg": [25, 48], "hosttarget": [25, 48], "whisper": [25, 48], "usernotic": [25, 48], "roomsstat": 25, "twcmd": [25, 49], "ip": [26, 30, 32, 33, 37, 39], "logfil": [26, 28, 32, 37, 47], "publicli": 26, "31": [27, 37, 41, 44], "occurr": 28, "ensur": [28, 30, 32, 36, 43, 44], "module_nam": [28, 31], "making_modulenam": 28, "examin": 28, "close": [28, 44], "stdio": 28, "stdlib": 28, "sy": 28, "drastic": [28, 44], "reduc": [28, 48], "decent": 28, "throughout": 28, "refer": [28, 29, 33, 37, 44], "liter": [28, 44], "func_tabl": 28, "module_regist": [28, 31], "major": [28, 31, 32, 44], "minor": [28, 31, 44], "module_depend": [28, 31], "success": [28, 32, 44], "stage": 28, "any_other_funct": 28, "you_want_to_export": 28, "unload": [28, 31, 44], "apart": [28, 37], "tidi": 28, "thorough": [28, 30, 33, 49], "trail": 28, "garbag": 28, "module_undepend": [28, 31], "talli": 28, "memori": [28, 31, 44], "alloc": [28, 44], "dealloc": 28, "nmalloc": 28, "nfree": 28, "fault": 28, "posit": [28, 37], "resourc": 28, "dprintf": [28, 31], "printf": 28, "dp_log": 28, "dp_stdout": 28, "stdout": 28, "dp_mode": 28, "dp_server": 28, "dp_help": 28, "module_entri": 28, "module_find": 28, "search": [28, 30, 44], "module_renam": 28, "old_module_nam": 28, "new_module_nam": 28, "frim": 28, "add_hook": 28, "hook_num": 28, "del_hook": 28, "hook": 28, "hook_secondli": 28, "hook_minut": 28, "hook_5minut": 28, "hook_hourli": 28, "hook_daili": 28, "hook_read_userfil": 28, "hook_userfil": 28, "hook_pre_rehash": 28, "hook_rehash": 28, "hook_idl": 28, "whole": 28, "hook_backup": 28, "hook_load": 28, "hook_di": 28, "die": [28, 30, 32], "module_unload": 28, "module_load": 28, "tri": [28, 37, 44], "add_tcl_command": 28, "tcl_cmd": [28, 31], "tab": 28, "rem_tcl_command": 28, "function_to_cal": 28, "add_tcl_int": 28, "tcl_int": 28, "rem_tcl_int": 28, "variable_nam": 28, "readonli": 28, "add_tcl_str": 28, "tcl_string": 28, "rem_tcl_str": 28, "str_dir": 28, "constantli": 28, "append": [28, 31, 44], "str_protect": 28, "p_tcl_hash_list": 28, "rem_builtin": 28, "displaynam": 28, "convers": [28, 41, 46], "taken": [28, 44], "auch": 28, "filt": [28, 44], "noth": [28, 37, 44, 49], "logmod": 28, "nice": 28, "mention": 28, "realli": [29, 31, 32, 37, 47], "idea": [29, 32, 42], "busi": 29, "annoi": 29, "intention": 29, "definit": [29, 32, 33, 43], "languag": [29, 37, 38, 47], "especi": 29, "librari": [29, 31, 43, 46], "bottom": 29, "greetscript": 29, "author": [29, 33, 37, 46], "geo": 29, "gree": 29, "pmsg": 29, "greetmsg": 29, "welcom": 29, "uhost": [29, 44], "whew": 29, "ok": 29, "importantli": [29, 31], "wrote": 29, "credit": [29, 44], "contact": [29, 37], "hard": [29, 37], "larger": [29, 43], "harder": 29, "why": [29, 32, 44], "And": [29, 31], "omin": 29, "dissect": 29, "action": [29, 30, 33, 37, 44], "react": [29, 34], "toward": 29, "refin": 29, "foo": [29, 30, 31, 44], "aol": [29, 43], "sum": 29, "hostmask": [29, 30, 35, 36, 38, 43], "told": 29, "declar": [29, 31, 44], "said": [29, 31, 36, 44], "magic": 29, "awesom": 29, "sexystuff": 29, "third": [29, 31, 36], "fourth": 29, "trick": [29, 47], "didn": [29, 32, 44], "talk": [29, 31, 33, 34, 38, 41], "bodi": 29, "true": 29, "deserv": 29, "insid": [29, 37], "challeng": [29, 30], "mayb": [29, 37], "fancyp": 29, "sound": 29, "hint": 29, "utim": 29, "dozen": 29, "defens": 29, "grain": 29, "salt": [29, 43], "further": [30, 44], "IN": 30, "OR": [30, 44], "putti": 30, "listen": [30, 32, 36, 37, 39, 46], "3183": 30, "whoi": [30, 37], "chattr": [30, 50], "grant": [30, 38, 46, 49], "numer": [30, 33, 44], "chaninfo": [30, 36], "involv": 30, "snt": 30, "histor": [30, 44], "reli": [30, 44], "ten": 30, "commonli": [30, 33, 37, 44], "humor": 30, "youreggdropconfignameher": 30, "review": [30, 33], "youreggdrop": 30, "editor": [30, 32], "thee": [30, 44], "systemctl": 30, "botnam": [30, 36], "reload": 30, "acknowledg": 30, "confus": [30, 44], "unfortun": 30, "consult": [30, 39, 40, 46], "uncom": [30, 33, 37, 43], "layer": [30, 33], "becom": [30, 32, 37, 44], "preval": 30, "elimin": 30, "cloak": 30, "ever": [30, 32, 37, 44, 46], "appear": [30, 32, 36, 37, 44, 48], "mechan": 30, "plain": [30, 37, 46], "plaintext": [30, 44, 46], "exchang": 30, "ecdsa": 30, "nist256p": 30, "keypair": [30, 33], "pair": [30, 33, 34, 44, 46, 48], "ecparam": 30, "genkei": 30, "prime256v1": 30, "pem": [30, 37], "fingerprint": [30, 36, 37, 46], "ec": 30, "noout": 30, "conv_form": 30, "grep": 30, "tail": 30, "tr": 30, "xxd": 30, "base64": 30, "On": [30, 32, 33, 35, 36], "pubkei": 30, "req": [30, 37, 46], "x509": [30, 37, 46], "node": [30, 46], "keyout": [30, 46], "crt": [30, 37, 46], "yoru": 30, "outform": 30, "der": 30, "sha1sum": 30, "cut": 30, "f1": 30, "privatekei": [30, 33, 36, 37, 46], "cert": [30, 36, 37, 46], "onto": 31, "wherea": [31, 44], "our": [31, 32, 36, 44], "redistribut": 31, "publish": [31, 37], "hope": [31, 32, 49], "merchant": 31, "fit": 31, "FOR": 31, "59": [31, 44], "templ": 31, "330": 31, "02111": 31, "1307": 31, "necessarili": [31, 44], "undef": 31, "server_func": 31, "export_scop": 31, "woobie_start": 31, "woobie_expmem": 31, "woobie_report": 31, "global_func": 31, "woobie_t": 31, "108": 31, "woobie_clos": 31, "dosen": [], "log_cmd": 31, "print": 31, "cmd_woobi": 31, "mywoobi": 31, "scope": [31, 33], "tutori": [31, 33], "echo": [31, 38, 40, 47], "tcl_echom": 31, "stdvar": 31, "strcmp": 31, "llama": [31, 36], "illeg": 31, "input": [31, 44], "paramt": [], "paramet": [31, 44], "exceed": [31, 37], "style": [31, 35, 44], "quset": 31, "mytcl": 31, "echom": 31, "newli": 31, "certain": [31, 35, 37, 38, 39, 44, 45, 48, 50], "condit": 31, "met": 31, "h_woob": 31, "woobie_2char": 31, "del_bind_t": 31, "woobie_3char": 31, "bar": [31, 44], "moo": [31, 44], "boilerpl": 31, "check_tcl_bindnam": 31, "check_tcl_woobi": 31, "userhost": [31, 48], "snprintf": 31, "_woob1": 31, "_woob2": 31, "match_mask": 31, "bind_exec_log": 31, "encount": [31, 32, 49], "perhap": 32, "websit": 32, "slennox": 32, "incredibli": [32, 44], "page": [32, 42], "prove": 32, "debian": [32, 33], "apt": [32, 33], "wget": 32, "commadlin": 32, "zxvf": 32, "seri": [32, 44, 46], "multi": 32, "comfort": 32, "spent": [32, 44], "appli": [32, 35, 37, 43, 50], "daili": [32, 44], "chanc": 32, "commandlin": 32, "checkout": [32, 42], "skip": [32, 44], "commerci": 32, "problem": [32, 37, 39], "box": [32, 37], "isp": 32, "curl": 32, "ssh": 32, "haven": 32, "gunzip": 32, "xvf": 32, "extract": [32, 44], "slash": [32, 41], "brief": 32, "fast": 32, "botdir": 32, "cooldud": 32, "delet": [32, 44, 47], "rf": 32, "handi": 32, "zip": 32, "notepad": 32, "editplu": 32, "nano": 32, "vim": 32, "offer": [32, 33, 34, 48, 49], "quicker": 32, "nicebot": 32, "entir": [32, 44, 48, 49], "carefulli": [32, 44], "vagu": 32, "preserv": 32, "llamabot": [32, 37], "login": [32, 37, 43, 48], "vhost4": [32, 37, 39], "vhost": [32, 37, 39], "ipv4": [32, 37, 39], "ie": [32, 43, 44, 46], "vhost6": [32, 37, 39], "5254": 32, "dead": 32, "b33f": 32, "1337": 32, "f270": 32, "captur": [32, 44, 47], "mcobx": 32, "jkp": 32, "donkei": 32, "hors": 32, "3333": [32, 36, 37], "65535": [32, 37], "49152": 32, "rang": [32, 37], "reserv": [32, 37, 41], "basi": 32, "stealth": [32, 37], "scan": 32, "newus": [32, 37], "mrlame": [32, 37], "mrslame": [32, 37], "addus": 32, "rejoin": [32, 44], "aren": [32, 37, 44, 47, 48], "preced": [32, 44, 46], "backslash": 32, "rule": 32, "prematur": 32, "phew": 32, "cross": 32, "gave": 32, "promptli": 32, "kill": [32, 44], "pid": [32, 37, 44], "mnt": 32, "launch": 32, "persist": 32, "luck": [32, 49], "walk": 33, "scenario": [33, 34, 36], "sidenot": 33, "despit": 33, "anachron": 33, "interchang": [33, 39], "transport": 33, "protocol": [33, 37, 40, 44, 46], "appreci": 33, "fork": [33, 42], "ubuntu": 33, "distro": 33, "denot": [33, 44], "pretendnet": 33, "suffici": 33, "z": [33, 50], "wizard": 33, "5555": [33, 36, 37], "hubbot": [33, 36], "perfect": 34, "status": 34, "accur": [34, 44, 48], "alert": [34, 49], "deauthent": 34, "spec": 34, "isupport": 34, "005": [34, 40, 44], "eggdroptest": [34, 48], "beerbot": 34, "tn": 34, "announc": 34, "issupport": 34, "isset": 34, "reliabl": [34, 44, 48], "significantli": [34, 48], "increas": [34, 37, 43], "accuraci": 34, "supplementari": 34, "attach": [34, 44, 48], "overal": 34, "situat": [34, 36], "cover": [34, 35, 36], "march": [35, 45, 50], "07": [35, 50], "clarifi": 35, "sticki": [35, 44], "unsticki": 35, "stick": 35, "attribut": [35, 36, 44, 50], "kept": [35, 37], "obvious": [35, 44], "unstick": 35, "whose": [35, 44], "whichev": 35, "consist": [36, 38, 41, 44], "leaf": [36, 37, 43, 46], "assign": [36, 37, 44], "aggress": 36, "passiv": 36, "physic": 36, "bota": 36, "botb": 36, "botc": 36, "sharebot": [36, 37, 44], "slave": 36, "botattr": 36, "isol": 36, "unlimit": 36, "4444": [36, 37], "thoroughli": 36, "special": [36, 44], "relink": 36, "scripter": 36, "prepar": 36, "lameshar": 36, "hp": [36, 37], "beldin": 36, "pipe": 36, "he": [36, 44], "unreach": 36, "auth": [36, 37, 46], "fprint": [36, 37, 46], "sha1": [36, 46], "0and": 36, "intead": [], "qualifi": 37, "admin": [37, 45], "lamer": 37, "someircnetwork": 37, "timezon": 37, "est": 37, "timestamp": [37, 44], "alphabet": 37, "european": 37, "utc": 37, "cet": 37, "offset": 37, "coordin": 37, "univers": 37, "gmt": [37, 44], "west": 37, "prime": 37, "meridian": 37, "east": 37, "23": [37, 44], "env": 37, "tz": 37, "everywher": [37, 39, 44], "99": [37, 41], "virtual": 37, "outgo": [37, 44, 47], "prefer": [37, 39, 46], "resolut": 37, "famili": 37, "addlang": [37, 44], "english": [37, 47], "egg_lang": 37, "danish": 37, "french": 37, "finnish": 37, "german": 37, "chatter": 37, "24": [37, 39, 44], "logfilenam": 37, "yesterdai": 37, "48": 37, "concurr": [37, 43], "infin": 37, "decreas": 37, "logsiz": 37, "550": 37, "fill": [37, 42, 46], "quota": 37, "ram": 37, "hole": 37, "care": [37, 44, 49], "logflag": 37, "misc": [37, 44], "wallop": [37, 44], "eight": [37, 44], "belong": 37, "mco": [37, 44], "jpk": 37, "min": 37, "sec": 37, "man": 37, "strftime": 37, "forev": 37, "digit": [37, 46], "month": [37, 44], "fresh": 37, "militari": 37, "03": [37, 44], "00": [37, 44, 45], "am": [37, 50], "midnight": 37, "04may2000": 37, "produc": [37, 44], "yyyymmdd": 37, "manpag": 37, "mkcoblx": 37, "pidfil": 37, "motd": [37, 45], "banner": [37, 45], "perm": 37, "0600": 37, "octal": 37, "remind": 37, "rw": 37, "0400": 37, "0200": 37, "0660": 37, "0440": 37, "0220": 37, "0666": 37, "0444": 37, "0222": 37, "kiddi": 37, "head": 37, "unimport": 37, "deal": [37, 44, 50], "maxim": 37, "1025": 37, "prepend": 37, "whether": [37, 39, 44], "prohibit": 37, "sanitycheck": 37, "bogu": 37, "ground": 37, "wouldn": 37, "anywai": 37, "thr": 37, "firewal": 37, "sun": 37, "barr": 37, "ebai": 37, "3666": 37, "behind": 37, "passthru": 37, "127": 37, "192": [37, 44], "168": [37, 44], "255": 37, "172": 37, "transpar": 37, "masquerad": 37, "portrang": 37, "url": [37, 44], "birthdai": 37, "userinfo1": 37, "moreov": 37, "simul": [37, 44], "ethic": 37, "dk": [37, 44], "dupwait": 37, "spread": 37, "lag": [37, 41], "cidr": [37, 44], "notat": 37, "genrsa": 37, "4096": [37, 46], "rsa": 37, "strong": 37, "enough": 37, "schat": [37, 46], "conveni": 37, "cipher": [37, 44, 46], "side": [37, 44, 46, 49], "365": 37, "depth": [37, 46], "chain": [37, 46], "shall": 37, "capath": [37, 46], "cafil": [37, 46], "ca": 37, "colon": [37, 39], "comma": [37, 41, 44], "silent": 37, "adh": 37, "anonym": 37, "dh": 37, "uid": [37, 46], "chfinger": 37, "slower": 37, "everydai": 37, "limbo": 37, "serv": 37, "alltool": 37, "robot": 38, "regularli": 38, "awai": [38, 40, 44], "chghost": [38, 40], "setnam": [38, 40], "whox": [38, 44], "unaccess": 38, "combin": [38, 44], "mar": 39, "2021": [39, 40, 44, 47], "establish": [39, 44, 46], "freebsd": 39, "netbsd": 39, "openbsd": 39, "mac": 39, "proper": [39, 44], "vista": 39, "xp": 39, "unoffici": 39, "wherev": 39, "squar": 39, "bracket": 39, "doubt": 39, "Their": 39, "began": 40, "rfc1459": [40, 44], "rfc2812": 40, "compris": 40, "decid": [40, 43], "emerg": 40, "optino": 40, "assumpt": 40, "explicit": 40, "302": [40, 44], "miniatur": 41, "watch": [41, 48], "999": 41, "wide": [41, 46], "anywher": [41, 44], "dot": 41, "apostroph": 41, "everyon": [41, 44], "contribut": 42, "think": [42, 50], "repo": 42, "click": [42, 49], "button": [42, 49], "descriptivebranchnam": 42, "confirm": [42, 44], "push": [42, 44], "yourusernam": 42, "yourbranchnam": 42, "templat": 42, "pour": 42, "cold": [42, 43], "bask": 42, "warm": 42, "karma": 42, "crytopgraphi": 43, "content": [43, 44, 48], "sensit": 43, "practic": [43, 44], "crypto": 43, "solut": 43, "deriv": 43, "revers": [43, 44], "seamless": 43, "enjoi": 43, "beverag": 43, "chpass": 43, "consider": 43, "ideal": [43, 49], "essenti": 43, "fanci": 43, "lobster": 43, "dinner": 43, "encpass2": 43, "pbk": 43, "exhaust": [44, 48], "categori": 44, "vertic": 44, "faster": 44, "bypass": 44, "caution": 44, "lieu": 44, "negoti": [44, 46], "dict": [44, 48], "mytag": 44, "baa": 44, "flat": 44, "servivc": 44, "botfl": 44, "botaddr": 44, "laston": 44, "xtra": 44, "visibl": 44, "counterpart": 44, "empti": [44, 48], "filearea": 44, "remotebotnam": 44, "globalflag": 44, "channelflag": 44, "subsequ": 44, "botaddress": 44, "ipaddress": 44, "ipv4address": 44, "ipv6address": 44, "behav": 44, "getinfo": 44, "unstuck": 44, "jupe": 44, "sublist": 44, "zero": 44, "differenti": 44, "abcdechannel": 44, "got": 44, "modechang": 44, "refresh": [44, 48], "fragil": 44, "notif": 44, "offlin": 44, "behalf": 44, "selecet": 44, "compon": 44, "duplic": 44, "element": 44, "bywho": 44, "ag": 44, "reset": 44, "reread": 44, "memberlist": 44, "lost": 44, "ntik": 44, "serverlist": 44, "ex": 44, "goober": 44, "ON": 44, "forget": 44, "reiniti": 44, "coupl": 44, "throw": 44, "99999": 44, "greater": 44, "equal": 44, "she": 44, "mpj": 44, "pj": 44, "moc": 44, "mp": 44, "configfil": 44, "omit": [44, 46], "boldfac": 44, "video": 44, "underlin": [44, 45], "ansi": 44, "ctrl": 44, "bell": 44, "ordinari": [44, 46], "ital": 44, "intercept": 44, "item": 44, "uplink": 44, "botnetnick": 44, "file_receiv": 44, "file_send": 44, "file_send_pend": 44, "readabl": 44, "lindex": 44, "six": 44, "blank": 44, "mandatori": 44, "permit": 44, "regardless": 44, "failur": [44, 48], "kind": 44, "succeed": 44, "pathnam": 44, "temp": 44, "resum": 44, "bitchx": 44, "five": 44, "jp": 44, "34": 44, "04": 44, "06": 44, "08": [44, 45], "interv": 44, "secondli": 44, "repres": [44, 48], "jan": [44, 46], "1970": 44, "convert": 44, "week": 44, "804600": 44, "vari": [44, 50], "posix": 44, "portabl": 44, "fri": 44, "aug": 44, "55": 44, "1973": 44, "rand_max": 44, "2147483647": 44, "underli": 44, "pseudo": 44, "relinquish": 44, "deliv": 44, "notebox": 44, "caught": 44, "encod": [44, 45], "ascii": 44, "64": 44, "ecb": 44, "cbc": 44, "pick": 44, "fatal": 44, "wasn": 44, "128": 44, "pre": [44, 46], "myownevent123": 44, "todai": 44, "couldn": 44, "17": 44, "insensit": 44, "simplifi": 44, "rfc_compliant": 44, "mem": 44, "exclud": 44, "cleartext": 44, "vali": 44, "valis0": 44, "crappi": 44, "math": 44, "ufl": 44, "edu": [44, 50], "eu": 44, "pl1": 44, "1010201": 44, "mnnrrpp": 44, "nn": 44, "rr": 44, "pp": 44, "437": 44, "expans": 44, "quot": [44, 48], "highest": 44, "prioriti": 44, "danger": 44, "logic": 44, "proce": 44, "easiest": 44, "build": 44, "ti": 44, "lastli": 44, "ov": 44, "mn": 44, "unknown": 44, "fil": 44, "phrase": 44, "spoken": 44, "notc": 44, "breach": 44, "notcproc": 44, "partproc": 44, "signoff": 44, "possibli": [44, 48], "twice": 44, "rawt": 44, "topc": 44, "kicker": 44, "newnick": 44, "typo": 44, "18": 44, "guppi": 44, "mode_proc": 44, "stai": 44, "mode_proc_fix": 44, "ctcr": 44, "embed": 44, "supplant": 44, "368": 44, "unexpect": 44, "chon": 44, "chof": 44, "recipi": 44, "rcvd": 44, "invok": 44, "dronepup": 44, "eden": 44, "wild": 44, "bcst": 44, "disc": 44, "splt": 44, "Be": 44, "awar": 44, "fals": 44, "alarm": 44, "fake": 44, "rejn": 44, "needop": 44, "needal": 44, "flud": 44, "wall": 44, "sender": 44, "chjn": 44, "chpt": 44, "0000": 44, "9999": 44, "schedul": 44, "var": 44, "pad": 44, "unld": 44, "nkch": 44, "oldhandl": 44, "newhandl": 44, "sighup": 44, "hup": 44, "sigterm": 44, "sigil": 44, "ill": 44, "sigquit": 44, "prerehash": 44, "prerestart": 44, "preinit": 44, "tout": 44, "stall": 44, "flexibl": [44, 46], "noqueu": 44, "cron": 44, "weekdai": 44, "evalu": 44, "express": 44, "delimit": 44, "whitespac": 44, "sundai": 44, "handshak": 44, "shutdownreason": 44, "shutdown": 44, "sigkil": 44, "ircawai": 44, "301": 44, "catch": 44, "invt": 44, "invite": 44, "dictionari": 44, "late": 44, "distinguish": 44, "unset": 44, "revert": 44, "statement": 44, "treat": [44, 49], "signal": 44, "verbos": 44, "affet": 44, "retain": 44, "driven": 44, "misnom": 44, "song": 44, "danc": 44, "eof": 44, "arriv": 44, "dispos": 44, "newidx": 44, "6687": 44, "escap": 44, "invers": 45, "flash": 45, "botnetcentr": 45, "percent": 45, "col": 45, "column": 45, "width": 45, "center": 45, "70": 45, "meet": 46, "autodetect": 46, "forcefulli": 46, "sslinc": 46, "ssllib": 46, "starttl": 46, "certifict": 46, "graphic": 46, "deliber": 46, "sdcc": 46, "kvirc": 46, "synchron": 46, "infrastructur": 46, "subject": 46, "s_client": 46, "sslport": 46, "issuer": 46, "jun": 47, "02": 47, "2500": 47, "high": 47, "therebi": [47, 49], "lang": 47, "techniqu": 47, "yourbot": 47, "myvar": 47, "held": 48, "natur": 48, "WILL": 48, "unintend": 48, "consequ": 48, "truncat": 48, "assur": 48, "replic": [48, 49], "vip": [48, 49], "subscrib": [48, 49], "badgui": 48, "comprehens": 48, "twith": 48, "gui": 48, "flagmask": 48, "ccht": 48, "histori": 48, "tmi": 48, "tv": [48, 49], "target": 48, "cmsg": 48, "msgid": 48, "htgt": 48, "viewer": 48, "similarli": 48, "arbitrarili": 48, "wspr": 48, "popul": 48, "wspm": 48, "rmst": 48, "emot": 48, "uncertainti": 48, "usst": 48, "usrntc": 48, "discontinu": 49, "technic": 49, "token": 49, "oauth": 49, "alphanumer": 49, "pretend": 49, "j9irk4vs28b0obz9easys4w2ystji3u": 49, "spoiler": 49, "sake": 49, "light": 49, "decis": 49, "notabl": 49, "topic": 49, "degrad": 49, "capac": 49, "face": 49, "hubcap": 50, "clemson": 50, "hate": 50, "milk": 50, "meaningless": 50, "titl": 50, "entitl": 50, "badg": 50, "q": 50, "mainten": 50, "washalfop": 50, "nethack": 50, "highlight": 50, "2023": [0, 3, 4, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50]}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"about": [0, 2, 39, 40, 46], "eggdrop": [0, 2, 3, 4, 5, 6, 7, 8, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 42, 44, 48], "bore": 1, "legal": 1, "stuff": 1, "an": [2, 28, 29, 30, 33], "open": 2, "sourc": [2, 16, 32], "irc": [2, 18, 33, 46, 49], "bot": [2, 16, 36, 44], "some": 2, "thing": 2, "you": 2, "can": [2, 7], "do": [2, 7, 28], "how": [2, 4, 5, 7, 28], "get": [2, 4, 16, 32, 44], "instal": [2, 3, 7, 32, 39, 46], "pre": [2, 4, 33], "requisit": [2, 4, 33], "where": 2, "find": 2, "more": 2, "help": [2, 4], "us": [2, 34, 36], "tutori": 2, "modul": [2, 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 31, 37, 44], "quick": [3, 4], "startup": [3, 4], "cygwin": 3, "requir": [3, 28, 31, 34, 44], "window": 3, "readm": 4, "notic": 4, "what": [4, 7, 28, 36], "i": [4, 7, 36], "ftp": 4, "git": 4, "develop": 4, "snapshot": 4, "docker": 4, "system": [4, 30], "upgrad": [4, 5], "command": [4, 5, 25, 31, 44, 47, 48], "line": [4, 41], "auto": 4, "start": [4, 32], "document": [4, 5], "obtain": 4, "must": 5, "read": 5, "chang": [5, 44], "v1": 5, "9": 5, "config": [5, 16, 32, 44, 47, 49], "file": [5, 16, 32, 33, 37, 44, 47, 49], "script": [5, 29, 34, 37, 46], "botnet": [5, 33, 36, 37, 46], "tcl": [5, 8, 25, 31, 34, 43, 44, 48], "includ": 6, "inform": [7, 33], "ar": 7, "compil": 7, "without": 7, "dynam": 7, "static": 7, "still": 7, "need": 7, "loadmodul": [7, 44], "bind": [8, 31, 44, 48], "intern": 8, "tabl": 8, "creation": 8, "stackabl": [8, 44], "ht_stackabl": 8, "trigger": 8, "ani": 8, "c": 8, "handler": 8, "summari": 8, "assoc": [9, 44], "blowfish": 10, "channel": [11, 16, 30, 44, 48], "compress": [12, 44], "consol": [13, 37, 44], "ctcp": [14, 39], "dn": 15, "filesi": [16, 44], "setup": 16, "partylin": [16, 25, 30, 31], "usag": [16, 39, 40, 43, 46], "cancel": 16, "cd": 16, "directori": [16, 37, 44], "cp": [16, 44], "dst": 16, "desc": [16, 44], "descript": 16, "filestat": 16, "user": [16, 30, 36, 44, 50], "clear": 16, "stat": 16, "filenam": [16, 44], "nicknam": [16, 44], "hide": 16, "ln": 16, "filepath": 16, "localfil": 16, "l": [16, 44], "filemask": 16, "mkdir": [16, 44], "dir": [16, 44], "flag": [16, 30, 36, 44, 48, 50], "mv": [16, 44], "dest": 16, "pend": 16, "pwd": 16, "quit": 16, "rm": 16, "rmdir": [16, 44], "share": [16, 23, 36], "optim": 16, "unhid": 16, "unshar": 16, "ident": 17, "note": [19, 44], "pbkdf2": 20, "seen": 21, "server": [22, 33, 34, 44], "transfer": 24, "twitch": [25, 48, 49], "limit": [25, 44, 49], "api": 25, "uptim": [26, 44], "woobi": 27, "write": [28, 29, 31], "module_start": 28, "module_t": 28, "module_clos": 28, "module_expmem": 28, "module_report": 28, "addit": [28, 33], "function": [28, 49], "common": 30, "first": 30, "step": 30, "log": [30, 37, 47], "join": [30, 34], "add": [30, 44], "host": [30, 44], "assign": 30, "permiss": 30, "configur": [30, 32, 33, 43], "set": [30, 32, 37, 39, 44, 46], "automat": 30, "restart": [30, 44], "crontab": 30, "method": 30, "old": [30, 44], "systemd": 30, "newer": 30, "authent": [30, 36, 46], "nickserv": 30, "up": [30, 32], "sasl": 30, "basic": [31, 37], "header": 31, "code": 31, "ad": [31, 36], "defin": 31, "argument": 31, "call": 31, "export": 31, "prerequisit": 32, "The": [32, 41], "super": 32, "short": 32, "version": [32, 44], "histori": 32, "download": 32, "locat": 32, "edit": [32, 49], "No": 32, "show": 32, "enabl": [33, 34, 43, 44], "tl": [33, 36, 46], "secur": [33, 36, 46], "connect": [33, 44], "protect": 33, "commun": 33, "prepar": 33, "gener": 33, "kei": [33, 44, 46], "listen": [33, 44], "account": [34, 44], "track": 34, "capabl": [34, 40], "extend": 34, "notifi": 34, "whox": 34, "check": 34, "statu": [34, 44], "determin": 34, "support": [34, 39, 40, 46], "best": 34, "effort": 34, "tag": [34, 44], "ban": [35, 44], "invit": [35, 44], "exempt": [35, 44], "link": [36, 44], "term": 36, "exampl": 36, "bottre": 36, "botflag": 36, "make": 36, "record": [36, 44], "certif": [36, 46], "core": 37, "execut": 37, "path": 37, "dcc": [37, 44, 46], "telnet": 37, "advanc": [37, 47], "ssl": [37, 46], "featur": 38, "ipv6": 39, "chat": 39, "chat4": 39, "chat6": 39, "ircv3": 40, "cap": [40, 44], "parti": 41, "patch": 42, "submit": 42, "via": [42, 44], "github": 42, "encrypt": [43, 44], "hash": 43, "background": 43, "hybrid": 43, "solo": 43, "interfac": 43, "output": 44, "putserv": 44, "text": 44, "option": 44, "puthelp": 44, "putquick": 44, "putnow": 44, "onelin": 44, "putkick": 44, "nick": [44, 48], "reason": 44, "putlog": 44, "putcmdlog": 44, "putxferlog": 44, "putloglev": 44, "": 44, "dumpfil": 44, "queuesiz": 44, "queue": 44, "clearqueu": 44, "valu": 44, "req": 44, "raw": 44, "arg": [44, 48], "tagmsg": 44, "target": 44, "ip": 44, "port": 44, "password": 44, "remov": 44, "list": 44, "manipul": 44, "countus": 44, "validus": 44, "handl": 44, "findus": 44, "userlist": 44, "passwdok": 44, "pass": 44, "getus": 44, "entri": 44, "type": [44, 48], "extra": 44, "info": 44, "setus": 44, "chhandl": 44, "new": 44, "chattr": 44, "botattr": 44, "matchattr": 44, "addus": 44, "hostmask": 44, "addbot": 44, "address": 44, "botport": 44, "userport": 44, "delus": 44, "delhost": 44, "addchanrec": 44, "delchanrec": 44, "haschanrec": 44, "getchaninfo": 44, "setchaninfo": 44, "newchanban": 44, "creator": 44, "comment": 44, "lifetim": 44, "newban": 44, "newchanexempt": 44, "newexempt": 44, "newchaninvit": 44, "newinvit": 44, "stickban": 44, "banmask": 44, "unstickban": 44, "stickexempt": 44, "exemptmask": 44, "unstickexempt": 44, "stickinvit": 44, "invitemask": 44, "unstickinvit": 44, "killchanban": 44, "killban": 44, "killchanexempt": 44, "killexempt": 44, "killchaninvit": 44, "killinvit": 44, "ischanjup": 44, "isban": 44, "ispermban": 44, "isexempt": 44, "ispermexempt": 44, "isinvit": 44, "isperminvit": 44, "isbansticki": 44, "isexemptsticki": 44, "isinvitesticki": 44, "matchban": 44, "matchexempt": 44, "matchinvit": 44, "banlist": 44, "exemptlist": 44, "invitelist": 44, "newignor": 44, "killignor": 44, "ignorelist": 44, "isignor": 44, "save": 44, "reload": 44, "backup": 44, "name": 44, "savechannel": 44, "loadchannel": 44, "channame2dnam": 44, "chandname2nam": 44, "dname": 44, "isbotnick": 44, "botisop": 44, "botishalfop": 44, "botisvoic": 44, "botonchan": 44, "isop": 44, "ishalfop": 44, "wasop": 44, "washalfop": 44, "isvoic": 44, "isidentifi": 44, "isawai": 44, "isircbot": 44, "onchan": 44, "monitor": 44, "accounttrack": 44, "getaccount": 44, "nick2hand": 44, "account2nick": 44, "hand2nick": 44, "handonchan": 44, "ischanban": 44, "ischanexempt": 44, "ischaninvit": 44, "chanban": 44, "chanexempt": 44, "chaninvit": 44, "resetban": 44, "resetexempt": 44, "resetinvit": 44, "resetchanidl": 44, "resetchanjoin": 44, "resetchan": 44, "refreshchan": 44, "getchanhost": 44, "getchanjoin": 44, "onchansplit": 44, "chanlist": 44, "chanflag": 44, "getchanidl": 44, "getchanmod": 44, "jump": 44, "pushmod": 44, "mode": 44, "flushmod": 44, "topic": 44, "validchan": 44, "isdynam": 44, "setudef": 44, "int": 44, "str": 44, "renudef": 44, "oldnam": 44, "newnam": 44, "deludef": 44, "getudef": 44, "chansettyp": 44, "isupport": 44, "isset": 44, "putdcc": 44, "idx": 44, "dccbroadcast": 44, "messag": 44, "dccputchan": 44, "boot": 44, "dccsimul": 44, "hand2idx": 44, "idx2hand": 44, "valididx": 44, "getchan": 44, "setchan": 44, "resetconsol": 44, "echo": 44, "strip": 44, "putbot": 44, "putallbot": 44, "killdcc": 44, "botlist": 44, "islink": 44, "dccuse": 44, "dcclist": 44, "socklist": 44, "whom": 44, "chan": [44, 48], "getdccidl": 44, "getdccawai": 44, "setdccawai": 44, "dccdumpfil": 44, "numberlist": 44, "erasenot": 44, "listnot": 44, "storenot": 44, "from": 44, "msg": 44, "killassoc": 44, "compressfil": 44, "level": 44, "src": 44, "uncompressfil": 44, "iscompress": 44, "setpwd": 44, "getpwd": 44, "getfil": 44, "getdir": 44, "dccsend": 44, "ircnick": 44, "filesend": 44, "fileresend": 44, "setdesc": 44, "getdesc": 44, "setown": 44, "getown": 44, "setlink": 44, "getlink": 44, "getfileq": 44, "getfilesendtim": 44, "destin": 44, "getflag": 44, "setflag": 44, "miscellan": 44, "keyword": 44, "mask": 44, "proc": 44, "unbind": 44, "logfil": 44, "maskhost": 44, "masktyp": 44, "timer": 44, "minut": 44, "count": 44, "timernam": 44, "utim": 44, "second": 44, "killtim": 44, "killutim": 44, "unixtim": 44, "durat": 44, "strftime": 44, "formatstr": 44, "time": 44, "ctime": 44, "myip": 44, "rand": 44, "control": 44, "sendnot": 44, "unlink": 44, "string": [44, 47], "decrypt": 44, "base64": 44, "encpass": 44, "die": 44, "unam": 44, "dnslookup": 44, "hostnam": 44, "arg1": 44, "arg2": 44, "argn": 44, "md5": 44, "callev": 44, "event": 44, "traffic": 44, "unloadmodul": 44, "loadhelp": 44, "helpfil": 44, "unloadhelp": 44, "reloadhelp": 44, "rehash": 44, "stripcod": 44, "matchaddr": 44, "matchcidr": 44, "block": 44, "prefix": 44, "matchstr": 44, "pattern": 44, "rfcequal": 44, "string1": 44, "string2": 44, "istl": 44, "starttl": 44, "tlsstatu": 44, "global": 44, "variabl": [44, 47], "botnick": 44, "botnam": 44, "serveraddress": 44, "numvers": 44, "onlin": 44, "lastbind": 44, "isjup": 44, "handlen": 44, "configurearg": 44, "languag": 44, "return": 44, "procedur": 44, "tcp": 44, "match": 44, "charact": 44, "textfil": 45, "substitut": 45, "tip": 47, "renam": 47, "keep": 47, "self": 47, "modifi": 47, "default": 47, "modular": 47, "your": 47, "twcmd": 48, "cmd": 48, "userst": 48, "roomstat": 48, "twitchmod": 48, "twitchvip": 48, "ismod": 48, "isvip": 48, "disclaim": 49, "regist": 49, "web": 49, "ui": 49}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"About Eggdrop": [[0, "about-eggdrop"], [2, null]], "Boring legal stuff": [[1, "boring-legal-stuff"]], "Eggdrop, an open source IRC bot": [[2, "eggdrop-an-open-source-irc-bot"]], "Some things you can do with Eggdrop": [[2, "some-things-you-can-do-with-eggdrop"]], "How to get Eggdrop": [[2, "how-to-get-eggdrop"]], "How to install Eggdrop": [[2, "how-to-install-eggdrop"]], "Installation Pre-requisites": [[2, "installation-pre-requisites"]], "Installation": [[2, "installation"], [32, "installation"], [39, "installation"], [46, "installation"]], "Where to find more help": [[2, "where-to-find-more-help"]], "Installing Eggdrop": [[2, null], [3, "installing-eggdrop"]], "Using Eggdrop": [[2, null]], "Tutorials": [[2, null]], "Eggdrop Modules": [[2, null]], "Quick Startup": [[3, "quick-startup"], [4, "quick-startup"]], "Cygwin Requirements (Windows)": [[3, "cygwin-requirements-windows"]], "Modules": [[3, "modules"], [5, "modules"], [37, "modules"]], "README": [[4, "readme"]], "Notice": [[4, "notice"]], "What is Eggdrop?": [[4, "what-is-eggdrop"]], "How to Get Eggdrop": [[4, "how-to-get-eggdrop"]], "FTP": [[4, "ftp"]], "Git Development Snapshot": [[4, "git-development-snapshot"]], "Docker": [[4, "docker"]], "System Pre-Requisites": [[4, "system-pre-requisites"]], "Upgrading": [[4, "upgrading"]], "Command Line": [[4, "command-line"]], "Auto-starting Eggdrop": [[4, "auto-starting-eggdrop"]], "Documentation": [[4, "documentation"], [5, "documentation"]], "Obtaining Help": [[4, "obtaining-help"]], "Upgrading Eggdrop": [[5, "upgrading-eggdrop"]], "How to Upgrade": [[5, "how-to-upgrade"]], "Must-read changes for Eggdrop v1.9": [[5, "must-read-changes-for-eggdrop-v1-9"]], "Config file changes": [[5, "config-file-changes"]], "Scripts": [[5, "scripts"], [37, "scripts"], [46, "scripts"]], "Botnet": [[5, "botnet"], [46, "botnet"]], "Tcl Commands": [[5, "tcl-commands"]], "Modules included with Eggdrop": [[6, "modules-included-with-eggdrop"]], "Eggdrop Module Information": [[7, "eggdrop-module-information"]], "What are modules?": [[7, "what-are-modules"]], "How to install a module": [[7, "how-to-install-a-module"]], "Can I compile Eggdrop without dynamic modules? (Static compile)": [[7, "can-i-compile-eggdrop-without-dynamic-modules-static-compile"]], "Do I still need to \u2018loadmodule\u2019 modules?": [[7, "do-i-still-need-to-loadmodule-modules"]], "Eggdrop Bind Internals": [[8, "eggdrop-bind-internals"]], "Bind Table Creation": [[8, "bind-table-creation"]], "Stackable Binds: HT_STACKABLE": [[8, "stackable-binds-ht-stackable"]], "Tcl Binding": [[8, "tcl-binding"]], "Triggering the Bind": [[8, "triggering-the-bind"]], "Triggering any Bind": [[8, "triggering-any-bind"]], "C Binding": [[8, "c-binding"]], "C Handler": [[8, "c-handler"]], "Summary": [[8, "summary"]], "Assoc Module": [[9, "assoc-module"], [44, "assoc-module"]], "Blowfish Module": [[10, "blowfish-module"]], "Channels Module": [[11, "channels-module"]], "Compress Module": [[12, "compress-module"], [44, "compress-module"]], "Console Module": [[13, "console-module"]], "CTCP Module": [[14, "ctcp-module"]], "DNS Module": [[15, "dns-module"]], "Filesys Module": [[16, "filesys-module"], [44, "filesys-module"]], "Config file setup": [[16, "config-file-setup"]], "Partyline usage": [[16, "partyline-usage"]], ".files": [[16, "files"]], ".cancel [file] \u2026": [[16, "cancel-file-file"]], ".cd ": [[16, "cd-directory"]], ".cp ": [[16, "cp-source-dst"]], ".desc ": [[16, "desc-file-description"]], ".filestats [clear]": [[16, "filestats-user-clear"]], ".stats": [[16, "stats"]], ".get [nickname]": [[16, "get-filename-nickname"]], ".hide [files] \u2026": [[16, "hide-file-files"]], ".ln ": [[16, "ln-bot-filepath-localfile"]], ".ls [filemask]": [[16, "ls-filemask"]], ".mkdir [flags [channel]]": [[16, "mkdir-dir-flags-channel"]], ".mv ": [[16, "mv-source-dest"]], ".pending": [[16, "pending"]], ".pwd": [[16, "pwd"]], ".quit": [[16, "quit"]], "rm [files] \u2026": [[16, "rm-file-files"]], ".rmdir ": [[16, "rmdir-dir"]], ".share [files] \u2026": [[16, "share-file-files"]], ".optimize": [[16, "optimize"]], ".unhide": [[16, "unhide"]], ".unshare [file] \u2026": [[16, "unshare-file-file"]], ".filesys module": [[16, "id1"]], "Ident Module": [[17, "ident"]], "IRC Module": [[18, "irc-module"]], "Notes Module": [[19, "notes-module"], [44, "notes-module"]], "PBKDF2 Module": [[20, "pbkdf2-module"]], "Seen Module": [[21, "seen-module"]], "Server Module": [[22, "server-module"]], "Share Module": [[23, "share-module"]], "Transfer Module": [[24, "transfer-module"]], "Twitch Module": [[25, "twitch-module"]], "Limitations": [[25, "limitations"]], "Tcl API": [[25, "tcl-api"]], "Partyline commands": [[25, "partyline-commands"]], "Uptime Module": [[26, "uptime-module"]], "Woobie Module": [[27, "woobie-module"]], "How to Write an Eggdrop Module": [[28, "how-to-write-an-eggdrop-module"]], "Module requirements": [[28, "module-requirements"]], "MODULE_start": [[28, "module-start"]], "MODULE_table": [[28, "module-table"]], "MODULE_close ()": [[28, "module-close"]], "MODULE_expmem": [[28, "module-expmem"]], "MODULE_report": [[28, "module-report"]], "Additional functions": [[28, "additional-functions"]], "What to do with a module?": [[28, "what-to-do-with-a-module"]], "Writing an Eggdrop Script": [[29, "writing-an-eggdrop-script"]], "Common First Steps": [[30, "common-first-steps"]], "Log on to the partyline": [[30, "log-on-to-the-partyline"]], "Common first steps": [[30, "id1"]], "Join a Channel": [[30, "join-a-channel"]], "Add a User": [[30, "add-a-user"]], "Add a Host to a User": [[30, "add-a-host-to-a-user"]], "Assign Permission Flags": [[30, "assign-permission-flags"]], "Configure Channel Settings": [[30, "configure-channel-settings"]], "Automatically restarting an Eggdrop": [[30, "automatically-restarting-an-eggdrop"]], "Crontab Method (Old)": [[30, "crontab-method-old"]], "Systemd Method (Newer Systems)": [[30, "systemd-method-newer-systems"]], "Authenticating with NickServ": [[30, "authenticating-with-nickserv"]], "Setting up SASL authentication": [[30, "setting-up-sasl-authentication"]], "Writing a Basic Eggdrop Module": [[31, "writing-a-basic-eggdrop-module"]], "Module Header": [[31, "module-header"]], "Required Code": [[31, "required-code"]], "Adding a Partyline Command": [[31, "adding-a-partyline-command"]], "Adding a Tcl Command": [[31, "adding-a-tcl-command"]], "Adding a Tcl Bind": [[31, "adding-a-tcl-bind"]], "Defining bind arguments": [[31, "defining-bind-arguments"]], "Calling the Bind": [[31, "calling-the-bind"]], "Exporting the Bind": [[31, "exporting-the-bind"]], "Setting Up Eggdrop": [[32, "setting-up-eggdrop"]], "Prerequisites": [[32, "prerequisites"]], "The super-short version": [[32, "the-super-short-version"]], "Getting the source": [[32, "getting-the-source"]], "History": [[32, "history"]], "Download locations": [[32, "download-locations"]], "Configuration": [[32, "configuration"]], "Editing the config file": [[32, "editing-the-config-file"], [49, "editing-the-config-file"]], "Starting the Eggdrop": [[32, "starting-the-eggdrop"]], "No show?": [[32, "no-show"]], "Enabling TLS Security on Eggdrop": [[33, "enabling-tls-security-on-eggdrop"]], "Pre-requisites": [[33, "pre-requisites"]], "Connecting to a TLS-enabled IRC server": [[33, "connecting-to-a-tls-enabled-irc-server"]], "Protecting Botnet Communications": [[33, "protecting-botnet-communications"]], "Configuration File Preparation - Generating Keys": [[33, "configuration-file-preparation-generating-keys"]], "Configuration File Preparation - Listening with TLS": [[33, "configuration-file-preparation-listening-with-tls"]], "Connecting to an Eggdrop listening with TLS": [[33, "connecting-to-an-eggdrop-listening-with-tls"]], "Additional Information": [[33, "additional-information"]], "Account tracking in Eggdrop": [[34, "account-tracking-in-eggdrop"]], "Required Server Capabilities": [[34, "required-server-capabilities"]], "extended-join": [[34, "extended-join"]], "account-notify": [[34, "account-notify"]], "WHOX": [[34, "whox"]], "Enabling Eggdrop Account Tracking": [[34, "enabling-eggdrop-account-tracking"]], "Checking Account-tracking Status": [[34, "checking-account-tracking-status"]], "Determining if a Server Supports Account Capabilities": [[34, "determining-if-a-server-supports-account-capabilities"]], "Best-Effort Account Tracking": [[34, "best-effort-account-tracking"]], "account-tag": [[34, "account-tag"]], "Using Accounts with Tcl Scripts": [[34, "using-accounts-with-tcl-scripts"]], "Bans, Invites, and Exempts": [[35, "bans-invites-and-exempts"]], "Botnet Sharing and Linking": [[36, "botnet-sharing-and-linking"]], "What is a botnet?": [[36, "what-is-a-botnet"]], "Terms": [[36, "terms"]], "Example bottree": [[36, "example-bottree"]], "Bot Flags": [[36, "bot-flags"]], "Adding and linking bots": [[36, "adding-and-linking-bots"]], "Secure (TLS) Links": [[36, "secure-tls-links"]], "Using botflags": [[36, "using-botflags"]], "Making bots share user records": [[36, "making-bots-share-user-records"]], "Using certificates to authenticate Eggdrops": [[36, "using-certificates-to-authenticate-eggdrops"]], "Eggdrop Core Settings": [[37, "eggdrop-core-settings"]], "Executable Path": [[37, "executable-path"]], "Basic Settings": [[37, "basic-settings"]], "Log Files": [[37, "log-files"]], "Console Settings": [[37, "console-settings"]], "File and Directory Settings": [[37, "file-and-directory-settings"]], "Botnet/Dcc/Telnet Settings": [[37, "botnet-dcc-telnet-settings"]], "Advanced Settings": [[37, "advanced-settings"]], "SSL Settings": [[37, "ssl-settings"]], "Eggdrop Features": [[38, "eggdrop-features"]], "IPv6 support": [[39, "ipv6-support"]], "About": [[39, "about"], [40, "about"], [46, "about"]], "Usage": [[39, "usage"], [40, "usage"], [43, "usage"], [46, "usage"]], "CTCP CHAT/CHAT4/CHAT6": [[39, "ctcp-chat-chat4-chat6"]], "Settings": [[39, "settings"]], "IRCv3 support": [[40, "ircv3-support"]], "Supported CAP capabilities": [[40, "supported-cap-capabilities"]], "The Party Line": [[41, "the-party-line"]], "Patching Eggdrop": [[42, "patching-eggdrop"]], "Submitting a patch via GitHub": [[42, "submitting-a-patch-via-github"]], "Encryption/Hashing": [[43, "encryption-hashing"]], "Background": [[43, "background"]], "Hybrid Configuration": [[43, "hybrid-configuration"]], "Enabling hybrid configuration": [[43, "enabling-hybrid-configuration"]], "Solo configuration": [[43, "solo-configuration"]], "Enabling solo configuration": [[43, "enabling-solo-configuration"]], "Tcl Interface": [[43, "tcl-interface"]], "Eggdrop Tcl Commands": [[44, "eggdrop-tcl-commands"]], "Output Commands": [[44, "output-commands"]], "putserv [options]": [[44, "putserv-text-options"]], "puthelp [options]": [[44, "puthelp-text-options"]], "putquick [options]": [[44, "putquick-text-options"]], "putnow [-oneline]": [[44, "putnow-text-oneline"]], "putkick [reason]": [[44, "putkick-channel-nick-nick-reason"]], "putlog ": [[44, "putlog-text"]], "putcmdlog ": [[44, "putcmdlog-text"]], "putxferlog ": [[44, "putxferlog-text"]], "putloglev ": [[44, "putloglev-flag-s-channel-text"]], "dumpfile ": [[44, "dumpfile-nick-filename"]], "queuesize [queue]": [[44, "queuesize-queue"]], "clearqueue ": [[44, "clearqueue-queue"]], "cap [arg]": [[44, "cap-ls-values-req-enabled-raw-arg"]], "tagmsg ": [[44, "tagmsg-tags-target"]], "server add [[+]port [password]]": [[44, "server-add-ip-host-port-password"]], "server remove [[+]port]": [[44, "server-remove-ip-host-port"]], "server list": [[44, "server-list"]], "User Record Manipulation Commands": [[44, "user-record-manipulation-commands"]], "countusers": [[44, "countusers"]], "validuser ": [[44, "validuser-handle"]], "finduser [-account] ": [[44, "finduser-account-value"]], "userlist [flags]": [[44, "userlist-flags"]], "passwdok ": [[44, "passwdok-handle-pass"]], "getuser [entry-type] [extra info]": [[44, "getuser-handle-entry-type-extra-info"]], "setuser [extra info]": [[44, "setuser-handle-entry-type-extra-info"]], "chhandle ": [[44, "chhandle-old-handle-new-handle"]], "chattr [changes [channel]]": [[44, "chattr-handle-changes-channel"]], "botattr [changes [channel]]": [[44, "botattr-handle-changes-channel"]], "matchattr [channel]": [[44, "matchattr-handle-flags-channel"]], "adduser [hostmask]": [[44, "adduser-handle-hostmask"]], "addbot
    [botport [userport]]": [[44, "addbot-handle-address-botport-userport"]], "deluser ": [[44, "deluser-handle"]], "delhost ": [[44, "delhost-handle-hostmask"]], "addchanrec ": [[44, "addchanrec-handle-channel"]], "delchanrec ": [[44, "delchanrec-handle-channel"]], "haschanrec ": [[44, "haschanrec-handle-channel"]], "getchaninfo ": [[44, "getchaninfo-handle-channel"]], "setchaninfo ": [[44, "setchaninfo-handle-channel-info"]], "newchanban [lifetime] [options]": [[44, "newchanban-channel-ban-creator-comment-lifetime-options"]], "newban [lifetime] [options]": [[44, "newban-ban-creator-comment-lifetime-options"]], "newchanexempt [lifetime] [options]": [[44, "newchanexempt-channel-exempt-creator-comment-lifetime-options"]], "newexempt [lifetime] [options]": [[44, "newexempt-exempt-creator-comment-lifetime-options"]], "newchaninvite [lifetime] [options]": [[44, "newchaninvite-channel-invite-creator-comment-lifetime-options"]], "newinvite [lifetime] [options]": [[44, "newinvite-invite-creator-comment-lifetime-options"]], "stickban [channel]": [[44, "stickban-banmask-channel"]], "unstickban [channel]": [[44, "unstickban-banmask-channel"]], "stickexempt [channel]": [[44, "stickexempt-exemptmask-channel"]], "unstickexempt [channel]": [[44, "unstickexempt-exemptmask-channel"]], "stickinvite [channel]": [[44, "stickinvite-invitemask-channel"]], "unstickinvite [channel]": [[44, "unstickinvite-invitemask-channel"]], "killchanban ": [[44, "killchanban-channel-ban"]], "killban ": [[44, "killban-ban"]], "killchanexempt ": [[44, "killchanexempt-channel-exempt"]], "killexempt ": [[44, "killexempt-exempt"]], "killchaninvite ": [[44, "killchaninvite-channel-invite"]], "killinvite ": [[44, "killinvite-invite"]], "ischanjuped ": [[44, "ischanjuped-channel"]], "isban [channel [-channel]]": [[44, "isban-ban-channel-channel"]], "ispermban [channel [-channel]]": [[44, "ispermban-ban-channel-channel"]], "isexempt [channel [-channel]]": [[44, "isexempt-exempt-channel-channel"]], "ispermexempt [channel [-channel]]": [[44, "ispermexempt-exempt-channel-channel"]], "isinvite [channel [-channel]]": [[44, "isinvite-invite-channel-channel"]], "isperminvite [channel [-channel]]": [[44, "isperminvite-invite-channel-channel"]], "isbansticky [channel [-channel]]": [[44, "isbansticky-ban-channel-channel"]], "isexemptsticky [channel [-channel]]": [[44, "isexemptsticky-exempt-channel-channel"]], "isinvitesticky [channel [-channel]]": [[44, "isinvitesticky-invite-channel-channel"]], "matchban [channel]": [[44, "matchban-nick-user-host-channel"]], "matchexempt [channel]": [[44, "matchexempt-nick-user-host-channel"]], "matchinvite [channel]": [[44, "matchinvite-nick-user-host-channel"]], "banlist [channel]": [[44, "banlist-channel"]], "exemptlist [channel]": [[44, "exemptlist-channel"]], "invitelist [channel]": [[44, "invitelist-channel"]], "newignore [lifetime]": [[44, "newignore-hostmask-creator-comment-lifetime"]], "killignore ": [[44, "killignore-hostmask"]], "ignorelist": [[44, "ignorelist"]], "isignore ": [[44, "isignore-hostmask"]], "save": [[44, "save"]], "reload": [[44, "reload"]], "backup": [[44, "backup"]], "getting-users": [[44, "getting-users"]], "Channel Commands": [[44, "channel-commands"]], "channel add [option-list]": [[44, "channel-add-name-option-list"]], "channel set ": [[44, "channel-set-name-options"]], "channel info ": [[44, "channel-info-name"]], "channel get [setting]": [[44, "channel-get-name-setting"]], "channel remove ": [[44, "channel-remove-name"]], "savechannels": [[44, "savechannels"]], "loadchannels": [[44, "loadchannels"]], "channels": [[44, "channels"]], "channame2dname ": [[44, "channame2dname-channel-name"]], "chandname2name ": [[44, "chandname2name-channel-dname"]], "isbotnick ": [[44, "isbotnick-nick"]], "botisop [channel]": [[44, "botisop-channel"]], "botishalfop [channel]": [[44, "botishalfop-channel"]], "botisvoice [channel]": [[44, "botisvoice-channel"]], "botonchan [channel]": [[44, "botonchan-channel"]], "isop [channel]": [[44, "isop-nickname-channel"]], "ishalfop [channel]": [[44, "ishalfop-nickname-channel"]], "wasop ": [[44, "wasop-nickname-channel"]], "washalfop ": [[44, "washalfop-nickname-channel"]], "isvoice [channel]": [[44, "isvoice-nickname-channel"]], "isidentified [channel]": [[44, "isidentified-nickname-channel"]], "isaway [channel]": [[44, "isaway-nickname-channel"]], "isircbot [channel]": [[44, "isircbot-nickname-channel"]], "onchan [channel]": [[44, "onchan-nickname-channel"]], "monitor [nickname]": [[44, "monitor-command-nickname"]], "accounttracking": [[44, "accounttracking"]], "getaccount [channel]": [[44, "getaccount-nickname-channel"]], "nick2hand [channel]": [[44, "nick2hand-nickname-channel"]], "account2nicks [channel]": [[44, "account2nicks-handle-channel"]], "hand2nick [channel]": [[44, "hand2nick-handle-channel"]], "hand2nicks [channel]": [[44, "hand2nicks-handle-channel"]], "handonchan [channel]": [[44, "handonchan-handle-channel"]], "ischanban ": [[44, "ischanban-ban-channel"]], "ischanexempt ": [[44, "ischanexempt-exempt-channel"]], "ischaninvite ": [[44, "ischaninvite-invite-channel"]], "chanbans ": [[44, "chanbans-channel"]], "chanexempts ": [[44, "chanexempts-channel"]], "chaninvites ": [[44, "chaninvites-channel"]], "resetbans ": [[44, "resetbans-channel"]], "resetexempts ": [[44, "resetexempts-channel"]], "resetinvites ": [[44, "resetinvites-channel"]], "resetchanidle [nick] ": [[44, "resetchanidle-nick-channel"]], "resetchanjoin [nick] ": [[44, "resetchanjoin-nick-channel"]], "resetchan [flags]": [[44, "resetchan-channel-flags"]], "refreshchan [flags]": [[44, "refreshchan-channel-flags"]], "getchanhost [channel]": [[44, "getchanhost-nickname-channel"]], "getchanjoin ": [[44, "getchanjoin-nickname-channel"]], "onchansplit [channel]": [[44, "onchansplit-nick-channel"]], "chanlist [flags][<&|>chanflags]": [[44, "chanlist-channel-flags-chanflags"]], "getchanidle ": [[44, "getchanidle-nickname-channel"]], "getchanmode ": [[44, "getchanmode-channel"]], "jump [server [[+]port [password]]]": [[44, "jump-server-port-password"]], "pushmode [arg]": [[44, "pushmode-channel-mode-arg"]], "flushmode ": [[44, "flushmode-channel"]], "topic ": [[44, "topic-channel"]], "validchan ": [[44, "validchan-channel"]], "isdynamic ": [[44, "isdynamic-channel"]], "setudef ": [[44, "setudef-flag-int-str-name"]], "renudef ": [[44, "renudef-flag-int-str-oldname-newname"]], "deludef ": [[44, "deludef-flag-int-str-name"]], "getudefs [flag/int/str]": [[44, "getudefs-flag-int-str"]], "chansettype ": [[44, "chansettype-setting"]], "isupport get [key]": [[44, "isupport-get-key"]], "isupport isset ": [[44, "isupport-isset-key"]], "DCC Commands": [[44, "dcc-commands"]], "putdcc [-raw]": [[44, "putdcc-idx-text-raw"]], "dccbroadcast ": [[44, "dccbroadcast-message"]], "dccputchan ": [[44, "dccputchan-channel-message"]], "boot [reason]": [[44, "boot-user-bot-reason"]], "dccsimul ": [[44, "dccsimul-idx-text"]], "hand2idx ": [[44, "hand2idx-handle"]], "idx2hand ": [[44, "idx2hand-idx"]], "valididx ": [[44, "valididx-idx"]], "getchan ": [[44, "getchan-idx"]], "setchan ": [[44, "setchan-idx-channel"]], "console [channel] [console-modes]": [[44, "console-idx-channel-console-modes"]], "resetconsole ": [[44, "resetconsole-idx"]], "echo [status]": [[44, "echo-idx-status"]], "strip [+/-strip-flags]": [[44, "strip-idx-strip-flags"]], "putbot ": [[44, "putbot-bot-nick-message"]], "putallbots ": [[44, "putallbots-message"]], "killdcc ": [[44, "killdcc-idx"]], "bots": [[44, "bots"]], "botlist": [[44, "botlist"]], "islinked ": [[44, "islinked-bot"]], "dccused": [[44, "dccused"]], "dcclist [type]": [[44, "dcclist-type"]], "socklist [type]": [[44, "socklist-type"]], "whom ": [[44, "whom-chan"]], "getdccidle ": [[44, "getdccidle-idx"]], "getdccaway ": [[44, "getdccaway-idx"]], "setdccaway ": [[44, "setdccaway-idx-message"]], "connect <[+]port>": [[44, "connect-host-port"]], "listen [ip] [options [flag]]": [[44, "listen-ip-port-type-options-flag"]], "dccdumpfile ": [[44, "dccdumpfile-idx-filename"]], "notes [numberlist]": [[44, "notes-user-numberlist"]], "erasenotes ": [[44, "erasenotes-user-numberlist"]], "listnotes ": [[44, "listnotes-user-numberlist"]], "storenote ": [[44, "storenote-from-to-msg-idx"]], "assoc [name]": [[44, "assoc-chan-name"]], "killassoc ": [[44, "killassoc-chan"]], "compressfile [-level ] [target-file]": [[44, "compressfile-level-level-src-file-target-file"]], "and": [[44, "and"]], "uncompressfile [target-file]": [[44, "uncompressfile-src-file-target-file"]], "iscompressed ": [[44, "iscompressed-filename"]], "setpwd ": [[44, "setpwd-idx-dir"]], "getpwd ": [[44, "getpwd-idx"]], "getfiles ": [[44, "getfiles-dir"]], "getdirs ": [[44, "getdirs-dir"]], "dccsend ": [[44, "dccsend-filename-ircnick"]], "filesend [ircnick]": [[44, "filesend-idx-filename-ircnick"]], "fileresend [ircnick]": [[44, "fileresend-idx-filename-ircnick"]], "setdesc ": [[44, "setdesc-dir-file-desc"]], "getdesc ": [[44, "getdesc-dir-file"]], "setowner ": [[44, "setowner-dir-file-handle"]], "getowner ": [[44, "getowner-dir-file"]], "setlink ": [[44, "setlink-dir-file-link"]], "getlink ": [[44, "getlink-dir-file"]], "getfileq ": [[44, "getfileq-handle"]], "getfilesendtime ": [[44, "getfilesendtime-idx"]], "mkdir [ [channel]]": [[44, "mkdir-directory-required-flags-channel"]], "rmdir ": [[44, "rmdir-directory"]], "mv ": [[44, "mv-file-destination"]], "cp ": [[44, "cp-file-destination"]], "getflags ": [[44, "getflags-dir"]], "setflags [ [channel]]": [[44, "setflags-dir-flags-channel"]], "Miscellaneous Commands": [[44, "miscellaneous-commands"]], "bind [proc-name]": [[44, "bind-type-flags-keyword-mask-proc-name"]], "unbind ": [[44, "unbind-type-flags-keyword-mask-proc-name"]], "binds [type/mask]": [[44, "binds-type-mask"]], "logfile [ ]": [[44, "logfile-modes-channel-filename"]], "maskhost [masktype]": [[44, "maskhost-nick-user-host-masktype"]], "timer [count [timerName]]": [[44, "timer-minutes-tcl-command-count-timername"]], "utimer [count [timerName]]": [[44, "utimer-seconds-tcl-command-count-timername"]], "timers": [[44, "timers"]], "utimers": [[44, "utimers"]], "killtimer ": [[44, "killtimer-timername"]], "killutimer ": [[44, "killutimer-timername"]], "unixtime": [[44, "unixtime"]], "duration ": [[44, "duration-seconds"]], "strftime [time]": [[44, "strftime-formatstring-time"]], "ctime ": [[44, "ctime-unixtime"]], "myip": [[44, "myip"]], "rand ": [[44, "rand-limit"]], "control ": [[44, "control-idx-command"]], "sendnote ": [[44, "sendnote-from-to-bot-message"]], "link [via-bot] ": [[44, "link-via-bot-bot"]], "unlink [comment]": [[44, "unlink-bot-comment"]], "encrypt ": [[44, "encrypt-key-string"]], "decrypt ": [[44, "decrypt-key-encrypted-base64-string"]], "encpass ": [[44, "encpass-password"]], "die [reason]": [[44, "die-reason"]], "unames": [[44, "unames"]], "dnslookup [[arg1] [arg2] \u2026 [argN]]": [[44, "dnslookup-ip-address-hostname-proc-arg1-arg2-argn"]], "md5 ": [[44, "md5-string"]], "callevent ": [[44, "callevent-event"]], "traffic": [[44, "traffic"]], "modules": [[44, "modules"]], "loadmodule ": [[44, "loadmodule-module"]], "unloadmodule ": [[44, "unloadmodule-module"]], "loadhelp ": [[44, "loadhelp-helpfile-name"]], "unloadhelp ": [[44, "unloadhelp-helpfile-name"]], "reloadhelp": [[44, "reloadhelp"]], "restart": [[44, "restart"]], "rehash": [[44, "rehash"]], "stripcodes ": [[44, "stripcodes-strip-flags-string"]], "matchaddr
    ": [[44, "matchaddr-hostmask-address"]], "matchcidr
    ": [[44, "matchcidr-block-address-prefix"]], "matchstr ": [[44, "matchstr-pattern-string"]], "rfcequal ": [[44, "rfcequal-string1-string2"]], "status [type]": [[44, "status-type"]], "istls ": [[44, "istls-idx"]], "starttls ": [[44, "starttls-idx"]], "tlsstatus ": [[44, "tlsstatus-idx"]], "Global Variables": [[44, "global-variables"]], "botnick": [[44, "botnick"]], "botname": [[44, "botname"]], "server": [[44, "server"]], "serveraddress": [[44, "serveraddress"]], "version": [[44, "version"]], "numversion*": [[44, "numversion"]], "uptime": [[44, "uptime"]], "server-online": [[44, "server-online"]], "lastbind": [[44, "lastbind"]], "isjuped": [[44, "isjuped"]], "handlen": [[44, "handlen"]], "config": [[44, "config"]], "configureargs": [[44, "configureargs"]], "language": [[44, "language"]], "Binds": [[44, "binds"], [48, "binds"]], "Stackable binds": [[44, "stackable-binds"]], "Removing a bind": [[44, "removing-a-bind"]], "Flag Masks": [[44, "flag-masks"]], "Bind Types": [[44, "bind-types"], [48, "bind-types"]], "Return Values": [[44, "return-values"]], "Control Procedures": [[44, "control-procedures"]], "TCP Connections": [[44, "tcp-connections"]], "Match Characters": [[44, "match-characters"]], "Textfile Substitutions": [[45, "textfile-substitutions"]], "TLS support": [[46, "tls-support"]], "IRC": [[46, "irc"]], "Secure DCC": [[46, "secure-dcc"]], "Keys, certificates and authentication": [[46, "keys-certificates-and-authentication"]], "SSL/TLS Settings": [[46, "ssl-tls-settings"]], "Advanced Tips": [[47, "advanced-tips"]], "Renaming commands": [[47, "renaming-commands"]], "Keeping Logs": [[47, "keeping-logs"]], "Self-logging": [[47, "self-logging"]], "Modifying Default Strings": [[47, "modifying-default-strings"]], "Modularizing Your Config File": [[47, "modularizing-your-config-file"]], "Variables in Your Config": [[47, "variables-in-your-config"]], "Eggdrop Twitch Tcl Commands": [[48, "eggdrop-twitch-tcl-commands"]], "Commands": [[48, "commands"]], "twcmd [arg]": [[48, "twcmd-chan-cmd-arg"]], "userstate ": [[48, "userstate-channel"]], "roomstate ": [[48, "roomstate-channel"]], "twitchmods ": [[48, "twitchmods-channel"]], "twitchvips ": [[48, "twitchvips-channel"]], "ismod [channel]": [[48, "ismod-nick-channel"]], "isvip [channel]": [[48, "isvip-nick-channel"]], "Flags": [[48, "flags"]], "Twitch": [[49, "twitch"]], "Disclaimer": [[49, "disclaimer"]], "Registering with Twitch": [[49, "registering-with-twitch"]], "Twitch web UI functions": [[49, "twitch-web-ui-functions"]], "Twitch IRC limitations": [[49, "twitch-irc-limitations"]], "Users and Flags": [[50, "users-and-flags"]]}, "indexentries": {}}) \ No newline at end of file +Search.setIndex({"docnames": ["about/about", "about/legal", "index", "install/install", "install/readme", "install/upgrading", "modules/included", "modules/index", "modules/internals", "modules/mod/assoc", "modules/mod/blowfish", "modules/mod/channels", "modules/mod/compress", "modules/mod/console", "modules/mod/ctcp", "modules/mod/dns", "modules/mod/filesys", "modules/mod/ident", "modules/mod/irc", "modules/mod/notes", "modules/mod/pbkdf2", "modules/mod/python", "modules/mod/seen", "modules/mod/server", "modules/mod/share", "modules/mod/transfer", "modules/mod/twitch", "modules/mod/uptime", "modules/mod/woobie", "modules/writing", "tutorials/firstscript", "tutorials/firststeps", "tutorials/module", "tutorials/setup", "tutorials/tlssetup", "using/accounts", "using/autoscripts", "using/bans", "using/botnet", "using/core", "using/features", "using/ipv6", "using/ircv3", "using/partyline", "using/patch", "using/pbkdf2info", "using/tcl-commands", "using/text-sub", "using/tls", "using/tricks", "using/twitch-tcl-commands", "using/twitchinfo", "using/users"], "filenames": ["about/about.rst", "about/legal.rst", "index.rst", "install/install.rst", "install/readme.rst", "install/upgrading.rst", "modules/included.rst", "modules/index.rst", "modules/internals.rst", "modules/mod/assoc.rst", "modules/mod/blowfish.rst", "modules/mod/channels.rst", "modules/mod/compress.rst", "modules/mod/console.rst", "modules/mod/ctcp.rst", "modules/mod/dns.rst", "modules/mod/filesys.rst", "modules/mod/ident.rst", "modules/mod/irc.rst", "modules/mod/notes.rst", "modules/mod/pbkdf2.rst", "modules/mod/python.rst", "modules/mod/seen.rst", "modules/mod/server.rst", "modules/mod/share.rst", "modules/mod/transfer.rst", "modules/mod/twitch.rst", "modules/mod/uptime.rst", "modules/mod/woobie.rst", "modules/writing.rst", "tutorials/firstscript.rst", "tutorials/firststeps.rst", "tutorials/module.rst", "tutorials/setup.rst", "tutorials/tlssetup.rst", "using/accounts.rst", "using/autoscripts.rst", "using/bans.rst", "using/botnet.rst", "using/core.rst", "using/features.rst", "using/ipv6.rst", "using/ircv3.rst", "using/partyline.rst", "using/patch.rst", "using/pbkdf2info.rst", "using/tcl-commands.rst", "using/text-sub.rst", "using/tls.rst", "using/tricks.rst", "using/twitch-tcl-commands.rst", "using/twitchinfo.rst", "using/users.rst"], "titles": ["About Eggdrop", "Boring legal stuff", "Eggdrop, an open source IRC bot", "Installing Eggdrop", "README", "Upgrading Eggdrop", "Modules included with Eggdrop", "Eggdrop Module Information", "Eggdrop Bind Internals", "Assoc Module", "Blowfish Module", "Channels Module", "Compress Module", "Console Module", "CTCP Module", "DNS Module", "Filesys Module", "Ident Module", "IRC Module", "Notes Module", "PBKDF2 Module", "Python Module", "Seen Module", "Server Module", "Share Module", "Transfer Module", "Twitch Module", "Uptime Module", "Woobie Module", "How to Write an Eggdrop Module", "Writing an Eggdrop Script", "Common First Steps", "Writing a Basic Eggdrop Module", "Setting Up Eggdrop", "Enabling TLS Security on Eggdrop", "Account tracking in Eggdrop", "Eggdrop Autoscripts", "Bans, Invites, and Exempts", "Botnet Sharing and Linking", "Eggdrop Core Settings", "Eggdrop Features", "IPv6 support", "IRCv3 support", "The Party Line", "Patching Eggdrop", "Encryption/Hashing", "Eggdrop Tcl Commands", "Textfile Substitutions", "TLS support", "Advanced Tips", "Eggdrop Twitch Tcl Commands", "Twitch", "Users and Flags"], "terms": {"current": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52], "version": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 47, 48, 49, 50, 51, 52], "1": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52], "9": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52], "5": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52], "last": [0, 5, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 33, 37, 39, 41, 42, 43, 46, 47, 48, 49, 50, 52], "revis": [0, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 37, 39, 41, 42, 43, 46, 47, 48, 49, 50, 52], "juli": 0, "27": [0, 12, 17, 24, 42], "2010": [0, 11, 15, 23, 39, 41, 42, 47, 48], "wa": [0, 2, 6, 8, 20, 26, 30, 32, 33, 36, 38, 42, 45, 46, 48, 50, 51], "creat": [0, 3, 4, 8, 16, 17, 21, 24, 29, 30, 31, 32, 33, 36, 37, 39, 44, 45, 46, 48, 49, 51], "around": [0, 4, 26, 34, 41, 46, 51], "decemb": [0, 28, 40, 43], "1993": [0, 40], "help": [0, 3, 8, 14, 23, 29, 30, 31, 32, 33, 36, 37, 38, 39, 41, 43, 46, 47, 52], "stop": [0, 11, 16, 18, 29, 31, 46, 50], "incess": 0, "war": 0, "gayteen": 0, "It": [0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 16, 18, 23, 27, 29, 31, 33, 35, 36, 38, 39, 40, 41, 43, 46, 50, 51], "spawn": 0, "from": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 16, 17, 18, 19, 20, 21, 23, 24, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 43, 45, 47, 48, 49, 50, 51, 52], "anoth": [0, 8, 11, 16, 18, 19, 23, 24, 29, 33, 36, 38, 39, 46, 47, 50], "bot": [0, 1, 3, 4, 5, 6, 7, 8, 11, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 30, 31, 33, 34, 37, 39, 40, 41, 42, 43, 45, 47, 48, 49, 50, 51, 52], "process": [0, 3, 4, 5, 12, 16, 17, 25, 31, 33, 36, 38, 45, 46, 48], "being": [0, 4, 11, 16, 18, 23, 34, 35, 36, 40, 41, 46, 50], "written": [0, 21, 29, 32, 33, 36, 46, 51], "time": [0, 3, 4, 6, 11, 15, 16, 17, 18, 20, 24, 25, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 45, 47, 48, 49, 51], "call": [0, 3, 4, 8, 21, 29, 30, 31, 36, 38, 39, 46, 50], "unrest": 0, "The": [0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 14, 15, 16, 17, 20, 21, 23, 24, 25, 26, 27, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 42, 45, 46, 48, 49, 50, 51, 52], "purpos": [0, 1, 6, 8, 27, 28, 32, 38, 39, 46], "answer": [0, 7, 14, 17, 23, 30], "request": [0, 4, 5, 7, 11, 14, 16, 18, 23, 33, 35, 37, 39, 41, 42, 44, 46, 48, 49, 51], "other": [0, 1, 4, 6, 8, 10, 11, 15, 16, 17, 18, 19, 20, 23, 24, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 50, 51, 52], "first": [0, 2, 4, 5, 6, 8, 16, 20, 23, 29, 30, 32, 33, 34, 38, 39, 45, 46, 48, 49, 50], "public": [0, 1, 4, 30, 31, 32, 34, 39, 46, 48, 49, 52], "releas": [0, 1, 33, 45, 46], "0": [0, 4, 8, 11, 13, 14, 16, 17, 18, 19, 20, 21, 23, 24, 25, 29, 30, 31, 32, 33, 36, 38, 39, 41, 42, 43, 45, 46, 48, 49, 50], "6": [0, 5, 8, 11, 18, 31, 33, 36, 39, 41, 46], "sinc": [0, 3, 5, 18, 33, 36, 38, 39, 40, 41, 46, 48, 49], "ha": [0, 1, 2, 4, 5, 6, 8, 11, 15, 16, 18, 23, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 45, 46, 48, 50, 51, 52], "grown": 0, "what": [0, 1, 2, 5, 6, 8, 11, 16, 18, 23, 27, 30, 31, 32, 33, 36, 39, 42, 43, 45, 46], "you": [0, 1, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52], "have": [0, 1, 3, 4, 5, 6, 8, 10, 11, 13, 16, 18, 19, 20, 21, 23, 24, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 45, 46, 48, 49, 50, 51, 52], "befor": [0, 4, 8, 11, 15, 17, 18, 19, 23, 24, 25, 29, 31, 32, 33, 35, 36, 38, 39, 46, 51], "i": [0, 1, 2, 3, 5, 6, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52], "world": [0, 2, 4, 21, 34, 39], "": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 13, 16, 17, 18, 22, 23, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 41, 43, 45, 47, 48, 49, 50, 51, 52], "most": [0, 2, 4, 5, 17, 18, 23, 29, 30, 31, 33, 34, 39, 40, 43, 46, 50, 51], "popular": [0, 4, 5, 33, 39], "internet": [0, 4, 46, 48], "relai": [0, 4, 38, 39], "chat": [0, 2, 4, 6, 8, 14, 23, 31, 33, 38, 39, 40, 43, 46, 48, 50, 51], "irc": [0, 4, 6, 8, 16, 17, 23, 26, 30, 31, 32, 33, 35, 37, 38, 39, 40, 41, 42, 43, 46, 47, 49, 50, 52], "freeli": [0, 4, 21], "distribut": [0, 1, 4, 32, 33], "under": [0, 4, 32, 33, 40, 46], "gnu": [0, 1, 3, 4, 8, 12, 32], "gener": [0, 1, 3, 4, 8, 20, 26, 30, 31, 32, 33, 42, 45, 46, 48, 51], "licens": [0, 1, 4, 32], "gpl": [0, 4, 32], "featur": [0, 2, 4, 7, 11, 18, 23, 24, 31, 33, 35, 39, 41, 42, 44, 46, 48, 51, 52], "rich": [0, 4, 33], "program": [0, 2, 4, 17, 31, 32, 33], "design": [0, 2, 4, 6, 20, 36, 42, 50], "easili": [0, 1, 2, 4, 30, 40, 46], "us": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 23, 24, 25, 29, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 43, 45, 46, 47, 48, 49, 50, 51, 52], "expand": [0, 2, 4], "upon": [0, 4, 50, 52], "both": [0, 4, 11, 23, 25, 34, 35, 38, 41, 45, 46, 48], "novic": [0, 4], "advanc": [0, 2, 4, 6, 22, 30, 40], "user": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29, 30, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 47, 48, 49, 50, 51], "varieti": [0, 4], "hardwar": [0, 4], "softwar": [0, 1, 2, 4, 32], "platform": [0, 4, 26, 46, 51], "an": [0, 3, 4, 5, 6, 7, 8, 10, 11, 15, 16, 17, 18, 20, 23, 25, 26, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51], "sit": [0, 4, 39, 45], "channel": [0, 2, 4, 5, 6, 8, 9, 13, 18, 22, 23, 24, 26, 29, 30, 33, 35, 36, 37, 38, 39, 40, 43, 47, 49, 51, 52], "perform": [0, 3, 4, 5, 8, 11, 32, 33, 46, 52], "autom": [0, 2, 4], "task": [0, 2, 4, 8, 38], "while": [0, 4, 5, 11, 17, 26, 33, 35, 36, 37, 39, 43, 45, 46, 51], "look": [0, 4, 5, 6, 8, 11, 21, 22, 27, 28, 30, 31, 32, 34, 35, 39, 40, 45, 46, 48, 51], "just": [0, 3, 4, 5, 6, 8, 15, 16, 18, 20, 21, 24, 29, 31, 32, 33, 35, 36, 38, 39, 43, 45, 46, 49, 50, 51], "like": [0, 1, 4, 8, 10, 11, 14, 16, 18, 20, 21, 29, 30, 31, 32, 33, 36, 39, 40, 41, 43, 44, 45, 46, 48, 50, 51, 52], "normal": [0, 4, 6, 14, 15, 16, 17, 21, 23, 29, 30, 34, 36, 39, 46, 48, 49, 50, 51], "some": [0, 4, 5, 6, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 29, 32, 33, 35, 37, 38, 39, 40, 41, 42, 46, 48, 49, 51, 52], "function": [0, 1, 2, 4, 6, 7, 8, 20, 21, 26, 32, 33, 38, 39, 41, 45, 46, 49, 50], "includ": [0, 2, 3, 4, 7, 8, 18, 21, 27, 29, 32, 33, 34, 37, 39, 40, 41, 45, 46, 48, 50, 51], "protect": [0, 2, 3, 4, 11, 20, 23, 31, 33, 37, 39, 45, 46, 48, 52], "abus": [0, 2, 4], "allow": [0, 3, 4, 5, 6, 7, 11, 12, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 29, 30, 31, 32, 33, 35, 36, 38, 39, 40, 45, 46, 48, 49, 51], "privileg": [0, 4, 17, 52], "gain": [0, 4, 45, 52], "op": [0, 2, 4, 11, 18, 26, 35, 38, 40, 45, 46, 51, 52], "voic": [0, 2, 4, 11, 31, 46, 52], "statu": [0, 2, 4, 11, 26, 29, 32, 34, 39, 49, 50, 51], "log": [0, 2, 4, 6, 11, 20, 26, 29, 32, 33, 35, 44, 45, 46, 51], "event": [0, 4, 26, 29, 32, 35, 38, 39, 50, 51], "provid": [0, 2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 29, 31, 32, 33, 36, 39, 41, 42, 44, 46, 48, 50, 51], "inform": [0, 2, 3, 4, 5, 6, 8, 11, 16, 21, 27, 29, 30, 31, 32, 33, 35, 36, 38, 39, 41, 42, 46, 48], "host": [0, 2, 4, 11, 17, 23, 26, 30, 36, 37, 38, 39, 48, 50, 52], "game": [0, 2, 4, 26, 51], "etc": [0, 2, 4, 8, 11, 18, 21, 26, 29, 33, 35, 36, 38, 39, 40, 46, 49, 52], "One": [0, 4, 30, 35, 46], "make": [0, 2, 3, 4, 5, 6, 7, 11, 14, 16, 20, 23, 24, 26, 29, 30, 31, 33, 34, 36, 39, 41, 42, 44, 46, 48, 49, 51], "stand": [0, 4, 33], "out": [0, 3, 4, 8, 25, 27, 30, 31, 32, 33, 38, 39, 43, 45, 46, 48], "modul": [0, 4, 8, 33, 35, 38, 40, 45, 51], "tcl": [0, 1, 2, 3, 4, 6, 11, 12, 23, 29, 30, 33, 37, 39, 40, 41, 48, 49, 51], "script": [0, 2, 3, 4, 6, 7, 8, 11, 23, 31, 32, 33, 37, 40, 41, 46, 49, 50, 51, 52], "support": [0, 2, 3, 4, 5, 6, 9, 11, 12, 15, 17, 18, 19, 23, 24, 25, 31, 33, 34, 37, 39, 40, 46, 49, 51], "With": [0, 4, 6, 16, 32, 38, 39, 45, 46, 48], "can": [0, 3, 4, 5, 6, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52], "almost": [0, 4, 33, 37, 52], "ani": [0, 1, 2, 3, 4, 5, 7, 13, 16, 17, 18, 19, 23, 24, 26, 29, 30, 31, 32, 33, 36, 37, 39, 40, 43, 45, 46, 48, 50, 51, 52], "want": [0, 3, 4, 6, 8, 11, 13, 15, 16, 18, 19, 23, 29, 30, 31, 32, 33, 38, 39, 41, 46, 48, 49], "thei": [0, 3, 4, 5, 7, 8, 11, 13, 14, 18, 19, 21, 23, 24, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 45, 46, 48, 50], "do": [0, 4, 6, 8, 11, 13, 16, 17, 18, 20, 23, 27, 30, 31, 32, 33, 35, 36, 38, 39, 40, 46, 47, 49, 50, 51], "anyth": [0, 4, 16, 30, 31, 32, 33, 36, 38, 39, 43, 46, 50], "prevent": [0, 4, 11, 18, 19, 26, 31, 33, 36, 38, 41, 46, 51], "flood": [0, 4, 11, 14, 19, 23, 36, 38, 39, 40, 46, 52], "greet": [0, 2, 4, 11, 21, 30, 35], "ban": [0, 2, 4, 11, 18, 26, 38, 39, 40, 51, 52], "advertis": [0, 4, 46], "also": [0, 2, 3, 4, 7, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 29, 30, 31, 32, 33, 36, 37, 38, 39, 40, 43, 45, 46, 47, 48, 49, 50, 51, 52], "link": [0, 2, 3, 4, 5, 6, 7, 16, 24, 25, 29, 32, 39, 40, 42, 45, 48, 49], "multipl": [0, 2, 4, 8, 17, 30, 32, 33, 38, 39, 40, 46, 50], "togeth": [0, 2, 4, 23, 30, 38, 39, 40, 42, 46], "form": [0, 4, 29, 30, 46, 47], "botnet": [0, 2, 3, 4, 6, 9, 11, 13, 16, 23, 27, 33, 40, 41, 43, 45, 46, 49, 52], "thi": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52], "each": [0, 4, 6, 11, 16, 19, 21, 25, 30, 31, 33, 35, 36, 38, 39, 40, 43, 46, 49, 50, 52], "secur": [0, 2, 4, 10, 20, 31, 33, 39, 40, 45, 46], "control": [0, 2, 4, 18, 23, 30, 31, 38, 39, 40, 48, 51, 52], "effici": [0, 4, 33, 38, 39, 40], "even": [0, 4, 7, 16, 18, 29, 32, 33, 37, 38, 39, 40, 43, 46, 51], "across": [0, 4, 38, 42, 44, 46, 49], "network": [0, 2, 4, 18, 23, 39, 46, 47], "share": [0, 2, 4, 6, 11, 12, 25, 29, 39, 40, 46], "list": [0, 4, 6, 8, 11, 15, 16, 20, 21, 23, 24, 26, 27, 29, 30, 31, 32, 33, 34, 35, 38, 39, 40, 42, 43, 48, 50, 51], "exempt": [0, 1, 2, 4, 11, 18, 26, 38, 40, 51, 52], "invit": [0, 2, 4, 11, 18, 26, 38, 40, 42, 51], "ignor": [0, 4, 8, 14, 23, 24, 30, 38, 39, 40, 46, 50], "userfil": [0, 2, 4, 5, 6, 10, 11, 12, 20, 21, 24, 25, 29, 31, 33, 38, 39, 45, 46, 49], "enabl": [0, 2, 4, 6, 7, 13, 16, 18, 23, 25, 29, 30, 31, 33, 36, 38, 39, 40, 41, 42, 48, 49, 51], "same": [0, 3, 4, 5, 7, 8, 11, 12, 17, 18, 21, 29, 30, 33, 35, 36, 38, 39, 42, 45, 46, 47, 48, 49, 50], "access": [0, 4, 17, 23, 29, 30, 31, 33, 36, 40, 43, 45, 46, 48, 50, 51, 52], "everi": [0, 3, 4, 11, 16, 18, 23, 25, 29, 30, 31, 35, 36, 37, 39, 41, 45, 46, 52], "your": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36, 38, 39, 40, 41, 43, 44, 45, 46, 48, 51], "see": [0, 2, 3, 4, 5, 6, 8, 11, 16, 18, 21, 23, 26, 27, 29, 30, 31, 32, 33, 34, 35, 38, 39, 41, 43, 44, 45, 46, 47, 50], "doc": [0, 3, 4, 5, 6, 23, 30, 32, 34, 39, 43, 46, 50, 51], "set": [0, 1, 2, 3, 4, 5, 6, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 29, 30, 34, 35, 37, 38, 40, 42, 43, 45, 47, 49, 50, 51, 52], "up": [0, 2, 3, 4, 5, 6, 16, 23, 27, 29, 30, 34, 35, 36, 38, 39, 43, 45, 46, 51], "alwai": [0, 3, 4, 11, 33, 35, 37, 46], "improv": [0, 4], "adjust": [0, 4, 18], "becaus": [0, 4, 8, 17, 23, 29, 30, 33, 36, 39, 46, 49, 50, 51], "ar": [0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 50, 51, 52], "bug": [0, 3, 4, 30, 33, 44], "fix": [0, 3, 4, 29, 39, 46], "ad": [0, 2, 3, 4, 5, 7, 8, 11, 20, 21, 23, 24, 26, 29, 30, 33, 35, 36, 39, 40, 41, 42, 45, 46, 48, 50, 51], "demand": [0, 4], "them": [0, 1, 3, 4, 5, 7, 11, 13, 14, 15, 16, 18, 19, 21, 23, 24, 29, 30, 31, 33, 34, 36, 38, 39, 40, 41, 42, 45, 46, 49, 51, 52], "actual": [0, 4, 8, 16, 29, 30, 34, 39, 43, 46], "sens": [0, 4], "In": [0, 4, 5, 8, 15, 29, 31, 32, 33, 34, 35, 36, 38, 39, 46, 48, 51], "fact": [0, 4, 50], "exist": [0, 4, 8, 16, 21, 23, 29, 32, 35, 45, 46, 50, 51, 52], "sever": [0, 4, 14, 29, 33, 34, 42, 46, 49], "year": [0, 4, 33, 39, 46], "v0": [0, 4, 46], "7": [0, 4, 11, 33, 41, 46], "final": [0, 4, 8, 30, 31, 33, 39, 45], "go": [0, 3, 4, 6, 16, 23, 27, 30, 31, 33, 34, 35, 46], "part": [0, 4, 8, 23, 26, 30, 32, 39, 40, 46, 48, 49, 51], "tree": [0, 4, 33], "A": [0, 2, 4, 5, 11, 17, 30, 31, 32, 35, 36, 38, 39, 40, 42, 43, 46, 47, 48, 50, 52], "valiant": [0, 4], "effort": [0, 2, 4, 46], "been": [0, 1, 4, 5, 6, 16, 18, 21, 23, 29, 37, 39, 40, 46, 50], "made": [0, 1, 3, 4, 5, 11, 24, 32, 44, 46, 48, 51], "chase": [0, 4], "down": [0, 3, 4, 16, 38, 46], "destroi": [0, 4], "To": [0, 3, 4, 5, 7, 8, 21, 30, 31, 32, 33, 34, 35, 36, 39, 41, 43, 44, 46, 48, 49, 50], "need": [0, 3, 4, 8, 11, 15, 17, 18, 23, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 41, 45, 46, 48, 50, 51, 52], "sort": [0, 4, 37], "unix": [0, 3, 16, 17, 33, 40], "account": [0, 2, 4, 17, 19, 29, 31, 33, 40, 42, 44, 45, 51], "pretti": [0, 43], "good": [0, 16, 23, 26, 30, 33, 39, 46, 51, 52], "knowledg": 0, "how": [0, 3, 6, 8, 11, 14, 15, 16, 19, 21, 23, 24, 26, 30, 31, 32, 33, 34, 37, 38, 39, 46, 48, 49, 50, 51], "compil": [0, 2, 3, 4, 29, 32, 33, 34, 39, 41, 46, 48], "read": [0, 2, 3, 4, 6, 7, 17, 29, 30, 31, 33, 34, 39, 46, 47, 51], "dcc": [0, 2, 4, 6, 8, 16, 22, 23, 25, 29, 31, 32, 33, 38, 40, 41, 43, 45, 49], "absolut": [0, 34, 46, 52], "minimum": [0, 11, 32, 36, 46, 50], "mb": 0, "disk": [0, 33, 39, 40, 46], "space": [0, 39, 42, 46], "tarbal": [0, 33], "4": [0, 3, 4, 8, 11, 15, 23, 29, 30, 31, 32, 33, 34, 36, 38, 39, 41, 46], "unpack": 0, "cannot": [0, 11, 29, 33, 35, 45, 46, 52], "without": [0, 2, 4, 5, 6, 10, 11, 14, 20, 21, 29, 30, 31, 32, 33, 34, 36, 38, 39, 40, 42, 45, 46, 48], "instal": [0, 4, 5, 30, 31, 34, 36, 39], "shell": [0, 3, 4, 17, 31, 33, 39, 46], "copyright": [0, 1, 3, 4, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 52], "c": [0, 1, 2, 3, 4, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 52], "1999": [0, 3, 4, 7, 37, 38, 44, 46, 47, 49], "2023": [0, 3, 4, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 52], "egghead": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 33, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 52], "develop": [0, 1, 2, 3, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 33, 34, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52], "team": [0, 1, 2, 3, 4, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 52], "eggdrop": [1, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 37, 41, 42, 43, 45, 47, 48, 49, 51, 52], "robei": [1, 3, 4, 40, 47, 52], "pointer": [1, 3, 4, 8, 32, 40, 47], "As": [1, 16, 20, 30, 33, 34, 42, 46, 48, 51], "januari": [1, 9, 10, 13, 19, 22, 27, 46], "1997": [1, 3, 4, 40, 47], "accord": [1, 46, 52], "There": [1, 3, 4, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 29, 30, 31, 32, 34, 35, 37, 39, 41, 45, 47, 48, 51, 52], "should": [1, 3, 4, 5, 6, 8, 11, 13, 14, 15, 16, 18, 20, 21, 23, 24, 26, 29, 30, 31, 32, 33, 36, 38, 39, 41, 43, 45, 46, 48, 50, 51], "copi": [1, 2, 5, 7, 16, 29, 32, 33, 46], "file": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 35, 37, 38, 40, 41, 45, 47, 48, 52], "If": [1, 3, 4, 5, 6, 7, 8, 11, 13, 16, 17, 18, 20, 22, 23, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 43, 44, 45, 46, 48, 49, 50], "write": [1, 2, 6, 7, 28, 33, 36, 39, 45, 46, 51], "free": [1, 2, 5, 29, 32], "foundat": [1, 32], "inc": [1, 32], "51": 1, "franklin": 1, "street": 1, "fifth": 1, "floor": 1, "boston": [1, 32], "ma": [1, 32], "02110": 1, "1301": 1, "usa": [1, 32], "3": [1, 8, 11, 14, 15, 16, 18, 23, 25, 31, 32, 33, 34, 35, 38, 39, 42, 46], "28": [1, 10, 20], "all": [1, 5, 6, 7, 8, 11, 14, 15, 16, 18, 20, 21, 23, 24, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52], "chang": [1, 2, 8, 10, 11, 16, 18, 20, 21, 23, 24, 26, 30, 32, 33, 34, 36, 38, 39, 40, 42, 43, 44, 48, 50, 51], "sourc": [1, 3, 4, 5, 6, 7, 8, 21, 29, 30, 32, 34, 36, 39, 44, 46, 48, 49], "code": [1, 2, 3, 4, 6, 7, 8, 29, 30, 36, 46], "relat": [1, 6, 11, 30, 32, 41, 46], "still": [1, 4, 5, 6, 11, 16, 24, 32, 33, 34, 35, 39, 40, 46, 51], "did": [1, 31, 45], "past": [1, 4, 29, 32, 39], "previou": [1, 3, 4, 5, 20, 33, 46, 51], "0m": 1, "were": [1, 17, 18, 37, 38, 39, 41, 45, 46, 51], "differ": [1, 3, 4, 5, 11, 16, 23, 30, 32, 34, 35, 39, 45, 46, 49, 50], "scheme": 1, "mai": [1, 4, 5, 11, 12, 16, 17, 18, 25, 30, 33, 38, 39, 41, 42, 46, 49, 50, 51], "option": [1, 3, 4, 7, 11, 16, 17, 20, 23, 31, 32, 33, 39, 48, 51], "those": [1, 3, 7, 12, 16, 23, 29, 30, 31, 32, 33, 46, 49, 50, 51], "instead": [1, 4, 5, 11, 16, 17, 18, 21, 24, 26, 33, 36, 38, 39, 45, 46, 48, 49, 51, 52], "packag": [1, 3, 4, 33, 34, 36], "bless": 1, "For": [1, 2, 3, 5, 6, 7, 8, 16, 21, 23, 31, 32, 33, 34, 36, 38, 39, 41, 42, 43, 45, 46, 48, 49, 50, 51], "bear": 1, "date": [1, 4, 32, 33, 35, 39, 46], "later": [1, 3, 6, 8, 10, 19, 20, 27, 30, 32, 33, 39, 46, 48], "choic": [1, 23, 30], "must": [1, 2, 3, 4, 8, 11, 15, 17, 18, 21, 23, 25, 29, 31, 32, 33, 34, 35, 36, 38, 39, 45, 46, 48, 50], "match": [1, 2, 8, 11, 16, 18, 29, 30, 32, 36, 37, 39, 45, 48, 50], "net": [1, 3, 18, 23, 26, 33, 35, 42], "blowfish": [1, 2, 5, 6, 20, 29, 39, 45, 46], "abov": [1, 4, 18, 20, 29, 30, 31, 40, 46, 47], "restrict": [1, 16, 17, 23, 39, 46, 47, 51], "origin": [1, 8, 23, 33, 44, 46], "chri": 1, "fuller": 1, "place": [1, 3, 5, 7, 11, 16, 18, 21, 30, 32, 33, 36, 37, 39, 46, 48, 51], "him": 1, "domain": [1, 15, 38], "variou": [1, 8, 29, 33, 37, 39, 46], "well": [1, 8, 26, 30, 31, 32, 33, 34, 35, 36, 39, 45, 46, 48, 51], "contain": [1, 3, 4, 5, 30, 33, 35, 36, 38, 39, 41, 46, 48, 50], "could": [1, 8, 23, 30, 36, 38, 39, 41, 44, 45, 46, 48, 51], "port": [1, 5, 15, 17, 23, 24, 31, 33, 34, 38, 39, 41, 48], "applic": [1, 39, 46], "john": 1, "ousterhout": 1, "wai": [1, 3, 17, 23, 26, 29, 30, 31, 33, 34, 35, 37, 38, 39, 43, 45, 46, 48, 51], "affili": [1, 51], "its": [1, 2, 4, 6, 7, 11, 16, 17, 18, 20, 23, 24, 26, 30, 31, 32, 33, 35, 36, 38, 39, 40, 44, 46, 49, 51], "own": [1, 6, 7, 16, 17, 23, 24, 30, 31, 32, 33, 34, 36, 42, 46, 48, 49, 51], "nots": 1, "warranti": [1, 32], "impli": [1, 29, 32], "whatev": [1, 3, 30, 39, 40, 46, 47], "risk": [1, 23], "matter": [1, 8, 15, 30, 31], "put": [1, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 33, 39, 46, 48], "built": [2, 17, 21, 46, 49], "assist": [2, 33, 35, 48], "manag": [2, 4, 6, 16, 26, 34, 36, 51], "oldest": [2, 46], "activ": [2, 11, 17, 32, 33, 35, 36, 37, 43, 46, 48], "maintain": [2, 17, 33, 35, 49, 50], "via": [2, 3, 4, 6, 11, 12, 17, 18, 21, 22, 24, 29, 30, 31, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 47, 48, 50, 51], "abil": [2, 6, 7, 17, 34, 35, 38, 40, 46], "run": [2, 3, 4, 5, 6, 7, 11, 17, 21, 23, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 45, 47, 48, 50], "join": [2, 6, 8, 11, 13, 18, 19, 26, 30, 32, 33, 34, 37, 39, 40, 42, 43, 46, 50, 51, 52], "perorm": 2, "obtain": [2, 34, 48], "larg": [2, 16, 18, 23, 39], "number": [2, 11, 16, 18, 19, 20, 23, 25, 26, 29, 32, 33, 34, 36, 38, 39, 45, 46, 48, 50, 51, 52], "integr": [2, 21], "ircv3": [2, 35, 40, 46, 49], "capabl": [2, 39, 40, 46, 49, 51], "tl": [2, 3, 4, 5, 8, 31, 33, 36, 39, 46], "ipv6": [2, 33, 39, 40, 46], "twitch": [2, 6, 40], "much": [2, 3, 8, 26, 29, 43, 46], "project": [2, 44, 51], "http": [2, 4, 6, 21, 22, 27, 33, 35, 36, 42], "github": [2, 4, 33], "com": [2, 4, 5, 6, 21, 22, 23, 30, 31, 33, 38, 39, 45, 46, 48], "clone": [2, 4, 11, 33], "git": [2, 3, 33, 44], "altern": [2, 4, 6, 17, 23, 33, 34, 36, 38, 39, 46, 48], "stabl": [2, 4, 33], "snapshot": [2, 33], "locat": [2, 4, 30, 31, 34, 36, 39, 48], "geteggdrop": [2, 4, 33], "addit": [2, 4, 5, 8, 17, 23, 33, 39, 46, 48, 50], "found": [2, 4, 8, 29, 39, 46, 50], "offici": [2, 4], "webpag": 2, "www": [2, 4, 6, 22], "org": [2, 4, 5, 6, 27, 30, 33, 34, 38, 39, 46], "requir": [2, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 31, 33, 36, 39, 45, 48, 50], "header": [2, 4, 6, 29, 30, 34, 48], "present": [2, 6, 30, 31, 35, 36, 41, 46, 50, 51], "system": [2, 3, 7, 15, 16, 17, 29, 33, 36, 39, 40, 41, 46, 47, 48], "strongli": [2, 4, 33], "encourag": [2, 33, 45], "openssl": [2, 3, 4, 20, 31, 33, 34, 39, 48], "commun": [2, 29, 38, 43, 44, 46], "guid": [2, 3, 30, 33, 34], "quickli": [2, 39], "here": [2, 4, 11, 14, 15, 16, 18, 19, 21, 23, 25, 30, 31, 32, 33, 36, 37, 38, 39, 46, 49, 50], "lurk": 2, "libera": [2, 4, 5, 23, 29, 30, 31, 33], "readm": [2, 3, 36], "notic": [2, 14, 16, 30, 38, 39, 46, 51], "quick": [2, 29, 33, 39], "startup": [2, 8, 45, 46], "upgrad": [2, 33, 45, 48], "command": [2, 3, 6, 8, 11, 13, 16, 17, 18, 22, 23, 29, 30, 31, 33, 34, 35, 37, 38, 39, 40, 41, 43, 45, 48, 51, 52], "line": [2, 3, 5, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 33, 34, 35, 36, 38, 39, 40, 45, 46, 48, 49, 50, 51], "auto": [2, 3, 38, 52], "start": [2, 3, 5, 6, 10, 17, 20, 23, 28, 30, 31, 36, 38, 39, 42, 43, 45, 46, 47, 50, 51], "document": [2, 8, 17, 30, 33, 34, 36, 38, 41, 42, 44, 48, 49], "cygwin": [2, 41], "window": [2, 31, 41], "v1": [2, 24, 25, 30, 36, 46, 48, 50], "core": [2, 3, 6, 7, 8, 18, 19, 21, 23, 29, 30, 32, 46, 49], "execut": [2, 3, 7, 29, 30, 31, 35, 46], "path": [2, 3, 6, 16, 17, 33, 34, 36, 46, 48], "basic": [2, 4, 6, 7, 21, 22, 30, 33], "consol": [2, 4, 6, 11, 29, 36, 40, 43], "directori": [2, 3, 4, 6, 7, 29, 31, 33, 34, 36, 40, 44, 48, 49], "telnet": [2, 31, 33, 38, 40, 41, 43, 45, 46, 47, 48], "ssl": [2, 3, 4, 5, 23, 31, 33, 34, 38, 40, 46], "parti": [2, 5, 13, 21, 33, 38, 39, 40, 46, 48, 52], "autoscript": 2, "usag": [2, 4, 6, 29, 39, 46], "structur": 2, "hint": [2, 30], "flag": [2, 5, 6, 8, 11, 14, 18, 24, 29, 30, 32, 33, 36, 39, 40, 47], "term": [2, 30, 32, 34, 46], "exampl": [2, 3, 4, 5, 7, 8, 16, 17, 21, 23, 29, 30, 31, 32, 33, 34, 36, 39, 43, 46, 48, 49, 50, 51], "bottre": 2, "botflag": [2, 24], "record": [2, 24, 29, 32, 35, 40, 52], "certif": [2, 3, 23, 31, 34, 39, 46], "authent": [2, 35, 45, 46, 51], "ctcp": [2, 6, 11, 23, 31, 33, 39, 46, 48], "chat4": 2, "chat6": 2, "kei": [2, 3, 11, 18, 26, 30, 31, 39, 45, 50, 51], "cap": [2, 29, 35, 40, 51], "track": [2, 3, 16, 26, 29, 31, 46, 51], "server": [2, 5, 6, 7, 11, 14, 15, 16, 17, 18, 20, 26, 27, 29, 31, 32, 33, 39, 40, 41, 42, 48, 49, 50, 51], "check": [2, 4, 5, 8, 11, 23, 29, 30, 31, 32, 34, 36, 39, 45, 46, 48, 50], "determin": [2, 3, 17, 29, 31, 33, 38, 41, 46, 48], "best": [2, 3, 6, 17, 33, 36, 38, 46, 50], "encrypt": [2, 5, 6, 10, 20, 31, 34, 38, 39, 40, 48], "hash": [2, 5, 6, 20, 33], "background": [2, 4, 30], "interfac": [2, 26, 46, 51], "disclaim": [2, 46], "regist": [2, 8, 11, 31, 32, 46], "edit": [2, 3, 8, 30, 32, 36, 49], "config": [2, 3, 4, 6, 7, 11, 12, 13, 14, 15, 17, 18, 19, 20, 23, 24, 25, 26, 27, 29, 30, 31, 34, 35, 37, 38, 39, 41, 45, 47, 48], "web": [2, 6, 21, 26, 39, 50], "ui": [2, 50], "limit": [2, 6, 8, 11, 16, 18, 23, 36, 38, 41], "tip": [2, 46], "renam": [2, 16, 29, 33, 39, 46], "keep": [2, 4, 11, 16, 23, 25, 33, 39, 51], "self": [2, 23, 34, 39, 48], "modifi": [2, 6, 11, 15, 18, 30, 32, 35, 36, 39, 46], "default": [2, 3, 4, 6, 12, 15, 16, 18, 23, 25, 31, 33, 34, 35, 36, 37, 39, 45, 46, 48], "string": [2, 6, 8, 11, 18, 29, 30, 31, 36, 39, 45, 50, 51], "modular": 2, "variabl": [2, 5, 6, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 29, 30, 35, 36, 39, 41, 47, 50], "textfil": 2, "substitut": [2, 39], "output": [2, 3, 29, 31, 32, 34, 45, 47, 49, 50], "manipul": [2, 39], "note": [2, 3, 6, 7, 8, 10, 11, 15, 18, 20, 23, 24, 29, 31, 32, 33, 35, 38, 39, 45, 48, 50, 51], "assoc": [2, 6], "compress": [2, 6, 31], "filesi": [2, 6, 39], "miscellan": 2, "global": [2, 8, 13, 17, 18, 23, 24, 29, 30, 32, 36, 37, 38, 50, 52], "bind": [2, 6, 17, 18, 23, 26, 29, 30, 35, 39, 49, 51], "procedur": [2, 24, 35, 50, 52], "tcp": [2, 17, 41], "connect": [2, 4, 5, 6, 15, 16, 17, 23, 26, 29, 31, 33, 38, 39, 41, 43, 48, 51, 52], "charact": [2, 11, 16, 23, 33, 38, 39, 41, 45], "patch": [2, 41, 46], "submit": [2, 46], "prerequisit": 2, "super": 2, "short": [2, 29, 31, 41, 48], "configur": [2, 3, 4, 5, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 36, 39, 41, 44, 46, 48], "common": [2, 23, 33, 34, 38, 39, 42, 48, 52], "step": [2, 3, 5, 29, 33, 51], "partylin": [2, 4, 6, 8, 11, 13, 33, 34, 35, 36, 38, 39, 41, 45, 46, 48, 49, 50, 51, 52], "automat": [2, 3, 4, 5, 8, 13, 17, 21, 23, 33, 35, 36, 37, 38, 39, 40, 41, 45, 46, 48, 51, 52], "restart": [2, 3, 4, 5, 7, 30, 33, 36, 39], "nickserv": [2, 48], "sasl": [2, 33, 40, 42], "export": [2, 8, 49], "dynam": [2, 3, 11, 31, 33, 37, 46], "static": [2, 3, 8, 11, 29, 31, 32, 46], "dn": [2, 6, 39, 46], "ident": [2, 6, 7, 18, 23, 31, 39, 41, 45, 46], "pbkdf2": [2, 5, 6, 45], "seen": [2, 6, 11, 35, 39, 46], "transfer": [2, 6, 7, 12, 16, 21, 24, 33, 38, 39, 41, 46, 48, 52], "woobi": [2, 3, 6, 29, 32, 36], "uptim": [2, 6], "intern": [2, 23, 35, 39, 46, 50], "tabl": [2, 29, 32, 42, 46], "creation": [2, 31, 35], "stackabl": 2, "ht_stackabl": [2, 32], "trigger": [2, 11, 21, 23, 29, 30, 32, 35, 46, 50], "handler": 2, "summari": [2, 36], "bore": [2, 4], "legal": [2, 4], "stuff": [2, 4, 29, 30, 33, 39, 46], "had": [3, 5, 8, 11, 38, 39, 46, 51], "littl": [3, 5, 16, 26, 33, 36, 38, 49], "experi": [3, 16, 30, 33], "THE": 3, "now": [3, 5, 8, 16, 17, 18, 30, 31, 32, 33, 34, 36, 38, 39, 41, 45, 46, 50, 52], "experienc": 3, "more": [3, 4, 5, 6, 8, 14, 16, 18, 21, 22, 29, 30, 31, 32, 33, 34, 36, 38, 39, 40, 42, 44, 45, 46, 48], "cours": [3, 8, 30, 38, 39, 46], "autoconfigur": 3, "thing": [3, 4, 6, 26, 28, 29, 30, 31, 38, 39, 46, 51], "easier": [3, 20], "type": [3, 4, 6, 7, 8, 11, 13, 18, 21, 23, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 48], "figur": [3, 33], "correctli": [3, 46], "try": [3, 4, 6, 7, 22, 23, 27, 29, 30, 31, 33, 35, 39, 50], "find": [3, 6, 15, 18, 22, 29, 30, 31, 33, 43, 44, 46, 51], "which": [3, 5, 6, 8, 11, 13, 15, 16, 17, 21, 23, 24, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39, 41, 43, 45, 46, 47, 48, 49, 50, 52], "either": [3, 4, 8, 16, 17, 21, 31, 32, 33, 34, 35, 37, 38, 39, 41, 46, 48, 50], "iconfig": [3, 7, 33], "everyth": [3, 8, 21, 30, 46], "mod": [3, 6, 7, 22, 26, 29, 39, 46, 50], "choos": [3, 7, 31, 33, 39, 40, 51], "forc": [3, 11, 13, 16, 20, 24, 30, 39, 41, 46], "otherwis": [3, 4, 13, 16, 30, 35, 37, 38, 39, 41, 45, 46, 48, 50], "makefil": [3, 29], "better": [3, 4, 6, 22, 31, 33, 39], "possibl": [3, 6, 11, 14, 16, 23, 31, 34, 38, 39, 41, 42, 43, 46, 48, 50], "debug": [3, 27, 29, 30, 39, 46, 48, 50], "sdebug": 3, "give": [3, 4, 11, 16, 23, 30, 33, 38, 39, 40, 43, 45, 46, 52], "detail": [3, 4, 6, 8, 29, 32, 33, 35, 46, 48, 50], "highli": [3, 23, 33], "unlik": [3, 40], "crash": [3, 4, 8, 46], "take": [3, 4, 5, 6, 11, 16, 20, 21, 23, 27, 30, 32, 33, 36, 39, 45, 46, 48], "longer": [3, 5, 16, 18, 20, 29, 33, 34, 36, 46], "enlarg": 3, "binari": [3, 34], "bit": [3, 16, 26, 30, 33, 34, 39, 46, 48, 51], "worth": 3, "somewher": [3, 39], "accomplish": 3, "enter": [3, 11, 16, 31, 34, 39, 43, 44, 45, 46, 48, 50], "home": [3, 16, 17, 31, 33, 48], "e": [3, 6, 8, 9, 10, 11, 18, 20, 29, 31, 33, 38, 39, 46, 47, 52], "dest": [3, 6, 33, 34, 39, 46, 48], "otherdir": 3, "full": [3, 4, 5, 8, 11, 26, 33, 41, 46, 48, 50, 51], "8": [3, 5, 6, 8, 11, 15, 20, 23, 32, 33, 38, 39, 41, 45, 46, 48], "intend": [3, 8, 36, 37, 46], "traffic": [3, 39, 49], "between": [3, 6, 11, 16, 19, 23, 24, 32, 34, 35, 38, 39, 41, 46], "sslcert": [3, 34, 39, 48], "Or": [3, 34, 46], "non": [3, 11, 15, 17, 18, 23, 29, 31, 37, 38, 46, 48, 51], "interact": [3, 4, 6, 17, 18, 32, 39, 46, 48, 51], "sslsilent": [3, 48], "info": [3, 4, 11, 13, 18, 29, 33, 39], "follow": [3, 4, 5, 8, 11, 16, 18, 21, 23, 26, 29, 32, 33, 34, 36, 38, 39, 40, 42, 44, 45, 46, 47, 48, 49, 50, 51], "complet": [3, 4, 16, 21, 24, 33, 40, 46, 48, 52], "m": [3, 4, 11, 23, 33, 39, 41, 45, 46, 47, 49, 50, 52], "lamestbot": [3, 11, 19, 23, 33, 38, 39, 46, 47], "conf": [3, 7, 17, 31, 33, 42, 46, 48], "when": [3, 4, 6, 7, 10, 11, 13, 16, 17, 18, 21, 23, 24, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39, 41, 43, 45, 46, 48, 50, 51], "futur": [3, 18, 31, 33, 45, 46], "drop": [3, 4, 39, 46], "chmod": [3, 39], "u": [3, 5, 8, 29, 30, 31, 32, 38, 39, 46, 47, 52], "x": [3, 5, 8, 11, 14, 21, 32, 33, 34, 39, 41, 46, 52], "my": [3, 5, 36, 39, 41, 48, 52], "name": [3, 4, 6, 8, 9, 16, 23, 29, 30, 31, 32, 33, 34, 35, 36, 39, 50], "abl": [3, 6, 11, 16, 18, 23, 33, 35, 39, 43, 45, 46], "prompt": [3, 4, 35], "work": [3, 5, 6, 8, 11, 14, 16, 20, 21, 22, 24, 29, 30, 31, 32, 33, 37, 38, 39, 41, 42, 44, 45, 46, 48, 49, 50], "top": [3, 4, 30, 44, 46], "correct": [3, 8, 32, 34, 39, 45], "advis": [3, 23], "crontab": [3, 4, 46], "so": [3, 4, 6, 7, 8, 10, 16, 17, 18, 20, 27, 30, 31, 32, 33, 35, 37, 39, 40, 41, 45, 46, 50], "machin": [3, 4, 17, 33, 36, 39], "goe": [3, 11, 31, 36, 37, 38, 43, 46, 48], "heaven": 3, "forbid": 3, "helper": 3, "systemd": [3, 4], "entri": [3, 4, 8, 31, 33, 39], "add": [3, 4, 5, 6, 7, 8, 11, 17, 18, 21, 26, 29, 30, 32, 33, 34, 35, 36, 38, 39, 40, 45, 51], "job": [3, 4, 31, 48], "autobotchk": [3, 4, 31], "yourconfig": 3, "smile": 3, "tool": [3, 33], "prior": [3, 31, 33, 35, 45, 48], "interpret": [3, 6, 21, 32, 41, 46, 47], "devel": 3, "autoconf": 3, "gcc": 3, "util": 3, "diffutil": 3, "small": [3, 25, 38, 49], "piec": [3, 30, 32], "separ": [3, 7, 8, 23, 33, 36, 38, 39, 40, 41, 42, 46, 49, 50], "smaller": 3, "download": [3, 4, 5, 7, 16, 25, 36, 39, 40, 46], "src": [3, 7, 8, 18, 29], "extens": [3, 33, 35, 36], "dure": [3, 12, 21, 24, 29, 31, 33], "valid": [3, 11, 23, 29, 38, 39, 40, 46, 48], "compat": [3, 5, 36, 42, 46, 50, 51], "rest": [3, 29, 32, 38, 39, 45, 46, 50], "wish": [3, 5, 7, 17, 18, 27, 29, 33, 36, 37, 38, 39, 46, 50], "paragraph": 3, "2": [3, 8, 11, 14, 18, 21, 23, 31, 32, 33, 34, 35, 38, 39, 41, 42, 45, 46, 48], "after": [3, 4, 8, 11, 17, 18, 23, 29, 30, 31, 35, 36, 37, 39, 46, 48, 49, 51], "move": [3, 4, 16, 23, 33, 46, 51], "appropri": [3, 5, 33, 38, 39, 42, 44, 45], "onli": [3, 4, 5, 6, 7, 8, 11, 16, 17, 18, 19, 22, 23, 24, 27, 28, 30, 31, 33, 35, 37, 38, 39, 41, 43, 45, 46, 47, 48, 49, 50, 52], "portion": [3, 7, 11, 46], "end": [3, 29, 31, 32, 39, 45, 46, 47], "point": [3, 6, 8, 23, 28, 32, 33, 36, 38, 39, 46], "hopefulli": [3, 46], "IT": [3, 4], "fun": [3, 51], "pleas": [4, 5, 6, 7, 10, 11, 17, 20, 21, 23, 34, 39, 42, 46], "least": [4, 18, 29, 32, 33, 37, 39], "skim": 4, "ask": [4, 18, 31, 33, 43, 46, 48], "question": [4, 31], "ve": [4, 16, 33, 37, 38, 43], "never": [4, 5, 11, 39, 46], "successfulli": [4, 29, 46, 50], "sure": [4, 11, 29, 30, 33, 34, 38, 39, 46, 51], "select": [4, 33, 39, 40, 44, 46], "n": [4, 5, 11, 31, 32, 38, 39, 43, 46, 47, 52], "owner": [4, 8, 11, 33, 39, 43, 46, 52], "wise": [4, 39], "100": [4, 18, 50], "power": [4, 40], "TO": 4, "someon": [4, 11, 18, 30, 33, 34, 46, 50], "trust": [4, 39, 52], "about": [4, 6, 26, 27, 29, 30, 31, 32, 36, 39, 46, 49, 51], "older": [4, 41, 46], "frequent": [4, 33], "where": [4, 6, 8, 11, 15, 16, 19, 23, 29, 30, 31, 33, 34, 35, 36, 39, 40, 45, 46, 48, 50], "might": [4, 18, 29, 39, 46, 48], "two": [4, 6, 11, 18, 21, 24, 30, 32, 33, 35, 36, 37, 38, 39, 45, 46, 48, 49], "method": [4, 10, 17, 18, 20, 21, 26, 30, 33, 34, 45, 49, 51], "come": [4, 6, 18, 23, 31, 33, 44, 46], "imag": 4, "latest": [4, 5], "pub": [4, 5, 21, 23, 31, 32, 35, 46], "cv": 4, "base": [4, 6, 33, 35, 36, 39, 45, 46], "interest": 4, "veri": [4, 6, 17, 21, 22, 23, 30, 39], "updat": [4, 5, 6, 20, 29, 33, 35, 39, 40, 45, 46, 50], "pull": [4, 44, 45], "recent": [4, 33, 46, 48], "BE": 4, "warn": [4, 17, 30, 46], "branch": [4, 44], "consid": [4, 33, 35, 37, 39, 43, 46], "haha": 4, "signific": [4, 6], "repositori": [4, 33], "simpli": [4, 5, 21, 31, 33, 34, 42, 46, 51], "tar": [4, 7, 33], "archiv": 4, "gz": [4, 33], "hub": [4, 24, 33, 38, 39, 45, 48], "_": [4, 35, 47], "mani": [4, 5, 11, 15, 16, 18, 23, 29, 31, 32, 33, 34, 38, 39, 46], "tclsh": 4, "given": [4, 8, 15, 16, 17, 33, 38, 46, 50], "exit": [4, 6, 13, 16, 23, 46], "howev": [4, 6, 7, 14, 23, 31, 33, 34, 35, 39, 45, 46, 48, 49], "often": [4, 6, 15, 31, 33, 39, 50], "o": [4, 11, 14, 18, 26, 33, 34, 38, 39, 41, 46, 50, 51, 52], "usual": [4, 31, 32, 33, 34, 37, 41, 44, 45, 46, 48, 51], "someth": [4, 8, 21, 30, 33, 36, 44, 46, 51], "similar": [4, 11, 31, 32, 33, 36, 39, 43, 44, 46, 49], "dev": [4, 33, 34], "tk": 4, "tcltk": 4, "html": [4, 41], "recommend": [4, 5, 11, 25, 29, 33, 36, 45, 46, 49, 50], "order": [4, 15, 30, 32, 35, 39, 45, 46, 48, 50], "data": [4, 11, 24, 29, 34, 45, 46], "libssl": [4, 33, 34], "finish": [4, 8, 16, 33, 46], "simpl": [4, 29, 30, 31, 32, 33, 36, 46], "new": [4, 5, 6, 7, 20, 26, 30, 31, 32, 33, 35, 36, 39, 40, 41, 42, 43, 44, 45, 48, 49, 51], "repeat": [4, 35, 46], "defin": [4, 6, 8, 11, 12, 14, 18, 23, 29, 30, 33, 35, 36, 37, 38, 39, 42, 46, 52], "through": [4, 11, 16, 23, 26, 30, 34, 40, 41, 42, 43, 46, 51, 52], "sometim": [4, 23, 33], "mode": [4, 5, 11, 14, 18, 23, 26, 29, 31, 35, 37, 39, 40, 42, 51], "let": [4, 6, 8, 11, 15, 19, 29, 30, 33, 38, 39, 40, 46], "avail": [4, 8, 11, 16, 20, 27, 29, 31, 32, 33, 34, 36, 39, 40, 41, 43, 46, 51], "t": [4, 6, 7, 8, 10, 11, 13, 15, 16, 17, 18, 20, 23, 24, 26, 27, 29, 30, 31, 32, 33, 36, 37, 38, 39, 43, 46, 47, 48, 49, 50, 52], "don": [4, 7, 11, 15, 16, 18, 23, 24, 26, 29, 30, 31, 32, 33, 36, 38, 39, 43, 46, 48, 49], "termin": [4, 5, 8, 46], "session": [4, 41, 42], "troubleshoot": [4, 33], "issu": [4, 5, 17, 26, 33, 35, 39, 44, 46, 48, 50, 51], "show": [4, 6, 8, 11, 16, 21, 27, 30, 38, 39, 46], "10": [4, 8, 11, 18, 31, 33, 36, 38, 39, 46], "second": [4, 11, 14, 15, 18, 23, 25, 29, 30, 32, 39, 49], "screen": [4, 44, 47], "clear": [4, 6, 8, 44, 48, 50, 51], "one": [4, 8, 11, 16, 17, 18, 23, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 43, 44, 45, 46, 48, 49], "person": [4, 30, 33, 39, 46], "introduc": [4, 33, 46], "himself": 4, "herself": 4, "ll": [4, 30, 31, 32, 33, 35, 39, 45, 46, 48], "h": [4, 8, 18, 29, 34, 38, 39, 46, 52], "quit": [4, 6, 23, 33, 39, 46], "v": [4, 8, 11, 18, 31, 39, 46, 47, 52], "peopl": [4, 11, 16, 17, 18, 19, 23, 24, 30, 33, 39, 40, 43, 46, 47, 52], "except": [4, 14, 21, 23, 29, 39, 46, 48], "onc": [4, 6, 11, 16, 18, 20, 23, 30, 31, 33, 38, 44, 46], "along": [4, 16, 32], "manual": [4, 21, 31, 36, 38, 39, 41, 46, 48, 50], "oper": [4, 14, 23, 30, 36, 39, 41, 46, 47], "reason": [4, 29, 31, 33, 36, 38, 39], "monitor": [4, 31, 37, 40, 42], "boot": [4, 8, 39], "b": [4, 11, 16, 18, 26, 30, 31, 38, 39, 44, 46, 47, 51, 52], "minut": [4, 11, 18, 25, 29, 31, 33, 37, 39], "attempt": [4, 5, 11, 17, 18, 21, 23, 26, 34, 35, 37, 38, 39, 46, 48, 51], "geneer": 4, "setup": [4, 6, 7, 33, 39], "would": [4, 5, 14, 21, 30, 31, 33, 34, 35, 38, 39, 46, 47, 48, 50, 51], "noemail": 4, "botchk": [4, 31, 33], "send": [4, 6, 12, 16, 18, 19, 21, 23, 24, 25, 29, 30, 33, 35, 38, 41, 46, 49, 50], "email": [4, 31, 39, 46], "sai": [4, 11, 16, 30, 34, 38, 46], "we": [4, 5, 8, 11, 18, 26, 29, 30, 31, 32, 33, 34, 36, 38, 46, 51], "re": [4, 11, 17, 18, 23, 30, 31, 33, 34, 35, 36, 37, 39, 41, 43, 46, 51], "feel": [4, 5, 29, 44], "miss": [4, 33, 35, 46], "yet": [4, 23, 32, 33, 39, 46], "thank": 4, "discuss": [4, 44], "dalnet": [4, 18, 23], "efnet": [4, 18, 23], "egghelp": [4, 33], "ircnet": [4, 11, 18, 23], "quakenet": [4, 23], "undernet": [4, 18, 23, 46], "plan": [4, 30, 46], "familiar": [4, 30], "etiquett": 4, "capit": [4, 52], "letter": [4, 39, 52], "color": [4, 46], "bold": [4, 46, 47, 52], "excess": [4, 11, 23], "msg": [4, 6, 18, 22, 23, 31, 32, 33, 39, 40, 43, 45, 50], "permiss": [4, 39, 45], "than": [4, 8, 11, 14, 16, 18, 33, 34, 39, 45, 46, 48], "text": [4, 11, 23, 29, 31, 32, 39, 47, 48, 49, 50, 52], "state": [4, 46], "relev": [4, 29, 33], "error": [4, 23, 29, 33, 39, 46, 51], "messag": [4, 11, 23, 29, 30, 32, 33, 35, 39, 40, 42, 43, 45, 47, 49, 50], "easi": [5, 6, 30, 33, 36, 46, 48], "pictur": 5, "reus": [5, 46], "visit": [5, 51], "newer": [5, 33, 36], "backup": [5, 29], "chan": [5, 8, 11, 18, 21, 30, 31, 32, 33, 49], "save": [5, 6, 11, 12, 13, 21, 24, 38, 39, 40, 45], "overwritten": [5, 39, 46], "hurt": 5, "another": 5, "next": [5, 8, 11, 16, 23, 29, 30, 32, 33, 34, 36, 38, 39, 46], "view": [5, 7, 20, 21, 31, 33, 36, 40, 46, 50], "pai": [5, 35, 46], "particular": [5, 31, 32, 36, 39], "attent": [5, 23, 35, 46], "section": [5, 6, 8, 18, 23, 26, 30, 32, 33, 38, 39, 46, 51], "Then": [5, 31, 33, 48], "previous": [5, 33, 46], "unzip": [5, 33], "untar": 5, "These": [5, 11, 12, 18, 29, 33, 35, 36, 37, 38, 39, 41, 47, 48, 50, 52], "NOT": [5, 30, 33, 35, 38, 39, 46, 50], "rather": [5, 46, 48], "killer": 5, "directli": [5, 6, 11, 17, 24, 32, 33, 46], "affect": [5, 11, 26, 39, 40, 41, 46, 51], "modif": [5, 46], "migrat": 5, "suggest": [5, 29, 36], "deprec": [5, 6, 34, 46], "password": [5, 6, 10, 18, 20, 23, 24, 31, 33, 38, 39, 40, 43, 45, 48, 51], "favor": [5, 6, 24], "big": [5, 46, 49], "done": [5, 8, 21, 24, 29, 31, 32, 33, 34, 38, 44, 45, 46, 51], "carelessli": 5, "potenti": [5, 17, 30, 46, 50], "render": [5, 26, 51], "store": [5, 6, 11, 13, 16, 19, 26, 27, 30, 33, 35, 36, 38, 45, 46, 50, 51], "useless": [5, 26, 51], "properli": [5, 32, 33, 34, 38, 39], "switch": [5, 29, 33, 35, 39, 46, 48, 49], "syntax": [5, 8, 21, 31, 39, 48, 52], "6667": [5, 23, 33, 46, 51], "3rd": [5, 8], "remov": [5, 6, 11, 16, 20, 29, 31, 32, 33, 37, 40, 41, 45, 49, 50, 51], "ftp": [5, 33], "fulli": [5, 36, 39, 46, 51], "explicitli": [5, 46, 48], "prefix": [5, 8, 18, 23, 30, 34, 36, 38, 39, 43, 48, 50, 51], "advantag": [5, 33, 49], "chaddr": [5, 38], "lot": [5, 8, 18, 30, 33, 35], "backward": [5, 42], "reflect": [5, 46], "valu": [6, 8, 14, 15, 18, 21, 23, 26, 29, 30, 36, 39, 45, 47, 48, 50, 51], "disabl": [6, 18, 23, 31, 36, 39, 41, 46, 48], "cancel": [6, 46], "cd": [6, 8, 29, 32, 33, 46], "cp": 6, "dst": 6, "desc": [6, 29], "descript": [6, 29, 30, 31, 36, 39, 46, 50, 52], "filestat": 6, "stat": 6, "get": [6, 7, 8, 11, 21, 23, 24, 25, 29, 30, 34, 35, 39, 43, 52], "filenam": [6, 11, 19, 33, 36, 39, 48], "nicknam": [6, 8, 23, 30, 31, 33, 35, 39, 47, 49, 50, 52], "hide": [6, 41, 46], "ln": 6, "filepath": 6, "localfil": 6, "l": [6, 11, 18, 23, 31, 35, 38, 39, 52], "filemask": 6, "mkdir": 6, "dir": [6, 31], "mv": 6, "pend": [6, 11], "pwd": [6, 33], "rm": [6, 33], "rmdir": 6, "optim": [6, 8, 23], "unhid": 6, "unshar": [6, 52], "api": [6, 32, 36], "decrypt": 6, "won": [6, 11, 24, 29, 30, 33, 37, 38, 39, 46, 48, 50], "specif": [6, 11, 15, 17, 18, 20, 21, 23, 26, 32, 33, 38, 41, 42, 46, 48, 50, 51, 52], "therefor": [6, 18, 39, 46], "amount": [6, 39], "bandwidth": [6, 12], "storag": [6, 13, 45], "repli": [6, 14, 15, 17, 18, 35, 39, 46], "d": [6, 11, 14, 16, 29, 31, 32, 33, 34, 38, 39, 44, 46, 49, 52], "expect": [6, 14, 39, 46], "load": [6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 35, 38, 39, 45, 46, 51], "asynchron": [6, 15, 46], "avoid": [6, 8, 15, 31], "long": [6, 11, 15, 19, 23, 24, 37, 39, 46, 47, 50], "period": [6, 15, 33, 46], "hang": [6, 15], "wait": [6, 15, 16, 18, 23, 25, 33, 35, 39, 46], "hostnam": [6, 11, 15, 31, 39, 41], "resolv": [6, 15, 39, 46], "timeout": [6, 15, 23, 25, 39, 50], "area": [6, 16, 39, 46, 49, 52], "within": [6, 16, 21, 29, 33, 34, 36, 37, 39, 42, 46], "usabl": [6, 16, 21, 39], "extern": [6, 8, 17, 31, 39], "oident": [6, 17], "servic": [6, 11, 17, 26, 31, 35, 46, 48, 51], "act": [6, 17, 29, 39, 40, 46, 48], "daemon": [6, 17, 39], "onlin": [6, 16, 19, 31, 35], "retriev": [6, 19, 21], "transit": [6, 20, 45, 46], "earlier": [6, 20, 32, 33], "AND": [6, 8, 20, 33, 46], "By": [6, 16, 18, 20, 23, 25, 31, 35, 38, 39, 46, 48, 51], "seamlessli": [6, 20], "old": [6, 20, 23, 33], "eventu": [6, 20], "altogeth": [6, 20], "itself": [6, 16, 29, 30, 31, 32, 39, 46], "ie": [6, 33, 36, 45, 46, 48], "userlist": [6, 18, 22, 24], "gseen": [6, 22], "g": [6, 8, 22, 29, 33, 38, 39, 46, 52], "quann": [6, 22], "kreativrauschen": [6, 22], "Not": [6, 23, 31, 42], "equival": [6, 23, 34], "no_irc": [6, 23], "implement": [6, 7, 8, 17, 34, 35, 39, 42, 44, 45, 46, 51], "tiwtch": 6, "report": [6, 16, 27, 29, 33, 49], "statist": [6, 16, 27], "contest": 6, "site": [6, 52], "hour": [6, 27, 29, 37, 39, 46], "isn": [6, 16, 23, 24, 27, 33, 37, 46], "again": [6, 16, 27, 29, 32, 36, 37, 38, 39, 45, 46, 50], "sent": [6, 16, 18, 24, 27, 31, 35, 39, 42, 43, 46, 48, 50, 52], "demonstr": [6, 21, 28, 46], "right": [6, 8, 16, 17, 28, 30, 33, 46], "jul": 7, "25": [7, 11, 23, 50], "2016": 7, "independ": 7, "main": [7, 30, 33, 34, 35, 43], "desir": [7, 8, 29, 31, 32, 33, 45], "extra": [7, 21, 39, 42], "overhead": 7, "bloat": 7, "enhanc": 7, "instruct": [7, 33, 45], "direct": [7, 34, 38, 44, 46], "un": [7, 18, 37, 39, 46], "format": [7, 21, 23, 29, 31, 33, 34, 39, 45, 46, 47, 50], "modulenam": [7, 29], "folder": [7, 21], "suffix": [7, 39], "rehash": [7, 29, 30, 31, 39], "ye": [7, 30, 31, 34, 46], "detect": [7, 23, 34, 41, 46, 48], "yourself": [7, 31, 33, 44, 45, 48], "until": [7, 11, 16, 37, 39, 46], "henc": [7, 29, 46], "nearli": 7, "who": [8, 11, 16, 18, 23, 30, 33, 35, 39, 43, 46, 52], "understand": [8, 32, 36, 39, 46], "alreadi": [8, 11, 23, 29, 30, 32, 33, 34, 35, 38, 39, 45, 46, 51], "suitabl": [8, 50], "illustr": 8, "handl": [8, 30, 31, 32, 37, 39, 45, 48, 50], "snippet": 8, "alter": [8, 16, 40, 46, 51], "breviti": 8, "simplic": 8, "initi": [8, 29, 30, 33, 41, 42, 46, 48], "symbol": [8, 34, 46], "p_tcl_bind_list": [8, 32], "h_dcc": 8, "param": 8, "const": [8, 29], "char": [8, 29, 32, 39, 46], "length": [8, 18, 23, 29, 45, 46, 48], "tclhash": 8, "int": [8, 29, 32, 36], "intfunc": 8, "return": [8, 18, 21, 29, 32, 35, 36, 45, 50], "aka": [8, 39], "tcl_bind_list_t": 8, "add_bind_t": [8, 32], "builtin_dcc": 8, "doe": [8, 11, 26, 30, 31, 35, 36, 37, 39, 42, 43, 46, 50, 51, 52], "explain": [8, 38, 46], "happen": [8, 30, 33, 37, 39, 46], "arbitrari": [8, 46], "argument": [6, 8, 16, 18, 30, 31, 41, 46, 50], "import": [8, 21, 29, 30, 31, 33, 35, 39, 43, 46], "That": [8, 26, 30, 33, 38, 46, 52], "mean": [8, 16, 18, 23, 30, 31, 32, 35, 37, 38, 39, 40, 41, 45, 46, 48, 50], "mask": [8, 16, 21, 23, 30, 32, 39, 50], "test": [8, 30, 33, 52], "proc1": 8, "proc2": 8, "overwrit": [8, 17, 33, 46], "proc": [8, 21, 23, 29, 30, 36, 50], "myproc": [8, 21, 46], "arg": [8, 29, 32], "putlog": [8, 21, 23, 29, 30, 32], "Of": [8, 38, 39], "far": [8, 16, 33], "against": [8, 11, 16, 20, 23, 30, 32, 33, 45, 46, 50], "receiv": [8, 15, 16, 23, 31, 32, 38, 46, 50], "accept": [8, 16, 24, 26, 32, 34, 36, 38, 39, 46, 48, 51], "check_tcl_dcc": 8, "cmd": [8, 39, 46], "idx": [8, 29, 32], "struct": [8, 32], "flag_record": [8, 32], "fr": [8, 32], "fr_global": [8, 32], "fr_chan": [8, 32], "11": [8, 46], "get_user_flagrec": 8, "con_chan": 8, "egg_snprintf": 8, "sizeof": [8, 32], "ld": 8, "sock": [8, 29, 39], "tcl_setvar": [8, 32], "interp": [8, 32], "_dcc1": 8, "nick": [8, 11, 18, 23, 27, 30, 31, 32, 33, 39, 52], "_dcc2": 8, "_dcc3": 8, "check_tcl_bind": [8, 32], "match_parti": 8, "bind_use_attr": 8, "bind_has_builtin": 8, "snip": 8, "temporari": [8, 11, 27, 37, 39, 46], "pass": [8, 21, 30, 31, 32, 33, 35, 41, 43, 45, 50], "callback": [8, 35], "socket": [8, 17, 29, 34, 46, 48], "id": [8, 46], "putdcc": 8, "respond": [8, 11, 33, 46], "back": [8, 23, 30, 33, 39, 41, 44, 45, 46, 49], "depend": [8, 29, 35, 37, 44, 46, 48, 52], "caller": 8, "pars": [8, 21, 46], "atr": 8, "match_typ": 8, "matchtyp": 8, "result": [8, 23, 35, 37, 39, 41, 46], "bind_nomatch": 8, "tm": 8, "tm_last": 8, "check_bind_match": 8, "continu": [8, 33, 46], "tc": 8, "suffic": [8, 30], "check_bind_flag": 8, "hit": [8, 46], "tcl_eval": 8, "procnam": [8, 30, 46, 50], "grab": [8, 46], "trigger_bind": 8, "func_nam": [8, 29], "suppli": [8, 39], "case": [8, 15, 20, 21, 23, 30, 32, 33, 35, 36, 39, 46], "uniqu": [8, 36, 39, 46, 50], "identifi": [8, 31, 39, 45, 46, 52], "unsur": [8, 33], "wildcard": [8, 11, 30, 31, 46, 50], "exact": [8, 46], "tclegg": 8, "describ": [8, 29, 30, 33, 34, 36, 38, 39], "bind_stack": [8, 32], "add_builtin": [8, 29], "cmd_t": [8, 29, 32], "null": [8, 29, 32], "mycmd": 8, "tcl_name": 8, "void": [8, 29, 32], "cc": [8, 29], "p": [8, 11, 17, 31, 33, 38, 39, 46, 52], "1024": [8, 16, 17, 25, 32, 33], "cd_tcl_cmd": 8, "tclcmd": 8, "func": [8, 29], "bindtyp": 8, "funcnam": 8, "h_raw": 8, "324": 8, "got324": 8, "raw": [8, 35, 39, 48], "cmd_boot": 8, "cdata": 8, "add_cd_tcl_cmd": 8, "bind_bind_entri": 8, "context": [8, 29], "suppos": 8, "typic": [8, 16, 26, 39, 40, 43, 46, 51], "tcl_command": 8, "tcl_putdcc": 8, "clientdata": 8, "tcl_interp": 8, "irp": [8, 32], "argc": 8, "argv": [8, 32], "f": [8, 11, 32, 38, 39, 46, 47, 50, 52], "okai": [8, 39], "verifi": [8, 23, 31, 39, 48], "count": [8, 23], "badarg": [8, 32], "hand": [8, 30, 39, 46], "macro": [8, 29, 32], "saniti": 8, "checkvalid": [8, 32], "findidx": 8, "atoi": 8, "tcl_appendresult": [8, 32], "invalid": [8, 46], "tcl_error": [8, 32], "tcl_resetresult": 8, "tcl_ok": [8, 32], "oppos": [8, 46], "userrec": [8, 32], "know": [8, 18, 19, 23, 26, 29, 30, 35, 37, 38, 39, 46, 49, 51], "els": [8, 21, 30, 32, 43, 46], "par": [8, 32], "associ": [8, 26, 35, 46, 51], "gbuildin_dcc": 8, "annot": 8, "gdb": 8, "backtrac": 8, "thommei": 8, "0x55e8bd8a49b0": 8, "0x55e8be6a0010": 8, "614": 8, "0x55e8bd8aec90": 8, "8977024": 8, "flags_udef": 8, "chanrec": [8, 18, 46], "0x55e8bd8aeae0": 8, "0x55e8bd8a4a10": 8, "0x55e8bbf002d0": 8, "0x55e8bd59b1c0": 8, "0x55e8bd7e3e00": 8, "678": 8, "0x55e8be642fa0": 8, "0x55e8be9f6bd0": 8, "0x55e8be7d9020": 8, "0x0": 8, "usr": 8, "lib": 8, "x86_64": 8, "linux": [8, 33, 41], "libtcl8": 8, "lastbind": 8, "0x55e8bd5efda0": 8, "0x55e8bbf4112b": 8, "0x55e8bd5efd40": 8, "742": 8, "0x55e8bd5eecb0": 8, "0x7ffcf3f9dac1": 8, "0x7ffcf3f9d100": 8, "80": 8, "942": 8, "brkt": 8, "0x7ffcf3f9dac6": 8, "974": 8, "udef_glob": 8, "udef_chan": 8, "dcc_chat": 8, "buf": [8, 18], "1068": 8, "2002": [9, 13, 14, 19, 22, 27, 37, 43, 47, 52], "none": [9, 10, 11, 13, 15, 19, 20, 21, 22, 23, 25, 28, 46], "loadmodul": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 39, 45, 51], "2000": [9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 28, 39, 40, 45], "2003": [10, 24, 30], "md5": 10, "anymor": [10, 20, 39], "octob": [11, 20, 23], "chanfil": [11, 33, 49], "expir": [11, 18, 19, 23, 37, 39, 46, 48], "enforc": [11, 31, 35, 39], "chanmod": [11, 31], "mix": [11, 18], "endless": 11, "preconfigur": 11, "specifi": [11, 15, 16, 17, 19, 23, 24, 29, 31, 33, 36, 37, 39, 40, 41, 45, 46, 48, 50], "turn": [11, 17, 23, 39, 46], "off": [11, 17, 18, 23, 33, 38, 39, 43, 46], "plu": [11, 23, 39, 46, 48], "minu": 11, "front": [11, 30, 33, 34, 36, 46, 51], "integ": [11, 36, 46], "idl": [11, 29, 46], "kick": [11, 18, 23, 35, 36, 39, 46, 49, 52], "stopnethack": [11, 52], "de": [11, 35, 46], "anyon": [11, 36, 37, 46], "serverop": 11, "seven": [11, 46], "isoptest": 11, "wasoptest": 11, "split": [11, 18, 41, 43, 46, 47], "isop": 11, "wasop": [11, 18, 52], "bitch": 11, "reveng": 11, "punish": [11, 46, 52], "bad": [11, 46, 52], "four": [11, 30, 35, 39, 41, 46, 47], "deop": [11, 46, 52], "k": [11, 18, 23, 39, 46, 52], "19": [11, 46], "correspond": [11, 31, 37, 46], "replac": [11, 23, 29, 31, 39, 46, 47, 51], "20": [11, 16, 18, 26, 31, 39, 46], "29": [11, 25, 39, 46], "30": [11, 16, 18, 25, 31, 45, 46], "39": [11, 46], "120": [11, 23, 46], "60": [11, 16, 19, 23, 39, 46], "aop": 11, "delai": [11, 16, 18, 30], "maximum": [11, 15, 16, 18, 19, 23, 25, 32, 39, 45, 46, 48], "autoop": 11, "autohalfop": 11, "autovoic": [11, 52], "No": [11, 24, 31, 34, 46, 51], "y": [11, 14, 21, 34, 39, 52], "random": [11, 23, 38, 46], "putserv": [11, 21, 30, 31], "privmsg": [11, 30, 31, 46], "lamest": [11, 33, 38, 39, 47], "me": [11, 52], "co": 11, "lame": [11, 18, 38, 39, 46], "enclos": [11, 32, 41, 46, 50], "brace": 11, "shorter": 11, "getop": 11, "botnetop": 11, "unban": [11, 39, 46], "rais": [11, 23], "15": [11, 39, 45, 46, 47], "constitut": [11, 23, 39], "preced": [11, 33, 46, 48], "respctiv": 11, "enforceban": 11, "dynamicban": [11, 46], "necessari": [11, 34], "rememb": [11, 30, 31, 33], "userban": 11, "dynamicexempt": [11, 46], "remain": [11, 33, 37, 46], "userexempt": 11, "dynamicinvit": [11, 46], "userinvit": 11, "soon": [11, 46], "insecur": 11, "halfop": [11, 46, 52], "protectop": 11, "protecthalfop": 11, "dehalfop": [11, 46, 52], "protectfriend": 11, "statuslog": 11, "total": [11, 29, 40, 46], "member": [11, 29, 35], "regular": [11, 46, 48], "sampl": [11, 32, 33, 51], "01": [11, 18, 46], "40": [11, 31], "istn": 11, "friend": [11, 52], "revengebot": 11, "secret": 11, "cycl": [11, 23, 39], "dontkickop": 11, "instanc": [11, 35], "attack": [11, 20, 45], "inact": [11, 25], "leav": [11, 23, 33, 39, 43, 46, 51], "lose": 11, "nodesynch": 11, "fight": 11, "chanserv": 11, "ircop": [11, 18], "perman": [11, 37, 39, 46], "below": [11, 16, 17, 24, 26, 29, 30, 33, 39, 45, 46, 50], "fil": [11, 46], "explan": [11, 33, 34, 46, 50], "nt": 11, "chanset": [11, 31, 36, 38], "2004": [12, 18], "level": [12, 17, 31, 32, 35, 39, 52], "gzip": [12, 46], "autosav": 13, "doesn": [13, 15, 18, 32, 33, 36, 43, 46, 49, 50], "displai": [13, 16, 18, 23, 31, 32, 33, 36, 39, 46, 47, 50], "februari": 14, "12": [14, 46], "behavior": [14, 18, 37, 39, 41, 46], "ping": 14, "less": [14, 43, 46], "finger": [14, 33], "userinfo": [14, 46], "septemb": 15, "26": [15, 33, 48, 52], "troubl": [15, 39], "ones": [15, 24, 38, 41, 46], "rel": [15, 29, 33, 46], "standard": [15, 17, 18, 25, 29, 30, 42, 46, 48, 51, 52], "cach": [15, 46], "86400": 15, "respect": [15, 41, 46, 47], "ttl": 15, "upper": 15, "boundari": [15, 32], "negcach": 15, "600": [15, 18], "neg": [15, 39, 46], "nxdomain": 15, "lookup": [15, 39, 41, 46], "fail": [15, 25, 39, 46, 48], "maxsend": 15, "resend": [15, 46], "queri": [15, 17, 35, 41], "retrydelai": 15, "dec": [16, 46], "2017": 16, "mydir": 16, "root": [16, 17], "incom": [16, 39, 46], "upload": [16, 33, 40, 46, 49], "central": [16, 36, 39], "filedb": [16, 46], "subdirectori": [16, 46], "databas": [16, 46], "max": [16, 18, 19, 23, 25, 39], "effect": [16, 37, 39, 46], "infinit": 16, "files": 16, "size": [16, 25, 29, 32, 39, 46], "kb": 16, "sub": [16, 36, 46], "brows": 16, "tell": [16, 30, 31, 32, 33, 34, 35, 38, 39, 46, 51], "queu": [16, 23, 46], "exactli": [16, 18, 29, 30, 36, 46], "group": [16, 17, 39, 42, 46], "master": [16, 31, 33, 37, 38, 39, 46, 47, 52], "janitor": [16, 52], "broken": [16, 30, 39, 46], "word": [16, 18, 31, 32, 33, 38, 46, 50, 51], "break": [16, 46], "comment": [16, 18, 27, 30, 33, 39, 45], "over": [16, 21, 23, 26, 29, 30, 33, 39, 41, 46, 48, 49, 51], "client": [16, 17, 23, 26, 31, 33, 35, 39, 42, 46, 48, 51], "too": [16, 18, 23, 25, 29, 39, 46], "patient": 16, "simultan": [16, 25, 46], "remaind": [16, 50], "mark": [16, 32, 40, 46, 52], "hidden": [16, 33, 40, 46], "lsa": 16, "gif": 16, "uglyman": 16, "nobodi": [16, 30], "local": [16, 30, 33, 36, 39, 43, 44, 46, 48], "snowbot": 16, "ugli": 16, "shown": [16, 33, 36, 39], "kilobyt": [16, 39], "progress": 16, "eras": [16, 46], "remot": [16, 38, 39, 46, 47], "clean": 16, "slow": [16, 33, 39], "db": 16, "though": [16, 23, 30, 33, 46, 48], "tag": [16, 40, 42, 50], "filesystem": [16, 36, 46, 52], "june": 17, "2019": 17, "tradition": 17, "113": 17, "usernam": [17, 31, 33, 39, 50, 51], "custom": [17, 23, 30, 31, 35, 36, 40, 46, 48], "oidentd": 17, "nor": 17, "thu": [17, 30, 35, 41, 45, 46], "modern": [17, 33, 45], "oss": 17, "sudo": [17, 33], "setcap": 17, "cap_net_bind_servic": 17, "ep": 17, "imperson": 17, "iptabl": 17, "rout": [17, 46], "destin": [17, 29], "nat": [17, 39, 41], "prerout": 17, "eth0": 17, "dport": 17, "j": [17, 29, 38, 39, 46, 52], "redirect": 17, "addition": [17, 21, 33, 35, 46], "caus": [17, 32, 33, 38, 46, 49], "bound": [17, 39, 46], "netsplit": [17, 18, 39, 40, 46], "reboot": [17, 31], "conflict": 17, "suit": [17, 32, 33], "singl": [17, 18, 31, 36, 46, 50], "environ": [17, 39, 40, 48], "spoof": 17, "open": [17, 31, 32, 36, 39, 43, 44, 46, 48], "builtin": [17, 46], "identd": [17, 33], "shouldn": 17, "begin": [17, 30, 41, 46], "august": [18, 39], "21": [18, 33], "bounc": 18, "reach": [18, 23, 32, 39], "45": 18, "left": [18, 32, 46], "unless": [18, 23, 30, 33, 37, 39, 46], "overridden": 18, "unabl": [18, 33, 38, 41, 46, 51], "learn": [18, 31, 32, 33, 39, 40, 46], "themselv": [18, 33, 38, 46, 49], "userflag": 18, "hello": [18, 21, 23, 31, 33, 39, 40, 46], "afterward": [18, 39], "1500": 18, "180": 18, "200": [18, 43], "byte": [18, 23, 25, 29, 32, 46], "unbind": [18, 39, 49, 50], "myword": 18, "addhost": 18, "takeov": 18, "occur": [18, 30, 46], "due": [18, 23, 30, 39, 46, 50], "blindli": 18, "ing": [18, 26, 51], "guess": 18, "discourag": 18, "opchar": 18, "recogn": [18, 23, 31, 52], "fine": [18, 23, 39, 50], "unrealircd": [18, 46], "lazi": 18, "gone": [18, 46], "At": [18, 32, 38, 39, 43, 51], "moment": [18, 33, 34], "ircd": [18, 23, 46], "per": [18, 46, 50], "stack": [18, 41, 46], "guarante": [18, 35], "although": [18, 33, 39, 46], "higher": [18, 20, 24, 25, 33, 48], "modes_per_line_max": 18, "recompil": [18, 33], "lk": 18, "354": [18, 46], "ircu2": 18, "rfc": [18, 23, 26, 46, 51], "compliant": [18, 23, 46], "1459": 18, "routin": [18, 39, 46], "notefil": [19, 46], "privat": [19, 24, 30, 31, 33, 34, 36, 39, 43, 46, 48], "50": [19, 31, 39], "life": [19, 33], "dai": [19, 25, 39, 46, 49], "fwd": 19, "forward": 19, "address": [19, 24, 27, 33, 38, 39, 41, 48], "notifi": [19, 23, 33, 39, 40, 42, 46], "hourli": [19, 29, 39], "onjoin": 19, "2020": [20, 26, 39, 48, 50], "safe": [20, 31, 33, 34, 45, 51], "outsid": [20, 32, 34, 39], "rijndael": 20, "sha256": 20, "cryptograph": [20, 45, 46], "digest": [20, 46], "algorithm": [20, 45], "round": [20, 45], "1600": 20, "brute": 20, "novemb": [21, 24, 25, 42], "03": [21, 39, 46], "py": 21, "myscript": 21, "putmsg": 21, "extend": [21, 26, 40, 42, 46], "analg": 21, "entir": [21, 33, 46, 50, 51], "catalog": 21, "chanlist": 21, "convert": [21, 46], "empti": [21, 46, 50], "object": 21, "tupl": 21, "dict": [21, 36, 46, 50], "dictionari": [21, 46], "str": [21, 36], "few": [21, 26, 30, 32, 33, 34, 39, 46, 51], "convers": [21, 29, 43, 48], "tcl_binds_": [], "known": [21, 23, 31, 39, 45, 46], "onvert": 21, "resync": [21, 24], "disconnect": [21, 23, 24, 39, 46], "buffer": [21, 24], "reconnect": [21, 24, 46], "examplescript": 21, "bestfriend": 21, "imdb": 21, "third": [21, 30, 32, 38], "listtl": 21, "tcl_list": 21, "usuabl": 21, "urltitl": 21, "parser": 21, "collect": 21, "titl": [21, 52], "page": [21, 33, 44], "z": [21, 34, 52], "librari": [21, 30, 32, 45, 48], "egg": 21, "freenod": 23, "rizon": 23, "sane": 23, "altnick": [23, 33], "stb": 23, "unavail": [23, 39], "hi": [23, 30, 33], "primari": [23, 39], "realnam": [23, 46], "real": [23, 29, 31, 46], "field": [23, 32, 35, 36, 39, 46, 48], "evnt": [23, 46], "init": [23, 39, 46], "init_serv": 23, "botnick": [23, 30, 31, 33, 39], "putquick": 23, "w": [23, 39, 46, 47, 52], "immedi": [23, 32, 33, 35, 45, 46], "deprici": 23, "7000": [23, 33, 34, 46], "2001": [23, 27, 28, 33, 39, 43], "db8": [23, 33, 39], "618": [23, 33, 39], "5c0": [23, 33, 39], "263": [23, 33, 39], "6669": [23, 33], "6697": [23, 33, 46, 48], "whenev": [23, 29, 32, 35, 38, 46, 48], "sign": [23, 31, 34, 39, 46, 47, 48, 51], "jump": [23, 32, 38, 48], "rate": 23, "transmit": 23, "lower": 23, "512": [23, 25], "verif": [23, 39, 48], "assum": [23, 30, 33, 34, 35, 37, 39, 46], "peer": [23, 39, 48], "alt": [23, 39], "16": [23, 39, 45, 46], "32": [23, 39], "revok": [23, 39], "instantli": 23, "low": 23, "respons": [23, 35, 46], "stone": 23, "di": 23, "hasn": 23, "serverror": 23, "queue": [23, 29], "300": [23, 39], "dump": [23, 39, 46], "chunk": 23, "probabl": [23, 31, 33, 34, 46], "quiet": [23, 36, 39, 52], "reject": [23, 38, 39], "squelch": 23, "lowercas": 23, "mirc": [23, 46], "exclus": [23, 46], "pubm": [23, 46], "msgm": [23, 46], "doubl": 23, "penalti": 23, "calcul": 23, "measur": 23, "trace": 23, "accordingli": 23, "three": [23, 31, 32, 35, 36, 37, 38, 39, 46], "summar": 23, "cpu": [23, 39, 46], "intens": 23, "r": [23, 31, 38, 39, 46, 52], "umod": 23, "understood": 23, "indic": [23, 29, 33, 46, 50], "len": 23, "900": 24, "hold": [24, 46], "flush": 24, "overrid": [24, 41, 48], "mnot": 24, "paranoid": [24, 39], "discard": [24, 46], "dload": 25, "block": [25, 26, 29, 33, 47, 51], "ircii": [25, 46], "admit": 25, "turbo": [25, 33], "xfer": [25, 52], "sharefail": 25, "unlink": [25, 39], "abort": [25, 33, 46, 48], "retri": 25, "april": [26, 50], "gatewai": [26, 50, 51], "stream": [26, 51], "claim": [26, 51], "certainli": [26, 33, 51], "meaning": [26, 46, 51], "intent": [26, 51], "spectrum": [26, 51], "focus": [26, 51], "raid": [26, 51], "donat": [26, 51], "userst": [26, 51], "roomstat": [26, 51], "broadcast": [26, 43, 46, 50, 51], "000": [26, 43, 51], "unreli": [26, 50, 51], "moder": [26, 31, 50, 51], "mostli": [26, 46, 51], "infeas": [26, 51], "workaround": [26, 35], "tradit": [26, 41, 49, 50, 51], "downer": 26, "worri": 26, "ton": 26, "clearchat": [26, 50], "clearmsg": [26, 50], "hosttarget": [26, 50], "whisper": [26, 50], "usernotic": [26, 50], "roomsstat": 26, "twcmd": [26, 51], "ip": [27, 31, 33, 34, 39, 41], "logfil": [27, 29, 33, 39, 49], "publicli": 27, "31": [28, 39, 43, 46], "occurr": 29, "ensur": [29, 31, 33, 38, 45, 46], "module_nam": [29, 32], "making_modulenam": 29, "examin": 29, "close": [29, 46], "stdio": 29, "stdlib": 29, "sy": 29, "drastic": [29, 46], "reduc": [29, 50], "decent": 29, "throughout": 29, "refer": [29, 30, 34, 39, 46], "liter": [29, 46], "func_tabl": 29, "module_regist": [29, 32], "major": [29, 32, 33, 36, 46], "minor": [29, 32, 36, 46], "module_depend": [29, 32], "success": [29, 33, 46], "stage": 29, "any_other_funct": 29, "you_want_to_export": 29, "unload": [29, 32, 46], "apart": [29, 39], "tidi": 29, "thorough": [29, 31, 34, 51], "trail": 29, "garbag": 29, "module_undepend": [29, 32], "talli": 29, "memori": [29, 32, 46], "alloc": [29, 46], "dealloc": 29, "nmalloc": 29, "nfree": 29, "fault": 29, "posit": [29, 39], "resourc": 29, "dprintf": [29, 32], "printf": 29, "dp_log": 29, "dp_stdout": 29, "stdout": 29, "dp_mode": 29, "dp_server": 29, "dp_help": 29, "module_entri": 29, "module_find": 29, "search": [29, 31, 46], "module_renam": 29, "old_module_nam": 29, "new_module_nam": 29, "frim": 29, "add_hook": 29, "hook_num": 29, "del_hook": 29, "hook": 29, "hook_secondli": 29, "hook_minut": 29, "hook_5minut": 29, "hook_hourli": 29, "hook_daili": 29, "hook_read_userfil": 29, "hook_userfil": 29, "hook_pre_rehash": 29, "hook_rehash": 29, "hook_idl": 29, "whole": 29, "hook_backup": 29, "hook_load": 29, "hook_di": 29, "die": [29, 31, 33], "module_unload": 29, "module_load": 29, "tri": [29, 39, 46], "add_tcl_command": 29, "tcl_cmd": [29, 32], "tab": 29, "rem_tcl_command": 29, "function_to_cal": 29, "add_tcl_int": 29, "tcl_int": 29, "rem_tcl_int": 29, "variable_nam": 29, "readonli": 29, "add_tcl_str": 29, "tcl_string": 29, "rem_tcl_str": 29, "str_dir": 29, "constantli": 29, "append": [29, 32, 36, 46], "str_protect": 29, "p_tcl_hash_list": 29, "rem_builtin": 29, "displaynam": 29, "taken": [29, 46], "auch": 29, "filt": [29, 46], "noth": [29, 36, 39, 46, 51], "logmod": 29, "nice": 29, "mention": 29, "realli": [30, 32, 33, 36, 39, 49], "idea": [30, 33, 44], "busi": 30, "annoi": 30, "intention": 30, "definit": [30, 33, 34, 45], "languag": [30, 39, 40, 49], "especi": 30, "bottom": 30, "greetscript": 30, "author": [30, 34, 39, 48], "geo": 30, "gree": 30, "pmsg": 30, "greetmsg": 30, "welcom": 30, "uhost": [30, 46], "whew": 30, "ok": 30, "importantli": [30, 32], "wrote": 30, "credit": [30, 46], "contact": [30, 39], "hard": [30, 39], "larger": [30, 45], "harder": [30, 33], "why": [30, 33, 46], "And": [30, 32, 36], "omin": 30, "dissect": 30, "action": [30, 31, 34, 39, 46], "react": [30, 35], "toward": 30, "refin": 30, "foo": [21, 30, 31, 32, 36, 46], "aol": [30, 45], "sum": 30, "hostmask": [30, 31, 37, 38, 40, 45], "told": 30, "declar": [30, 32, 36, 46], "said": [30, 32, 38, 46], "magic": 30, "awesom": [30, 36], "sexystuff": 30, "fourth": 30, "trick": [30, 49], "didn": [30, 33, 46], "talk": [30, 32, 34, 35, 36, 40, 43], "bodi": 30, "true": 30, "deserv": 30, "insid": [30, 36, 39], "challeng": [30, 31], "mayb": [30, 39], "fancyp": 30, "sound": 30, "utim": 30, "dozen": 30, "defens": 30, "grain": 30, "salt": [30, 45], "further": [31, 46], "IN": 31, "OR": [31, 46], "putti": 31, "listen": [31, 33, 38, 39, 41, 48], "3183": 31, "whoi": [31, 39], "chattr": [31, 52], "grant": [31, 40, 48, 51], "numer": [31, 34, 46], "chaninfo": [31, 38], "involv": 31, "snt": 31, "histor": [31, 46], "reli": [31, 46], "ten": 31, "commonli": [31, 34, 36, 39, 46], "humor": 31, "youreggdropconfignameher": 31, "review": [31, 34], "youreggdrop": 31, "editor": [31, 33, 36], "thee": [31, 46], "systemctl": 31, "botnam": [31, 38], "reload": [31, 36], "acknowledg": 31, "confus": [31, 46], "unfortun": 31, "consult": [31, 41, 42, 48], "uncom": [31, 34, 39, 45], "layer": [31, 34], "becom": [31, 33, 39, 46], "preval": 31, "elimin": 31, "cloak": 31, "ever": [31, 33, 39, 46, 48], "appear": [31, 33, 38, 39, 46, 50], "mechan": 31, "plain": [31, 39, 48], "plaintext": [31, 46, 48], "exchang": 31, "ecdsa": 31, "nist256p": 31, "keypair": [31, 34], "pair": [31, 34, 35, 46, 48, 50], "ecparam": 31, "genkei": 31, "prime256v1": 31, "pem": [31, 39], "fingerprint": [31, 38, 39, 48], "ec": 31, "noout": 31, "conv_form": 31, "grep": 31, "tail": 31, "tr": 31, "xxd": 31, "base64": 31, "On": [31, 33, 34, 37, 38], "pubkei": 31, "req": [31, 39, 48], "x509": [31, 39, 48], "node": [31, 48], "keyout": [31, 48], "crt": [31, 39, 48], "yoru": 31, "outform": 31, "der": 31, "sha1sum": 31, "cut": 31, "f1": 31, "privatekei": [31, 34, 38, 39, 48], "cert": [31, 38, 39, 48], "onto": 32, "wherea": [32, 46], "our": [32, 33, 38, 46], "redistribut": 32, "publish": [32, 39], "hope": [32, 33, 51], "merchant": 32, "fit": 32, "FOR": 32, "59": [32, 46], "templ": 32, "330": 32, "02111": 32, "1307": 32, "necessarili": [32, 46], "undef": 32, "server_func": 32, "export_scop": 32, "woobie_start": 32, "woobie_expmem": 32, "woobie_report": 32, "global_func": 32, "woobie_t": 32, "108": 32, "woobie_clos": 32, "log_cmd": 32, "print": 32, "cmd_woobi": 32, "mywoobi": 32, "scope": [32, 34], "tutori": [32, 34], "echo": [32, 40, 42, 49], "tcl_echom": 32, "stdvar": 32, "strcmp": 32, "llama": [32, 38], "illeg": 32, "input": [32, 46], "paramet": [32, 46], "exceed": [32, 39], "style": [32, 37, 46], "quset": 32, "mytcl": 32, "echom": 32, "newli": 32, "certain": [32, 37, 39, 40, 41, 46, 47, 50, 52], "condit": 32, "met": 32, "h_woob": 32, "woobie_2char": 32, "del_bind_t": 32, "woobie_3char": 32, "bar": [32, 46], "moo": [32, 46], "boilerpl": 32, "check_tcl_bindnam": 32, "check_tcl_woobi": 32, "userhost": [32, 50], "snprintf": 32, "_woob1": 32, "_woob2": 32, "match_mask": 32, "bind_exec_log": 32, "encount": [32, 33, 51], "perhap": 33, "websit": [33, 36], "slennox": 33, "incredibli": [33, 46], "prove": 33, "debian": [33, 34], "apt": [33, 34], "wget": 33, "commandlin": 33, "zxvf": 33, "seri": [33, 46, 48], "multi": 33, "patchlevel": 33, "comfort": 33, "haven": 33, "daili": [33, 46], "chanc": [33, 36], "checkout": [33, 44], "skip": [33, 46], "commerci": 33, "problem": [33, 39, 41], "box": [33, 39], "isp": 33, "appli": [33, 37, 39, 45, 52], "curl": 33, "ssh": 33, "gunzip": 33, "xvf": 33, "extract": [33, 36, 46], "slash": [33, 43], "brief": 33, "fast": 33, "botdir": 33, "cooldud": 33, "delet": [33, 36, 49], "rf": 33, "handi": 33, "zip": 33, "notepad": 33, "editplu": 33, "nano": 33, "vim": 33, "offer": [33, 34, 35, 50, 51], "quicker": 33, "nicebot": 33, "carefulli": [33, 46], "vagu": 33, "preserv": 33, "llamabot": [33, 39], "login": [33, 39, 45, 50], "vhost4": [33, 39, 41], "vhost": [33, 39, 41], "ipv4": [33, 39, 41], "vhost6": [33, 39, 41], "5254": 33, "dead": 33, "b33f": 33, "1337": 33, "f270": 33, "captur": [33, 46, 49], "mcobx": 33, "jkp": 33, "donkei": 33, "hors": 33, "3333": [33, 38, 39], "65535": [33, 39], "49152": 33, "rang": [33, 39], "reserv": [33, 39, 43], "basi": 33, "stealth": [33, 39], "scan": 33, "newus": [33, 39], "mrlame": [33, 39], "mrslame": [33, 39], "addus": 33, "rejoin": [33, 46], "aren": [33, 39, 46, 49, 50], "pain": 33, "backslash": 33, "rule": 33, "prematur": 33, "phew": 33, "cross": 33, "gave": 33, "promptli": 33, "kill": [33, 46], "pid": [33, 39, 46], "mnt": 33, "launch": 33, "persist": 33, "luck": [33, 51], "walk": 34, "scenario": [34, 35, 38], "sidenot": 34, "despit": 34, "anachron": 34, "interchang": [34, 41], "transport": 34, "protocol": [34, 39, 42, 46, 48], "appreci": 34, "fork": [34, 44], "ubuntu": 34, "distro": 34, "denot": [34, 46], "pretendnet": 34, "suffici": 34, "wizard": 34, "5555": [34, 38, 39], "hubbot": [34, 38], "perfect": 35, "status": 35, "accur": [35, 46, 50], "alert": [35, 51], "deauthent": 35, "spec": [35, 46], "isupport": 35, "005": [35, 42, 46], "eggdroptest": [35, 50], "beerbot": 35, "tn": 35, "announc": 35, "issupport": 35, "isset": 35, "reliabl": [35, 46, 50], "significantli": [35, 50], "increas": [35, 39, 45], "accuraci": 35, "supplementari": 35, "attach": [35, 46, 50], "overal": 35, "situat": [35, 38], "cover": [35, 37, 38], "incept": 36, "friendli": 36, "special": [36, 38, 46], "locallt": 36, "novel": 36, "namespac": 36, "wrap": 36, "eval": 36, "scriptnam": 36, "statement": [36, 46], "practic": [36, 45, 46], "lessen": 36, "collid": 36, "metadata": 36, "th": 36, "schema": 36, "version_major": 36, "version_minor": 36, "long_descript": 36, "yeah": 36, "besid": 36, "enough": [36, 39], "udef": 36, "myflag": 36, "mystr1": 36, "mystr2": 36, "myint1": 36, "var": [36, 46], "woobie_dict": 36, "q": [36, 52], "woobie_set": 36, "woobie_str": 36, "arrai": 36, "whether": [36, 39, 41, 46], "varnam": 36, "tgz": 36, "proper": [36, 41, 46], "myscript_goodversion_specialfeatur": 36, "sorri": 36, "collis": 36, "myscript_set": 36, "ms_set": 36, "localm": 36, "regardless": [36, 46], "march": [37, 47, 52], "07": [37, 52], "clarifi": 37, "sticki": [37, 46], "unsticki": 37, "stick": 37, "attribut": [37, 38, 46, 52], "kept": [37, 39], "obvious": [37, 46], "unstick": 37, "whose": [37, 46], "whichev": 37, "consist": [38, 40, 43, 46], "leaf": [38, 39, 45, 48], "assign": [38, 39, 46], "aggress": 38, "passiv": 38, "physic": 38, "bota": 38, "botb": 38, "botc": 38, "sharebot": [38, 39, 46], "slave": 38, "botattr": 38, "isol": 38, "unlimit": 38, "4444": [38, 39], "thoroughli": 38, "relink": 38, "scripter": 38, "prepar": 38, "lameshar": 38, "hp": [38, 39], "beldin": 38, "pipe": 38, "he": [38, 46], "unreach": 38, "auth": [38, 39, 48], "fprint": [38, 39, 48], "sha1": [38, 48], "0and": 38, "qualifi": 39, "admin": [39, 47], "lamer": 39, "someircnetwork": 39, "timezon": 39, "est": 39, "timestamp": [39, 46], "alphabet": 39, "european": 39, "utc": 39, "cet": 39, "offset": 39, "coordin": 39, "univers": 39, "gmt": [39, 46], "west": 39, "prime": 39, "meridian": 39, "east": 39, "23": [39, 46], "env": 39, "tz": 39, "everywher": [39, 41, 46], "99": [39, 43], "virtual": 39, "outgo": [39, 46, 49], "prefer": [39, 41, 48], "resolut": 39, "famili": 39, "addlang": [39, 46], "english": [39, 49], "egg_lang": 39, "danish": 39, "french": 39, "finnish": 39, "german": 39, "chatter": 39, "24": [39, 41], "logfilenam": 39, "yesterdai": 39, "48": 39, "concurr": [39, 45], "infin": 39, "decreas": 39, "logsiz": 39, "550": 39, "fill": [39, 44, 48], "quota": 39, "ram": 39, "hole": 39, "care": [39, 46, 51], "logflag": 39, "misc": [39, 46], "wallop": [39, 46], "eight": [39, 46], "belong": 39, "mco": [39, 46], "jpk": 39, "min": 39, "sec": 39, "man": 39, "strftime": 39, "forev": 39, "digit": [39, 48], "month": [39, 46], "fresh": 39, "militari": 39, "00": [39, 46, 47], "am": [39, 52], "midnight": 39, "04may2000": 39, "produc": [39, 46], "yyyymmdd": 39, "manpag": 39, "mkcoblx": 39, "pidfil": 39, "motd": [39, 47], "banner": [39, 47], "perm": 39, "0600": 39, "octal": 39, "remind": 39, "rw": 39, "0400": 39, "0200": 39, "0660": 39, "0440": 39, "0220": 39, "0666": 39, "0444": 39, "0222": 39, "kiddi": 39, "head": 39, "unimport": 39, "deal": [39, 46, 52], "maxim": 39, "1025": 39, "prepend": 39, "prohibit": 39, "sanitycheck": 39, "bogu": 39, "ground": 39, "wouldn": 39, "anywai": 39, "thr": 39, "firewal": 39, "sun": 39, "barr": 39, "ebai": 39, "3666": 39, "behind": 39, "passthru": 39, "127": 39, "192": [39, 46], "168": [39, 46], "255": 39, "172": 39, "transpar": 39, "masquerad": 39, "portrang": 39, "url": [39, 46], "birthdai": 39, "userinfo1": 39, "moreov": 39, "simul": [39, 46], "ethic": 39, "dk": [39, 46], "dupwait": 39, "spread": 39, "lag": [39, 43], "cidr": [39, 46], "notat": 39, "genrsa": 39, "4096": [39, 48], "rsa": 39, "strong": 39, "schat": [39, 48], "conveni": 39, "cipher": [39, 46, 48], "side": [39, 46, 48, 51], "365": 39, "depth": [39, 48], "chain": [39, 48], "shall": 39, "capath": [39, 48], "cafil": [39, 48], "ca": 39, "colon": [39, 41], "comma": [39, 43, 46], "silent": 39, "adh": 39, "anonym": 39, "dh": 39, "uid": [39, 48], "chfinger": 39, "slower": 39, "everydai": 39, "limbo": 39, "serv": 39, "alltool": 39, "robot": 40, "regularli": 40, "awai": [40, 42, 46], "chghost": [40, 42, 46], "setnam": [40, 42], "whox": [40, 46], "unaccess": 40, "combin": [40, 46], "mar": 41, "2021": [41, 42, 49], "establish": [41, 46, 48], "freebsd": 41, "netbsd": 41, "openbsd": 41, "mac": 41, "vista": 41, "xp": 41, "unoffici": 41, "wherev": 41, "squar": 41, "bracket": 41, "doubt": 41, "Their": 41, "began": 42, "rfc1459": [42, 46], "rfc2812": 42, "compris": 42, "decid": [42, 45], "emerg": 42, "optino": 42, "assumpt": 42, "explicit": 42, "302": [42, 46], "miniatur": 43, "watch": [43, 50], "999": 43, "wide": [43, 48], "anywher": [43, 46], "dot": 43, "apostroph": 43, "everyon": [43, 46], "contribut": 44, "think": [44, 52], "repo": 44, "click": [44, 51], "button": [44, 51], "descriptivebranchnam": 44, "confirm": [44, 46], "push": [44, 46], "yourusernam": 44, "yourbranchnam": 44, "templat": 44, "pour": 44, "cold": [44, 45], "bask": 44, "warm": 44, "karma": 44, "crytopgraphi": 45, "content": [45, 46, 50], "sensit": 45, "crypto": 45, "solut": 45, "deriv": 45, "revers": [45, 46], "seamless": 45, "enjoi": 45, "beverag": 45, "chpass": 45, "consider": 45, "ideal": [45, 51], "essenti": 45, "fanci": 45, "lobster": 45, "dinner": 45, "encpass2": 45, "pbk": 45, "2024": 46, "exhaust": [46, 50], "categori": 46, "vertic": 46, "faster": 46, "bypass": 46, "caution": 46, "lieu": 46, "negoti": [46, 48], "mytag": 46, "baa": 46, "flat": 46, "servivc": 46, "botfl": 46, "botaddr": 46, "laston": 46, "xtra": 46, "visibl": 46, "counterpart": 46, "filearea": 46, "remotebotnam": 46, "globalflag": 46, "channelflag": 46, "subsequ": 46, "botaddress": 46, "ipaddress": 46, "ipv4address": 46, "ipv6address": 46, "behav": 46, "getinfo": 46, "unstuck": 46, "jupe": 46, "sublist": 46, "zero": 46, "differenti": 46, "abcdechannel": 46, "got": 46, "modechang": 46, "refresh": [46, 50], "fragil": 46, "notif": 46, "behalf": 46, "compon": 46, "duplic": 46, "element": 46, "bywho": 46, "ag": 46, "reset": 46, "reread": 46, "memberlist": 46, "lost": 46, "ntik": 46, "serverlist": 46, "ex": 46, "goober": 46, "ON": 46, "forget": 46, "reiniti": 46, "coupl": 46, "throw": 46, "alia": 46, "99999": 46, "greater": 46, "equal": 46, "she": 46, "mpj": 46, "pj": 46, "moc": 46, "mp": 46, "configfil": 46, "omit": [46, 48], "boldfac": 46, "video": 46, "underlin": [46, 47], "ansi": 46, "ctrl": 46, "bell": 46, "ordinari": [46, 48], "ital": 46, "intercept": 46, "item": 46, "uplink": 46, "botnetnick": 46, "file_receiv": 46, "file_send": 46, "file_send_pend": 46, "readabl": 46, "lindex": 46, "six": 46, "blank": 46, "mandatori": 46, "permit": 46, "failur": [46, 50], "kind": 46, "succeed": 46, "pathnam": 46, "resum": 46, "bitchx": 46, "python": [2, 6, 46], "five": 46, "jp": 46, "34": 46, "04": 46, "06": 46, "08": [46, 47], "interv": 46, "secondli": 46, "repres": [46, 50], "jan": [46, 48], "1970": 46, "week": 46, "804600": 46, "vari": [46, 52], "posix": 46, "portabl": 46, "fri": 46, "aug": 46, "55": 46, "1973": 46, "rand_max": 46, "2147483647": 46, "underli": 46, "pseudo": 46, "relinquish": 46, "deliv": 46, "notebox": 46, "caught": 46, "encod": [46, 47], "ascii": 46, "64": 46, "ecb": 46, "cbc": 46, "pick": 46, "fatal": 46, "wasn": 46, "128": 46, "pre": [46, 48], "myownevent123": 46, "todai": 46, "couldn": 46, "17": 46, "insensit": 46, "simplifi": 46, "rfc_compliant": 46, "spent": 46, "mem": 46, "exclud": 46, "cleartext": 46, "vali": 46, "valis0": 46, "crappi": 46, "math": 46, "ufl": 46, "edu": [46, 52], "eu": 46, "pl1": 46, "1010201": 46, "mnnrrpp": 46, "nn": 46, "rr": 46, "pp": 46, "437": 46, "expans": 46, "quot": [46, 50], "highest": 46, "prioriti": 46, "danger": 46, "logic": 46, "proce": 46, "easiest": 46, "build": 46, "ti": 46, "lastli": 46, "ov": 46, "mn": 46, "unknown": 46, "phrase": 46, "spoken": 46, "notc": 46, "breach": 46, "notcproc": 46, "partproc": 46, "signoff": 46, "possibli": [46, 50], "twice": 46, "rawt": 46, "topc": 46, "kicker": 46, "newnick": 46, "typo": 46, "18": 46, "guppi": 46, "mode_proc": 46, "stai": 46, "mode_proc_fix": 46, "ctcr": 46, "embed": 46, "supplant": 46, "368": 46, "unexpect": 46, "chon": 46, "chof": 46, "recipi": 46, "rcvd": 46, "invok": 46, "dronepup": 46, "eden": 46, "wild": 46, "spoke": 46, "bcst": 46, "disc": 46, "splt": 46, "Be": 46, "awar": 46, "fals": 46, "alarm": 46, "fake": 46, "rejn": 46, "needop": 46, "needal": 46, "flud": 46, "wall": 46, "sender": 46, "chjn": 46, "chpt": 46, "0000": 46, "9999": 46, "schedul": 46, "pad": 46, "unld": 46, "nkch": 46, "oldhandl": 46, "newhandl": 46, "sighup": 46, "hup": 46, "sigterm": 46, "sigil": 46, "ill": 46, "sigquit": 46, "prerehash": 46, "prerestart": 46, "preinit": 46, "tout": 46, "stall": 46, "flexibl": [46, 48], "noqueu": 46, "cron": 46, "weekdai": 46, "evalu": 46, "express": [6, 46], "delimit": 46, "whitespac": 46, "sundai": 46, "handshak": 46, "shutdownreason": 46, "shutdown": 46, "sigkil": 46, "ircawai": 46, "301": 46, "catch": 46, "invt": 46, "invite": 46, "late": 46, "distinguish": 46, "unset": 46, "revert": 46, "treat": [46, 51], "signal": 46, "verbos": 46, "affet": 46, "retain": 46, "driven": 46, "misnom": 46, "song": 46, "danc": 46, "eof": 46, "arriv": 46, "dispos": 46, "newidx": 46, "6687": 46, "escap": 46, "insert": 47, "invers": 47, "flash": 47, "botnetcentr": 47, "percent": 47, "col": 47, "column": 47, "width": 47, "center": 47, "70": 47, "meet": 48, "autodetect": 48, "forcefulli": 48, "sslinc": 48, "ssllib": 48, "starttl": 48, "certifict": 48, "graphic": 48, "deliber": 48, "sdcc": 48, "kvirc": 48, "synchron": 48, "infrastructur": 48, "subject": 48, "s_client": 48, "sslport": 48, "issuer": 48, "jun": 49, "02": 49, "2500": 49, "high": 49, "therebi": [49, 51], "lang": 49, "techniqu": 49, "yourbot": 49, "myvar": 49, "held": 50, "natur": 50, "WILL": 50, "unintend": 50, "consequ": 50, "truncat": 50, "assur": 50, "replic": [50, 51], "vip": [50, 51], "subscrib": [50, 51], "badgui": 50, "comprehens": 50, "twith": 50, "gui": 50, "flagmask": 50, "ccht": 50, "histori": 50, "tmi": 50, "tv": [50, 51], "target": 50, "cmsg": 50, "msgid": 50, "htgt": 50, "viewer": 50, "similarli": 50, "arbitrarili": 50, "wspr": 50, "popul": 50, "wspm": 50, "rmst": 50, "emot": 50, "uncertainti": 50, "usst": 50, "usrntc": 50, "discontinu": 51, "technic": 51, "token": 51, "oauth": 51, "alphanumer": 51, "pretend": 51, "j9irk4vs28b0obz9easys4w2ystji3u": 51, "spoiler": 51, "sake": 51, "light": 51, "decis": 51, "notabl": 51, "topic": 51, "degrad": 51, "capac": 51, "face": 51, "hubcap": 52, "clemson": 52, "hate": 52, "milk": 52, "meaningless": 52, "entitl": 52, "badg": 52, "mainten": 52, "washalfop": 52, "nethack": 52, "highlight": 52, "individu": 21, "eggsrop": 21, "bind_typ": [], "pysourc": 6, "parse_tcl_list": 6, "parse_tcl_dict": 6}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"about": [0, 2, 41, 42, 48], "eggdrop": [0, 2, 3, 4, 5, 6, 7, 8, 21, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 44, 46, 50], "bore": 1, "legal": 1, "stuff": 1, "an": [2, 21, 29, 30, 31, 34], "open": 2, "sourc": [2, 16, 33], "irc": [2, 18, 34, 48, 51], "bot": [2, 16, 38, 46], "some": 2, "thing": 2, "you": 2, "can": [2, 7], "do": [2, 7, 29], "how": [2, 4, 5, 7, 29], "get": [2, 4, 16, 33, 46], "instal": [2, 3, 7, 33, 41, 48], "pre": [2, 4, 34], "requisit": [2, 4, 34], "where": 2, "find": 2, "more": 2, "help": [2, 4], "us": [2, 21, 35, 38], "tutori": 2, "modul": [2, 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 32, 39, 46], "quick": [3, 4], "startup": [3, 4], "cygwin": 3, "requir": [3, 29, 32, 35, 46], "window": 3, "readm": 4, "notic": 4, "what": [4, 7, 29, 38], "i": [4, 7, 38], "ftp": 4, "git": 4, "develop": [4, 36], "snapshot": 4, "docker": 4, "system": [4, 31], "upgrad": [4, 5], "command": [4, 5, 21, 26, 32, 36, 46, 49, 50], "line": [4, 43], "auto": 4, "start": [4, 33], "document": [4, 5], "obtain": 4, "must": 5, "read": 5, "chang": [5, 46], "v1": 5, "9": 5, "config": [5, 16, 21, 33, 36, 46, 49, 51], "file": [5, 16, 21, 33, 34, 36, 39, 46, 49, 51], "script": [5, 21, 30, 35, 36, 39, 48], "botnet": [5, 34, 38, 39, 48], "tcl": [5, 8, 21, 26, 32, 35, 36, 45, 46, 50], "includ": 6, "inform": [7, 34], "ar": 7, "compil": 7, "without": 7, "dynam": 7, "static": 7, "still": 7, "need": 7, "loadmodul": [7, 46], "bind": [8, 21, 32, 46, 50], "intern": 8, "tabl": 8, "creation": 8, "stackabl": [8, 46], "ht_stackabl": 8, "trigger": 8, "ani": 8, "c": 8, "handler": 8, "summari": 8, "assoc": [9, 46], "blowfish": 10, "channel": [11, 16, 31, 46, 50], "set": [11, 31, 33, 36, 39, 41, 46, 48], "valu": [11, 46], "base": 11, "enabl": [11, 34, 35, 45, 46], "disabl": 11, "default": [11, 49], "compress": [12, 46], "consol": [13, 39, 46], "ctcp": [14, 41], "dn": 15, "filesi": [16, 46], "setup": 16, "partylin": [16, 21, 26, 31, 32], "usag": [16, 36, 41, 42, 45, 48], "cancel": 16, "cd": 16, "directori": [16, 39, 46], "cp": [16, 46], "dst": 16, "desc": [16, 46], "descript": 16, "filestat": 16, "user": [16, 31, 38, 46, 52], "clear": [16, 46], "stat": 16, "filenam": [16, 46], "nicknam": [16, 46], "hide": 16, "ln": 16, "filepath": 16, "localfil": 16, "l": [16, 46], "filemask": 16, "mkdir": [16, 46], "dir": [16, 46], "flag": [16, 31, 38, 46, 50, 52], "mv": [16, 46], "dest": 16, "pend": 16, "pwd": 16, "quit": 16, "rm": 16, "rmdir": [16, 46], "share": [16, 24, 38], "optim": 16, "unhid": 16, "unshar": 16, "ident": 17, "note": [19, 46], "pbkdf2": 20, "python": 21, "load": [21, 36], "express": 21, "pysourc": 21, "path": [21, 39], "argument": [21, 32], "parse_tcl_list": 21, "string": [21, 46, 49], "parse_tcl_dict": 21, "variabl": [21, 46, 49], "write": [21, 29, 30, 32], "header": [21, 32], "section": 21, "code": [21, 32], "seen": 22, "server": [23, 34, 35, 46], "transfer": 25, "twitch": [26, 50, 51], "limit": [26, 46, 51], "api": 26, "uptim": [27, 46], "woobi": 28, "module_start": 29, "module_t": 29, "module_clos": 29, "module_expmem": 29, "module_report": 29, "addit": [29, 34], "function": [29, 51], "common": 31, "first": 31, "step": 31, "log": [31, 39, 49], "join": [31, 35], "add": [31, 46], "host": [31, 46], "assign": 31, "permiss": 31, "configur": [31, 33, 34, 45], "automat": 31, "restart": [31, 46], "crontab": 31, "method": 31, "old": [31, 46], "systemd": 31, "newer": 31, "authent": [31, 38, 48], "nickserv": 31, "up": [31, 33], "sasl": 31, "basic": [32, 39], "ad": [32, 38], "defin": 32, "call": 32, "export": 32, "prerequisit": 33, "The": [33, 43], "super": 33, "short": 33, "version": [33, 46], "histori": 33, "download": 33, "locat": 33, "edit": [33, 51], "No": 33, "show": 33, "tl": [34, 38, 48], "secur": [34, 38, 48], "connect": [34, 46], "protect": 34, "commun": 34, "prepar": 34, "gener": 34, "kei": [34, 46, 48], "listen": [34, 46], "account": [35, 46], "track": 35, "capabl": [35, 42], "extend": 35, "notifi": 35, "whox": 35, "check": 35, "statu": [35, 46], "determin": 35, "support": [35, 41, 42, 48], "best": 35, "effort": 35, "tag": [35, 46], "autoscript": 36, "remot": 36, "fetch": 36, "list": [36, 46], "unload": 36, "clean": 36, "updat": 36, "structur": 36, "manifest": 36, "json": 36, "placement": 36, "hint": 36, "egg_load": 36, "egg_unload": 36, "egg_al": 36, "ban": [37, 46], "invit": [37, 46], "exempt": [37, 46], "link": [38, 46], "term": 38, "exampl": 38, "bottre": 38, "botflag": 38, "make": 38, "record": [38, 46], "certif": [38, 48], "core": 39, "execut": 39, "dcc": [39, 46, 48], "telnet": 39, "advanc": [39, 49], "ssl": [39, 48], "featur": 40, "ipv6": 41, "chat": 41, "chat4": 41, "chat6": 41, "ircv3": 42, "cap": [42, 46], "parti": 43, "patch": 44, "submit": 44, "via": [44, 46], "github": 44, "encrypt": [45, 46], "hash": 45, "background": 45, "hybrid": 45, "solo": 45, "interfac": 45, "output": 46, "putserv": 46, "text": 46, "option": 46, "puthelp": 46, "putquick": 46, "putnow": 46, "onelin": 46, "putkick": 46, "nick": [46, 50], "reason": 46, "putlog": 46, "putcmdlog": 46, "putxferlog": 46, "putloglev": 46, "": 46, "dumpfil": 46, "queuesiz": 46, "queue": 46, "clearqueu": 46, "req": 46, "raw": 46, "arg": [46, 50], "tagmsg": 46, "target": 46, "ip": 46, "port": 46, "password": 46, "remov": 46, "manipul": 46, "countus": 46, "validus": 46, "handl": 46, "findus": 46, "userlist": 46, "passwdok": 46, "pass": 46, "getus": 46, "entri": 46, "type": [46, 50], "extra": 46, "info": 46, "setus": 46, "chhandl": 46, "new": 46, "chattr": 46, "botattr": 46, "matchattr": 46, "addus": 46, "hostmask": 46, "addbot": 46, "address": 46, "botport": 46, "userport": 46, "delus": 46, "delhost": 46, "addchanrec": 46, "delchanrec": 46, "haschanrec": 46, "getchaninfo": 46, "setchaninfo": 46, "newchanban": 46, "creator": 46, "comment": 46, "lifetim": 46, "newban": 46, "newchanexempt": 46, "newexempt": 46, "newchaninvit": 46, "newinvit": 46, "stickban": 46, "banmask": 46, "unstickban": 46, "stickexempt": 46, "exemptmask": 46, "unstickexempt": 46, "stickinvit": 46, "invitemask": 46, "unstickinvit": 46, "killchanban": 46, "killban": 46, "killchanexempt": 46, "killexempt": 46, "killchaninvit": 46, "killinvit": 46, "ischanjup": 46, "isban": 46, "ispermban": 46, "isexempt": 46, "ispermexempt": 46, "isinvit": 46, "isperminvit": 46, "isbansticki": 46, "isexemptsticki": 46, "isinvitesticki": 46, "matchban": 46, "matchexempt": 46, "matchinvit": 46, "banlist": 46, "exemptlist": 46, "invitelist": 46, "newignor": 46, "killignor": 46, "ignorelist": 46, "isignor": 46, "save": 46, "reload": 46, "backup": 46, "name": 46, "savechannel": 46, "loadchannel": 46, "channame2dnam": 46, "chandname2nam": 46, "dname": 46, "isbotnick": 46, "botisop": 46, "botishalfop": 46, "botisvoic": 46, "botonchan": 46, "isop": 46, "ishalfop": 46, "wasop": 46, "washalfop": 46, "isvoic": 46, "isidentifi": 46, "isawai": 46, "isircbot": 46, "onchan": 46, "monitor": 46, "delet": 46, "onlin": 46, "offlin": 46, "accounttrack": 46, "getaccount": 46, "nick2hand": 46, "account2nick": 46, "hand2nick": 46, "handonchan": 46, "ischanban": 46, "ischanexempt": 46, "ischaninvit": 46, "chanban": 46, "chanexempt": 46, "chaninvit": 46, "resetban": 46, "resetexempt": 46, "resetinvit": 46, "resetchanidl": 46, "resetchanjoin": 46, "resetchan": 46, "refreshchan": 46, "getchanhost": 46, "getchanjoin": 46, "onchansplit": 46, "chanlist": 46, "chanflag": 46, "getchanidl": 46, "getchanmod": 46, "jump": 46, "pushmod": 46, "mode": 46, "flushmod": 46, "topic": 46, "validchan": 46, "isdynam": 46, "setudef": 46, "int": 46, "str": 46, "renudef": 46, "oldnam": 46, "newnam": 46, "deludef": 46, "getudef": 46, "chansettyp": 46, "isupport": 46, "isset": 46, "putdcc": 46, "idx": 46, "putidx": 46, "dccbroadcast": 46, "messag": 46, "dccputchan": 46, "boot": 46, "dccsimul": 46, "hand2idx": 46, "idx2hand": 46, "valididx": 46, "getchan": 46, "setchan": 46, "resetconsol": 46, "echo": 46, "strip": 46, "putbot": 46, "putallbot": 46, "killdcc": 46, "botlist": 46, "islink": 46, "dccuse": 46, "dcclist": 46, "socklist": 46, "whom": 46, "chan": [46, 50], "getdccidl": 46, "getdccawai": 46, "setdccawai": 46, "dccdumpfil": 46, "numberlist": 46, "erasenot": 46, "listnot": 46, "storenot": 46, "from": 46, "msg": 46, "killassoc": 46, "compressfil": 46, "level": 46, "src": 46, "uncompressfil": 46, "iscompress": 46, "setpwd": 46, "getpwd": 46, "getfil": 46, "getdir": 46, "dccsend": 46, "ircnick": 46, "filesend": 46, "fileresend": 46, "setdesc": 46, "getdesc": 46, "setown": 46, "getown": 46, "setlink": 46, "getlink": 46, "getfileq": 46, "getfilesendtim": 46, "destin": 46, "getflag": 46, "setflag": 46, "miscellan": 46, "keyword": 46, "mask": 46, "proc": 46, "unbind": 46, "logfil": 46, "maskhost": 46, "masktyp": 46, "timer": 46, "minut": 46, "count": 46, "timernam": 46, "utim": 46, "second": 46, "killtim": 46, "killutim": 46, "unixtim": 46, "durat": 46, "strftime": 46, "formatstr": 46, "time": 46, "ctime": 46, "myip": 46, "rand": 46, "control": 46, "sendnot": 46, "unlink": 46, "decrypt": 46, "base64": 46, "encpass": 46, "die": 46, "unam": 46, "dnslookup": 46, "hostnam": 46, "arg1": 46, "arg2": 46, "argn": 46, "md5": 46, "callev": 46, "event": 46, "traffic": 46, "unloadmodul": 46, "loadhelp": 46, "helpfil": 46, "unloadhelp": 46, "reloadhelp": 46, "rehash": 46, "stripcod": 46, "matchaddr": 46, "matchcidr": 46, "block": 46, "prefix": 46, "matchstr": 46, "pattern": 46, "rfcequal": 46, "string1": 46, "string2": 46, "istl": 46, "starttl": 46, "tlsstatu": 46, "global": 46, "botnick": 46, "botnam": 46, "serveraddress": 46, "numvers": 46, "lastbind": 46, "isjup": 46, "handlen": 46, "configurearg": 46, "languag": 46, "return": 46, "procedur": 46, "tcp": 46, "match": 46, "charact": 46, "textfil": 47, "substitut": 47, "tip": 49, "renam": 49, "keep": 49, "self": 49, "modifi": 49, "modular": 49, "your": 49, "twcmd": 50, "cmd": 50, "userst": 50, "roomstat": 50, "twitchmod": 50, "twitchvip": 50, "ismod": 50, "isvip": 50, "disclaim": 51, "regist": 51, "web": 51, "ui": 51}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"About Eggdrop": [[0, "about-eggdrop"], [2, null]], "Boring legal stuff": [[1, "boring-legal-stuff"]], "Eggdrop, an open source IRC bot": [[2, "eggdrop-an-open-source-irc-bot"]], "Some things you can do with Eggdrop": [[2, "some-things-you-can-do-with-eggdrop"]], "How to get Eggdrop": [[2, "how-to-get-eggdrop"]], "How to install Eggdrop": [[2, "how-to-install-eggdrop"]], "Installation Pre-requisites": [[2, "installation-pre-requisites"]], "Installation": [[2, "installation"], [33, "installation"], [41, "installation"], [48, "installation"]], "Where to find more help": [[2, "where-to-find-more-help"]], "Installing Eggdrop": [[2, null], [3, "installing-eggdrop"]], "Using Eggdrop": [[2, null]], "Tutorials": [[2, null]], "Eggdrop Modules": [[2, null]], "Quick Startup": [[3, "quick-startup"], [4, "quick-startup"]], "Cygwin Requirements (Windows)": [[3, "cygwin-requirements-windows"]], "Modules": [[3, "modules"], [5, "modules"], [39, "modules"]], "README": [[4, "readme"]], "Notice": [[4, "notice"]], "What is Eggdrop?": [[4, "what-is-eggdrop"]], "How to Get Eggdrop": [[4, "how-to-get-eggdrop"]], "FTP": [[4, "ftp"]], "Git Development Snapshot": [[4, "git-development-snapshot"]], "Docker": [[4, "docker"]], "System Pre-Requisites": [[4, "system-pre-requisites"]], "Upgrading": [[4, "upgrading"]], "Command Line": [[4, "command-line"]], "Auto-starting Eggdrop": [[4, "auto-starting-eggdrop"]], "Documentation": [[4, "documentation"], [5, "documentation"]], "Obtaining Help": [[4, "obtaining-help"]], "Upgrading Eggdrop": [[5, "upgrading-eggdrop"]], "How to Upgrade": [[5, "how-to-upgrade"]], "Must-read changes for Eggdrop v1.9": [[5, "must-read-changes-for-eggdrop-v1-9"]], "Config file changes": [[5, "config-file-changes"]], "Scripts": [[5, "scripts"], [39, "scripts"], [48, "scripts"]], "Botnet": [[5, "botnet"], [48, "botnet"]], "Tcl Commands": [[5, "tcl-commands"], [21, "tcl-commands"], [36, "tcl-commands"]], "Modules included with Eggdrop": [[6, "modules-included-with-eggdrop"]], "Eggdrop Module Information": [[7, "eggdrop-module-information"]], "What are modules?": [[7, "what-are-modules"]], "How to install a module": [[7, "how-to-install-a-module"]], "Can I compile Eggdrop without dynamic modules? (Static compile)": [[7, "can-i-compile-eggdrop-without-dynamic-modules-static-compile"]], "Do I still need to \u2018loadmodule\u2019 modules?": [[7, "do-i-still-need-to-loadmodule-modules"]], "Eggdrop Bind Internals": [[8, "eggdrop-bind-internals"]], "Bind Table Creation": [[8, "bind-table-creation"]], "Stackable Binds: HT_STACKABLE": [[8, "stackable-binds-ht-stackable"]], "Tcl Binding": [[8, "tcl-binding"]], "Triggering the Bind": [[8, "triggering-the-bind"]], "Triggering any Bind": [[8, "triggering-any-bind"]], "C Binding": [[8, "c-binding"]], "C Handler": [[8, "c-handler"]], "Summary": [[8, "summary"]], "Assoc Module": [[9, "assoc-module"], [46, "assoc-module"]], "Blowfish Module": [[10, "blowfish-module"]], "Channels Module": [[11, "channels-module"]], "Channel Settings": [[11, "channel-settings"]], "Value-based Channel Settings": [[11, "value-based-channel-settings"]], "Enable/Disable Channel Settings": [[11, "enable-disable-channel-settings"]], "Default Channel Values": [[11, "default-channel-values"]], "Compress Module": [[12, "compress-module"], [46, "compress-module"]], "Console Module": [[13, "console-module"]], "CTCP Module": [[14, "ctcp-module"]], "DNS Module": [[15, "dns-module"]], "Filesys Module": [[16, "filesys-module"], [46, "filesys-module"]], "Config file setup": [[16, "config-file-setup"]], "Partyline usage": [[16, "partyline-usage"]], ".files": [[16, "files"]], ".cancel [file] \u2026": [[16, "cancel-file-file"]], ".cd ": [[16, "cd-directory"]], ".cp ": [[16, "cp-source-dst"]], ".desc ": [[16, "desc-file-description"]], ".filestats [clear]": [[16, "filestats-user-clear"]], ".stats": [[16, "stats"]], ".get [nickname]": [[16, "get-filename-nickname"]], ".hide [files] \u2026": [[16, "hide-file-files"]], ".ln ": [[16, "ln-bot-filepath-localfile"]], ".ls [filemask]": [[16, "ls-filemask"]], ".mkdir [flags [channel]]": [[16, "mkdir-dir-flags-channel"]], ".mv ": [[16, "mv-source-dest"]], ".pending": [[16, "pending"]], ".pwd": [[16, "pwd"]], ".quit": [[16, "quit"]], "rm [files] \u2026": [[16, "rm-file-files"]], ".rmdir ": [[16, "rmdir-dir"]], ".share [files] \u2026": [[16, "share-file-files"]], ".optimize": [[16, "optimize"]], ".unhide": [[16, "unhide"]], ".unshare [file] \u2026": [[16, "unshare-file-file"]], ".filesys module": [[16, "id1"]], "Ident Module": [[17, "ident"]], "IRC Module": [[18, "irc-module"]], "Notes Module": [[19, "notes-module"], [46, "notes-module"]], "PBKDF2 Module": [[20, "pbkdf2-module"]], "Python Module": [[21, "python-module"]], "Loading Python": [[21, "loading-python"]], "Partyline Commands": [[21, "partyline-commands"]], "python ": [[21, "python-expression"]], ".binds python": [[21, "binds-python"]], "pysource ": [[21, "pysource-path-to-file"]], "Eggdrop Python Commands": [[21, "eggdrop-python-commands"]], "bind ": [[21, "bind-arguments"]], "parse_tcl_list ": [[21, "parse-tcl-list-string"]], "parse_tcl_dict ": [[21, "parse-tcl-dict-string"]], "Config variables": [[21, "config-variables"]], "Writing an Eggdrop Python script": [[21, "writing-an-eggdrop-python-script"]], "Header section": [[21, "header-section"]], "Code Section": [[21, "code-section"]], "Writing a module for use with Eggdrop": [[21, "writing-a-module-for-use-with-eggdrop"]], "Seen Module": [[22, "seen-module"]], "Server Module": [[23, "server-module"]], "Share Module": [[24, "share-module"]], "Transfer Module": [[25, "transfer-module"]], "Twitch Module": [[26, "twitch-module"]], "Limitations": [[26, "limitations"]], "Tcl API": [[26, "tcl-api"]], "Partyline commands": [[26, "partyline-commands"]], "Uptime Module": [[27, "uptime-module"]], "Woobie Module": [[28, "woobie-module"]], "How to Write an Eggdrop Module": [[29, "how-to-write-an-eggdrop-module"]], "Module requirements": [[29, "module-requirements"]], "MODULE_start": [[29, "module-start"]], "MODULE_table": [[29, "module-table"]], "MODULE_close ()": [[29, "module-close"]], "MODULE_expmem": [[29, "module-expmem"]], "MODULE_report": [[29, "module-report"]], "Additional functions": [[29, "additional-functions"]], "What to do with a module?": [[29, "what-to-do-with-a-module"]], "Writing an Eggdrop Script": [[30, "writing-an-eggdrop-script"]], "Common First Steps": [[31, "common-first-steps"]], "Log on to the partyline": [[31, "log-on-to-the-partyline"]], "Common first steps": [[31, "id1"]], "Join a Channel": [[31, "join-a-channel"]], "Add a User": [[31, "add-a-user"]], "Add a Host to a User": [[31, "add-a-host-to-a-user"]], "Assign Permission Flags": [[31, "assign-permission-flags"]], "Configure Channel Settings": [[31, "configure-channel-settings"]], "Automatically restarting an Eggdrop": [[31, "automatically-restarting-an-eggdrop"]], "Crontab Method (Old)": [[31, "crontab-method-old"]], "Systemd Method (Newer Systems)": [[31, "systemd-method-newer-systems"]], "Authenticating with NickServ": [[31, "authenticating-with-nickserv"]], "Setting up SASL authentication": [[31, "setting-up-sasl-authentication"]], "Writing a Basic Eggdrop Module": [[32, "writing-a-basic-eggdrop-module"]], "Module Header": [[32, "module-header"]], "Required Code": [[32, "required-code"]], "Adding a Partyline Command": [[32, "adding-a-partyline-command"]], "Adding a Tcl Command": [[32, "adding-a-tcl-command"]], "Adding a Tcl Bind": [[32, "adding-a-tcl-bind"]], "Defining bind arguments": [[32, "defining-bind-arguments"]], "Calling the Bind": [[32, "calling-the-bind"]], "Exporting the Bind": [[32, "exporting-the-bind"]], "Setting Up Eggdrop": [[33, "setting-up-eggdrop"]], "Prerequisites": [[33, "prerequisites"]], "The super-short version": [[33, "the-super-short-version"]], "Getting the source": [[33, "getting-the-source"]], "History": [[33, "history"]], "Download locations": [[33, "download-locations"]], "Configuration": [[33, "configuration"]], "Editing the config file": [[33, "editing-the-config-file"], [51, "editing-the-config-file"]], "Starting the Eggdrop": [[33, "starting-the-eggdrop"]], "No show?": [[33, "no-show"]], "Enabling TLS Security on Eggdrop": [[34, "enabling-tls-security-on-eggdrop"]], "Pre-requisites": [[34, "pre-requisites"]], "Connecting to a TLS-enabled IRC server": [[34, "connecting-to-a-tls-enabled-irc-server"]], "Protecting Botnet Communications": [[34, "protecting-botnet-communications"]], "Configuration File Preparation - Generating Keys": [[34, "configuration-file-preparation-generating-keys"]], "Configuration File Preparation - Listening with TLS": [[34, "configuration-file-preparation-listening-with-tls"]], "Connecting to an Eggdrop listening with TLS": [[34, "connecting-to-an-eggdrop-listening-with-tls"]], "Additional Information": [[34, "additional-information"]], "Account tracking in Eggdrop": [[35, "account-tracking-in-eggdrop"]], "Required Server Capabilities": [[35, "required-server-capabilities"]], "extended-join": [[35, "extended-join"]], "account-notify": [[35, "account-notify"]], "WHOX": [[35, "whox"]], "Enabling Eggdrop Account Tracking": [[35, "enabling-eggdrop-account-tracking"]], "Checking Account-tracking Status": [[35, "checking-account-tracking-status"]], "Determining if a Server Supports Account Capabilities": [[35, "determining-if-a-server-supports-account-capabilities"]], "Best-Effort Account Tracking": [[35, "best-effort-account-tracking"]], "account-tag": [[35, "account-tag"]], "Using Accounts with Tcl Scripts": [[35, "using-accounts-with-tcl-scripts"]], "Eggdrop Autoscripts": [[36, "eggdrop-autoscripts"]], "Autoscripts usage": [[36, "autoscripts-usage"]], "remote": [[36, "remote"]], "fetch - - - + + + + +
    -

    Development hints

    +

    Development hints

    • An autoscript should not require a user to manually open the script in an editor for any reason. Design your script as such!

    • Use user defined channel flags to enable/disable a script for a particular channel, they’re easy!

    • -
    • Variables used in autoscripts are placed into the global namespace. Make them unique to prevent collisions! We recommend prefixing the script name in front of a variable, such as myscript_setting or ms_setting.

    • +
    • Don’t use global statements. Based on the manifest, variables are created by autoscript in the global namespace before the script is loaded. Instead of the global command, use the variable command to access a global variable inside a proc. And because Tcl is awesome, each variable must be declared on its own line, not all on a single line like you can do with global. Sorry!

    • +
    • While we’re talking about variables… make them unique to prevent collisions! We recommend prefixing the script name in front of a variable, such as myscript_setting or ms_setting. Alternatively, you can wrap your autoscript inside a namespace eval <scriptname> {} statement, which create a private namespace for your script to operate within.

    -

    Tcl Commands

    +

    Tcl Commands

    The autoscripts Tcl script adds three new commands for use with Tcl scripts:

    -

    egg_loaded

    +

    egg_loaded

    Description: lists all scripts currently loaded via the autoscripts system

    Returns: A Tcl list of script names currently loaded via autoscripts

    -

    egg_unloaded

    +

    egg_unloaded

    Description: lists all scripts downloaded to the local machine via the autoscripts system but not currently loaded by Eggdrop

    Returns: A Tcl list of script names downloaded but not currently loaded via autoscripts

    -

    egg_all

    +

    egg_all

    Description: lists all script downloaded to the localm machine via the autoscripts system, regardless if they are running or not

    Returns: A Tcl list of all script namees download via autoscripts

    @@ -328,9 +329,9 @@

    egg_all

    diff --git a/doc/html/using/bans.html b/doc/html/using/bans.html index 55787dc1b..e2468189e 100644 --- a/doc/html/using/bans.html +++ b/doc/html/using/bans.html @@ -1,17 +1,16 @@ - - + - + Bans, Invites, and Exempts — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -99,7 +99,7 @@

    Search

    Bans, Invites and Exempts Last revised: March 07, 2002

    -

    Bans, Invites, and Exempts

    +

    Bans, Invites, and Exempts

    I assume that you know how bans work on IRC. Eggdrop handles bans, exempts and invites in various ways, and this file is intended to help clarify how @@ -199,9 +199,9 @@

    Bans, Invites, and Exempts

    diff --git a/doc/html/using/botnet.html b/doc/html/using/botnet.html index 524870353..4e1c584a5 100644 --- a/doc/html/using/botnet.html +++ b/doc/html/using/botnet.html @@ -1,17 +1,16 @@ - - + - + Botnet Sharing and Linking — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
      @@ -108,19 +108,19 @@

      Search

      Botnet Sharing and Linking

      -

      Botnet Sharing and Linking

      +

      Botnet Sharing and Linking

      The purpose of this document is to show you what a botnet is and how it could be useful to you. It also covers botflags userfile sharing.

      -

      What is a botnet?

      +

      What is a botnet?

      A botnet consists of two or more bots linked together. This can allow bots to op each other securely, control floods efficiently, and share user lists, ban lists, exempt/invite lists, and ignore lists (if sharing is enabled).

      -

      Terms

      +

      Terms

      The following are some common terms used in this document:

      Botnet

      A botnet consists of two or more bots connected together.

      @@ -159,7 +159,7 @@

      Terms

      -

      Example bottree

      +

      Example bottree

      BotA
         |-+BotB
         `-+BotC
      @@ -168,7 +168,7 @@ 

      Example bottree -

      Bot Flags

      +

      Bot Flags

      Flags are attributes that determine what a bot can or is allowed to do. Flags can be either global (such as +s) or channel specific (such as |+s #lamest). See ‘.help botattr’ for help with setting these flags.

      @@ -236,7 +236,7 @@

      Bot Flags -

      Adding and linking bots

      +

      Adding and linking bots

      With the common terms out of the way, we can start with the process of linking two bots. Before you start, you need to know the address and port of each bot you wish to link.

      Here is an example scenario:

      @@ -249,12 +249,12 @@

      Adding and linking bots

      At this point, you can link the two bots by typing ‘.link BotA’ on BotB (or ‘.link BotB’ on BotA). The bots will now give themselves random passwords which are not stored encrypted in the userfile. Note that you can link as many bots as you wish to your botnet.

      -

      Using botflags

      +

      Using botflags

      Botflags are needed to assign special functions and tasks to your bots. Bot flags are set with the ‘.botattr’ command. See ‘.help botattr’ for help with this command. The following is a list of botflags and their @@ -299,7 +299,7 @@

      Using botflags -

      Making bots share user records

      +

      Making bots share user records

      Before you start preparing your bots for sharing, make sure that you’ve loaded the transfer and share modules. You also have to ensure @@ -398,7 +398,7 @@

      Making bots share user records -

      Using certificates to authenticate Eggdrops

      +

      Using certificates to authenticate Eggdrops

      Eggdrops can use certificates to authenticate when linking to each other instead of a password. First, you must ensure you have set the appropriate certificates in the ssl-privatekey and ssl-certificate settings in the config file, and then enable the ssl-cert-auth setting. Next, add the certificate on the partyline by using .fprint + to add the fingerprint for the certificate currently in use, or .fprint <SHA1 fingerprint> to manually add a fingerprint. Once the config file settings are set 0and fingerprints are added on the partyline, Eggdrops will attempt to use their certificates instead of passwords for authentication.

      Copyright (C) 1999 - 2023 Eggheads Development Team

      @@ -430,9 +430,9 @@

      Using certificates to authenticate Eggdrops
      diff --git a/doc/html/using/core.html b/doc/html/using/core.html index 2fa9db43d..63574f00f 100644 --- a/doc/html/using/core.html +++ b/doc/html/using/core.html @@ -1,17 +1,16 @@ - - + - + Eggdrop Core Settings — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -57,6 +56,7 @@

      Table of Contents

  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -108,14 +108,14 @@

    Search

    -

    Last revised: October 25, 2010

    +

    Last revised: August 29, 2023

    -

    Eggdrop Core Settings

    +

    Eggdrop Core Settings

    This file describes the syntax and all the settings of your Eggdrop configuration file. Please note that you don’t need to set all of these variables to make your bot work properly.

    -

    Executable Path

    +

    Executable Path

    The first line in an Eggdrop configuration file should contain a fully qualified path to your Eggdrop executable. It has to be implemented in the way the example shows to make the config file @@ -126,7 +126,7 @@

    Executable Path -

    Basic Settings

    +

    Basic Settings

    You can change the basic Eggdrop appearance and behavior in this section.

    @@ -190,7 +190,7 @@

    Basic Settings -

    Log Files

    +

    Log Files

    Eggdrop is capable of logging various things, from channel chatter to partyline commands and file transfers.

    Logfiles are normally kept for 24 hours. Afterwards, they will be renamed @@ -341,7 +341,7 @@

    Log Files -

    Console Settings

    +

    Console Settings

    set console “mkcoblxs”

    This is the default console mode. It uses the same event flags as the @@ -353,7 +353,7 @@

    Console Settings -

    File and Directory Settings

    +

    File and Directory Settings

    set userfile “LamestBot.user”

    Specify here the filename your userfile should be saved as.

    @@ -395,7 +395,7 @@

    File and Directory Settings -

    Botnet/Dcc/Telnet Settings

    +

    Botnet/Dcc/Telnet Settings

    Settings in this section should be unimportant for you until you deal with botnets (multiple Eggdrops connected together to maximize efficiency). You should read doc/BOTNET before modifying these settings.

    @@ -494,7 +494,7 @@

    Botnet/Dcc/Telnet Settings -

    Advanced Settings

    +

    Advanced Settings

    set firewall “!sun-barr.ebay:3666”

    Set this to your socks host if your Eggdrop sits behind a firewall. If @@ -571,7 +571,7 @@

    Advanced Settings -

    SSL Settings

    +

    SSL Settings

    Settings in this section take effect when eggdrop is compiled with TLS support.

    @@ -688,7 +688,7 @@

    SSL Settings -

    Modules

    +

    Modules

    After the core settings, you should start loading modules. Modules are loaded by the command “loadmodule <module>”. Eggdrop looks for modules in the directory you specified by the module-path setting in the files @@ -708,13 +708,13 @@

    Modules -

    Scripts

    +

    Scripts

    The scripts section should be placed at the end of the config file. All modules should be loaded and their variables should be set at this point.

    @@ -762,9 +762,9 @@

    Scripts

    diff --git a/doc/html/using/features.html b/doc/html/using/features.html index 920a81fc0..c5d468e49 100644 --- a/doc/html/using/features.html +++ b/doc/html/using/features.html @@ -1,17 +1,16 @@ - - + - + Eggdrop Features — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -97,7 +97,7 @@

    Search

    -

    Eggdrop Features

    +

    Eggdrop Features

    Eggdrop is the most advanced IRC robot available. It has been under development since December 1993, and unlike most other bots, it is still @@ -168,9 +168,9 @@

    Eggdrop Features

    diff --git a/doc/html/using/ipv6.html b/doc/html/using/ipv6.html index 06fcf9d87..ca3aec141 100644 --- a/doc/html/using/ipv6.html +++ b/doc/html/using/ipv6.html @@ -1,17 +1,16 @@ - - + - + IPv6 support — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -106,11 +106,11 @@

    Search

    IPv6 support Last revised: Mar 24, 2021

    -

    IPv6 support

    +

    IPv6 support

    This document provides information about IPv6 support which is a new eggdrop feature since version 1.8.0.

    -

    About

    +

    About

    Eggdrop can be compiled with IPv6 support. To make use of this, you need an IPv6-enabled OS and IPv6 connectivity. Every possible type of TCP connection can be established over IPv6 now, @@ -119,7 +119,7 @@

    About commands, telnet and ident lookups.

    -

    Installation

    +

    Installation

    ./configure and install as usual, the configure script will detect if your system supports IPv6 and will enable it automatically. You can override this behavior and manually enable or disable IPv6 with ./configure –enable-ipv6 @@ -132,7 +132,7 @@

    Installation -

    Usage

    +

    Usage

    You can use IPv6 addresses wherever you could specify IPv4 ones. IPs and hostnames are interchangeable everywhere. For certain settings and commands, you can enclose IPv6 addresses in square brackets to prevent @@ -141,11 +141,11 @@

    Usage consult them when in doubt.

    -

    CTCP CHAT/CHAT4/CHAT6

    +

    CTCP CHAT/CHAT4/CHAT6

    When a user sends a CTCP chat request, the request is passed to the bot via the IRC server, hiding the user’s IP. Since Eggdrop is unable to ‘see’ the type IP of the user is using (IPv4 or IPv6), it is thus unable to determine whether it should send back an IPv4 or an IPv6 address for the user to connect to. To work around this problem, the CHAT4 and CHAT6 commands were added to Eggdrop to force it to present an IPv4 or IPv6 address for use with a DCC connection, respectively. Otherwise, the traditional CHAT command will likely result in the Eggdrop presenting an IPv4 address to the user. So in short, if you’re on an IPv6 address and want to use CTCP CHAT to initiate a DCC session for the partyline, use CHAT6, not CHAT as the CTCP argument.

    -

    Settings

    +

    Settings

    There are four new IPv6 related config variables:

    vhost4

    @@ -201,9 +201,9 @@

    Settings

    diff --git a/doc/html/using/ircv3.html b/doc/html/using/ircv3.html index a15e1f393..431a7fd37 100644 --- a/doc/html/using/ircv3.html +++ b/doc/html/using/ircv3.html @@ -1,17 +1,16 @@ - - + - + IRCv3 support — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -104,18 +104,18 @@

    Search

    IRCv3 support Last revised: November 27, 2021

    -

    IRCv3 support

    +

    IRCv3 support

    This document provides information about IRCv3 capabilities, as defined via specifications documented by the IRCv3 working group (https://ircv3.net/). Support for some of these specifications was added starting with version 1.9.0, and more capabilities are added as possible with new versions.

    -

    About

    +

    About

    As more and more IRC servers began to develop and implement their own versions of the IRC protocol (generally defined in RFC1459 and RFC2812), a working group comprised of server, client, and bot developers decided to work together to document these features to make their implementation defined and standardized across servers. What emerged was the IRCv3 set of standards. The specifications developed by the IRCv3 working group was designed to be backwards compatible and are generally implemented via a CAP (capability) request sent at the initialization of an IRC session. A client can optinoally request these “extra” capabilities be enabled through the CAP request, with the assumption that the client can then support the capability requested and enabled. Not all servers or clients support the same capabilities, a general support list can be via the appropriate support table link at https://ircv3.net/.

    -

    Usage

    +

    Usage

    Within eggdrop.conf, several common IRCv3-defined capabilities are enabled simply changing their setting to ‘1’. Other capabilities without explicit settings in eggdrop.conf may be requested by adding them in a space-separated list to the cap-request setting. For more information on what a specific IRCv3-defined capability does, please consult https://ircv3.net/irc/.

    -

    Supported CAP capabilities

    +

    Supported CAP capabilities

    The following capabilities are supported by Eggdrop:

    diff --git a/doc/html/using/partyline.html b/doc/html/using/partyline.html index 49265ebd3..2d7e7ad0c 100644 --- a/doc/html/using/partyline.html +++ b/doc/html/using/partyline.html @@ -1,19 +1,18 @@ - - + - + The Party Line — Eggdrop 1.9.5 documentation - - - - - + + + + + - + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -98,7 +98,7 @@

    Search

    Last revised: December 31, 2001

    -

    The Party Line

    +

    The Party Line

    The most important way you will communicate with your bot is through the party line. The party line is accessible via DCC chat or telnet. It’s pretty much just a miniature, lag-less IRC (see doc/BOTNET), but @@ -145,7 +145,7 @@

    The Party Line previous | - next

    @@ -155,9 +155,9 @@

    The Party Line

    diff --git a/doc/html/using/patch.html b/doc/html/using/patch.html index aac2d4b1f..a98538093 100644 --- a/doc/html/using/patch.html +++ b/doc/html/using/patch.html @@ -1,17 +1,16 @@ - - + - + Patching Eggdrop — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -100,10 +100,10 @@

    Search

    -

    Patching Eggdrop

    +

    Patching Eggdrop

    Eggdrop is an open source project that depends on contributions of its users- like you! If you come across a feature you’d like to see implemented, find a bug, or think the documentation could be made more clear, you can open an issue on GitHub to discuss your ideas, and then submit a Pull Request to implement it!

    -

    Submitting a patch via GitHub

    +

    Submitting a patch via GitHub

    To create a patch via github:

      @@ -160,9 +160,9 @@

      Submitting a patch via GitHub

    diff --git a/doc/html/using/pbkdf2info.html b/doc/html/using/pbkdf2info.html index b2c98a2d4..2fceff8dc 100644 --- a/doc/html/using/pbkdf2info.html +++ b/doc/html/using/pbkdf2info.html @@ -1,17 +1,16 @@ - - + - + Encryption/Hashing — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

    Table of Contents

  • Eggdrop Features
  • Eggdrop Core Settings
  • The Party Line
  • +
  • Eggdrop Autoscripts
  • Users and Flags
  • Bans, Invites, and Exempts
  • Botnet Sharing and Linking
  • @@ -102,12 +102,12 @@

    Search

    -

    Encryption/Hashing

    +

    Encryption/Hashing

    With the release of Eggdrop 1.9.0, an updated crytopgraphy module (PBKDF2) was released for use with Eggdrop. PBKDF2 is a one-way hashing algorithm used to protect the contents of the password file, as well as for use via the Tcl interface. Prior to this, blowfish was used for cryptographic requirements, such as hashing passwords for storage in the userfile.

    -

    Background

    +

    Background

    Prior to Eggdrop 1.9.0, the blowfish module was included with Eggdrop to protect sensitive data such as passwords stored in the userfile. While there are no known practical attacks against blowfish at the time of this writing, it was decided that a more modern crypto solution was desirable to be included with Eggdrop. The PBKDF2 (Password-based Key Derivation Function 2) uses a password and salt value to create a password hash (the salt value ensures that the hashes of two identical passwords are different). This process is one-way, which means the hashes cannot be cryptographically reversed and thus are safe for storing in a file.

    The default configuration of Eggdrop 1.9.0 has both the blowfish and pbkdf2 modules enabled (see Hybrid Configuration below). This will allow users upgrading a seamless transition to the PBKDF2 module. For users starting an Eggdrop for the first time, it is recommended to comment out the ‘loadmodule blowfish’ line, in order to implement the Solo Configuration.

    @@ -115,17 +115,17 @@

    Background -

    Usage

    +

    Usage

    There are two ways to implement PBKDF2- Hybrid configuration, which is recommended for transitioning an already-existing userfile to PBKDF2 by working with the blowfish module, and Solo configuration, which is recommended for use when starting a new Eggdrop for the first time.

    -

    Hybrid Configuration

    +

    Hybrid Configuration

    With a hybrid configuration, Eggdrop will run both the blowfish and the pbkdf2 modules concurrently. This will allow Eggdrop to authenticate users against their existing blowfish passwords stored in the userfile. However, the first time a user logs in, the pbkdf2 module will hash the (correct) password they enter and save it to the userfile. The pbkdf2-hashed password will then be used for all future logins.

    -

    Enabling hybrid configuration

    +

    Enabling hybrid configuration

    1. BACK UP YOUR USERFILE! This is the file that usually ends with ‘.user’.

    2. Ensure

    3. @@ -149,13 +149,13 @@

      Enabling hybrid configuration -

      Solo configuration

      +

      Solo configuration

      With a solo configuration, Eggdrop will only run the pbkdf2 module. Eggdrop will not be able to authenticate against passwords in an already-existing userfile and thus will require every user to set a password again, as if they were just added to Eggdrop. This can be done via the PASS msg command (/msg bot PASS <password>) or by having a user with appropriate permissions (and an already-set password) log into the partyline and use the ‘.chpass’ command.

      SECURITY CONSIDERATION: This configuration is not ideal for transitioning an existing userfile to PBKDF2. Without the blowfish module loaded, every user in the userfile essentially has no password set. This means any other user that matches a hostmask applied to a handle (!*@.aol.com, I’m looking at you) could set the password and gain access to that user’s Eggdrop account.

      -

      Enabling solo configuration

      +

      Enabling solo configuration

      1. BACK UP YOUR USERFILE! This is the file that usually ends with ‘.user’.

      2. Remove or comment:

        @@ -182,7 +182,7 @@

        Enabling solo configuration -

        Tcl Interface

        +

        Tcl Interface

        The PBKDF2 module adds the ‘encpass2’ command to the Tcl library. This command takes a string and hashes it using the PBKDF2 algorithm, and returns a string in the following format:

        $<PBK method>$rounds=<rounds>$<salt>$<password hash>
         
        @@ -218,9 +218,9 @@

        Tcl Interface

        diff --git a/doc/html/using/tcl-commands.html b/doc/html/using/tcl-commands.html index 3045c8e5d..9af070bc5 100644 --- a/doc/html/using/tcl-commands.html +++ b/doc/html/using/tcl-commands.html @@ -1,27 +1,22 @@ - - + - + Eggdrop Tcl Commands — Eggdrop 1.9.5 documentation - - - - - - + + + + +
      3. Eggdrop Features
      4. Eggdrop Core Settings
      5. The Party Line
      6. +
      7. Eggdrop Autoscripts
      8. Users and Flags
      9. Bans, Invites, and Exempts
      10. Botnet Sharing and Linking
      11. @@ -117,9 +113,9 @@

        Search

        Eggdrop Tcl Commands -Last revised: January 24, 2021

        +Last revised: January 6, 2024

        -

        Eggdrop Tcl Commands

        +

        Eggdrop Tcl Commands

        This is an exhaustive list of all the Tcl commands added to Eggdrop. All of the normal Tcl built-in commands are still there, of course, but you can also use these to manipulate features of the bot. They are listed @@ -131,9 +127,9 @@

        Eggdrop Tcl Commands
        -

        Output Commands

        +

        Output Commands

        -

        putserv <text> [options]

        +

        putserv <text> [options]

        Description: sends text to the server, like ‘.dump’ (intended for direct server commands); output is queued so that the bot won’t flood itself off the server.

        Options: @@ -144,7 +140,7 @@

        putserv <text> [options] -

        puthelp <text> [options]

        +

        puthelp <text> [options]

        Description: sends text to the server, like ‘putserv’, but it uses a different queue intended for sending messages to channels or people.

        Options: @@ -155,7 +151,7 @@

        puthelp <text> [options] -

        putquick <text> [options]

        +

        putquick <text> [options]

        Description: sends text to the server, like ‘putserv’, but it uses a different (and faster) queue.

        Options: @@ -166,7 +162,7 @@

        putquick <text> [options] -

        putnow <text> [-oneline]

        +

        putnow <text> [-oneline]

        Description: sends text to the server immediately, bypassing all queues. Use with caution, as the bot may easily flood itself off the server.

        Options: @@ -176,7 +172,7 @@

        putnow <text> [-oneline] -

        putkick <channel> <nick,nick,…> [reason]

        +

        putkick <channel> <nick,nick,…> [reason]

        Description: sends kicks to the server and tries to put as many nicks into one kick command as possible.

        Returns: nothing

        @@ -184,7 +180,7 @@

        putkick <channel> <nick,nick,…> [reason]

        -

        putlog <text>

        +

        putlog <text>

        Description: logs <text> to the logfile and partyline if the ‘misc’ flag (o) is active via the ‘logfile’ config file setting and the ‘.console’ partyline setting, respectively.

        Returns: nothing

        @@ -192,7 +188,7 @@

        putlog <text> -

        putcmdlog <text>

        +

        putcmdlog <text>

        Description: logs <text> to the logfile and partyline if the ‘cmds’ flag (c) is active via the ‘logfile’ config file setting and the ‘.console’ partyline setting, respectively.

        Returns: nothing

        @@ -200,7 +196,7 @@

        putcmdlog <text> -

        putxferlog <text>

        +

        putxferlog <text>

        Description: logs <text> to the logfile and partyline if the ‘files’ flag (x) is active via the ‘logfile’ config file setting and the ‘.console’ partyline setting, respectively.

        Returns: nothing

        @@ -208,7 +204,7 @@

        putxferlog <text> -

        putloglev <flag(s)> <channel> <text>

        +

        putloglev <flag(s)> <channel> <text>

        Description: logs <text> to the logfile and partyline at the log level of the specified flag. Use “*” in lieu of a flag to indicate all log levels.

        Returns: nothing

        @@ -216,7 +212,7 @@

        putloglev <flag(s)> <channel> <text>

        -

        dumpfile <nick> <filename>

        +

        dumpfile <nick> <filename>

        Description: dumps file from the help/text directory to a user on IRC via msg (one line per msg). The user has no flags, so the flag bindings won’t work within the file.

        Returns: nothing

        @@ -224,14 +220,14 @@

        dumpfile <nick> <filename> -

        queuesize [queue]

        +

        queuesize [queue]

        Returns: the number of messages in all queues. If a queue is specified, only the size of this queue is returned. Valid queues are: mode, server, help.

        Module: server

        -

        clearqueue <queue>

        +

        clearqueue <queue>

        Description: removes all messages from a queue. Valid arguments are: mode, server, help, or all.

        Returns: the number of deleted lines from the specified queue.

        @@ -239,7 +235,7 @@

        clearqueue <queue>

        -

        cap <ls/values/req/enabled/raw> [arg]

        +

        cap <ls/values/req/enabled/raw> [arg]

        Description: displays CAP status or sends a raw CAP command to the server. “ls” will list the capabilities Eggdrop is internally tracking as supported by the server. “values” will list all capabilities and their associated CAP 302 values (if any) as a key/value pair, and “values” with a capability name as arg will list the values associated for the capability. “enabled” will list the capabilities Eggdrop is internally tracking as negotiated with the server. “req” will request the capabilities listed in “arg” from the server. “raw” will send a raw CAP command to the server. The arg field is a single argument, and should be submitted as a single string. For example, to request capabilities foo and bar, you would use [cap req “foo bar”], and for example purposes, sending the same request as a raw command would be [cap raw “REQ :foo bar”].

        Returns: a list of CAP capabilities for the “enabled” and “ls” sub-commands; a dict of capability/value pairs for the “values” command or a list if “values” if followed by an argument; otherwise nothing.

        @@ -247,7 +243,7 @@

        cap <ls/values/req/enabled/raw> [arg] -

        tagmsg <tags> <target>

        +

        tagmsg <tags> <target>

        Description: sends an IRCv3 TAGMSG command to the target. Only works if message-tags has been negotiated with the server via the cap command. tags is a Tcl dict (or space-separated string) of the tags you wish to send separated by commas (do not include the @prefix), and target is the nickname or channel you wish to send the tags to. To send a tag only (not a key/value pair), use a “” as the value for a key in a dict, or a “{}” if you are sending as a space-separated string.

        @@ -260,7 +256,7 @@

        tagmsg <tags> <target> -

        server add <ip/host> [[+]port [password]]

        +

        server add <ip/host> [[+]port [password]]

        Description: adds a server to the list of servers Eggdrop will connect to. Prefix the port with ‘+’ to indicate an SSL-protected port. A port value is required if password is to be specified. The SSL status (+) of the provided port is matched against as well (ie, 7000 is not the same as +7000).

        Returns: nothing

        @@ -268,7 +264,7 @@

        server add <ip/host> [[+]port [password]] -

        server remove <ip/host> [[+]port]

        +

        server remove <ip/host> [[+]port]

        Description: removes a server from the list of servers Eggdrop will connect to. If no port is provided, all servers matching the ip or hostname provided will be removed, otherwise only the ip/host with the corresponding port will be removed. The SSL status (+) of the provided port is matched against as well (ie, 7000 is not the same as +7000).

        Returns: nothing

        @@ -276,7 +272,7 @@

        server remove <ip/host> [[+]port] -

        server list

        +

        server list

        Description: lists all servers currently added to the bots internal server list

        Returns: A list of lists in the format {{hostname} {port} {password}}

        @@ -285,23 +281,23 @@

        server list -

        User Record Manipulation Commands

        +

        User Record Manipulation Commands

        -

        countusers

        +

        countusers

        Returns: number of users in the bot’s database

        Module: core

        -

        validuser <handle>

        +

        validuser <handle>

        Returns: 1 if a user by that name exists; 0 otherwise

        Module: core

        -

        finduser [-account] <value>

        +

        finduser [-account] <value>

        Description: finds the internal user record which most closely matches the given value. When used with the -account flag, value is a services account name, otherwise by default value is a string in the hostmask format of nick!user@host.

        Returns: the handle found, or “*” if none

        @@ -309,14 +305,14 @@

        finduser [-account] <value> -

        userlist [flags]

        +

        userlist [flags]

        Returns: a list of users on the bot. You can use the flag matching system here ([global]{&/|}[chan]{&/|}[bot]). ‘&’ specifies “and”; ‘|’ specifies “or”.

        Module: core

        -

        passwdok <handle> <pass>

        +

        passwdok <handle> <pass>

        Description: checks the password given against the user’s password. Check against the password “-” to find out if a user has no password set.

        Returns: 1 if the password matches for that user; 0 otherwise. Or if we are checking against the password “-”: 1 if the user has no password set; 0 otherwise.

        @@ -324,14 +320,10 @@

        passwdok <handle> <pass> -

        getuser <handle> [entry-type] [extra info]

        +

        getuser <handle> [entry-type] [extra info]

        Description: an interface to the new generic userfile support. Without an entry-type, it returns a flat key/value list (dict) of all set entries. Valid entry types are:

        ---- @@ -373,14 +365,10 @@

        getuser <handle> [entry-type] [extra info] -

        setuser <handle> <entry-type> [extra info]

        +

        setuser <handle> <entry-type> [extra info]

        Description: this is the counterpart of getuser. It lets you set the various values. Other then the ones listed below, the entry-types are the same as getuser’s.

        ACCOUNT

        returns thee a list of servivce accounts associated with the user

        ---- @@ -437,7 +425,7 @@

        setuser <handle> <entry-type> [extra info]
        -

        chhandle <old-handle> <new-handle>

        +

        chhandle <old-handle> <new-handle>

        Description: changes a user’s handle

        Returns: 1 on success; 0 if the new handle is invalid or already used, or if the user can’t be found

        @@ -445,7 +433,7 @@

        chhandle <old-handle> <new-handle> -

        chattr <handle> [changes [channel]]

        +

        chattr <handle> [changes [channel]]

        Description: changes the attributes for a user record, if you include any. Changes are of the form ‘+f’, ‘-o’, ‘+dk’, ‘-o+d’, etc. If changes are specified in the format of |<changes> <channel>, the channel-specific flags for that channel are altered. You can now use the +o|-o #channel format here too.

        @@ -454,7 +442,7 @@

        chattr <handle> [changes [channel]] -

        botattr <handle> [changes [channel]]

        +

        botattr <handle> [changes [channel]]

        Description: similar to chattr except this modifies bot flags rather than normal user attributes.

        Returns: new flags for the bot (if you made no changes, the current flags are returned). If a channel was specified, the global AND the channel-specific flags for that channel are returned in the format of globalflags|channelflags. “*” is returned if the specified bot does not exist.

        @@ -462,7 +450,7 @@

        botattr <handle> [changes [channel]] -

        matchattr <handle> <flags> [channel]

        +

        matchattr <handle> <flags> [channel]

        Description: checks if the flags of the specified user match the flags provided. “flags” is of the form:

        [+/-]<global flags>[&/|<channel flags>[&/|<bot flags>]]
        @@ -474,7 +462,7 @@ 

        botattr <handle> [changes [channel]] -

        adduser <handle> [hostmask]

        +

        adduser <handle> [hostmask]

        Description: creates a new user entry with the handle and hostmask given (with no password and the default flags)

        Returns: 1 if successful; 0 if the handle already exists

        @@ -482,7 +470,7 @@

        adduser <handle> [hostmask] -

        addbot <handle> <address> [botport [userport]]

        +

        addbot <handle> <address> [botport [userport]]

        Description: adds a new bot to the userlist with the handle and botaddress given (with no password and no flags). <address> format is one of:

          @@ -499,7 +487,7 @@

          addbot <handle> <address> [botport [userport]] -

          deluser <handle>

          +

          deluser <handle>

          Description: attempts to erase the user record for a handle

          Returns: 1 if successful, 0 if no such user exists

          @@ -507,7 +495,7 @@

          deluser <handle> -

          delhost <handle> <hostmask>

          +

          delhost <handle> <hostmask>

          Description: deletes a hostmask from a user’s host list

          Returns: 1 on success; 0 if the hostmask (or user) doesn’t exist

          @@ -515,7 +503,7 @@

          delhost <handle> <hostmask> -

          addchanrec <handle> <channel>

          +

          addchanrec <handle> <channel>

          Description: adds a channel record for a user

          Returns: 1 on success; 0 if the user or channel does not exist

          @@ -523,7 +511,7 @@

          addchanrec <handle> <channel> -

          delchanrec <handle> <channel>

          +

          delchanrec <handle> <channel>

          Description: removes a channel record for a user. This includes all associated channel flags.

          Returns: 1 on success; 0 if the user or channel does not exist

          @@ -531,21 +519,21 @@

          delchanrec <handle> <channel> -

          haschanrec <handle> <channel>

          +

          haschanrec <handle> <channel>

          Returns: 1 if the given handle has a chanrec for the specified channel; 0 otherwise

          Module: channels

        -

        getchaninfo <handle> <channel>

        +

        getchaninfo <handle> <channel>

        Returns: info line for a specific channel (behaves just like ‘getinfo’)

        Module: channels

        -

        setchaninfo <handle> <channel> <info>

        +

        setchaninfo <handle> <channel> <info>

        Description: sets the info line on a specific channel for a user. If info is “none”, it will be removed.

        Returns: nothing

        @@ -553,15 +541,11 @@

        setchaninfo <handle> <channel> <info>

        -

        newchanban <channel> <ban> <creator> <comment> [lifetime] [options]

        +

        newchanban <channel> <ban> <creator> <comment> [lifetime] [options]

        Description: adds a ban to the ban list of a channel; creator is given credit for the ban in the ban list. lifetime is specified in minutes. If lifetime is not specified, ban-time (usually 60) is used. Setting the lifetime to 0 makes it a permanent ban.

        Options:

        Type

        Extra Info

        ---- @@ -573,15 +557,11 @@

        newchanban <channel> <ban> <creator> <comment> [life
        -

        newban <ban> <creator> <comment> [lifetime] [options]

        +

        newban <ban> <creator> <comment> [lifetime] [options]

        Description: adds a ban to the global ban list (which takes effect on all channels); creator is given credit for the ban in the ban list. lifetime is specified in minutes. If lifetime is not specified, default-ban-time (usually 120) is used. Setting the lifetime to 0 makes it a permanent ban.

        Options:

        sticky

        forces the ban to be always active on a channel, even with dynamicbans on

        ---- @@ -593,15 +573,11 @@

        newban <ban> <creator> <comment> [lifetime] [options]
        -

        newchanexempt <channel> <exempt> <creator> <comment> [lifetime] [options]

        +

        newchanexempt <channel> <exempt> <creator> <comment> [lifetime] [options]

        Description: adds a exempt to the exempt list of a channel; creator is given credit for the exempt in the exempt list. lifetime is specified in minutes. If lifetime is not specified, exempt-time (usually 60) is used. Setting the lifetime to 0 makes it a permanent exempt. The exempt will not be removed until the corresponding ban has been removed. For timed bans, once the time period has expired, the exempt will not be removed until the corresponding ban has either expired or been removed.

        Options:

        sticky

        forces the ban to be always active on a channel, even with dynamicbans on

        ---- @@ -613,15 +589,11 @@

        newchanexempt <channel> <exempt> <creator> <comment>
        -

        newexempt <exempt> <creator> <comment> [lifetime] [options]

        +

        newexempt <exempt> <creator> <comment> [lifetime] [options]

        Description: adds a exempt to the global exempt list (which takes effect on all channels); creator is given credit for the exempt in the exempt list. lifetime is specified in minutes. If lifetime is not specified, exempt-time (usually 60) is used. Setting the lifetime to 0 makes it a permanent exempt. The exempt will not be removed until the corresponding ban has been removed.

        Options:

        sticky

        forces the exempt to be always active on a channel, even with dynamicexempts on

        ---- @@ -633,15 +605,11 @@

        newexempt <exempt> <creator> <comment> [lifetime] [options
        -

        newchaninvite <channel> <invite> <creator> <comment> [lifetime] [options]

        +

        newchaninvite <channel> <invite> <creator> <comment> [lifetime] [options]

        Description: adds a invite to the invite list of a channel; creator is given credit for the invite in the invite list. lifetime is specified in minutes. If lifetime is not specified, invite-time (usually 60) is used. Setting the lifetime to 0 makes it a permanent invite. The invite will not be removed until the channel has gone -i.

        Options:

        sticky

        forces the exempt to be always active on a channel, even with dynamicexempts on

        ---- @@ -653,15 +621,11 @@

        newchaninvite <channel> <invite> <creator> <comment>
        -

        newinvite <invite> <creator> <comment> [lifetime] [options]

        +

        newinvite <invite> <creator> <comment> [lifetime] [options]

        Description: adds a invite to the global invite list (which takes effect on all channels); creator is given credit for the invite in the invite list. lifetime is specified in minutes. If lifetime is not specified, invite-time (usually 60) is used. Setting the lifetime to 0 makes it a permanent invite. The invite will not be removed until the channel has gone -i.

        Options:

        sticky

        forces the invite to be always active on a channel, even with dynamicinvites on

        ---- @@ -673,7 +637,7 @@

        newinvite <invite> <creator> <comment> [lifetime] [options
        -

        stickban <banmask> [channel]

        +

        stickban <banmask> [channel]

        Description: makes a ban sticky, or, if a channel is specified, then it is set sticky on that channel only.

        Returns: 1 on success; 0 otherwise

        @@ -681,7 +645,7 @@

        stickban <banmask> [channel] -

        unstickban <banmask> [channel]

        +

        unstickban <banmask> [channel]

        Description: makes a ban no longer sticky, or, if a channel is specified, then it is unstuck on that channel only.

        Returns: 1 on success; 0 otherwise

        @@ -689,7 +653,7 @@

        unstickban <banmask> [channel] -

        stickexempt <exemptmask> [channel]

        +

        stickexempt <exemptmask> [channel]

        Description: makes an exempt sticky, or, if a channel is specified, then it is set sticky on that channel only.

        Returns: 1 on success; 0 otherwise

        @@ -697,7 +661,7 @@

        stickexempt <exemptmask> [channel] -

        unstickexempt <exemptmask> [channel]

        +

        unstickexempt <exemptmask> [channel]

        Description: makes an exempt no longer sticky, or, if a channel is specified, then it is unstuck on that channel only.

        Returns: 1 on success; 0 otherwise

        @@ -705,7 +669,7 @@

        unstickexempt <exemptmask> [channel] -

        stickinvite <invitemask> [channel]

        +

        stickinvite <invitemask> [channel]

        Description: makes an invite sticky, or, if a channel is specified, then it is set sticky on that channel only.

        Returns: 1 on success; 0 otherwise

        @@ -713,7 +677,7 @@

        stickinvite <invitemask> [channel] -

        unstickinvite <invitemask> [channel]

        +

        unstickinvite <invitemask> [channel]

        Description: makes an invite no longer sticky, or, if a channel is specified, then it is unstuck on that channel only.

        Returns: 1 on success; 0 otherwise

        @@ -721,7 +685,7 @@

        unstickinvite <invitemask> [channel] -

        killchanban <channel> <ban>

        +

        killchanban <channel> <ban>

        Description: removes a ban from the ban list for a channel

        Returns: 1 on success; 0 otherwise

        @@ -729,7 +693,7 @@

        killchanban <channel> <ban> -

        killban <ban>

        +

        killban <ban>

        Description: removes a ban from the global ban list

        Returns: 1 on success; 0 otherwise

        @@ -737,7 +701,7 @@

        killban <ban> -

        killchanexempt <channel> <exempt>

        +

        killchanexempt <channel> <exempt>

        Description: removes an exempt from the exempt list for a channel

        Returns: 1 on success; 0 otherwise

        @@ -745,7 +709,7 @@

        killchanexempt <channel> <exempt> -

        killexempt <exempt>

        +

        killexempt <exempt>

        Description: removes an exempt from the global exempt list

        Returns: 1 on success; 0 otherwise

        @@ -753,7 +717,7 @@

        killexempt <exempt>

        -

        killchaninvite <channel> <invite>

        +

        killchaninvite <channel> <invite>

        Description: removes an invite from the invite list for a channel

        Returns: 1 on success; 0 otherwise

        @@ -761,7 +725,7 @@

        killchaninvite <channel> <invite> -

        killinvite <invite>

        +

        killinvite <invite>

        Description: removes an invite from the global invite list

        Returns: 1 on success; 0 otherwise

        @@ -769,91 +733,91 @@

        killinvite <invite>

        -

        ischanjuped <channel>

        +

        ischanjuped <channel>

        Returns: 1 if the channel is juped, and the bot is unable to join; 0 otherwise

        Module: channels

        -

        isban <ban> [channel [-channel]]

        +

        isban <ban> [channel [-channel]]

        Returns: 1 if the specified ban is in the global ban list; 0 otherwise. If a channel is specified, that channel’s ban list is checked as well. If the -channel flag is used at the end of the command, *only* the channel bans are checked.

        Module: channels

        -

        ispermban <ban> [channel [-channel]]

        +

        ispermban <ban> [channel [-channel]]

        Returns: 1 if the specified ban is in the global ban list AND is marked as permanent; 0 otherwise. If a channel is specified, that channel’s ban list is checked as well. If the -channel flag is used at the end of the command, *only* the channel bans are checked.

        Module: channels

        -

        isexempt <exempt> [channel [-channel]]

        +

        isexempt <exempt> [channel [-channel]]

        Returns: 1 if the specified exempt is in the global exempt list; 0 otherwise. If a channel is specified, that channel’s exempt list is checked as well. If the -channel flag is used at the end of the command, *only* the channel exempts are checked.

        Module: channels

        -

        ispermexempt <exempt> [channel [-channel]]

        +

        ispermexempt <exempt> [channel [-channel]]

        Returns: 1 if the specified exempt is in the global exempt list AND is marked as permanent; 0 otherwise. If a channel is specified, that channel’s exempt list is checked as well. If the -channel flag is used at the end of the command, *only* the channel exempts are checked.

        Module: channels

        -

        isinvite <invite> [channel [-channel]]

        +

        isinvite <invite> [channel [-channel]]

        Returns: 1 if the specified invite is in the global invite list; 0 otherwise. If a channel is specified, that channel’s invite list is checked as well. If the -channel flag is used at the end of the command, *only* the channel invites are checked.

        Module: channels

        -

        isperminvite <invite> [channel [-channel]]

        +

        isperminvite <invite> [channel [-channel]]

        Returns: 1 if the specified invite is in the global invite list AND is marked as permanent; 0 otherwise. If a channel is specified, that channel’s invite list is checked as well. If the -channel flag is used at the end of the command, *only* the channel invites are checked.

        Module: channels

        -

        isbansticky <ban> [channel [-channel]]

        +

        isbansticky <ban> [channel [-channel]]

        Returns: 1 if the specified ban is marked as sticky in the global ban list; 0 otherwise. If a channel is specified, that channel’s ban list is checked as well. If the -channel flag is used at the end of the command, *only* the channel bans are checked.

        Module: channels

        -

        isexemptsticky <exempt> [channel [-channel]]

        +

        isexemptsticky <exempt> [channel [-channel]]

        Returns: 1 if the specified exempt is marked as sticky in the global exempt list; 0 otherwise. If a channel is specified, that channel’s exempt list is checked as well. If the -channel flag is used at the end of the command, *only* the channel exempts are checked.

        Module: channels

        -

        isinvitesticky <invite> [channel [-channel]]

        +

        isinvitesticky <invite> [channel [-channel]]

        Returns: 1 if the specified invite is marked as sticky in the global invite list; 0 otherwise. If a channel is specified, that channel’s invite list is checked as well. If the -channel flag is used at the end of the command, *only* the channel invites are checked.

        Module: channels

        -

        matchban <nick!user@host> [channel]

        +

        matchban <nick!user@host> [channel]

        Returns: 1 if the specified nick!user@host matches a ban in the global ban list; 0 otherwise. If a channel is specified, that channel’s ban list is checked as well.

        Module: channels

        -

        matchexempt <nick!user@host> [channel]

        +

        matchexempt <nick!user@host> [channel]

        Returns: 1 if the specified nick!user@host matches an exempt in the global exempt list; 0 otherwise. If a channel is specified, that channel’s exempt list is checked as well.

        Module: channels

        -

        matchinvite <nick!user@host> [channel]

        +

        matchinvite <nick!user@host> [channel]

        Returns: 1 if the specified nick!user@host matches an invite in the global invite list; 0 otherwise. If a channel is specified, that channel’s invite list is checked as well.

        @@ -861,28 +825,28 @@

        matchinvite < -

        banlist [channel]

        +

        banlist [channel]

        Returns: a list of global bans, or, if a channel is specified, a list of channel-specific bans. Each entry is a sublist containing: hostmask, comment, expiration timestamp, time added, last time active, and creator. The three timestamps are in unixtime format.

        Module: channels

        -

        exemptlist [channel]

        +

        exemptlist [channel]

        Returns: a list of global exempts, or, if a channel is specified, a list of channel-specific exempts. Each entry is a sublist containing: hostmask, comment, expiration timestamp, time added, last time active, and creator. The three timestamps are in unixtime format.

        Module: channels

        -

        invitelist [channel]

        +

        invitelist [channel]

        Returns: a list of global invites, or, if a channel is specified, a list of channel-specific invites. Each entry is a sublist containing: hostmask, comment, expiration timestamp, time added, last time active, and creator. The three timestamps are in unixtime format.

        Module: channels

        -

        newignore <hostmask> <creator> <comment> [lifetime]

        +

        newignore <hostmask> <creator> <comment> [lifetime]

        Description: adds an entry to the ignore list; creator is given credit for the ignore. lifetime is how many minutes until the ignore expires and is removed. If lifetime is not specified, ignore-time (usually 60) is used. Setting the lifetime to 0 makes it a permanent ignore.

        Returns: nothing

        @@ -890,7 +854,7 @@

        newignore <hostmask> <creator> <comment> [lifetime]

        -

        killignore <hostmask>

        +

        killignore <hostmask>

        Description: removes an entry from the ignore list

        Returns: 1 if successful; 0 otherwise

        @@ -898,21 +862,21 @@

        killignore <hostmask>

        -

        ignorelist

        +

        ignorelist

        Returns: a list of ignores. Each entry is a sublist containing: hostmask, comment, expiration timestamp, time added, and creator. The timestamps are in unixtime format.

        Module: core

        -

        isignore <hostmask>

        +

        isignore <hostmask>

        Returns: 1 if the ignore is in the list; 0 otherwise

        Module: core

        -

        save

        +

        save

        Description: writes the user and channel files to disk

        Returns: nothing

        @@ -920,7 +884,7 @@

        save

        -

        reload

        +

        reload

        Description: loads the userfile from disk, replacing whatever is in memory

        Returns: nothing

        @@ -928,7 +892,7 @@

        reload -

        backup

        +

        backup

        Description: makes a simple backup of the userfile that’s on disk. If the channels module is loaded, this also makes a simple backup of the channel file.

        Returns: nothing

        @@ -936,7 +900,7 @@

        backup -

        getting-users

        +

        getting-users

        Returns: 1 if the bot is currently downloading a userfile from a sharebot (and hence, user records are about to drastically change); 0 if not

        Module: core

        @@ -944,9 +908,9 @@

        getting-users -

        Channel Commands

        +

        Channel Commands

        -

        channel add <name> [option-list]

        +

        channel add <name> [option-list]

        Description: adds a channel record for the bot to monitor. The full list of possible options are given in doc/settings/mod.channels. Note that the channel options must be in a list (enclosed in {}).

        Returns: nothing

        @@ -954,7 +918,7 @@

        channel add <name> [option-list] -

        channel set <name> <options…>

        +

        channel set <name> <options…>

        Description: sets options for the channel specified. The full list of possible options are given in doc/settings/mod.channels.

        Returns: nothing

        @@ -962,21 +926,21 @@

        channel set <name> <options…> -

        channel info <name>

        +

        channel info <name>

        Returns: a list of info about the specified channel’s settings.

        Module: channels

        -

        channel get <name> [setting]

        +

        channel get <name> [setting]

        Returns: The value of the setting you specify. For flags, a value of 0 means it is disabled (-), and non-zero means enabled (+). If no setting is specified, a flat list of all available settings and their values will be returned.

        Module: channels

        -

        channel remove <name>

        +

        channel remove <name>

        Description: removes a channel record from the bot and makes the bot no longer monitor the channel

        Returns: nothing

        @@ -984,7 +948,7 @@

        channel remove <name>

        -

        savechannels

        +

        savechannels

        Description: saves the channel settings to the channel-file if one is defined.

        Returns: nothing

        @@ -992,7 +956,7 @@

        savechannels -

        loadchannels

        +

        loadchannels

        Description: reloads the channel settings from the channel-file if one is defined.

        Returns: nothing

        @@ -1000,17 +964,17 @@

        loadchannels -

        channels

        +

        channels

        Returns: a list of the channels the bot has a channel record for

        Module: channels

        -

        channame2dname <channel-name>

        +

        channame2dname <channel-name>

        -

        chandname2name <channel-dname>

        +

        chandname2name <channel-dname>

        Description: these two functions are important to correctly support !channels. The bot differentiates between channel description names (chan dnames) and real channel names (chan names). The chan dnames are what you would normally call the channel, such as “!channel”. The chan names are what the IRC server uses to identify the channel. They consist of the chan dname prefixed with an ID; such as “!ABCDEchannel”.

        For bot functions like isop, isvoice, etc. you need to know the chan dnames. If you communicate with the server, you usually get the chan name, though. That’s what you need the channame2dname function for.

        @@ -1020,77 +984,77 @@

        chandname2name <channel-dname> -

        isbotnick <nick>

        +

        isbotnick <nick>

        Returns: 1 if the nick matches the botnick; 0 otherwise

        Module: server

        -

        botisop [channel]

        +

        botisop [channel]

        Returns: 1 if the bot has ops on the specified channel (or any channel if no channel is specified); 0 otherwise

        Module: irc

        -

        botishalfop [channel]

        +

        botishalfop [channel]

        Returns: 1 if the bot has halfops on the specified channel (or any channel if no channel is specified); 0 otherwise

        Module: irc

        -

        botisvoice [channel]

        +

        botisvoice [channel]

        Returns: 1 if the bot has a voice on the specified channel (or any channel if no channel is specified); 0 otherwise

        Module: irc

        -

        botonchan [channel]

        +

        botonchan [channel]

        Returns: 1 if the bot is on the specified channel (or any channel if no channel is specified); 0 otherwise

        Module: irc

        -

        isop <nickname> [channel]

        +

        isop <nickname> [channel]

        Returns: 1 if someone by the specified nickname is on the channel (or any channel if no channel name is specified) and has ops; 0 otherwise

        Module: irc

        -

        ishalfop <nickname> [channel]

        +

        ishalfop <nickname> [channel]

        Returns: 1 if someone by the specified nickname is on the channel (or any channel if no channel name is specified) and has halfops; 0 otherwise

        Module: irc

        -

        wasop <nickname> <channel>

        +

        wasop <nickname> <channel>

        Returns: 1 if someone that just got opped/deopped in the chan had op before the modechange; 0 otherwise

        Module: irc

        -

        washalfop <nickname> <channel>

        +

        washalfop <nickname> <channel>

        Returns: 1 if someone that just got halfopped/dehalfopped in the chan had halfop before the modechange; 0 otherwise

        Module: irc

        -

        isvoice <nickname> [channel]

        +

        isvoice <nickname> [channel]

        Returns: 1 if someone by that nickname is on the channel (or any channel if no channel is specified) and has voice (+v); 0 otherwise

        Module: irc

        -

        isidentified <nickname> [channel]

        +

        isidentified <nickname> [channel]

        Description: determine if a user is identified to irc services. WARNING: this may not be accurate depending on the server and configuration. For accurate results, the server must support (and Eggdrop must have enabled via CAP) the account-notify and extended-join capabilities, and the server must understand WHOX requests (also known as raw 354 responses)

        Returns: 1 if someone by the specified nickname is on the channel (or any channel if no channel name is specified) and is logged in); 0 otherwise.

        @@ -1098,7 +1062,7 @@

        isidentified <nickname> [channel] -

        isaway <nickname> [channel]

        +

        isaway <nickname> [channel]

        Description: determine if a user is marked as ‘away’ on a server. IMPORTANT: this command is only “mostly” reliable on its own when the IRCv3 away-notify capability is available and negotiated with the IRC server (if you didn’t add this to your config file, it likely isn’t enabled- you can confirm using the cap Tcl command). Additionally, there is no way for Eggdrop (or any client) to capture a user’s away status when the user first joins a channel (they are assumed present by Eggdrop on join). To use this command without the away-notify capability negotiated, or to get a user’s away status on join (via a JOIN bind), use refreshchan <channel> w on a channel the user is on, which will refresh the current away status stored by Eggdrop for all users on the channel.

        Returns: 1 if Eggdrop is currently tracking someone by that nickname marked as ‘away’ (again, see disclaimer above) by an IRC server; 0 otherwise.

        @@ -1106,121 +1070,121 @@

        isaway <nickname> [channel] -

        isircbot <nickname> [channel]

        +

        isircbot <nickname> [channel]

        Description: determine if a user has denoted themselves as a bot via an ircd-defined user flag (declared via BOT in a server’s 005/ISUPPORT line). Due to server implementations, accurately monitoring this is incredibly fragile, as the flag can be added and removed by a user without any notification to other users. To ensure this status is current for use, it is recommended to use refreshchan <channel> w on a channel the user is on, which will refresh if the user is a bot or not for all users on the channel. If a server does not advertise BOT in its ISUPPORT line but still supports it (currently the case for unrealircd), you can manually set it by adding “BOT=B” (or whatever flag is used) to the isupport-default setting in your eggdrop.conf file.

        Returns: 1 if Eggdrop is currently tracking someone by that nickname marked as a bot by an IRC server; 0 otherwise.

        -

        onchan <nickname> [channel]

        +

        onchan <nickname> [channel]

        Returns: 1 if someone by that nickname is on the specified channel (or any channel if none is specified); 0 otherwise

        Module: irc

        -

        monitor <add/delete/list/online/offline/status/clear> [nickname]

        +

        monitor <add/delete/list/online/offline/status/clear> [nickname]

        Description: interacts with the list of nicknames Eggdrop has asked the IRC server to track. valid sub-commands are add, delete, list, online, offline, status, and clear. The ‘add’ command sends ‘nickname’ to the server to track. The ‘delete’ command removes ‘nickname’ from being tracked by the server (or returns an error if the nickname is not present). The ‘list’ command returns a list of all nicknames the IRC server is tracking on behalf of Eggdrop. The ‘online’ command returns a string of tracked nicknames that are currently online. The ‘offline’ command returns a list of tracked nicknames that are currently offline.

        -

        Returns: The ‘add’ sub-command returns a ‘1’ if the nick was succssfully added, a ‘0’ if the nick is already in the monitor list, and a ‘2’ if the nick could not be added. The ‘delete’ sub-command returns a ‘1’ if the nick is removed, or an error if the nick is not found. The ‘status’ sub-command returns a ‘1’ if ‘nickname’ is online or a 0 if ‘nickname’ is offline. The ‘clear’ command removes all nicknames from the list the server is monitoring.

        +

        Returns: The ‘add’ sub-command returns a ‘1’ if the nick was successfully added, a ‘0’ if the nick is already in the monitor list, and a ‘2’ if the nick could not be added. The ‘delete’ sub-command returns a ‘1’ if the nick is removed, or an error if the nick is not found. The ‘status’ sub-command returns a ‘1’ if ‘nickname’ is online or a 0 if ‘nickname’ is offline. The ‘clear’ command removes all nicknames from the list the server is monitoring.

        Module: irc

        -

        accounttracking

        +

        accounttracking

        -

        Description: checks to see if the three required functionalities to enable proper account tracking are available (and enabled) to Eggdrop. This checks if the extended-join and account-notify IRCv3 capabilities are currently enabled, and checks if the server supports WHOX (based on the type of server selected in the config file, or the use-354 variable being set to 1 when seleceting an “Other” server).

        +

        Description: checks to see if the three required functionalities to enable proper account tracking are available (and enabled) to Eggdrop. This checks if the extended-join and account-notify IRCv3 capabilities are currently enabled, and checks if the server supports WHOX (based on the type of server selected in the config file, or the use-354 variable being set to 1 when selecting an “Other” server).

        Returns: a ‘1’ if all three functionalities are present, a ‘0’ if one or more are missing.

        Module: irc

        -

        getaccount <nickname> [channel]

        +

        getaccount <nickname> [channel]

        Returns: the services account name associated with nickname, “*” if the user is not logged into services, or “” if eggdrop does not know the account status of the user.

        NOTE: the three required IRC components for account tracking are: the WHOX feature, the extended-join IRCv3 capability and the account-notify IRCv3 capability. if only some of the three feature are available, eggdrop provides best-effort account tracking. please see doc/ACCOUNTS for additional information.

        -

        nick2hand <nickname> [channel]

        +

        nick2hand <nickname> [channel]

        Returns: the handle of a nickname on a channel. If a channel is not specified, the bot will check all of its channels. If the nick is not found, “” is returned. If the nick is found but does not have a handle, “*” is returned. If no channel is specified, all channels are checked.

        Module: irc

        -

        account2nicks <handle> [channel]

        +

        account2nicks <handle> [channel]

        Returns: a de-duplicated Tcl list of the nickname(s) on the specified channel (if one is specified) whose nickname matches the given account; “” is returned if no match is found. This command will only work if a server supports (and Eggdrop has enabled) the account-notify and extended-join capabilities, and the server understands WHOX requests (also known as raw 354 responses). If no channel is specified, all channels are checked.

        Module: irc

        -

        hand2nick <handle> [channel]

        +

        hand2nick <handle> [channel]

        Returns: nickname of the first person on the specified channel (if one is specified) whose nick!user@host matches the given handle; “” is returned if no match is found. If no channel is specified, all channels are checked.

        Module: irc

        -

        hand2nicks <handle> [channel]

        +

        hand2nicks <handle> [channel]

        Returns: a de-duplicated Tcl list of the nickname(s) on the specified channel (if one is specified) whose nick!user@host matches the given handle; “” is returned if no match is found. If no channel is specified, all channels are checked.

        Module: irc

        -

        handonchan <handle> [channel]

        +

        handonchan <handle> [channel]

        Returns: 1 if the the nick!user@host for someone on the channel (or any channel if no channel name is specified) matches for the handle given; 0 otherwise

        Module: irc

        -

        ischanban <ban> <channel>

        +

        ischanban <ban> <channel>

        Returns: 1 if the specified ban is on the given channel’s ban list (not the bot’s banlist for the channel)

        Module: irc

        -

        ischanexempt <exempt> <channel>

        +

        ischanexempt <exempt> <channel>

        Returns: 1 if the specified exempt is on the given channel’s exempt list (not the bot’s exemptlist for the channel)

        Module: irc

        -

        ischaninvite <invite> <channel>

        +

        ischaninvite <invite> <channel>

        Returns: 1 if the specified invite is on the given channel’s invite list (not the bot’s invitelist for the channel)

        Module: irc

        -

        chanbans <channel>

        +

        chanbans <channel>

        Returns: a list of the current bans on the channel. Each element is a sublist of the form {<ban> <bywho> <age>}. age is seconds from the bot’s point of view

        Module: irc

        -

        chanexempts <channel>

        +

        chanexempts <channel>

        Returns: a list of the current exempts on the channel. Each element is a sublist of the form {<exempts> <bywho> <age>}. age is seconds from the bot’s point of view

        Module: irc

        -

        chaninvites <channel>

        +

        chaninvites <channel>

        Returns: a list of the current invites on the channel. Each element is a sublist of the form {<invites> <bywho> <age>}. age is seconds from the bot’s point of view

        Module: irc

        -

        resetbans <channel>

        +

        resetbans <channel>

        Description: removes all bans on the channel that aren’t in the bot’s ban list and refreshes any bans that should be on the channel but aren’t

        Returns: nothing

        @@ -1228,7 +1192,7 @@

        resetbans <channel>

        -

        resetexempts <channel>

        +

        resetexempts <channel>

        Description: removes all exempt on the channel that aren’t in the bot’s exempt list and refreshes any exempts that should be on the channel but aren’t

        Returns: nothing

        @@ -1236,7 +1200,7 @@

        resetexempts <channel> -

        resetinvites <channel>

        +

        resetinvites <channel>

        Description: removes all invites on the channel that aren’t in the bot’s invite list and refreshes any invites that should be on the channel but aren’t

        Returns: nothing

        @@ -1244,7 +1208,7 @@

        resetinvites <channel> -

        resetchanidle [nick] <channel>

        +

        resetchanidle [nick] <channel>

        Description: resets the channel idle time for the given nick or for all nicks on the channel if no nick is specified.

        Returns: nothing

        @@ -1252,7 +1216,7 @@

        resetchanidle [nick] <channel> -

        resetchanjoin [nick] <channel>

        +

        resetchanjoin [nick] <channel>

        Description: resets the channel join time for the given nick or for all nicks on the channel if no nick is specified.

        Returns: nothing

        @@ -1260,14 +1224,10 @@

        resetchanjoin [nick] <channel> -

        resetchan <channel> [flags]

        +

        resetchan <channel> [flags]

        Description: clears the channel info Eggdrop is currently storing for a channel, then rereads the channel info from the server. Useful if Eggdrop gets into a bad state on a server with respect to a channel userlist, for example. If flags are specified, only the required information will be reset, according to the given flags. Available flags:

        sticky

        forces the invite to be always active on a channel, even with dynamicinvites on

        ---- @@ -1291,14 +1251,10 @@

        resetchan <channel> [flags] -

        refreshchan <channel> [flags]

        +

        refreshchan <channel> [flags]

        Description: An alternative to resetchan, refresh rereads the channel info from the server without first clearing out the previously stored information. Useful for updating a user’s away status without resetting their idle time, for example. If flags are specified, only the required information will be refreshed, according to the given flags. Available flags:

        b

        channel bans

        ---- @@ -1325,51 +1281,51 @@

        refreshchan <channel> [flags] -

        getchanhost <nickname> [channel]

        +

        getchanhost <nickname> [channel]

        Returns: user@host of the specified nickname (the nickname is not included in the returned host). If a channel is not specified, bot will check all of its channels. If the nickname is not on the channel(s), “” is returned.

        Module: irc

        -

        getchanjoin <nickname> <channel>

        +

        getchanjoin <nickname> <channel>

        Returns: timestamp (unixtime format) of when the specified nickname joined the channel if available, 0 otherwise. Note that after a channel reset this information will be lost, even if previously available.

        Module: irc

        -

        onchansplit <nick> [channel]

        +

        onchansplit <nick> [channel]

        Returns: 1 if that nick is split from the channel (or any channel if no channel is specified); 0 otherwise

        Module: irc

        -

        chanlist <channel> [flags][<&|>chanflags]

        +

        chanlist <channel> [flags][<&|>chanflags]

        -

        Description: flags are any global flags; the ‘&’ or ‘|’ denotes to look for channel specific flags, where ‘&’ will return users having ALL chanflags and ‘|’ returns users having ANY of the chanflags (See Flag Masks for additional information).

        +

        Description: lists all users on a channel Eggdrop has joined. flags are any global flags; the ‘&’ or ‘|’ denotes to look for channel specific flags, where ‘&’ will return users having ALL chanflags and ‘|’ returns users having ANY of the chanflags (See Flag Masks for additional information).

        Returns: Searching for flags optionally preceded with a ‘+’ will return a list of nicknames that have all the flags listed. Searching for flags preceded with a ‘-’ will return a list of nicknames that do not have have any of the flags (differently said, ‘-’ will hide users that have all flags listed). If no flags are given, all of the nicknames on the channel are returned.

        Please note that if you’re executing chanlist after a part or sign bind, the gone user will still be listed, so you can check for wasop, isop, etc.

        Module: irc

        -

        getchanidle <nickname> <channel>

        +

        getchanidle <nickname> <channel>

        Returns: number of minutes that person has been idle; -1 if the specified user isn’t on the channel

        Module: irc

        -

        getchanmode <channel>

        +

        getchanmode <channel>

        Returns: string of the type “+ntik key” for the channel specified

        Module: irc

        -

        jump [server [[+]port [password]]]

        +

        jump [server [[+]port [password]]]

        Description: jumps to the server specified, or (if none is specified) the next server in the bot’s serverlist. If you prefix the port with a plus sign (e.g. +6697), SSL connection will be attempted.

        Returns: nothing

        @@ -1377,7 +1333,7 @@

        jump [server [[+]port [password]]] -

        pushmode <channel> <mode> [arg]

        +

        pushmode <channel> <mode> [arg]

        Description: sends out a channel mode change (ex: pushmode #lame +o goober) through the bot’s queuing system. All the mode changes will be sent out at once (combined into one line as much as possible) after the script finishes, or when ‘flushmode’ is called.

        Returns: nothing

        @@ -1385,7 +1341,7 @@

        pushmode <channel> <mode> [arg] -

        flushmode <channel>

        +

        flushmode <channel>

        Description: forces all previously pushed channel mode changes to be sent to the server, instead of when the script is finished (just for the channel specified)

        Returns: nothing

        @@ -1393,14 +1349,14 @@

        flushmode <channel>

        -

        topic <channel>

        +

        topic <channel>

        Returns: string containing the current topic of the specified channel

        Module: irc

        -

        validchan <channel>

        +

        validchan <channel>

        Description: checks if the bot has a channel record for the specified channel. Note that this does not necessarily mean that the bot is ON the channel.

        Returns: 1 if the channel exists, 0 if not

        @@ -1408,14 +1364,14 @@

        validchan <channel>

        -

        isdynamic <channel>

        +

        isdynamic <channel>

        Returns: 1 if the channel is a dynamic channel; 0 otherwise

        Module: channels

        -

        setudef <flag/int/str> <name>

        +

        setudef <flag/int/str> <name>

        Description: initializes a user defined channel flag, string or integer setting. You can use it like any other flag/setting. IMPORTANT: Don’t forget to reinitialize your flags/settings after a restart, or it’ll be lost.

        Returns: nothing

        @@ -1423,7 +1379,7 @@

        setudef <flag/int/str> <name> -

        renudef <flag/int/str> <oldname> <newname>

        +

        renudef <flag/int/str> <oldname> <newname>

        Description: renames a user defined channel flag, string, or integer setting.

        Returns: nothing

        @@ -1431,7 +1387,7 @@

        renudef <flag/int/str> <oldname> <newname> -

        deludef <flag/int/str> <name>

        +

        deludef <flag/int/str> <name>

        Description: deletes a user defined channel flag, string, or integer setting.

        Returns: nothing

        @@ -1439,21 +1395,21 @@

        deludef <flag/int/str> <name> -

        getudefs [flag/int/str]

        +

        getudefs [flag/int/str]

        Returns: a list of user defined channel settings of the given type, or all of them if no type is given.

        Module: channels

        -

        chansettype <setting>

        +

        chansettype <setting>

        Returns: The type of the setting you specify. The possible types are flag, int, str, pair. A flag type references a channel flag setting that can be set to either + or -. An int type is a channel setting that is set to a number, such as ban-time. A str type is a channel setting that stores a string, such as need-op. A pair type is a setting that holds a value couple, such as the flood settings.

        Module: channels

        -

        isupport get [key]

        +

        isupport get [key]

        Description: - isupport get: Returns a flat key/value list (dict) of settings. @@ -1463,7 +1419,7 @@

        isupport get [key] -

        isupport isset <key>

        +

        isupport isset <key>

        Description: Returns 0/1 depending on whether the key has a value.

        Returns: 0 or 1

        @@ -1472,9 +1428,9 @@

        isupport isset <key>

        -

        DCC Commands

        +

        DCC Commands

        -

        putdcc <idx> <text> [-raw]

        +

        putdcc <idx> <text> [-raw]

        Description: sends text to the idx specified. If -raw is specified, the text will be sent as is, without forced new lines or limits to line length.

        Returns: nothing

        @@ -1482,7 +1438,7 @@

        DCC Commands -

        putidx <idx> <text> -[raw]

        +

        putidx <idx> <text> -[raw]

        Description. Alias for the putdcc command.

        Returns: nothing

        @@ -1490,7 +1446,7 @@

        putidx <idx> <text> -[raw] -

        dccbroadcast <message>

        +

        dccbroadcast <message>

        Description: sends a message to everyone on the party line across the botnet, in the form of “*** <message>” for local users, “*** (Bot) <message>” for users on other bots with version below 1.8.4, and “(Bot) <message>” for users on other bots with version 1.8.4+ and console log mode ‘l’ enabled

        Returns: nothing

        @@ -1498,7 +1454,7 @@

        dccbroadcast <message> -

        dccputchan <channel> <message>

        +

        dccputchan <channel> <message>

        Description: sends your message to everyone on a certain channel on the botnet, in a form exactly like dccbroadcast does. Valid channels are 0 through 99999.

        Returns: nothing

        @@ -1506,7 +1462,7 @@

        dccputchan <channel> <message> -

        boot <user@bot> [reason]

        +

        boot <user@bot> [reason]

        Description: boots a user from the partyline

        Returns: nothing

        @@ -1514,7 +1470,7 @@

        boot <

        -

        dccsimul <idx> <text>

        +

        dccsimul <idx> <text>

        Description: simulates text typed in by the dcc user specified. Note that in v0.9, this only simulated commands; now a command must be preceded by a ‘.’ to be simulated.

        Returns: nothing

        @@ -1522,35 +1478,35 @@

        dccsimul <idx> <text> -

        hand2idx <handle>

        +

        hand2idx <handle>

        Returns: the idx (a number greater than or equal to zero) for the user given if the user is on the party line in chat mode (even if she is currently on a channel or in chat off), the file area, or in the control of a script. -1 is returned if no idx is found. If the user is on multiple times, the oldest idx is returned.

        Module: core

        -

        idx2hand <idx>

        +

        idx2hand <idx>

        Returns: handle of the user with the given idx

        Module: core

        -

        valididx <idx>

        +

        valididx <idx>

        Returns: 1 if the idx currently exists; 0 otherwise

        Module: core

        -

        getchan <idx>

        +

        getchan <idx>

        Returns: the current party line channel for a user on the party line; “0” indicates he’s on the group party line, “-1” means he has chat off, and a value from 1 to 99999 is a private channel

        Module: core

        -

        setchan <idx> <channel>

        +

        setchan <idx> <channel>

        Description: sets a party line user’s channel. The party line user is not notified that she is now on a new channel. A channel name can be used (provided it exists).

        Returns: nothing

        @@ -1558,7 +1514,7 @@

        setchan <idx> <channel> -

        console <idx> [channel] [console-modes]

        +

        console <idx> [channel] [console-modes]

        Description: changes a dcc user’s console mode, either to an absolute mode (like “mpj”) or just adding/removing flags (like “+pj” or “-moc” or “+mp-c”). The user’s console channel view can be changed also (as long as the new channel is a valid channel).

        Returns: a list containing the user’s (new) channel view and (new) console modes, or nothing if that user isn’t currently on the partyline

        @@ -1566,7 +1522,7 @@

        console <idx> [channel] [console-modes] -

        resetconsole <idx>

        +

        resetconsole <idx>

        Description: changes a dcc user’s console mode to the default setting in the configfile.

        Returns: a list containing the user’s channel view and (new) console modes, or nothing if that user isn’t currently on the partyline

        @@ -1574,7 +1530,7 @@

        resetconsole <idx>

        -

        echo <idx> [status]

        +

        echo <idx> [status]

        Description: turns a user’s echo on or off; the status has to be a 1 or 0

        Returns: new value of echo for that user (or the current value, if status was omitted)

        @@ -1582,14 +1538,10 @@

        echo <idx> [status]

        -

        strip <idx> [+/-strip-flags]

        +

        strip <idx> [+/-strip-flags]

        Description: modifies the strip-flags for a user. The supported strip-flags are:

        b

        channel bans

        ---- @@ -1625,7 +1577,7 @@

        strip <idx> [+/-strip-flags] -

        putbot <bot-nick> <message>

        +

        putbot <bot-nick> <message>

        Description: sends a message across the botnet to another bot. If no script intercepts the message on the other end, the message is ignored.

        Returns: nothing

        @@ -1633,7 +1585,7 @@

        putbot <bot-nick> <message> -

        putallbots <message>

        +

        putallbots <message>

        Description: sends a message across the botnet to all bots. If no script intercepts the message on the other end, the message is ignored.

        Returns: nothing

        @@ -1641,7 +1593,7 @@

        putallbots <message>

        -

        killdcc <idx>

        +

        killdcc <idx>

        Description: kills a partyline or file area connection

        Returns: nothing

        @@ -1649,21 +1601,17 @@

        killdcc <idx> -

        bots

        +

        bots

        Returns: list of the bots currently connected to the botnet

        Module: core

        -

        botlist

        +

        botlist

        Returns: a list of bots currently on the botnet. Each item in the list is a sublist with four elements: bot, uplink, version, and sharing status:

        c

        remove all color codes

        ---- @@ -1683,21 +1631,21 @@

        botlist -

        islinked <bot>

        +

        islinked <bot>

        Returns: 1 if the bot is currently linked; 0 otherwise

        Module: core

        -

        dccused

        +

        dccused

        Returns: number of dcc connections currently in use

        Module: core

        -

        dcclist [type]

        +

        dcclist [type]

        Returns: a list of active connections, each item in the list is a sublist containing seven elements: {<idx> <handle> <hostname> <[+]port> <type> {<other>} <timestamp>}.

        @@ -1706,15 +1654,11 @@

        dcclist [type] -

        socklist [type]

        +

        socklist [type]

        Returns: a list of active connections, each item in the list is a sublist containing eight elements (in dict-readable format). The order of items returned should not be considered static or permanent, so it is recommended to access the items as key/value pairs with the dict command, as opposed to something like lindex, to extract values. The possible keys returned are:

        bot

        the bot’s botnetnick

        ---- @@ -1755,28 +1699,28 @@

        socklist [type] -

        whom <chan>

        +

        whom <chan>

        Returns: list of people on the botnet who are on that channel. 0 is the default party line. Each item in the list is a sublist with six elements: nickname, bot, hostname, access flag (‘-’, ‘@’, ‘+’, or ‘*’), minutes idle, and away message (blank if the user is not away). If you specify * for channel, every user on the botnet is returned with an extra argument indicating the channel the user is on.

        Module: core

        -

        getdccidle <idx>

        +

        getdccidle <idx>

        Returns: number of seconds the dcc chat/file system/script user has been idle

        Module: core

        -

        getdccaway <idx>

        +

        getdccaway <idx>

        Returns: away message for a dcc chat user (or “” if the user is not set away)

        Module: core

        -

        setdccaway <idx> <message>

        +

        setdccaway <idx> <message>

        Description: sets a party line user’s away message and marks them away. If set to “”, the user is marked as no longer away.

        Returns: nothing

        @@ -1784,7 +1728,7 @@

        setdccaway <idx> <message> -

        connect <host> <[+]port>

        +

        connect <host> <[+]port>

        Description: makes an outgoing connection attempt and creates a dcc entry for it. A ‘control’ command should be used immediately after a successful ‘connect’ so no input is lost. If the port is prefixed with a plus sign, SSL encrypted connection will be attempted.

        Returns: idx of the new connection

        @@ -1792,7 +1736,7 @@

        connect <host> <[+]port> -

        listen [ip] <port> <type> [options [flag]]

        +

        listen [ip] <port> <type> [options [flag]]

        Description: opens a listening port to accept incoming telnets; type must be one of “bots”, “all”, “users”, “script”, or “off”. Prefixing the port with a plus sign will make eggdrop accept SSL connections on it. An IP may optionally be listed before the mandatory port argument. If no IP is specified, all available interfaces are used.

        @@ -1826,7 +1770,7 @@

        listen [ip] <port> <type> [options [flag]]

        -

        dccdumpfile <idx> <filename>

        +

        dccdumpfile <idx> <filename>

        Description: dumps out a file from the text directory to a dcc chat user. The flag matching that’s used everywhere else works here, too.

        Returns: nothing

        @@ -1835,9 +1779,9 @@

        dccdumpfile <idx> <filename> -

        Notes Module

        +

        Notes Module

        -

        notes <user> [numberlist]

        +

        notes <user> [numberlist]

        Returns: -1 if no such user, -2 if notefile failure. If a numberlist is not specified, the number of notes stored for the user is returned. Otherwise, a list of sublists containing information about notes stored for the user is returned. Each sublist is in the format of:

        {<from> <timestamp> <note text>}
        @@ -1847,7 +1791,7 @@ 

        notes <user> [numberlist] -

        erasenotes <user> <numberlist>

        +

        erasenotes <user> <numberlist>

        Description: erases some or all stored notes for a user. Use ‘-’ to erase all notes.

        Returns: -1 if no such user, -2 if notefile failure, 0 if no such note, or number of erased notes.

        @@ -1855,7 +1799,7 @@

        erasenotes <user> <numberlist> -

        listnotes <user> <numberlist>

        +

        listnotes <user> <numberlist>

        Description: lists existing notes according to the numberlist (ex: “2-4;8;16-“)

        Returns: -1 if no such user, -2 if notefile failure, 0 if no such note, list of existing notes.

        @@ -1863,7 +1807,7 @@

        listnotes <user> <numberlist> -

        storenote <from> <to> <msg> <idx>

        +

        storenote <from> <to> <msg> <idx>

        Description: stores a note for later reading, notifies idx of any results (use idx -1 for no notify).

        Returns: 0 on success; non-0 on failure

        @@ -1872,9 +1816,9 @@

        storenote <from> <to> <msg> <idx> -

        Assoc Module

        +

        Assoc Module

        -

        assoc <chan> [name]

        +

        assoc <chan> [name]

        Description: sets the name associated with a botnet channel, if you specify one

        Returns: current name for that channel, if any

        @@ -1882,7 +1826,7 @@

        assoc <chan> [name]

        -

        killassoc <chan>

        +

        killassoc <chan>

        Description: removes the name associated with a botnet channel, if any exists. Use ‘killassoc &’ to kill all assocs.

        Returns: nothing

        @@ -1891,14 +1835,14 @@

        killassoc <chan> -

        Compress Module

        +

        Compress Module

        -

        compressfile [-level <level>] <src-file> [target-file]

        +

        compressfile [-level <level>] <src-file> [target-file]

        -

        and

        +

        and

        -

        uncompressfile <src-file> [target-file]

        +

        uncompressfile <src-file> [target-file]

        Description: compresses or un-compresses files. The level option specifies the compression mode to use when compressing. Available modes are from 0 (minimum CPU usage, minimum compression) all the way up to 9 (maximum CPU usage, maximum compression). If you don’t specify the target-file, the src-file will be overwritten.

        Returns: nothing

        @@ -1907,7 +1851,7 @@

        uncompressfile <src-file> [target-file] -

        iscompressed <filename>

        +

        iscompressed <filename>

        Description: determines whether <filename> is gzip compressed.

        Returns: 1 if it is, 0 if it isn’t, and 2 if some kind of error prevented the checks from succeeding.

        @@ -1916,9 +1860,9 @@

        iscompressed <filename> -

        Filesys Module

        +

        Filesys Module

        -

        setpwd <idx> <dir>

        +

        setpwd <idx> <dir>

        Description: changes the directory of a file system user, in exactly the same way as a ‘cd’ command would. The directory can be specified relative or absolute.

        Returns: nothing

        @@ -1926,36 +1870,32 @@

        setpwd <idx> <dir>

        -

        getpwd <idx>

        +

        getpwd <idx>

        Returns: the current directory of a file system user

        Module: filesys

        -

        getfiles <dir>

        +

        getfiles <dir>

        Returns: a list of files in the directory given; the directory is relative to dcc-path

        Module: filesys

        -

        getdirs <dir>

        +

        getdirs <dir>

        Returns: a list of subdirectories in the directory given; the directory is relative to dcc-path

        Module: filesys

        -

        dccsend <filename> <ircnick>

        +

        dccsend <filename> <ircnick>

        Description: attempts to start a dcc file transfer to the given nick; the filename must be specified either by full pathname or in relation to the bot’s startup directory

        Returns:

        idx

        integer value assigned to Eggdrop connections

        ---- @@ -1974,8 +1914,7 @@

        dccsend <filename> <ircnick>

        - +

        0

        success

        5

        copy-to-tmp is enabled and the file already exists in the temp -directory

        the file could not be opened or temporary file could not be created

        @@ -1983,7 +1922,7 @@

        dccsend <filename> <ircnick> -

        filesend <idx> <filename> [ircnick]

        +

        filesend <idx> <filename> [ircnick]

        Description: like dccsend, except it operates for a current filesystem user, and the filename is assumed to be a relative path from that user’s current directory

        Returns: 0 on failure; 1 on success (either an immediate send or a queued send)

        @@ -1991,7 +1930,7 @@

        filesend <idx> <filename> [ircnick] -

        fileresend <idx> <filename> [ircnick]

        +

        fileresend <idx> <filename> [ircnick]

        Description: functions like filesend, only that it sends a DCC RESEND instead of a DCC SEND, which allows people to resume aborted file transfers if their client supports that protocol. ircII/BitchX/etc. support it; mIRC does not.

        Returns: 0 on failure; 1 on success (either an immediate send or a queued send)

        @@ -1999,7 +1938,7 @@

        fileresend <idx> <filename> [ircnick]

        -

        setdesc <dir> <file> <desc>

        +

        setdesc <dir> <file> <desc>

        Description: sets the description for a file in a file system directory; the directory is relative to dcc-path

        Returns: nothing

        @@ -2007,14 +1946,14 @@

        setdesc <dir> <file> <desc> -

        getdesc <dir> <file>

        +

        getdesc <dir> <file>

        Returns: the description for a file in the file system, if one exists

        Module: filesys

        -

        setowner <dir> <file> <handle>

        +

        setowner <dir> <file> <handle>

        Description: changes the owner for a file in the file system; the directory is relative to dcc-path

        Returns: nothing

        @@ -2022,14 +1961,14 @@

        setowner <dir> <file> <handle> -

        getowner <dir> <file>

        +

        getowner <dir> <file>

        Returns: the owner of a file in the file system

        Module: filesys

        -

        getfileq <handle>

        +

        getfileq <handle>

        Returns: list of files queued by someone; each item in the list will be a sublist with two elements: nickname the file is being sent to and the filename

        Module: transfer

        -

        getfilesendtime <idx>

        +

        getfilesendtime <idx>

        Returns: the unixtime value from when a file transfer started, or a negative number:

        ---- @@ -2072,15 +2007,11 @@

        getfilesendtime <idx>
        -

        mkdir <directory> [<required-flags> [channel]]

        +

        mkdir <directory> [<required-flags> [channel]]

        Description: creates a directory in the file system. Only users with the required flags may access it.

        Returns:

        -1

        no matching transfer with the specified idx was found

        ---- @@ -2100,7 +2031,7 @@

        mkdir <directory> [<required-flags> [channel]] -

        rmdir <directory>

        +

        rmdir <directory>

        Description: removes a directory from the file system.

        Returns: 0 on success; 1 on failure

        @@ -2108,15 +2039,11 @@

        rmdir <directory> -

        mv <file> <destination>

        +

        mv <file> <destination>

        Description: moves a file from its source to the given destination. The file can also be a mask, such as /incoming/*, provided the destination is a directory.

        Returns: If the command was successful, the number of files moved will be returned. Otherwise, a negative number will be returned:

        0

        success

        ---- @@ -2136,15 +2063,11 @@

        mv <file> <destination> -

        cp <file> <destination>

        +

        cp <file> <destination>

        Description: copies a file from its source to the given destination. The file can also be a mask, such as /incoming/*, provided the destination is a directory.

        Returns: If the command was successful, the number of files copied will be returned. Otherwise, a negative number will be returned:

        -1

        invalid source file

        ---- @@ -2164,14 +2087,14 @@

        cp <file> <destination> -

        getflags <dir>

        +

        getflags <dir>

        Returns: the flags required to access a directory

        Module: filesys

        -

        setflags <dir> [<flags> [channel]]

        +

        setflags <dir> [<flags> [channel]]

        Description: sets the flags required to access a directory

        Returns: 0 on success; -1 or -3 on failure

        @@ -2180,9 +2103,9 @@

        setflags <dir> [<flags> [channel]] -

        Miscellaneous Commands

        +

        Miscellaneous Commands

        -

        bind <type> <flags> <keyword/mask> [proc-name]

        +

        bind <type> <flags> <keyword/mask> [proc-name]

        Description: You can use the ‘bind’ command to attach Tcl procedures to certain events. flags are the flags the user must have to trigger the event (if applicable). proc-name is the name of the Tcl procedure to call for this command (see below for the format of the procedure call). If the proc-name is omitted, no binding is added. Instead, the current binding is returned (if it’s stackable, a list of the current bindings is returned).

        Returns: name of the command that was added, or (if proc-name was omitted), a list of the current bindings for this command

        @@ -2190,7 +2113,7 @@

        bind <type> <flags> <keyword/mask> [proc-name] -

        unbind <type> <flags> <keyword/mask> <proc-name>

        +

        unbind <type> <flags> <keyword/mask> <proc-name>

        Description: removes a previously created bind

        Returns: name of the command that was removed

        @@ -2198,9 +2121,10 @@

        unbind <type> <flags> <keyword/mask> <proc-name>

        -

        binds [type/mask]

        +

        binds [type/mask]

        -
        +

        Description: By default, lists Tcl binds registered with the Eggdrop. You can specify ‘all’ to view all binds, ‘tcl’ to view Tcl binds, and ‘python’ to view Python binds. Alternately, you can specify a bind type (pub, msg, etc) to view all binds that match that type of bind, or a mask that is matched against the command associated with the bind.

        +
        Returns: a list of Tcl binds, each item in the list is a sublist of five elements:

        {<type> <flags> <name> <hits> <proc>}

        @@ -2208,15 +2132,11 @@

        binds [type/mask] -

        logfile [<modes> <channel> <filename>]

        +

        logfile [<modes> <channel> <filename>]

        Description: creates a new logfile, which will log the modes given for the channel listed. If no logfile is specified, a list of existing logfiles will be returned. “*” indicates all channels. You can also change the modes and channel of an existing logfile with this command. Entering a blank mode and channel (“”) makes the bot stop logging there.

        Logfile flags:

        -1

        invalid source file

        ---- @@ -2279,15 +2199,11 @@

        logfile [<modes> <channel> <filename>] -

        maskhost <nick!user@host> [masktype]

        +

        maskhost <nick!user@host> [masktype]

        Returns: masked hostmask for the string given according to the masktype (the default is 3).

        Available types are:

        b

        information about bot linking and userfile sharing

        ---- @@ -2330,7 +2246,7 @@

        maskhost < -

        timer <minutes> <tcl-command> [count [timerName]]

        +

        timer <minutes> <tcl-command> [count [timerName]]

        Description: executes the given Tcl command after a certain number of minutes have passed, at the top of the minute (ie, if a timer is started at 10:03:34 with 1 minute specified, it will execute at 10:04:00. If a timer is started at 10:06:34 with 2 minutes specified, it will execute at 10:08:00). If count is specified, the command will be executed count times with the given interval in between. If you specify a count of 0, the timer will repeat until it’s removed with killtimer or until the bot is restarted. If timerName is specified, it will become the unique identifier for the timer. If no timerName is specified, Eggdrop will assign a timerName in the format of “timer<integer>”.

        Returns: a timerName

        @@ -2338,7 +2254,7 @@

        timer <minutes> <tcl-command> [count [timerName]] -

        utimer <seconds> <tcl-command> [count [timerName]]

        +

        utimer <seconds> <tcl-command> [count [timerName]]

        Description: executes the given Tcl command after a certain number of seconds have passed. If count is specified, the command will be executed count times with the given interval in between. If you specify a count of 0, the utimer will repeat until it’s removed with killutimer or until the bot is restarted. If timerName is specified, it will become the unique identifier for the timer. If timerName is not specified, Eggdrop will assign a timerName in the format of “timer<integer>”.

        Returns: a timerName

        @@ -2346,7 +2262,7 @@

        utimer <seconds> <tcl-command> [count [timerName]] -

        timers

        +

        timers

        Description: lists all active minutely timers.

        Returns: a list of active minutely timers, with each timer sub-list containing the number of minutes left until activation, the command that will be executed, the timerName, and the remaining number of repeats.

        @@ -2354,7 +2270,7 @@

        timers -

        utimers

        +

        utimers

        Description: lists all active secondly timers.

        Returns: a list of active secondly timers, with each timer sub-list containing the number of minutes left until activation, the command that will be executed, the timerName, and the remaining number of repeats.

        @@ -2362,7 +2278,7 @@

        utimers -

        killtimer <timerName>

        +

        killtimer <timerName>

        Description: removes the timerName minutely timer from the timer list.

        Returns: nothing

        @@ -2370,7 +2286,7 @@

        killtimer <timerName>

        -

        killutimer <timerName>

        +

        killutimer <timerName>

        Description: removes the timerName secondly timer from the timer list.

        Returns: nothing

        @@ -2378,49 +2294,49 @@

        killutimer <timerName> -

        unixtime

        +

        unixtime

        Returns: a long integer which represents the number of seconds that have passed since 00:00 Jan 1, 1970 (GMT).

        Module: core

        -

        duration <seconds>

        +

        duration <seconds>

        Returns: the number of seconds converted into years, weeks, days, hours, minutes, and seconds. 804600 seconds is turned into 1 week 2 days 7 hours 30 minutes.

        Module: core

        -

        strftime <formatstring> [time]

        +

        strftime <formatstring> [time]

        Returns: a formatted string of time using standard strftime format. If time is specified, the value of the specified time is used. Otherwise, the current time is used. Note: The implementation of strftime varies from platform to platform, so the user should only use POSIX-compliant format specifiers to ensure fully portable code.

        Module: core

        -

        ctime <unixtime>

        +

        ctime <unixtime>

        Returns: a formatted date/time string based on the current locale settings from the unixtime string given; for example “Fri Aug 3 11:34:55 1973”

        Module: core

        -

        myip

        +

        myip

        Returns: a long number representing the bot’s IP address, as it might appear in (for example) a DCC request

        Module: core

        -

        rand <limit>

        +

        rand <limit>

        Returns: a random integer between 0 and limit-1. Limit must be greater than 0 and equal to or less than RAND_MAX, which is generally 2147483647. The underlying pseudo-random number generator is not cryptographically secure.

        Module: core

        -

        control <idx> <command>

        +

        control <idx> <command>

        Description: removes an idx from the party line and sends all future input to the Tcl command given. The command will be called with two parameters: the idx and the input text. The command should return 0 to indicate success and 1 to indicate that it relinquishes control of the user back to the bot. If the input text is blank (“”), it indicates that the connection has been dropped. Also, if the input text is blank, never call killdcc on it, as it will fail with “invalid idx”.

        Returns: nothing

        @@ -2428,15 +2344,11 @@

        control <idx> <command> -

        sendnote <from> <to[@bot]> <message>

        +

        sendnote <from> <to[@bot]> <message>

        Description: simulates what happens when one user sends a note to another

        Returns:

        0

        *!user@host

        ---- @@ -2462,7 +2374,7 @@

        sendnote <from> <to[@bot]> <message> -

        link [via-bot] <bot>

        +

        link [via-bot] <bot>

        Description: attempts to link to another bot directly. If you specify a via-bot, it tells the via-bot to attempt the link.

        Returns: 1 if the link will be attempted; 0 otherwise

        @@ -2470,7 +2382,7 @@

        link [via-bot] <bot>

        -

        encrypt <key> <string>

        +

        encrypt <key> <string>

        Returns: encrypted string (using the currently loaded encryption module), encoded into ASCII using base-64. As of v1.8.4, the default blowfish encryption module can use either the older ECB mode (currently used by default for compatibility reasons), or the more recent and more-secure CBC mode. You can explicitly request which encryption mode to use by prefixing the encryption key with either “ecb:” or “cbc:”, or by using the blowfish-use-mode setting in the config file. Note: the default encryption mode for this function is planned to transition from ECB to CBC in v1.9.0.

        Module: encryption

        -

        decrypt <key> <encrypted-base64-string>

        +

        decrypt <key> <encrypted-base64-string>

        Returns: decrypted string (using the currently loaded encryption module). If the default blowfish encryption module is used, this automatically picks the right decryption mode. You may still prefix the key with “ecb:” or “cbc:” or use the blowfish-use-mode setting in the config file (see the encrypt command for more detailed information).

        Module: encryption

        -

        encpass <password>

        +

        encpass <password>

        Returns: encrypted string (using the currently loaded encryption module)

        Module: encryption

        -

        die [reason]

        +

        die [reason]

        Description: causes the bot to log a fatal error and exit completely. If no reason is given, “EXIT” is used.

        Returns: none

        @@ -2507,14 +2419,14 @@

        die [reason] -

        unames

        +

        unames

        Returns: the current operating system the bot is using

        Module: core

        -

        dnslookup <ip-address/hostname> <proc> [[arg1] [arg2] … [argN]]

        +

        dnslookup <ip-address/hostname> <proc> [[arg1] [arg2] … [argN]]

        Description: This issues an asynchronous dns lookup request. The command will block if dns module is not loaded; otherwise it will either return immediately or immediately call the specified proc (e.g. if the lookup is already cached).

        As soon as the request completes, the specified proc will be called as follows:

        @@ -2527,14 +2439,14 @@

        dnslookup <ip-address/hostname> <proc> [[arg1] [arg2] … [argN]

        -

        md5 <string>

        +

        md5 <string>

        Returns: the 128 bit MD5 message-digest of the specified string

        Module: core

        -

        callevent <event>

        +

        callevent <event>

        Description: triggers the evnt bind manually for a certain event. You can call arbitrary events here, even ones that are not pre-defined by Eggdrop. For example: callevent rehash, or callevent myownevent123.

        Returns: nothing

        @@ -2542,21 +2454,21 @@

        callevent <event> -

        traffic

        +

        traffic

        Returns: a list of sublists containing information about the bot’s traffic usage in bytes. Each sublist contains five elements: type, in-traffic today, in-traffic total, out-traffic today, out-traffic total (in that order).

        Module: core

        -

        modules

        +

        modules

        Returns: a list of sublists containing information about the bot’s currently loaded modules. Each sublist contains three elements: module, version, and dependencies. Each dependency is also a sublist containing the module name and version.

        Module: core

        -

        loadmodule <module>

        +

        loadmodule <module>

        Description: attempts to load the specified module.

        Returns: “Already loaded.” if the module is already loaded, “” if successful, or the reason the module couldn’t be loaded.

        @@ -2564,7 +2476,7 @@

        loadmodule <module>

        -

        unloadmodule <module>

        +

        unloadmodule <module>

        Description: attempts to unload the specified module.

        Returns: “No such module” if the module is not loaded, “” otherwise.

        @@ -2572,7 +2484,7 @@

        unloadmodule <module>

        -

        loadhelp <helpfile-name>

        +

        loadhelp <helpfile-name>

        Description: attempts to load the specified help file from the help/ directory.

        Returns: nothing

        @@ -2580,7 +2492,7 @@

        loadhelp <helpfile-name> -

        unloadhelp <helpfile-name>

        +

        unloadhelp <helpfile-name>

        Description: attempts to unload the specified help file.

        Returns: nothing

        @@ -2588,7 +2500,7 @@

        unloadhelp <helpfile-name> -

        reloadhelp

        +

        reloadhelp

        Description: reloads the bot’s help files.

        Returns: nothing

        @@ -2596,7 +2508,7 @@

        reloadhelp -

        restart

        +

        restart

        Description: rehashes the bot, kills all timers, reloads all modules, and reconnects the bot to the next server in its list.

        Returns: nothing

        @@ -2604,7 +2516,7 @@

        restart -

        rehash

        +

        rehash

        Description: rehashes the bot

        Returns: nothing

        @@ -2612,14 +2524,10 @@

        rehash -

        stripcodes <strip-flags> <string>

        +

        stripcodes <strip-flags> <string>

        Description: strips specified control characters from the string given. strip-flags can be any combination of the following:

        0

        the send failed

        ---- @@ -2655,7 +2563,7 @@

        stripcodes <strip-flags> <string> -

        matchaddr <hostmask> <address>

        +

        matchaddr <hostmask> <address>

        Description: checks if the address matches the hostmask given. The address should be in the form nick!user@host.

        Returns: 1 if the address matches the hostmask, 0 otherwise.

        @@ -2663,7 +2571,7 @@

        matchaddr <hostmask> <address> -

        matchcidr <block> <address> <prefix>

        +

        matchcidr <block> <address> <prefix>

        Description: performs a cidr match on the specified ip addresses. IPv6 is supported, if enabled at compile time.

        Example: matchcidr 192.168.0.0 192.168.1.17 16

        @@ -2672,7 +2580,7 @@

        matchcidr <block> <address> <prefix>

        -

        matchstr <pattern> <string>

        +

        matchstr <pattern> <string>

        Description: checks if pattern matches string. Only two wildcards are supported: ‘*’ and ‘?’. Matching is case-insensitive. This command is intended as a simplified alternative to Tcl’s string match.

        Returns: 1 if the pattern matches the string, 0 if it doesn’t.

        @@ -2680,7 +2588,7 @@

        matchstr <pattern> <string> -

        rfcequal <string1> <string2>

        +

        rfcequal <string1> <string2>

        Description: Checks if two strings are equal. Case is ignored, and this uses RFC1459 matching {}|~ == []^, depending on the rfc_compliant setting.

        Returns: 1 if equal, 0 if not.

        @@ -2688,14 +2596,10 @@

        rfcequal <string1> <string2> -

        status [type]

        +

        status [type]

        Description: provides eggdrop status information similar to the .status command in partyline. The available types of information are:

        c

        remove all color codes

        ---- @@ -2716,7 +2620,7 @@

        status [type] -

        istls <idx>

        +

        istls <idx>

        Description: checks if a connection is encrypted or cleartext. This command is available on TLS-enabled bots only.

        Returns: 1 if the idx is a TLS connection, 0 if it’s plaintext.

        @@ -2724,7 +2628,7 @@

        istls <idx> -

        starttls <idx>

        +

        starttls <idx>

        Description: establishes a secure (using TLS) connection over idx. The TLS connection should be first negotiated over the plaintext link, or using other means. Both parties must switch to TLS simultaneously. This command is available on TLS-enabled bots only.

        Returns: nothing

        @@ -2732,7 +2636,7 @@

        starttls <idx> -

        tlsstatus <idx>

        +

        tlsstatus <idx>

        Description: provides information about an established TLS connection This includes certificate and cipher information as well as protocol version. This command is available on TLS-enabled bots only.

        Returns: a flat list of name-value pairs

        @@ -2741,52 +2645,48 @@

        tlsstatus <idx> -

        Global Variables

        +

        Global Variables

        NOTE: All config file variables are also global.

        -

        botnick

        +

        botnick

        Value: the current nickname the bot is using (for example: “Valis”, “Valis0”, etc.)

        Module: server

        -

        botname

        +

        botname

        Value: the current nick!user@host that the server sees (for example: “Valis!valis@crappy.com”)

        Module: server

        -

        server

        +

        server

        Value: the current server’s real name (what server calls itself) and port bot is connected to (for example: “irc.math.ufl.edu:6667”) Note that this does not necessarily match the servers internet address.

        Module: server

        -

        serveraddress

        +

        serveraddress

        Value: the current server’s internet address (hostname or IP) and port bot is connected to. This will correspond to the entry in server list (for example: “eu.undernet.org:6667”). Note that this does not necessarily match the name server calls itself.

        Module: server

        -

        version

        +

        version

        Value: current bot version “1.1.2+pl1 1010201”; first item is the text version, to include a patch string if present, and second item is a numerical version

        Module: core

        -

        numversion*

        +

        numversion*

        Value: the current numeric bot version (for example: “1010201”). Numerical version is in the format of “MNNRRPP”, where:

        cpu

        total cpu time spent by eggdrop

        ---- @@ -2806,56 +2706,56 @@

        numversion* -

        uptime

        +

        uptime

        Value: the unixtime value for when the bot was started

        Module: core

        -

        server-online

        +

        server-online

        Value: the unixtime value when the bot connected to its current server, or ‘0’ if the bot is currently disconnected from a server.

        Module: server

        -

        lastbind

        +

        lastbind

        Value: the last command binding which was triggered. This allows you to identify which command triggered a Tcl proc.

        Module: core

        -

        isjuped

        +

        isjuped

        Value: 1 if bot’s nick is juped(437); 0 otherwise

        Module: server

        -

        handlen

        +

        handlen

        Value: the value of the HANDLEN define in src/eggdrop.h

        Module: core

        -

        config

        +

        config

        Value: the filename of the config file Eggdrop is currently using

        Module: core

        -

        configureargs

        +

        configureargs

        Value: a string (not list) of configure arguments in shell expansion (single quotes)

        Module: core

        -

        language

        +

        language

        Value: a string containing the language with the highest priority for use by Eggdrop. This commonly reflects what is added with addlang in the config file

        Module: core

        @@ -2863,28 +2763,24 @@

        language -

        Binds

        +

        Binds

        You can use the ‘bind’ command to attach Tcl procedures to certain events. For example, you can write a Tcl procedure that gets called every time a user says “danger” on the channel. When a bind is triggered, ALL of the Tcl procs that are bound to it will be called. Raw binds are triggered before builtin binds, as a builtin bind has the potential to modify args.

        -

        Stackable binds

        +

        Stackable binds

        Some bind types are marked as “stackable”. That means that you can bind multiple commands to the same trigger. Normally, for example, a bind such as ‘bind msg - stop msg:stop’ (which makes a msg-command “stop” call the Tcl proc “msg:stop”) will overwrite any previous binding you had for the msg command “stop”. With stackable bindings, like ‘msgm’ for example, you can bind the same command to multiple procs.

        -

        Removing a bind

        +

        Removing a bind

        To remove a bind, use the ‘unbind’ command. For example, to remove the bind for the “stop” msg command, use ‘unbind msg - stop msg:stop’.

        -

        Flag Masks

        -

        In the Bind Types section (and other commands, such as matchattr), you will see several references to the “flags” argument. The “flags” argument takes a flag mask, which is a value that represents the type of user that is allowed to trigger the procedure associated to that bind. The flags can be any of the standard Eggdrop flags (o, m, v, etc). Additionally, when used by itself, a “-” or “*” can be used to skip processing for a flag type. A flag mask has three sections to it- global, channel, and bot flag sections. Each section is separated by the | or & logical operators ( the | means “OR” and the & means “AND; if nothing proceeds the flag then Eggdrop assumes it to be an OR). Additionally, a ‘+’ and ‘-’ can be used in front of a flag to check if the user does (+) have it, or does not (-) have it.

        +

        Flag Masks

        +

        In the Bind Types section (and other commands, such as matchattr), you will see several references to the “flags” argument. The “flags” argument takes a flag mask, which is a value that represents the type of user that is allowed to trigger the procedure associated to that bind. The flags can be any of the standard Eggdrop flags (o, m, v, etc). Additionally, when used by itself, a “-” or “*” can be used to skip processing for a flag type. A flag mask has three sections to it- global, channel, and bot flag sections. Each section is separated by the | or & logical operators ( the | means “OR” and the & means “AND; if nothing proceeds the flag then Eggdrop assumes it to be an OR). Additionally, a ‘+’ and ‘-’ can be used in front of a flag to check if the user does (+) have it, or does not (-) have it.

        The easiest way to explain how to build a flag mask is by demonstration. A flag mask of “v” by itself means “has a global v flag”. To also check for a channel flag, you would use the flag mask “v|v”. This checks if the user has a global “v” flag, OR a channel “v” flag (again, the | means “OR” and ties the two types of flags together). You could change this mask to be “v&v”, which would check if the user has a global “v” flag AND a channel “v” flag. Lastly, to check if a user ONLY has a channel flag, you would use “*|v” as a mask, which would not check global flags but does check if the user had a channel “v” flag.

        You will commonly see flag masks for global flags written “ov”; this is the same as “|ov” or “*|ov”.

        Some additional examples:

        M

        major release number

        ---- @@ -2942,7 +2838,7 @@

        Flag Masks -

        Bind Types

        +

        Bind Types

        The following is a list of bind types and how they work. Below each bind type is the format of the bind command, the list of arguments sent to the Tcl proc, and an explanation.

        1. MSG

        2. @@ -3368,7 +3264,7 @@

          Bind Types
          sighup            - called on a kill -HUP <pid>
           sigterm           - called on a kill -TERM <pid>
          @@ -3387,6 +3283,7 @@ 

          Bind Types -

          Return Values

          +

          Return Values

          Several bindings pay attention to the value you return from the proc(using ‘return <value>’). Usually, they expect a 0 or 1, and returning an empty return is interpreted as a 0. Be aware if you omit the return statement, the result of the last Tcl command executed will be returned by the proc. This will not likely produce the results you intended (this is a “feature” of Tcl).

          Here’s a list of the bindings that use the return value from procs they trigger:

            @@ -3560,7 +3457,7 @@

            Return Values -

            Control Procedures

            +

            Control Procedures

            Using the ‘control’ command, you can put a DCC connection (or outgoing TCP connection) in control of a script. All text received from the connection is sent to the proc you specify. All outgoing text should @@ -3582,7 +3479,7 @@

            Control Procedures -

            TCP Connections

            +

            TCP Connections

            Eggdrop allows you to make two types of TCP (“telnet”) connections: outgoing and incoming. For an outgoing connection, you specify the remote host and port to connect to. For an incoming connection, you @@ -3643,14 +3540,10 @@

            TCP Connections -

            Match Characters

            +

            Match Characters

            Many of the bindings allow match characters in the arguments. Here are the four special characters:

        Flag Mask

        Action

        ---- @@ -3704,9 +3597,9 @@

        TCP Connections
        diff --git a/doc/html/using/text-sub.html b/doc/html/using/text-sub.html index 0f1a11190..6e2441d44 100644 --- a/doc/html/using/text-sub.html +++ b/doc/html/using/text-sub.html @@ -1,17 +1,16 @@ - - + - + Textfile Substitutions — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

        Table of Contents

      12. Eggdrop Features
      13. Eggdrop Core Settings
      14. The Party Line
      15. +
      16. Eggdrop Autoscripts
      17. Users and Flags
      18. Bans, Invites, and Exempts
      19. Botnet Sharing and Linking
      20. @@ -99,7 +99,7 @@

        Search

        Textfile Substitutions Last revised: March 08, 2002

        -

        Textfile Substitutions

        +

        Textfile Substitutions

        These %-variables can be inserted into help files, the banner, the MOTD, and other text files. There are four variables that can be used to format text:

        @@ -130,8 +130,8 @@

        Textfile Substitutions

        current Eggdrop version (i.e. “eggdrop v1.9.5”)

        - + @@ -220,9 +220,9 @@

        Textfile Substitutions
        diff --git a/doc/html/using/tls.html b/doc/html/using/tls.html index 55eb28a60..86cb03fec 100644 --- a/doc/html/using/tls.html +++ b/doc/html/using/tls.html @@ -1,17 +1,16 @@ - - + - + TLS support — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

        Table of Contents

      21. Eggdrop Features
      22. Eggdrop Core Settings
      23. The Party Line
      24. +
      25. Eggdrop Autoscripts
      26. Users and Flags
      27. Bans, Invites, and Exempts
      28. Botnet Sharing and Linking
      29. @@ -106,18 +106,18 @@

        Search

        TLS support Last revised: Jan 26, 2020

        -

        TLS support

        +

        TLS support

        This document provides information about TLS support which is a new eggdrop feature since version 1.8.0.

        -

        About

        +

        About

        Eggdrop can be optionally compiled with TLS support. This requires OpenSSL 0.9.8 or more recent installed on your system. TLS support includes encryption for IRC, DCC, botnet, telnet and scripted connections as well as certificate authentication for users and bots.

        -

        Installation

        +

        Installation

        ./configure and install as usual, the configure script will detect if your system meets the requirements and will enable TLS automatically. You can override the autodetection and manually disable TLS with @@ -130,7 +130,7 @@

        Installation -

        Usage

        +

        Usage

        As of v1.9.0, TLS support must be requested explicitly for botnet links. To create a TLS-enabled listening port or connect to a TLS-enabled listening port, you must prefix the port with a plus sign (+). If a port number could @@ -143,7 +143,7 @@

        Usage additional configuration (This was changed to provide users the flexibility to configure their own environments and assist in debugging).

        -

        IRC

        +

        IRC

        To connect to IRC using SSL, specify the port number and prefix it with a plus sign. Example: .jump irc.server.com +6697. The same goes for the server list in the config file.

        @@ -152,7 +152,7 @@

        IRC

        -

        Botnet

        +

        Botnet

        Eggdrop can use TLS connections to protect botnet links if it is compiled with TLS support. As of version 1.9.0, only raw TLS sockets are used to protect a connection. By prefixing a listen port in the Eggdrop configuration with a plus (+), that specifies that port as a TLS-enabled port, and will only accept TLS connections (no plain text connections will be allowed). With two TLS-enabled Eggdrops, it graphically looks like this:

        ?

        matches any single character

        %E

        long form of %V (i.e. “Eggdrop v1.9.5 (C) 1997 Robey -Pointer (C) 2010 Eggheads Development Team”)

        long form of %V (i.e. “Eggdrop v1.9.5 (C) 1997 +Robey Pointer (C) 2010 Eggheads Development Team”)

        %C

        channels the bot is on (i.e. “#lamest, #botnetcentral”)

        @@ -185,7 +185,7 @@

        BotnetEggdrop can also upgrade a plaintext connection with the starttls Tcl command. To use this, a plaintext connection is first made to a non-TLS port (ie, one that is not prefixed with a plus), then the starttls command is issued to upgrade that link to a TLS connection. In the Eggdrop 1.8 series, Eggdrop automatically attempted a starttls upgrade on all botnet connections. As such, if a 1.8 Eggdrop connects to a plain listening port on a 1.9.0 or later Eggdrop, it will automatically attempt to upgrade the link to TLS.

        -

        Secure DCC

        +

        Secure DCC

        Eggdrop supports the SDCC protocol, allowing you to establish DCC chat and file transfers over SSL. Example: /ctcp bot schat Note, that currently the only IRC client supporting SDCC is KVIrc. For @@ -193,7 +193,7 @@

        Secure DCC -

        Scripts

        +

        Scripts

        Scripts can open or connect to TLS ports the usual way specifying the port with a plus sign. Alternatively, the connection could be established as plaintext and later switched on with the starttls Tcl @@ -202,7 +202,7 @@

        Scripts -

        Keys, certificates and authentication

        +

        Keys, certificates and authentication

        You need a private key and a digital certificate whenever your bot will act as a server in a connection of any type. Common examples are hub bots and TLS listening ports. General information about certificates and @@ -233,7 +233,7 @@

        Keys, certificates and authentication -

        SSL/TLS Settings

        +

        SSL/TLS Settings

        There are some new settings allowing control over certificate verification and authorization.

        @@ -324,9 +324,9 @@

        SSL/TLS Settings
        diff --git a/doc/html/using/tricks.html b/doc/html/using/tricks.html index a429394fc..599269979 100644 --- a/doc/html/using/tricks.html +++ b/doc/html/using/tricks.html @@ -1,17 +1,16 @@ - - + - + Advanced Tips — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

        Table of Contents

      30. Eggdrop Features
      31. Eggdrop Core Settings
      32. The Party Line
      33. +
      34. Eggdrop Autoscripts
      35. Users and Flags
      36. Bans, Invites, and Exempts
      37. Botnet Sharing and Linking
      38. @@ -107,10 +107,10 @@

        Search

        Eggdrop Tricks Last revised: Jun 02, 2021

        -

        Advanced Tips

        +

        Advanced Tips

        Here are some little tricks that you may or may not know about, which aren’t documented in other areas.

        -

        Renaming commands

        +

        Renaming commands

        You can rename a built-in command by binding over it. To rename ‘.status’ to ‘.report’, you’d do:

        unbind dcc - status *dcc:status
         bind dcc m report *dcc:status
        @@ -119,23 +119,23 @@ 

        Renaming commands -

        Keeping Logs

        +

        Keeping Logs

        If you don’t want your logfiles to be deleted after two days and don’t want the bot to create a new logfile each new day, then set ‘keep-all-logs’ to 0 and ‘switch-logfiles-at’ to 2500 in your bot’s config file to make it keeping one logfile all the time. This is not recommended on high traffic channels.

        -

        Self-logging

        +

        Self-logging

        Because of how traditional IRC works, Eggdrop doesn’t capture outgoing messages to its logfile. However, if the server you are on supports the IRCv3 capability “echo-message”, you can request this capability to be enabled by the server in your config file. This will cause the server to send Eggdrop’d public messages back, thereby allowing those messages to be logged.

        -

        Modifying Default Strings

        +

        Modifying Default Strings

        You can modify Eggdrop’s output in the partyline, kick messages, and other texts by editing core.english.lang in the language directory.

        -

        Modularizing Your Config File

        +

        Modularizing Your Config File

        You can export parts of your config file to separate files. For example, if you have several config files which differ from themselves only by the nickname and the used servers, you can export them to an own file and link it with the ‘source’ Tcl command, similar to a script. The advantage of this is that you have to edit/upload only the small file instead of the big one. This technique is also useful if you want to maintain the same channel settings, etc across your botnet.

        -

        Variables in Your Config

        +

        Variables in Your Config

        You can use variables in your config file, since it’s really just a normal Tcl file. For example, you can set ‘userfile’ and ‘chanfile’ to “yourbot.user” and “yourbot.chan” using the following method:

        set myvar "yourbot"
         set userfile "$myvar.user"
        @@ -172,9 +172,9 @@ 

        Variables in Your Config

        diff --git a/doc/html/using/twitch-tcl-commands.html b/doc/html/using/twitch-tcl-commands.html index 4b6d3978a..94789d19f 100644 --- a/doc/html/using/twitch-tcl-commands.html +++ b/doc/html/using/twitch-tcl-commands.html @@ -1,17 +1,16 @@ - - + - + Eggdrop Twitch Tcl Commands — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

        Table of Contents

      39. Eggdrop Features
      40. Eggdrop Core Settings
      41. The Party Line
      42. +
      43. Eggdrop Autoscripts
      44. Users and Flags
      45. Bans, Invites, and Exempts
      46. Botnet Sharing and Linking
      47. @@ -103,7 +103,7 @@

        Search

        Eggdrop Twitch Tcl Commands Last revised: April 25, 2020

        -

        Eggdrop Twitch Tcl Commands

        +

        Eggdrop Twitch Tcl Commands

        This is an exhaustive list of all the Twitch-specific Tcl commands added to Eggdrop. These commands are held separate from the traditional tcl-commands.doc due to the unique nature of Twitch and the fact that these commands WILL NOT @@ -119,9 +119,9 @@

        Eggdrop Twitch Tcl Commands -

        Commands

        +

        Commands

        -

        twcmd <chan> <cmd> [arg]

        +

        twcmd <chan> <cmd> [arg]

        Description: sends cmd to the server, prefixed with a ‘/’. This is replicates the web UI functionality of sending commands such as /vip or /subscribers. Do @@ -131,42 +131,42 @@

        twcmd <chan> <cmd> [arg] -

        userstate <channel>

        +

        userstate <channel>

        Description: provides current userstate for the Eggdrop on the given channel.

        Returns: a dict containing key/value pairs for userstate values.

        -

        roomstate <channel>

        +

        roomstate <channel>

        Description: provides current roomstate of a channel Eggdrop is on.

        Returns: a dict containing key/value pairs for roomstate values.

        -

        twitchmods <channel>

        +

        twitchmods <channel>

        Description: maintains a list of usernames provided by Twitch as those that have moderator status on the provided channel. This list is refreshed upon join, or can manually be refreshed by using the Tcl twcmd to issue a /mods Twitch command. This list is a comprehensive list, the user does not need to be present on the channel to be included on this list.

        Returns: A list of usernames designated as having moderator status by Twitch.

        -

        twitchvips <channel>

        +

        twitchvips <channel>

        Description: maintains a list of usernames provided by Twitch as those that have VIP status on the provided channel. This list is refreshed upon join, or can manually be refreshed by using the Tcl twcmd to issue a /vips Twitch command. This list is a comprehensive list, the user does not need to be present on the channel to be included on this list.

        Returns: A list of usernames designated as having VIP status by Twitch.

        -

        ismod <nick> [channel]

        +

        ismod <nick> [channel]

        Description: checks if a user is on the moderator list maintained by Twitch (the same list accessible by the /mods command entered via the Twith web GUI). This differs from the other “normal” is* Eggdrop Tcl cmds, as this does NOT check if the user is currently on the channel (that status is unreliable on Twitch IRC).

        Returns: 1 if someone by the specified nickname is on the moderator list for the channel (or any channel if no channel name is specified); 0 otherwise.

        -

        isvip <nick> [channel]

        +

        isvip <nick> [channel]

        Description: checks if a user is on the VIP list maintained by Twitch (the same list accessible by the /vips command entered via the Twith web GUI). This differs from the other “normal” is* Eggdrop Tcl cmds, as this does NOT check if the user is currently on the channel (that status is unreliable on Twitch IRC).

        Returns: 1 if someone by the specified nickname is on the VIP list for the channel (or any channel if no channel name is specified); 0 otherwise.

        @@ -174,7 +174,7 @@

        isvip <nick> [channel]

        -

        Binds

        +

        Binds

        You can use the ‘bind’ command to attach Tcl procedures to certain events. The binds listed here are in addition to the binds listed in tcl-commands.doc.

        Because Twitch offers an IRC gateway that significantly reduces traditional IRC @@ -184,7 +184,7 @@

        Binds

        To remove a bind, use the ‘unbind’ command. For example, to remove the bind for the “stop” msg command, use ‘unbind msg - stop msg:stop’.

        -

        Flags

        +

        Flags

        Most of the following binds have “flags” listed as an argument for the bind. Flags represents a flagmask that the user, if found, must match in order for the bind to trigger. Example flag masks are:

        @@ -207,7 +207,7 @@

        Flags

        -

        Bind Types

        +

        Bind Types

        The following is a list of bind types and how they work. Below each bind type is the format of the bind command, the list of arguments sent to the Tcl proc, and an explanation.

        1. CCHT (CLEARCHAT)

        2. @@ -303,9 +303,9 @@

          Bind Types

        diff --git a/doc/html/using/twitchinfo.html b/doc/html/using/twitchinfo.html index 6a3200e8b..b1254710c 100644 --- a/doc/html/using/twitchinfo.html +++ b/doc/html/using/twitchinfo.html @@ -1,17 +1,16 @@ - - + - + Twitch — Eggdrop 1.9.5 documentation - - - - - + + + + + @@ -45,6 +44,7 @@

        Table of Contents

      48. Eggdrop Features
      49. Eggdrop Core Settings
      50. The Party Line
      51. +
      52. Eggdrop Autoscripts
      53. Users and Flags
      54. Bans, Invites, and Exempts
      55. Botnet Sharing and Linking
      56. @@ -104,7 +104,7 @@

        Search

        -

        Twitch

        +

        Twitch

        This module attempts to provide connectivity with the Twitch gaming platform. While Twitch provides an IRC gateway to connect with it’s streaming service, it does not claim to (and certainly does not) follow the IRC RFC in any meaningful way. The intent of this module is not to provide the full spectrum of management functions typically associated with Eggdrop; instead it focuses around the following key functions:

        -

        Disclaimer

        +

        Disclaimer

        We should also make clear that Eggdrop is in no way affiliated with Twitch in any way, and Twitch fully controls their own platform, to include the IRC gateway. This was just a fun project implemented at the request of some users to interact with the Twitch IRC development gateway as it existed at the time of development. At any time, Twitch could choose to alter or discontinue their IRC connectivity, thereby rendering this Eggdrop module useless. Eggdrop developers are also unable to offer technical support for Twitch-specific issues encountered while using this module.

        -

        Registering with Twitch

        +

        Registering with Twitch

        1. Register an account with Twitch. At the time of writing, this is done by visiting Twitch and clicking on the Sign Up button.

        2. Generate a token to authenticate your bot with Twitch. At the time of writing, this is done by visiting the Twitch OAuth generator while logged in to the account you just created. The token will be an alphanumeric string and should be treated like a password (…because it is). Make note of it, and keep it safe!

        -

        Editing the config file

        +

        Editing the config file

        1. Find the options to add a server in the server section of the config file. Remove the sample servers listed and add the following line in their place, replacing the alphanumeric string after ‘oauth:’ with the token you created when registering with Twitch in the previous section. Pretending your Twitch token from the previous step is ‘j9irk4vs28b0obz9easys4w2ystji3u’, it should look like this:

          server add irc.chat.twitch.tv 6667 oauth:j9irk4vs28b0obz9easys4w2ystji3u
          @@ -143,11 +143,11 @@ 

          Editing the config file

        -

        Twitch web UI functions

        +

        Twitch web UI functions

        Twitch is normally accessed via a web UI, and uses commands prefixed with a . or a / to interact with the channel. The Twitch module adds the partyline command twcmd to replicate those Twitch-specific commands. For example, to grant VIP status to a user via Tcl, you would use the command .twcmd vip username. or to restrict chat to subscribers, you would use .twcmd subscribers (Note: no . or / is needed as a prefix to the Twitch command). In other words, .twcmd in Tcl is the interface to the standard Twitch set of commands available through the web UI (Also available as a Tcl command).

        -

        Twitch IRC limitations

        +

        Twitch IRC limitations

        There are a few things you should know about how Twitch provides service through the IRC gateway that affects how well Eggdrop can function:

        diff --git a/doc/html/using/users.html b/doc/html/using/users.html index 6f478e43a..a7786e0e2 100644 --- a/doc/html/using/users.html +++ b/doc/html/using/users.html @@ -1,27 +1,26 @@ - - + - + Users and Flags — Eggdrop 1.9.5 documentation - - - - - + + + + + - +
        @@ -280,7 +280,7 @@

        Modules
        diff --git a/doc/html/install/readme.html b/doc/html/install/readme.html index c36eb5238..c1d48b064 100644 --- a/doc/html/install/readme.html +++ b/doc/html/install/readme.html @@ -305,7 +305,7 @@

        Obtaining Help diff --git a/doc/html/install/upgrading.html b/doc/html/install/upgrading.html index 0bd4a45c3..97559ee4f 100644 --- a/doc/html/install/upgrading.html +++ b/doc/html/install/upgrading.html @@ -186,7 +186,7 @@

        Documentation diff --git a/doc/html/modules/assoc.html b/doc/html/modules/assoc.html index e00b9a19d..4ebbdb2ef 100644 --- a/doc/html/modules/assoc.html +++ b/doc/html/modules/assoc.html @@ -102,7 +102,7 @@

        Search

        loadmodule assoc
         
        -

        Copyright (C) 2000 - 2023 Eggheads Development Team

        +

        Copyright (C) 2000 - 2024 Eggheads Development Team

        diff --git a/doc/html/modules/blowfish.html b/doc/html/modules/blowfish.html index cc7a9c8da..946d54113 100644 --- a/doc/html/modules/blowfish.html +++ b/doc/html/modules/blowfish.html @@ -128,7 +128,7 @@

        Search

        loadmodule blowfish
         
        -

        Copyright (C) 2000 - 2023 Eggheads Development Team

        +

        Copyright (C) 2000 - 2024 Eggheads Development Team

    diff --git a/doc/html/modules/channels.html b/doc/html/modules/channels.html index bc267dc1e..e5ea73dc0 100644 --- a/doc/html/modules/channels.html +++ b/doc/html/modules/channels.html @@ -504,7 +504,7 @@

    Search

    }

    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    diff --git a/doc/html/modules/compress.html b/doc/html/modules/compress.html index f73333233..f720e6883 100644 --- a/doc/html/modules/compress.html +++ b/doc/html/modules/compress.html @@ -137,7 +137,7 @@

    Search

    as those used by GNU gzip.
    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    diff --git a/doc/html/modules/console.html b/doc/html/modules/console.html index fea12a5fd..e4128e02e 100644 --- a/doc/html/modules/console.html +++ b/doc/html/modules/console.html @@ -139,7 +139,7 @@

    Search

    when they join a botnet channel.
    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    diff --git a/doc/html/modules/ctcp.html b/doc/html/modules/ctcp.html index 1f1926884..d41fe637d 100644 --- a/doc/html/modules/ctcp.html +++ b/doc/html/modules/ctcp.html @@ -156,7 +156,7 @@

    Search

    There are also several variables to help make your bot less noticeable. They are: ctcp-version, ctcp-finger, and ctcp-userinfo. You can use set to set them to values you’d like.

    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    diff --git a/doc/html/modules/dns.html b/doc/html/modules/dns.html index 6450379bc..a46cf62b9 100644 --- a/doc/html/modules/dns.html +++ b/doc/html/modules/dns.html @@ -152,7 +152,7 @@

    Search

    the query. The value must be in seconds. -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    diff --git a/doc/html/modules/filesys.html b/doc/html/modules/filesys.html index 9574e8bcc..715609cf0 100644 --- a/doc/html/modules/filesys.html +++ b/doc/html/modules/filesys.html @@ -332,7 +332,7 @@

    .filesys moduleSearch

    for potential ways to implement this setting. -

    Copyright (C) 2019 - 2023 Eggheads Development Team

    +

    Copyright (C) 2019 - 2024 Eggheads Development Team

    diff --git a/doc/html/modules/included.html b/doc/html/modules/included.html index 8287dd532..2c4be443c 100644 --- a/doc/html/modules/included.html +++ b/doc/html/modules/included.html @@ -311,7 +311,7 @@

    Modules included with Eggdrop diff --git a/doc/html/modules/index.html b/doc/html/modules/index.html index bf4a4712a..12b535244 100644 --- a/doc/html/modules/index.html +++ b/doc/html/modules/index.html @@ -135,7 +135,7 @@

    Can I compile Eggdrop without dynamic modules? (Static compile)

    Do I still need to ‘loadmodule’ modules?

    YES, when you compile statically, all the modules are linked into the main executable. HOWEVER, they are not enabled until you use loadmodule to enable them, hence you get nearly the same functionality with static modules as with dynamic modules.

    -

    Copyright (C) 1999 - 2023 Eggheads Development Team

    +

    Copyright (C) 1999 - 2024 Eggheads Development Team

    @@ -166,7 +166,7 @@

    Do I still need to ‘loadmodule’ modules? diff --git a/doc/html/modules/internals.html b/doc/html/modules/internals.html index 555ed6d4c..c94ad6489 100644 --- a/doc/html/modules/internals.html +++ b/doc/html/modules/internals.html @@ -379,7 +379,7 @@

    Summary
    diff --git a/doc/html/modules/irc.html b/doc/html/modules/irc.html index 868377b61..7960f9dd2 100644 --- a/doc/html/modules/irc.html +++ b/doc/html/modules/irc.html @@ -255,7 +255,7 @@

    Search

    set this to 0.
    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    diff --git a/doc/html/modules/mod/assoc.html b/doc/html/modules/mod/assoc.html index 0a923b00b..0bfefacd8 100644 --- a/doc/html/modules/mod/assoc.html +++ b/doc/html/modules/mod/assoc.html @@ -128,7 +128,7 @@

    Search

    loadmodule assoc
     
    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    @@ -157,7 +157,7 @@

    Search

    diff --git a/doc/html/modules/mod/blowfish.html b/doc/html/modules/mod/blowfish.html index 6df5205f5..40372bb17 100644 --- a/doc/html/modules/mod/blowfish.html +++ b/doc/html/modules/mod/blowfish.html @@ -132,7 +132,7 @@

    Search

    loadmodule blowfish
     
    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    @@ -162,7 +162,7 @@

    Search

    diff --git a/doc/html/modules/mod/channels.html b/doc/html/modules/mod/channels.html index d82d8ab5f..fdf0cfdcb 100644 --- a/doc/html/modules/mod/channels.html +++ b/doc/html/modules/mod/channels.html @@ -503,7 +503,7 @@

    Default Channel Values}

    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    @@ -534,7 +534,7 @@

    Default Channel Values diff --git a/doc/html/modules/mod/compress.html b/doc/html/modules/mod/compress.html index 88924232b..5f3e14696 100644 --- a/doc/html/modules/mod/compress.html +++ b/doc/html/modules/mod/compress.html @@ -141,7 +141,7 @@

    Search

    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    @@ -170,7 +170,7 @@

    Search

    diff --git a/doc/html/modules/mod/console.html b/doc/html/modules/mod/console.html index f9d6a99ce..6de9fce47 100644 --- a/doc/html/modules/mod/console.html +++ b/doc/html/modules/mod/console.html @@ -143,7 +143,7 @@

    Search

    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    @@ -172,7 +172,7 @@

    Search

    diff --git a/doc/html/modules/mod/ctcp.html b/doc/html/modules/mod/ctcp.html index 49be32ecb..915b4acbe 100644 --- a/doc/html/modules/mod/ctcp.html +++ b/doc/html/modules/mod/ctcp.html @@ -155,7 +155,7 @@

    Search

    There are also several variables to help make your bot less noticeable. They are: ctcp-version, ctcp-finger, and ctcp-userinfo. You can use set to set them to values you’d like.

    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    @@ -184,7 +184,7 @@

    Search

    diff --git a/doc/html/modules/mod/dns.html b/doc/html/modules/mod/dns.html index 17d42f77b..cfffaf7a3 100644 --- a/doc/html/modules/mod/dns.html +++ b/doc/html/modules/mod/dns.html @@ -156,7 +156,7 @@

    Search

    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    @@ -185,7 +185,7 @@

    Search

    diff --git a/doc/html/modules/mod/filesys.html b/doc/html/modules/mod/filesys.html index 397a41817..aeabce403 100644 --- a/doc/html/modules/mod/filesys.html +++ b/doc/html/modules/mod/filesys.html @@ -351,7 +351,7 @@

    .filesys module diff --git a/doc/html/modules/mod/ident.html b/doc/html/modules/mod/ident.html index 80ee7add4..249d7ecb5 100644 --- a/doc/html/modules/mod/ident.html +++ b/doc/html/modules/mod/ident.html @@ -194,7 +194,7 @@

    Search

    -

    Copyright (C) 2019 - 2023 Eggheads Development Team

    +

    Copyright (C) 2019 - 2024 Eggheads Development Team

    @@ -223,7 +223,7 @@

    Search

    diff --git a/doc/html/modules/mod/irc.html b/doc/html/modules/mod/irc.html index 88cf758c3..3fa36c056 100644 --- a/doc/html/modules/mod/irc.html +++ b/doc/html/modules/mod/irc.html @@ -264,7 +264,7 @@

    Search

    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    @@ -293,7 +293,7 @@

    Search

    diff --git a/doc/html/modules/mod/notes.html b/doc/html/modules/mod/notes.html index efe43cd39..bbdea5dbe 100644 --- a/doc/html/modules/mod/notes.html +++ b/doc/html/modules/mod/notes.html @@ -151,7 +151,7 @@

    Search

    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    @@ -180,7 +180,7 @@

    Search

    diff --git a/doc/html/modules/mod/pbkdf2.html b/doc/html/modules/mod/pbkdf2.html index 4e7b21bb7..7f6f48ac4 100644 --- a/doc/html/modules/mod/pbkdf2.html +++ b/doc/html/modules/mod/pbkdf2.html @@ -149,7 +149,7 @@

    Search

    This module requires: none

    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    @@ -179,7 +179,7 @@

    Search

    diff --git a/doc/html/modules/mod/python.html b/doc/html/modules/mod/python.html index 7ed056faa..66dbab2ea 100644 --- a/doc/html/modules/mod/python.html +++ b/doc/html/modules/mod/python.html @@ -231,7 +231,7 @@

    Code Section

    Writing a module for use with Eggdrop

    This is how you import a module for use with an egg python script.

    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    @@ -261,7 +261,7 @@

    Writing a module for use with Eggdrop diff --git a/doc/html/modules/mod/seen.html b/doc/html/modules/mod/seen.html index b2ccae2aa..762b215de 100644 --- a/doc/html/modules/mod/seen.html +++ b/doc/html/modules/mod/seen.html @@ -130,7 +130,7 @@

    Search

    loadmodule seen
     
    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    @@ -159,7 +159,7 @@

    Search

    diff --git a/doc/html/modules/mod/server.html b/doc/html/modules/mod/server.html index e42d70e5c..32d3ae644 100644 --- a/doc/html/modules/mod/server.html +++ b/doc/html/modules/mod/server.html @@ -338,7 +338,7 @@

    Search

    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    @@ -368,7 +368,7 @@

    Search

    diff --git a/doc/html/modules/mod/share.html b/doc/html/modules/mod/share.html index 518dad3df..33f66f6ad 100644 --- a/doc/html/modules/mod/share.html +++ b/doc/html/modules/mod/share.html @@ -160,7 +160,7 @@

    Search

    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    @@ -189,7 +189,7 @@

    Search

    diff --git a/doc/html/modules/mod/transfer.html b/doc/html/modules/mod/transfer.html index f20020dd4..eef7fe318 100644 --- a/doc/html/modules/mod/transfer.html +++ b/doc/html/modules/mod/transfer.html @@ -149,7 +149,7 @@

    Search

    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    @@ -178,7 +178,7 @@

    Search

    diff --git a/doc/html/modules/mod/twitch.html b/doc/html/modules/mod/twitch.html index 216560543..ee2929846 100644 --- a/doc/html/modules/mod/twitch.html +++ b/doc/html/modules/mod/twitch.html @@ -162,7 +162,7 @@

    Partyline commands diff --git a/doc/html/modules/mod/uptime.html b/doc/html/modules/mod/uptime.html index b93153160..c84f8e9ef 100644 --- a/doc/html/modules/mod/uptime.html +++ b/doc/html/modules/mod/uptime.html @@ -136,7 +136,7 @@

    Search

    loadmodule uptime
     
    -

    Copyright (C) 2001 - 2023 Eggheads Development Team

    +

    Copyright (C) 2001 - 2024 Eggheads Development Team

    @@ -165,7 +165,7 @@

    Search

    diff --git a/doc/html/modules/mod/woobie.html b/doc/html/modules/mod/woobie.html index 45607c452..4c175976a 100644 --- a/doc/html/modules/mod/woobie.html +++ b/doc/html/modules/mod/woobie.html @@ -129,7 +129,7 @@

    Search

    loadmodule woobie
     
    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    @@ -158,7 +158,7 @@

    Search

    diff --git a/doc/html/modules/notes.html b/doc/html/modules/notes.html index d09c2e6ae..b30055d74 100644 --- a/doc/html/modules/notes.html +++ b/doc/html/modules/notes.html @@ -147,7 +147,7 @@

    Search

    any notes.
    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    diff --git a/doc/html/modules/pbkdf2.html b/doc/html/modules/pbkdf2.html index 7cbf42856..a5222aa20 100644 --- a/doc/html/modules/pbkdf2.html +++ b/doc/html/modules/pbkdf2.html @@ -145,7 +145,7 @@

    Search

    Number of rounds. The higher the number, the longer hashing takes; but also generally the higher the protection against brute force attacks.

    This module requires: none

    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    diff --git a/doc/html/modules/seen.html b/doc/html/modules/seen.html index 3ba76754a..69103c9b8 100644 --- a/doc/html/modules/seen.html +++ b/doc/html/modules/seen.html @@ -126,7 +126,7 @@

    Search

    loadmodule seen
     
    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    diff --git a/doc/html/modules/server.html b/doc/html/modules/server.html index 5a9c69c01..2448f92b6 100644 --- a/doc/html/modules/server.html +++ b/doc/html/modules/server.html @@ -344,7 +344,7 @@

    Search

    Eggdrop is 32. -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    diff --git a/doc/html/modules/share.html b/doc/html/modules/share.html index 593929171..f4d98cce5 100644 --- a/doc/html/modules/share.html +++ b/doc/html/modules/share.html @@ -156,7 +156,7 @@

    Search

    are v1.5.1 or higher. -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    diff --git a/doc/html/modules/transfer.html b/doc/html/modules/transfer.html index 325d7a271..6fbdcc0cd 100644 --- a/doc/html/modules/transfer.html +++ b/doc/html/modules/transfer.html @@ -151,7 +151,7 @@

    Search

    be v1.9.0 or higher). -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    diff --git a/doc/html/modules/twitch.html b/doc/html/modules/twitch.html index bc21cddcf..65764cd8f 100644 --- a/doc/html/modules/twitch.html +++ b/doc/html/modules/twitch.html @@ -163,7 +163,7 @@

    Partyline commandsSearch

    loadmodule uptime
     
    -

    Copyright (C) 2001 - 2023 Eggheads Development Team

    +

    Copyright (C) 2001 - 2024 Eggheads Development Team

    diff --git a/doc/html/modules/woobie.html b/doc/html/modules/woobie.html index 02f5b6c8b..efc87f071 100644 --- a/doc/html/modules/woobie.html +++ b/doc/html/modules/woobie.html @@ -125,7 +125,7 @@

    Search

    loadmodule woobie
     
    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    diff --git a/doc/html/modules/writing.html b/doc/html/modules/writing.html index 61a994db3..66b823642 100644 --- a/doc/html/modules/writing.html +++ b/doc/html/modules/writing.html @@ -423,7 +423,7 @@

    What to do with a module? diff --git a/doc/html/search.html b/doc/html/search.html index 537f62159..423788fbf 100644 --- a/doc/html/search.html +++ b/doc/html/search.html @@ -147,7 +147,7 @@

    Search

    diff --git a/doc/html/tutorials/firstscript.html b/doc/html/tutorials/firstscript.html index cb437b682..988ef562e 100644 --- a/doc/html/tutorials/firstscript.html +++ b/doc/html/tutorials/firstscript.html @@ -225,7 +225,7 @@

    Writing an Eggdrop Script diff --git a/doc/html/tutorials/firststeps.html b/doc/html/tutorials/firststeps.html index 246aa0ef3..958dd374f 100644 --- a/doc/html/tutorials/firststeps.html +++ b/doc/html/tutorials/firststeps.html @@ -303,7 +303,7 @@

    Setting up SASL authentication diff --git a/doc/html/tutorials/module.html b/doc/html/tutorials/module.html index 2c534118f..097ce753d 100644 --- a/doc/html/tutorials/module.html +++ b/doc/html/tutorials/module.html @@ -356,7 +356,7 @@

    Exporting the Bind diff --git a/doc/html/tutorials/setup.html b/doc/html/tutorials/setup.html index 1b3f9e7ed..a2107bad6 100644 --- a/doc/html/tutorials/setup.html +++ b/doc/html/tutorials/setup.html @@ -290,7 +290,7 @@

    No show?
    diff --git a/doc/html/tutorials/tlssetup.html b/doc/html/tutorials/tlssetup.html index b2182268d..b36d8a40c 100644 --- a/doc/html/tutorials/tlssetup.html +++ b/doc/html/tutorials/tlssetup.html @@ -195,7 +195,7 @@

    Additional Information diff --git a/doc/html/using/accounts.html b/doc/html/using/accounts.html index 7b989047a..fdb89efa9 100644 --- a/doc/html/using/accounts.html +++ b/doc/html/using/accounts.html @@ -204,7 +204,7 @@

    Using Accounts with Tcl Scripts diff --git a/doc/html/using/autoscripts.html b/doc/html/using/autoscripts.html index 0d6b6ce61..fc9c81e2e 100644 --- a/doc/html/using/autoscripts.html +++ b/doc/html/using/autoscripts.html @@ -329,7 +329,7 @@

    egg_all
    diff --git a/doc/html/using/bans.html b/doc/html/using/bans.html index e2468189e..2257abc79 100644 --- a/doc/html/using/bans.html +++ b/doc/html/using/bans.html @@ -169,7 +169,7 @@

    Bans, Invites, and Exempts diff --git a/doc/html/using/botnet.html b/doc/html/using/botnet.html index 4e1c584a5..6bc802079 100644 --- a/doc/html/using/botnet.html +++ b/doc/html/using/botnet.html @@ -400,7 +400,7 @@

    Making bots share user records

    Using certificates to authenticate Eggdrops

    Eggdrops can use certificates to authenticate when linking to each other instead of a password. First, you must ensure you have set the appropriate certificates in the ssl-privatekey and ssl-certificate settings in the config file, and then enable the ssl-cert-auth setting. Next, add the certificate on the partyline by using .fprint + to add the fingerprint for the certificate currently in use, or .fprint <SHA1 fingerprint> to manually add a fingerprint. Once the config file settings are set 0and fingerprints are added on the partyline, Eggdrops will attempt to use their certificates instead of passwords for authentication.

    -

    Copyright (C) 1999 - 2023 Eggheads Development Team

    +

    Copyright (C) 1999 - 2024 Eggheads Development Team

    @@ -430,7 +430,7 @@

    Using certificates to authenticate Eggdrops diff --git a/doc/html/using/core.html b/doc/html/using/core.html index 63574f00f..21302afdc 100644 --- a/doc/html/using/core.html +++ b/doc/html/using/core.html @@ -732,7 +732,7 @@

    Scripts

    -

    Copyright (C) 2000 - 2023 Eggheads Development Team

    +

    Copyright (C) 2000 - 2024 Eggheads Development Team

    @@ -762,7 +762,7 @@

    Scripts
    diff --git a/doc/html/using/features.html b/doc/html/using/features.html index c5d468e49..00387c256 100644 --- a/doc/html/using/features.html +++ b/doc/html/using/features.html @@ -139,7 +139,7 @@

    Eggdrop Features diff --git a/doc/html/using/ipv6.html b/doc/html/using/ipv6.html index ca3aec141..396d93b9d 100644 --- a/doc/html/using/ipv6.html +++ b/doc/html/using/ipv6.html @@ -171,7 +171,7 @@

    Settings

    nat-ip works with IPv4 as it used to. It has no meaning for IPv6 and is not queried for IPv6 connections.

    -

    Copyright (C) 2010 - 2023 Eggheads Development Team

    +

    Copyright (C) 2010 - 2024 Eggheads Development Team

    @@ -201,7 +201,7 @@

    Settings
    diff --git a/doc/html/using/ircv3.html b/doc/html/using/ircv3.html index 431a7fd37..1257f7b04 100644 --- a/doc/html/using/ircv3.html +++ b/doc/html/using/ircv3.html @@ -137,7 +137,7 @@

    Supported CAP capabilities diff --git a/doc/html/using/partyline.html b/doc/html/using/partyline.html index 2d7e7ad0c..3f03d779b 100644 --- a/doc/html/using/partyline.html +++ b/doc/html/using/partyline.html @@ -126,7 +126,7 @@

    The Party Line diff --git a/doc/html/using/patch.html b/doc/html/using/patch.html index a98538093..f83ac29d4 100644 --- a/doc/html/using/patch.html +++ b/doc/html/using/patch.html @@ -130,7 +130,7 @@

    Submitting a patch via GitHub diff --git a/doc/html/using/pbkdf2.html b/doc/html/using/pbkdf2.html index 17c073be0..75cf54f60 100644 --- a/doc/html/using/pbkdf2.html +++ b/doc/html/using/pbkdf2.html @@ -188,7 +188,7 @@

    Tcl Interface diff --git a/doc/html/using/tcl-commands.html b/doc/html/using/tcl-commands.html index 9af070bc5..50cb59f37 100644 --- a/doc/html/using/tcl-commands.html +++ b/doc/html/using/tcl-commands.html @@ -3566,7 +3566,7 @@

    TCP Connections diff --git a/doc/html/using/text-sub.html b/doc/html/using/text-sub.html index 6e2441d44..7bac99298 100644 --- a/doc/html/using/text-sub.html +++ b/doc/html/using/text-sub.html @@ -190,7 +190,7 @@

    Textfile Substitutions
    -

    Copyright (C) 1999 - 2023 Eggheads Development Team

    +

    Copyright (C) 1999 - 2024 Eggheads Development Team

    @@ -220,7 +220,7 @@

    Textfile Substitutions diff --git a/doc/html/using/tls.html b/doc/html/using/tls.html index 86cb03fec..c326c0dd1 100644 --- a/doc/html/using/tls.html +++ b/doc/html/using/tls.html @@ -294,7 +294,7 @@

    SSL/TLS Settings diff --git a/doc/html/using/tricks.html b/doc/html/using/tricks.html index 599269979..409db4a2a 100644 --- a/doc/html/using/tricks.html +++ b/doc/html/using/tricks.html @@ -142,7 +142,7 @@

    Variables in Your Configset chanfile "$myvar.chan"

    -

    Copyright (C) 1999 - 2023 Eggheads Development Team

    +

    Copyright (C) 1999 - 2024 Eggheads Development Team

    @@ -172,7 +172,7 @@

    Variables in Your Config diff --git a/doc/html/using/twitch-tcl-commands.html b/doc/html/using/twitch-tcl-commands.html index 94789d19f..769757da4 100644 --- a/doc/html/using/twitch-tcl-commands.html +++ b/doc/html/using/twitch-tcl-commands.html @@ -303,7 +303,7 @@

    Bind Types diff --git a/doc/html/using/twitchinfo.html b/doc/html/using/twitchinfo.html index b1254710c..9a5eb698e 100644 --- a/doc/html/using/twitchinfo.html +++ b/doc/html/using/twitchinfo.html @@ -185,7 +185,7 @@

    Twitch IRC limitations diff --git a/doc/html/using/users.html b/doc/html/using/users.html index a7786e0e2..fa526e3df 100644 --- a/doc/html/using/users.html +++ b/doc/html/using/users.html @@ -227,7 +227,7 @@

    Users and Flags diff --git a/doc/man1/eggdrop.1 b/doc/man1/eggdrop.1 index a9fe4406f..155680cef 100644 --- a/doc/man1/eggdrop.1 +++ b/doc/man1/eggdrop.1 @@ -1,6 +1,6 @@ .\" To view: groff -man -Tascii eggdrop.1 .\" -.\" Copyright (C) 1999 - 2023 Eggheads Development Team +.\" Copyright (C) 1999 - 2024 Eggheads Development Team .\" .\" This file is free software; you can redistribute it and/or modify it .\" under the terms of the GNU General Public License as published by @@ -143,7 +143,7 @@ Bugs can be reported directly via GitHub at .SH COPYRIGHT Copyright (C) 1997 Robey Pointer .br -Copyright (C) 1999 - 2023 Eggheads Development Team +Copyright (C) 1999 - 2024 Eggheads Development Team .PP This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software diff --git a/doc/modules/mod.assoc b/doc/modules/mod.assoc index c20635102..4527a9e31 100644 --- a/doc/modules/mod.assoc +++ b/doc/modules/mod.assoc @@ -11,4 +11,4 @@ module: loadmodule assoc -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/modules/mod.blowfish b/doc/modules/mod.blowfish index 1f3b454de..1139d4307 100644 --- a/doc/modules/mod.blowfish +++ b/doc/modules/mod.blowfish @@ -14,4 +14,4 @@ Blowfish Module loadmodule blowfish - Copyright (C) 2000 - 2023 Eggheads Development Team + Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/modules/mod.channels b/doc/modules/mod.channels index c1e33ce98..7bab6eda8 100644 --- a/doc/modules/mod.channels +++ b/doc/modules/mod.channels @@ -477,4 +477,4 @@ DEFAULT CHANNEL VALUES } - Copyright (C) 2000 - 2023 Eggheads Development Team + Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/modules/mod.compress b/doc/modules/mod.compress index 8b9eb24b3..80843b3c5 100644 --- a/doc/modules/mod.compress +++ b/doc/modules/mod.compress @@ -25,4 +25,4 @@ There are also some variables you can set in your config file: This is the default compression level used. These levels are the same as those used by GNU gzip. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/modules/mod.console b/doc/modules/mod.console index 9e764f82c..7c7b84c3a 100644 --- a/doc/modules/mod.console +++ b/doc/modules/mod.console @@ -29,4 +29,4 @@ There are also some variables you can set in your config file: Enable this setting if a user's global info line should be displayed when they join a botnet channel. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/modules/mod.ctcp b/doc/modules/mod.ctcp index 4fa0bee9a..3ecd15fe8 100644 --- a/doc/modules/mod.ctcp +++ b/doc/modules/mod.ctcp @@ -33,4 +33,4 @@ There are also several variables to help make your bot less noticeable. They are: ctcp-version, ctcp-finger, and ctcp-userinfo. You can use set to set them to values you'd like. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/modules/mod.dns b/doc/modules/mod.dns index 38a27f39c..ea7300a58 100644 --- a/doc/modules/mod.dns +++ b/doc/modules/mod.dns @@ -44,4 +44,4 @@ There are also some variables you can set in your config file: Specify how long should the DNS module wait for a reply before resending the query. The value must be in seconds. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/modules/mod.filesys b/doc/modules/mod.filesys index b8cd261e8..1ff14418b 100644 --- a/doc/modules/mod.filesys +++ b/doc/modules/mod.filesys @@ -197,4 +197,4 @@ rm [files] ... files -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/modules/mod.ident b/doc/modules/mod.ident index fac1d8fc4..fef76623b 100644 --- a/doc/modules/mod.ident +++ b/doc/modules/mod.ident @@ -83,4 +83,4 @@ There are also some variables you can set in your config file: beginning of this document for potential ways to implement this setting. -Copyright (C) 2019 - 2023 Eggheads Development Team +Copyright (C) 2019 - 2024 Eggheads Development Team diff --git a/doc/modules/mod.irc b/doc/modules/mod.irc index ca39625b6..bb28fa17e 100644 --- a/doc/modules/mod.irc +++ b/doc/modules/mod.irc @@ -169,4 +169,4 @@ Use the following settings only if you set 'net-type' to IRCnet! If your network doesn't use rfc 1459 compliant string matching routines, set this to 0. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/modules/mod.notes b/doc/modules/mod.notes index bcf5b8baa..5433eca70 100644 --- a/doc/modules/mod.notes +++ b/doc/modules/mod.notes @@ -44,4 +44,4 @@ There are also some variables you can set in your config file: Set this to 1 if you want the bot to let people know on join if they have any notes. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/modules/mod.pbkdf2 b/doc/modules/mod.pbkdf2 index 319ec4c35..4a508edb9 100644 --- a/doc/modules/mod.pbkdf2 +++ b/doc/modules/mod.pbkdf2 @@ -38,4 +38,4 @@ There are also some variables you can set in your config file: This module requires: none - Copyright (C) 2000 - 2023 Eggheads Development Team + Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/modules/mod.seen b/doc/modules/mod.seen index af637b8ec..0d010be8d 100644 --- a/doc/modules/mod.seen +++ b/doc/modules/mod.seen @@ -15,4 +15,4 @@ module: loadmodule seen -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/modules/mod.server b/doc/modules/mod.server index 2b5c2d123..36cf8f9db 100644 --- a/doc/modules/mod.server +++ b/doc/modules/mod.server @@ -265,4 +265,4 @@ There are additional settings for 'net-type' Efnet. supported by your network. The default setting is 9. The maximum supported length by Eggdrop is 32. - Copyright (C) 2000 - 2023 Eggheads Development Team + Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/modules/mod.share b/doc/modules/mod.share index 30105db44..157868a7f 100644 --- a/doc/modules/mod.share +++ b/doc/modules/mod.share @@ -52,4 +52,4 @@ There are also some variables you can set in your config file: shared, only ports and address are added to sharing procedure. This only works with hubs that are v1.5.1 or higher. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/modules/mod.transfer b/doc/modules/mod.transfer index b2ad7edd9..e9c35fd94 100644 --- a/doc/modules/mod.transfer +++ b/doc/modules/mod.transfer @@ -37,4 +37,4 @@ There are also some variables you can set in your config file: to keep the bots linked if the userfile transfer fails and retry every minute (both bots must be v1.9.0 or higher). -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/modules/mod.twitch b/doc/modules/mod.twitch index 16bd125c5..cb3b20647 100644 --- a/doc/modules/mod.twitch +++ b/doc/modules/mod.twitch @@ -60,4 +60,4 @@ Lists current userstate on a channel * roomsstate - Lists current roomstate for a channel * twcmd - Issues a traditional Twitch web interface command to the Twitch server (/ban, /block, /host, etc) - Copyright (C) 2020 - 2023 Eggheads Development Team + Copyright (C) 2020 - 2024 Eggheads Development Team diff --git a/doc/modules/mod.uptime b/doc/modules/mod.uptime index 483175e7a..c6acd360c 100644 --- a/doc/modules/mod.uptime +++ b/doc/modules/mod.uptime @@ -20,4 +20,4 @@ module: loadmodule uptime -Copyright (C) 2001 - 2023 Eggheads Development Team +Copyright (C) 2001 - 2024 Eggheads Development Team diff --git a/doc/modules/mod.woobie b/doc/modules/mod.woobie index eef5d5157..28dd56f74 100644 --- a/doc/modules/mod.woobie +++ b/doc/modules/mod.woobie @@ -12,4 +12,4 @@ module: loadmodule woobie -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/settings/CONTENTS b/doc/settings/CONTENTS index 75c7df16f..5301bf99c 100644 --- a/doc/settings/CONTENTS +++ b/doc/settings/CONTENTS @@ -57,4 +57,4 @@ Last revised: April 16, 2003 Documentation for the woobie module is provided in this file. ________________________________________________________________________ - Copyright (C) 2003 - 2023 Eggheads Development Team + Copyright (C) 2003 - 2024 Eggheads Development Team diff --git a/doc/settings/core.settings b/doc/settings/core.settings index 9e6d285d5..7424efa50 100644 --- a/doc/settings/core.settings +++ b/doc/settings/core.settings @@ -712,4 +712,4 @@ point. source scripts/alltools.tcl source scripts/action.fix.tcl -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/settings/mod.assoc b/doc/settings/mod.assoc index c20635102..4527a9e31 100644 --- a/doc/settings/mod.assoc +++ b/doc/settings/mod.assoc @@ -11,4 +11,4 @@ module: loadmodule assoc -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/settings/mod.blowfish b/doc/settings/mod.blowfish index 1f3b454de..1139d4307 100644 --- a/doc/settings/mod.blowfish +++ b/doc/settings/mod.blowfish @@ -14,4 +14,4 @@ Blowfish Module loadmodule blowfish - Copyright (C) 2000 - 2023 Eggheads Development Team + Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/settings/mod.channels b/doc/settings/mod.channels index 00d7a5ad4..b235d4f46 100644 --- a/doc/settings/mod.channels +++ b/doc/settings/mod.channels @@ -485,4 +485,4 @@ There are also some variables you can set in your config file: } - Copyright (C) 2000 - 2023 Eggheads Development Team + Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/settings/mod.compress b/doc/settings/mod.compress index 8b9eb24b3..80843b3c5 100644 --- a/doc/settings/mod.compress +++ b/doc/settings/mod.compress @@ -25,4 +25,4 @@ There are also some variables you can set in your config file: This is the default compression level used. These levels are the same as those used by GNU gzip. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/settings/mod.console b/doc/settings/mod.console index 9e764f82c..7c7b84c3a 100644 --- a/doc/settings/mod.console +++ b/doc/settings/mod.console @@ -29,4 +29,4 @@ There are also some variables you can set in your config file: Enable this setting if a user's global info line should be displayed when they join a botnet channel. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/settings/mod.ctcp b/doc/settings/mod.ctcp index 4fa0bee9a..3ecd15fe8 100644 --- a/doc/settings/mod.ctcp +++ b/doc/settings/mod.ctcp @@ -33,4 +33,4 @@ There are also several variables to help make your bot less noticeable. They are: ctcp-version, ctcp-finger, and ctcp-userinfo. You can use set to set them to values you'd like. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/settings/mod.dns b/doc/settings/mod.dns index 38a27f39c..ea7300a58 100644 --- a/doc/settings/mod.dns +++ b/doc/settings/mod.dns @@ -44,4 +44,4 @@ There are also some variables you can set in your config file: Specify how long should the DNS module wait for a reply before resending the query. The value must be in seconds. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/settings/mod.filesys b/doc/settings/mod.filesys index b8cd261e8..1ff14418b 100644 --- a/doc/settings/mod.filesys +++ b/doc/settings/mod.filesys @@ -197,4 +197,4 @@ rm [files] ... files -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/settings/mod.ident b/doc/settings/mod.ident index fac1d8fc4..fef76623b 100644 --- a/doc/settings/mod.ident +++ b/doc/settings/mod.ident @@ -83,4 +83,4 @@ There are also some variables you can set in your config file: beginning of this document for potential ways to implement this setting. -Copyright (C) 2019 - 2023 Eggheads Development Team +Copyright (C) 2019 - 2024 Eggheads Development Team diff --git a/doc/settings/mod.irc b/doc/settings/mod.irc index ca39625b6..bb28fa17e 100644 --- a/doc/settings/mod.irc +++ b/doc/settings/mod.irc @@ -169,4 +169,4 @@ Use the following settings only if you set 'net-type' to IRCnet! If your network doesn't use rfc 1459 compliant string matching routines, set this to 0. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/settings/mod.notes b/doc/settings/mod.notes index bcf5b8baa..5433eca70 100644 --- a/doc/settings/mod.notes +++ b/doc/settings/mod.notes @@ -44,4 +44,4 @@ There are also some variables you can set in your config file: Set this to 1 if you want the bot to let people know on join if they have any notes. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/settings/mod.seen b/doc/settings/mod.seen index af637b8ec..0d010be8d 100644 --- a/doc/settings/mod.seen +++ b/doc/settings/mod.seen @@ -15,4 +15,4 @@ module: loadmodule seen -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/settings/mod.server b/doc/settings/mod.server index 9e4a07b2d..f87c8613f 100644 --- a/doc/settings/mod.server +++ b/doc/settings/mod.server @@ -265,4 +265,4 @@ There are additional settings for 'net-type' Efnet. supported by your network. The default setting is 9. The maximum supported length by Eggdrop is 32. - Copyright (C) 2000 - 2023 Eggheads Development Team + Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/settings/mod.share b/doc/settings/mod.share index 30105db44..157868a7f 100644 --- a/doc/settings/mod.share +++ b/doc/settings/mod.share @@ -52,4 +52,4 @@ There are also some variables you can set in your config file: shared, only ports and address are added to sharing procedure. This only works with hubs that are v1.5.1 or higher. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/settings/mod.transfer b/doc/settings/mod.transfer index 14a5cf0b7..39963f6b7 100644 --- a/doc/settings/mod.transfer +++ b/doc/settings/mod.transfer @@ -45,4 +45,4 @@ There are also some variables you can set in your config file: to keep the bots linked if the userfile transfer fails and retry every minute (both bots must be v1.9.0 or higher). -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/settings/mod.uptime b/doc/settings/mod.uptime index 483175e7a..c6acd360c 100644 --- a/doc/settings/mod.uptime +++ b/doc/settings/mod.uptime @@ -20,4 +20,4 @@ module: loadmodule uptime -Copyright (C) 2001 - 2023 Eggheads Development Team +Copyright (C) 2001 - 2024 Eggheads Development Team diff --git a/doc/settings/mod.woobie b/doc/settings/mod.woobie index eef5d5157..28dd56f74 100644 --- a/doc/settings/mod.woobie +++ b/doc/settings/mod.woobie @@ -12,4 +12,4 @@ module: loadmodule woobie -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/about/about.rst b/doc/sphinx_source/about/about.rst index 601a6116b..3e516fa27 100644 --- a/doc/sphinx_source/about/about.rst +++ b/doc/sphinx_source/about/about.rst @@ -55,4 +55,4 @@ About Eggdrop * Tcl -- Eggdrop cannot compile without Tcl installed on your shell. - Copyright (C) 1999 - 2023 Eggheads Development Team + Copyright (C) 1999 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/conf.py b/doc/sphinx_source/conf.py index f5bbaa7f5..b59b22f93 100644 --- a/doc/sphinx_source/conf.py +++ b/doc/sphinx_source/conf.py @@ -44,7 +44,7 @@ # General information about the project. project = u'Eggdrop' -copyright = u'2023, Eggheads' +copyright = u'2024, Eggheads' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the diff --git a/doc/sphinx_source/install/install.rst b/doc/sphinx_source/install/install.rst index 94cdc0749..21ee258bf 100644 --- a/doc/sphinx_source/install/install.rst +++ b/doc/sphinx_source/install/install.rst @@ -143,4 +143,4 @@ the README file. If not, then READ IT!&@#%@! Have fun with Eggdrop! Copyright (C) 1997 Robey Pointer - Copyright (C) 1999 - 2023 Eggheads Development Team + Copyright (C) 1999 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/install/readme.rst b/doc/sphinx_source/install/readme.rst index 80453b226..29cc7e8f3 100644 --- a/doc/sphinx_source/install/readme.rst +++ b/doc/sphinx_source/install/readme.rst @@ -191,4 +191,4 @@ Obtaining Help * Don't ask to ask- just state your question, along with any relevant details and error messages Copyright (C) 1997 Robey Pointer -Copyright (C) 1999 - 2023 Eggheads Development Team +Copyright (C) 1999 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/index.rst b/doc/sphinx_source/modules/index.rst index a5a4a6523..fc0318e96 100644 --- a/doc/sphinx_source/modules/index.rst +++ b/doc/sphinx_source/modules/index.rst @@ -44,4 +44,4 @@ Do I still need to 'loadmodule' modules? YES, when you compile statically, all the modules are linked into the main executable. HOWEVER, they are not enabled until you use loadmodule to enable them, hence you get nearly the same functionality with static modules as with dynamic modules. -Copyright (C) 1999 - 2023 Eggheads Development Team +Copyright (C) 1999 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/assoc.rst b/doc/sphinx_source/modules/mod/assoc.rst index 60ccc09e5..0833a9150 100644 --- a/doc/sphinx_source/modules/mod/assoc.rst +++ b/doc/sphinx_source/modules/mod/assoc.rst @@ -15,4 +15,4 @@ module:: loadmodule assoc -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/blowfish.rst b/doc/sphinx_source/modules/mod/blowfish.rst index be67a622b..0d894ec77 100644 --- a/doc/sphinx_source/modules/mod/blowfish.rst +++ b/doc/sphinx_source/modules/mod/blowfish.rst @@ -18,4 +18,4 @@ Blowfish Module loadmodule blowfish - Copyright (C) 2000 - 2023 Eggheads Development Team + Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/channels.rst b/doc/sphinx_source/modules/mod/channels.rst index b55e4d2e3..f47085664 100644 --- a/doc/sphinx_source/modules/mod/channels.rst +++ b/doc/sphinx_source/modules/mod/channels.rst @@ -410,4 +410,4 @@ Default Channel Values } - Copyright (C) 2000 - 2023 Eggheads Development Team + Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/compress.rst b/doc/sphinx_source/modules/mod/compress.rst index 21e1de6c0..8d531dce9 100644 --- a/doc/sphinx_source/modules/mod/compress.rst +++ b/doc/sphinx_source/modules/mod/compress.rst @@ -28,4 +28,4 @@ There are also some variables you can set in your config file: as those used by GNU gzip. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/console.rst b/doc/sphinx_source/modules/mod/console.rst index cc51727ba..9bdd8edaa 100644 --- a/doc/sphinx_source/modules/mod/console.rst +++ b/doc/sphinx_source/modules/mod/console.rst @@ -33,4 +33,4 @@ There are also some variables you can set in your config file: when they join a botnet channel. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/ctcp.rst b/doc/sphinx_source/modules/mod/ctcp.rst index 98d5c5c9d..650050d87 100644 --- a/doc/sphinx_source/modules/mod/ctcp.rst +++ b/doc/sphinx_source/modules/mod/ctcp.rst @@ -37,4 +37,4 @@ They are: ctcp-version, ctcp-finger, and ctcp-userinfo. You can use set to set them to values you'd like. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/dns.rst b/doc/sphinx_source/modules/mod/dns.rst index 93300a011..daa98cb8f 100644 --- a/doc/sphinx_source/modules/mod/dns.rst +++ b/doc/sphinx_source/modules/mod/dns.rst @@ -46,4 +46,4 @@ There are also some variables you can set in your config file: the query. The value must be in seconds. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/filesys.rst b/doc/sphinx_source/modules/mod/filesys.rst index e5afdb400..67ef08c7e 100644 --- a/doc/sphinx_source/modules/mod/filesys.rst +++ b/doc/sphinx_source/modules/mod/filesys.rst @@ -252,4 +252,4 @@ rm [files] ... -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/ident.rst b/doc/sphinx_source/modules/mod/ident.rst index 11247fdf0..f542da253 100644 --- a/doc/sphinx_source/modules/mod/ident.rst +++ b/doc/sphinx_source/modules/mod/ident.rst @@ -73,4 +73,4 @@ There are also some variables you can set in your config file: for potential ways to implement this setting. -Copyright (C) 2019 - 2023 Eggheads Development Team +Copyright (C) 2019 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/irc.rst b/doc/sphinx_source/modules/mod/irc.rst index f8a046d0a..5b1b8d2f3 100644 --- a/doc/sphinx_source/modules/mod/irc.rst +++ b/doc/sphinx_source/modules/mod/irc.rst @@ -151,4 +151,4 @@ Use the following settings only if you set 'net-type' to IRCnet! If your network doesn't use rfc 1459 compliant string matching routines, set this to 0. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/notes.rst b/doc/sphinx_source/modules/mod/notes.rst index 657253255..8190c9143 100644 --- a/doc/sphinx_source/modules/mod/notes.rst +++ b/doc/sphinx_source/modules/mod/notes.rst @@ -42,4 +42,4 @@ There are also some variables you can set in your config file: any notes. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/pbkdf2.rst b/doc/sphinx_source/modules/mod/pbkdf2.rst index 2b3a6c1b7..883db733b 100644 --- a/doc/sphinx_source/modules/mod/pbkdf2.rst +++ b/doc/sphinx_source/modules/mod/pbkdf2.rst @@ -35,4 +35,4 @@ There are also some variables you can set in your config file: This module requires: none - Copyright (C) 2000 - 2023 Eggheads Development Team + Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/python.rst b/doc/sphinx_source/modules/mod/python.rst index cc82fa9d9..97500493c 100644 --- a/doc/sphinx_source/modules/mod/python.rst +++ b/doc/sphinx_source/modules/mod/python.rst @@ -151,4 +151,4 @@ Writing a module for use with Eggdrop This is how you import a module for use with an egg python script. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/seen.rst b/doc/sphinx_source/modules/mod/seen.rst index 05f17700c..0ddf12153 100644 --- a/doc/sphinx_source/modules/mod/seen.rst +++ b/doc/sphinx_source/modules/mod/seen.rst @@ -18,4 +18,4 @@ Put this line into your Eggdrop configuration file to load the seen module:: loadmodule seen -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/server.rst b/doc/sphinx_source/modules/mod/server.rst index 26eed0dac..6f4cbd926 100644 --- a/doc/sphinx_source/modules/mod/server.rst +++ b/doc/sphinx_source/modules/mod/server.rst @@ -237,5 +237,5 @@ There are additional settings for 'net-type' Efnet. your network. The default setting is 9. The maximum supported length by Eggdrop is 32. - Copyright (C) 2000 - 2023 Eggheads Development Team + Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/share.rst b/doc/sphinx_source/modules/mod/share.rst index f40b92874..3a1c3649b 100644 --- a/doc/sphinx_source/modules/mod/share.rst +++ b/doc/sphinx_source/modules/mod/share.rst @@ -50,4 +50,4 @@ There are also some variables you can set in your config file: address are added to sharing procedure. This only works with hubs that are v1.5.1 or higher. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/transfer.rst b/doc/sphinx_source/modules/mod/transfer.rst index 1d804c229..8055298da 100644 --- a/doc/sphinx_source/modules/mod/transfer.rst +++ b/doc/sphinx_source/modules/mod/transfer.rst @@ -37,4 +37,4 @@ There are also some variables you can set in your config file: linked if the userfile transfer fails and retry every minute (both bots must be v1.9.0 or higher). -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/twitch.rst b/doc/sphinx_source/modules/mod/twitch.rst index a1c25aaed..533bd7246 100644 --- a/doc/sphinx_source/modules/mod/twitch.rst +++ b/doc/sphinx_source/modules/mod/twitch.rst @@ -55,5 +55,5 @@ This module adds the following commands to the partyline: * roomsstate - Lists current roomstate for a channel * twcmd - Issues a traditional Twitch web interface command to the Twitch server (/ban, /block, /host, etc) - Copyright (C) 2020 - 2023 Eggheads Development Team + Copyright (C) 2020 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/uptime.rst b/doc/sphinx_source/modules/mod/uptime.rst index 7ad024f78..d88b9244d 100644 --- a/doc/sphinx_source/modules/mod/uptime.rst +++ b/doc/sphinx_source/modules/mod/uptime.rst @@ -24,4 +24,4 @@ module:: loadmodule uptime -Copyright (C) 2001 - 2023 Eggheads Development Team +Copyright (C) 2001 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/modules/mod/woobie.rst b/doc/sphinx_source/modules/mod/woobie.rst index 38b38b0dd..2516fc0b7 100644 --- a/doc/sphinx_source/modules/mod/woobie.rst +++ b/doc/sphinx_source/modules/mod/woobie.rst @@ -15,4 +15,4 @@ module:: loadmodule woobie -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/tutorials/firstscript.rst b/doc/sphinx_source/tutorials/firstscript.rst index ff35aa6e8..67a9dafaa 100644 --- a/doc/sphinx_source/tutorials/firstscript.rst +++ b/doc/sphinx_source/tutorials/firstscript.rst @@ -143,4 +143,4 @@ If you want to try these out, join #eggdrop on Libera and check your answers (an
    -Copyright (C) 2003 - 2023 Eggheads Development Team +Copyright (C) 2003 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/using/bans.rst b/doc/sphinx_source/using/bans.rst index 83431e390..6fcb4e5d2 100644 --- a/doc/sphinx_source/using/bans.rst +++ b/doc/sphinx_source/using/bans.rst @@ -73,4 +73,4 @@ Bans, Invites, and Exempts (defined in config file) or until the channel goes -i again, whichever happens last. - Copyright (C) 1999 - 2023 Eggheads Development Team + Copyright (C) 1999 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/using/botnet.rst b/doc/sphinx_source/using/botnet.rst index e58450369..53a11046e 100644 --- a/doc/sphinx_source/using/botnet.rst +++ b/doc/sphinx_source/using/botnet.rst @@ -322,4 +322,4 @@ Using certificates to authenticate Eggdrops ------------------------------------------- Eggdrops can use certificates to authenticate when linking to each other instead of a password. First, you must ensure you have set the appropriate certificates in the `ssl-privatekey` and `ssl-certificate` settings in the config file, and then enable the `ssl-cert-auth` setting. Next, add the certificate on the partyline by using `.fprint +` to add the fingerprint for the certificate currently in use, or `.fprint ` to manually add a fingerprint. Once the config file settings are set 0and fingerprints are added on the partyline, Eggdrops will attempt to use their certificates instead of passwords for authentication. -Copyright (C) 1999 - 2023 Eggheads Development Team +Copyright (C) 1999 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/using/core.rst b/doc/sphinx_source/using/core.rst index 117cd935d..bf560b351 100644 --- a/doc/sphinx_source/using/core.rst +++ b/doc/sphinx_source/using/core.rst @@ -638,4 +638,4 @@ modules should be loaded and their variables should be set at this point. source scripts/alltools.tcl source scripts/action.fix.tcl -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/using/features.rst b/doc/sphinx_source/using/features.rst index ebc511ad9..b28195c2b 100644 --- a/doc/sphinx_source/using/features.rst +++ b/doc/sphinx_source/using/features.rst @@ -52,4 +52,4 @@ Eggdrop Features Copyright (C) 1997 Robey Pointer -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/using/ipv6.rst b/doc/sphinx_source/using/ipv6.rst index 93d322f11..83891df2c 100644 --- a/doc/sphinx_source/using/ipv6.rst +++ b/doc/sphinx_source/using/ipv6.rst @@ -81,4 +81,4 @@ Other affected variables: nat-ip works with IPv4 as it used to. It has no meaning for IPv6 and is not queried for IPv6 connections. -Copyright (C) 2010 - 2023 Eggheads Development Team +Copyright (C) 2010 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/using/ircv3.rst b/doc/sphinx_source/using/ircv3.rst index 5f7b0e60b..c2fff5299 100644 --- a/doc/sphinx_source/using/ircv3.rst +++ b/doc/sphinx_source/using/ircv3.rst @@ -43,4 +43,4 @@ The following capabilities are supported by Eggdrop: * setname * +typing -Copyright (C) 2010 - 2023 Eggheads Development Team +Copyright (C) 2010 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/using/partyline.rst b/doc/sphinx_source/using/partyline.rst index 2bc477ac8..d0c7f80a6 100644 --- a/doc/sphinx_source/using/partyline.rst +++ b/doc/sphinx_source/using/partyline.rst @@ -36,4 +36,4 @@ prefixed with an apostrophe is sent to all users on the local bot only. You can change channels with the ".chat" command or even leave all channels with ".chat off". -Copyright (C) 2002 - 2023 Eggheads Development Team +Copyright (C) 2002 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/using/patch.rst b/doc/sphinx_source/using/patch.rst index 3a0f4c7ee..1dd4167e8 100644 --- a/doc/sphinx_source/using/patch.rst +++ b/doc/sphinx_source/using/patch.rst @@ -33,4 +33,4 @@ To create a patch via github: 7. Pour yourself a cold one and bask in the warm feeling of contributing to the open source community! Karma++! -Copyright (C) 1999 - 2023 Eggheads Development Team +Copyright (C) 1999 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/using/pbkdf2info.rst b/doc/sphinx_source/using/pbkdf2info.rst index 3053e43dc..2888be9f0 100644 --- a/doc/sphinx_source/using/pbkdf2info.rst +++ b/doc/sphinx_source/using/pbkdf2info.rst @@ -90,4 +90,4 @@ The PBKDF2 module adds the 'encpass2' command to the Tcl library. This command t where 'PBK method' is the method specified in the configuration file, 'rounds' is the number of rounds specified in the configuration file, 'salt' is the value used for the salt, and 'password hash' is the output of the hashing algorithm. -Copyright (C) 2000 - 2023 Eggheads Development Team +Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/using/tcl-commands.rst b/doc/sphinx_source/using/tcl-commands.rst index 1f305c6a6..f18290c2b 100644 --- a/doc/sphinx_source/using/tcl-commands.rst +++ b/doc/sphinx_source/using/tcl-commands.rst @@ -3761,4 +3761,4 @@ are the four special characters: | | so a bind would have to use "\\*" or {\*} for a mask argument | +-----+--------------------------------------------------------------------------+ - Copyright (C) 1999 - 2023 Eggheads Development Team + Copyright (C) 1999 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/using/text-sub.rst b/doc/sphinx_source/using/text-sub.rst index dc81af3ee..98ab9042a 100644 --- a/doc/sphinx_source/using/text-sub.rst +++ b/doc/sphinx_source/using/text-sub.rst @@ -76,4 +76,4 @@ Other variables: | %{center} | center the following text (70 columns) | +-------------+---------------------------------------------------------+ - Copyright (C) 1999 - 2023 Eggheads Development Team + Copyright (C) 1999 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/using/tls.rst b/doc/sphinx_source/using/tls.rst index aff81637e..6d73e79bf 100644 --- a/doc/sphinx_source/using/tls.rst +++ b/doc/sphinx_source/using/tls.rst @@ -201,4 +201,4 @@ verification and authorization. Higher values enable specific exceptions like allowing self-signed or expired certificates. Details are documented in eggdrop.conf. -Copyright (C) 2010 - 2023 Eggheads Development Team +Copyright (C) 2010 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/using/tricks.rst b/doc/sphinx_source/using/tricks.rst index cafbaafbf..8d6ea6722 100644 --- a/doc/sphinx_source/using/tricks.rst +++ b/doc/sphinx_source/using/tricks.rst @@ -52,4 +52,4 @@ You can use variables in your config file, since it's really just a normal Tcl f set chanfile "$myvar.chan" -Copyright (C) 1999 - 2023 Eggheads Development Team +Copyright (C) 1999 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/using/users.rst b/doc/sphinx_source/using/users.rst index ef462644e..e6adafa7b 100644 --- a/doc/sphinx_source/using/users.rst +++ b/doc/sphinx_source/using/users.rst @@ -79,4 +79,4 @@ Eggdrop does not have access levels like some bots. There are no meaningless num There are also 26 global user-defined flags and 26 channel user-defined flags (Capital letters A through Z). These are used by scripts, and their uses vary depending on the script that uses them. -Copyright (C) 2002 - 2023 Eggheads Development Team +Copyright (C) 2002 - 2024 Eggheads Development Team diff --git a/doc/tcl-commands.doc b/doc/tcl-commands.doc index 84136fd4b..bcbf842ee 100644 --- a/doc/tcl-commands.doc +++ b/doc/tcl-commands.doc @@ -4170,4 +4170,4 @@ the four special characters: well, so a bind would have to use "\*" or {*} for a mask argument ----- ----------------------------------------------------------------- - Copyright (C) 1999 - 2023 Eggheads Development Team + Copyright (C) 1999 - 2024 Eggheads Development Team diff --git a/logs/CONTENTS b/logs/CONTENTS index f09e3f3d1..57d32b6c6 100644 --- a/logs/CONTENTS +++ b/logs/CONTENTS @@ -8,4 +8,4 @@ Last revised: August 08, 2004 This is a good place to put your logfiles. _____________________________________________________________________ - Copyright (C) 2001 - 2023 Eggheads Development Team + Copyright (C) 2001 - 2024 Eggheads Development Team diff --git a/m4/python.m4 b/m4/python.m4 index 84dc338ba..5409d7b6b 100644 --- a/m4/python.m4 +++ b/m4/python.m4 @@ -1,6 +1,6 @@ dnl python.m4 -- Autoconf macros to compile python.mod dnl -dnl Copyright (c) 2022 - 2022 Eggheads Development Team +dnl Copyright (c) 2022 - 2024 Eggheads Development Team dnl dnl This program is free software; you can redistribute it and/or dnl modify it under the terms of the GNU General Public License diff --git a/m4/tcl.m4 b/m4/tcl.m4 index d4a95c5e8..93320acf8 100644 --- a/m4/tcl.m4 +++ b/m4/tcl.m4 @@ -5,7 +5,7 @@ # # Copyright (c) 1999-2000 Ajuba Solutions. # Copyright (c) 2002-2005 ActiveState Corporation. -# Copyright (c) 2017 - 2023 Eggheads Development Team +# Copyright (c) 2017 - 2024 Eggheads Development Team # # Original Tcl/TEA license.terms information for this file: # This software is copyrighted by the Regents of the University of diff --git a/misc/genchanges b/misc/genchanges index 9e7432292..31fa8dc5e 100755 --- a/misc/genchanges +++ b/misc/genchanges @@ -2,7 +2,7 @@ # # genchanges - Generate changelog (doc/Changes and ChangeLog) files. # -# Copyright (C) 2017 - 2023 Eggheads Development Team +# Copyright (C) 2017 - 2024 Eggheads Development Team # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by diff --git a/misc/generatedocs b/misc/generatedocs index 0267d360b..b00e847ac 100755 --- a/misc/generatedocs +++ b/misc/generatedocs @@ -4,7 +4,7 @@ # reStructuredText format files. -Geo # # -# Copyright (C) 2004 - 2023 Eggheads Development Team +# Copyright (C) 2004 - 2024 Eggheads Development Team # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by diff --git a/misc/getcommit b/misc/getcommit index 433704ec3..a310aa8df 100755 --- a/misc/getcommit +++ b/misc/getcommit @@ -2,7 +2,7 @@ # # getcommit - get a descriptive commit name (git) # -# Copyright (C) 2015 - 2023 Eggheads Development Team +# Copyright (C) 2015 - 2024 Eggheads Development Team # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by diff --git a/misc/killwhitespace b/misc/killwhitespace index b1a96c330..bea3e450a 100755 --- a/misc/killwhitespace +++ b/misc/killwhitespace @@ -2,7 +2,7 @@ # # killwhitespace - removes trailing whitespace from source files # -# Copyright (C) 2005 - 2023 Eggheads Development Team +# Copyright (C) 2005 - 2024 Eggheads Development Team # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by diff --git a/misc/makedepend b/misc/makedepend index c355c6fcc..8dc7e9533 100755 --- a/misc/makedepend +++ b/misc/makedepend @@ -2,7 +2,7 @@ # # makedepend - updates Makefile dependencies throughout the tree # -# Copyright (C) 2004 - 2023 Eggheads Development Team +# Copyright (C) 2004 - 2024 Eggheads Development Team # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by diff --git a/misc/modconfig b/misc/modconfig index 78fdb1038..0fd07b063 100755 --- a/misc/modconfig +++ b/misc/modconfig @@ -2,7 +2,7 @@ # # modconfig # -# Copyright (C) 2000 - 2023 Eggheads Development Team +# Copyright (C) 2000 - 2024 Eggheads Development Team # Written by Fabian Knittel # # This program is free software; you can redistribute it and/or diff --git a/misc/newversion b/misc/newversion index f4e6c8aa8..5bb879d0c 100755 --- a/misc/newversion +++ b/misc/newversion @@ -2,7 +2,7 @@ # # newversion - prepares the tree for a new version number in git # -# Copyright (C) 2004 - 2023 Eggheads Development Team +# Copyright (C) 2004 - 2024 Eggheads Development Team # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by diff --git a/misc/releaseprep b/misc/releaseprep index 5c818f276..de3fc5612 100755 --- a/misc/releaseprep +++ b/misc/releaseprep @@ -2,7 +2,7 @@ # # releaseprep - prepares the tree for release # -# Copyright (C) 2004 - 2023 Eggheads Development Team +# Copyright (C) 2004 - 2024 Eggheads Development Team # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by diff --git a/misc/runautotools b/misc/runautotools index 48e9b93d5..cb16ab666 100755 --- a/misc/runautotools +++ b/misc/runautotools @@ -2,7 +2,7 @@ # # runautotools - # -# Copyright (C) 2004 - 2023 Eggheads Development Team +# Copyright (C) 2004 - 2024 Eggheads Development Team # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by diff --git a/misc/setpatch b/misc/setpatch index 1e107e009..74620c560 100755 --- a/misc/setpatch +++ b/misc/setpatch @@ -2,7 +2,7 @@ # # addpatch - generates src/version.h # -# Copyright (C) 2002 - 2023 Eggheads Development Team +# Copyright (C) 2002 - 2024 Eggheads Development Team # Copyright (C) 2000 Fabian Knittel # # This file is free software; you can redistribute it and/or modify it @@ -88,7 +88,7 @@ cat < src/version.h */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/misc/updatecopyright b/misc/updatecopyright index 1ba241fa3..a17b5edaf 100755 --- a/misc/updatecopyright +++ b/misc/updatecopyright @@ -2,7 +2,7 @@ # # updatecopyright - updates copyright in files # -# Copyright (C) 2005 - 2023 Eggheads Development Team +# Copyright (C) 2005 - 2024 Eggheads Development Team # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by diff --git a/scripts/CONTENTS b/scripts/CONTENTS index 7e395fbf4..ec0813aff 100644 --- a/scripts/CONTENTS +++ b/scripts/CONTENTS @@ -68,4 +68,4 @@ Last revised: August 08, 2004 _____________________________________________________________________ - Copyright (C) 2001 - 2023 Eggheads Development Team + Copyright (C) 2001 - 2024 Eggheads Development Team diff --git a/scripts/action.fix.tcl b/scripts/action.fix.tcl index 13e13b4c8..b2cfb2bee 100644 --- a/scripts/action.fix.tcl +++ b/scripts/action.fix.tcl @@ -1,6 +1,6 @@ # action.fix.tcl # -# Copyright (C) 2002 - 2023 Eggheads Development Team +# Copyright (C) 2002 - 2024 Eggheads Development Team # # Tothwolf 25May1999: cleanup # Tothwolf 04Oct1999: changed proc names slightly diff --git a/scripts/autobotchk b/scripts/autobotchk index 9ad2b5b8b..f9f1e8b40 100755 --- a/scripts/autobotchk +++ b/scripts/autobotchk @@ -1,7 +1,7 @@ #! /bin/sh # # Copyright (C) 1999-2003 Jeff Fisher (guppy@eggheads.org) -# Copyright (C) 2004-2023 Eggheads Development Team +# Copyright (C) 2004-2024 Eggheads Development Team # # systemd formatting contributed by PeGaSuS # @@ -59,7 +59,7 @@ exec tclsh$lastver "$0" ${1+"$@"} # AutoBotchk - An eggdrop utility to autogenerate botchk/crontab entries # # Copyright (C) 1999-2003 Jeff Fisher (guppy@eggheads.org) -# Copyright (C) 2004-2023 Eggheads Development Team +# Copyright (C) 2004-2024 Eggheads Development Team # # How to use # ---------- @@ -330,7 +330,7 @@ puts $fd "#! /bin/sh # # Generated by AutoBotchk 1.11 # Copyright (C) 1999-2003 Jeff Fisher (guppy@eggheads.org) -# Copyright (C) 2004-2023 Eggheads Development Team +# Copyright (C) 2004-2024 Eggheads Development Team # # change this to the directory you run your bot from: diff --git a/scripts/compat.tcl b/scripts/compat.tcl index 0ce91fac4..6e1e0bb64 100644 --- a/scripts/compat.tcl +++ b/scripts/compat.tcl @@ -2,7 +2,7 @@ # This script just quickly maps old Tcl commands to the new ones. # Use this if you are too lazy to get off your butt and update your scripts :D # -# Copyright (C) 2002 - 2023 Eggheads Development Team +# Copyright (C) 2002 - 2024 Eggheads Development Team # # Wiktor 31Mar2000: added binds and chnick proc # Tothwolf 25May1999: cleanup diff --git a/scripts/ques5.tcl b/scripts/ques5.tcl index e554fa062..1a5028580 100644 --- a/scripts/ques5.tcl +++ b/scripts/ques5.tcl @@ -2,7 +2,7 @@ # ques5.tcl # # Copyright (C) 1995 - 1997 Robey Pointer -# Copyright (C) 1999 - 2023 Eggheads Development Team +# Copyright (C) 1999 - 2024 Eggheads Development Team # # v1 -- 20aug95 # v2 -- 2oct95 [improved it] diff --git a/src/bg.c b/src/bg.c index 3c8a712de..540dc60bd 100644 --- a/src/bg.c +++ b/src/bg.c @@ -5,7 +5,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/bg.h b/src/bg.h index f5e79d368..70f98ab6e 100644 --- a/src/bg.h +++ b/src/bg.h @@ -2,7 +2,7 @@ * bg.h */ /* - * Copyright (C) 2000 - 2023 Eggheads Development Team + * Copyright (C) 2000 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/botcmd.c b/src/botcmd.c index e4fb59713..f3440f3c7 100644 --- a/src/botcmd.c +++ b/src/botcmd.c @@ -5,7 +5,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/botmsg.c b/src/botmsg.c index 2c00552d0..3a4cb37d5 100644 --- a/src/botmsg.c +++ b/src/botmsg.c @@ -7,7 +7,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/botnet.c b/src/botnet.c index 7d42e1187..88484235d 100644 --- a/src/botnet.c +++ b/src/botnet.c @@ -9,7 +9,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/chan.h b/src/chan.h index 33ba807d1..19a56e5a1 100644 --- a/src/chan.h +++ b/src/chan.h @@ -5,7 +5,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/chanprog.c b/src/chanprog.c index 6253fd474..c4b679c07 100644 --- a/src/chanprog.c +++ b/src/chanprog.c @@ -9,7 +9,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/cmds.c b/src/cmds.c index 47923b2ef..ceb7bca49 100644 --- a/src/cmds.c +++ b/src/cmds.c @@ -5,7 +5,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/cmdt.h b/src/cmdt.h index d5cea1fb4..e7f16815b 100644 --- a/src/cmdt.h +++ b/src/cmdt.h @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/compat/base64.c b/src/compat/base64.c index d3b7218d3..2e835d2e6 100644 --- a/src/compat/base64.c +++ b/src/compat/base64.c @@ -2,7 +2,7 @@ * base64.c -- provides b64_ntop() and b64_pton() if necessary */ /* - * Copyright (C) 2010 - 2023 Eggheads Development Team + * Copyright (C) 2010 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/compat/base64.h b/src/compat/base64.h index 1925f7257..1f36e9dc6 100644 --- a/src/compat/base64.h +++ b/src/compat/base64.h @@ -3,7 +3,7 @@ * prototypes for base64.c */ /* - * Copyright (C) 2010 - 2023 Eggheads Development Team + * Copyright (C) 2010 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/compat/compat.h b/src/compat/compat.h index 0346097b5..6294c6711 100644 --- a/src/compat/compat.h +++ b/src/compat/compat.h @@ -3,7 +3,7 @@ * wrap-around header for all compatibility functions. */ /* - * Copyright (C) 2000 - 2023 Eggheads Development Team + * Copyright (C) 2000 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/compat/explicit_bzero.c b/src/compat/explicit_bzero.c index 862c491a9..b5c9553bb 100644 --- a/src/compat/explicit_bzero.c +++ b/src/compat/explicit_bzero.c @@ -2,7 +2,7 @@ * explicit_bzero.c -- provides explicit_bzero() if necessary */ /* - * Copyright (C) 2010 - 2023 Eggheads Development Team + * Copyright (C) 2010 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/compat/explicit_bzero.h b/src/compat/explicit_bzero.h index a9a3f3b9c..f0b58697a 100644 --- a/src/compat/explicit_bzero.h +++ b/src/compat/explicit_bzero.h @@ -3,7 +3,7 @@ * prototypes for explicit_bzero.c */ /* - * Copyright (C) 2010 - 2023 Eggheads Development Team + * Copyright (C) 2010 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/compat/in6.h b/src/compat/in6.h index ca84cd57d..bfb43d8e3 100644 --- a/src/compat/in6.h +++ b/src/compat/in6.h @@ -2,7 +2,7 @@ * in6.h -- various IPv6 related definitions and macros */ /* - * Copyright (C) 2010 - 2023 Eggheads Development Team + * Copyright (C) 2010 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/compat/inet_aton.c b/src/compat/inet_aton.c index dc2c02d44..cb471b287 100644 --- a/src/compat/inet_aton.c +++ b/src/compat/inet_aton.c @@ -2,7 +2,7 @@ /* * inet_aton.c -- provides inet_aton() if necessary. * - * Portions Copyright (C) 2000 - 2023 Eggheads Development Team + * Portions Copyright (C) 2000 - 2024 Eggheads Development Team */ #include "main.h" diff --git a/src/compat/inet_aton.h b/src/compat/inet_aton.h index 97303653b..78acf4463 100644 --- a/src/compat/inet_aton.h +++ b/src/compat/inet_aton.h @@ -3,7 +3,7 @@ * prototypes for inet_aton.c */ /* - * Copyright (C) 2000 - 2023 Eggheads Development Team + * Copyright (C) 2000 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/compat/snprintf.c b/src/compat/snprintf.c index 71a64e42d..1204b70f1 100644 --- a/src/compat/snprintf.c +++ b/src/compat/snprintf.c @@ -2,7 +2,7 @@ * snprintf.c - a portable implementation of snprintf and vsnprintf */ /* - * Portions Copyright (C) 2000 - 2023 Eggheads Development Team + * Portions Copyright (C) 2000 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/compat/snprintf.h b/src/compat/snprintf.h index d9d7ba791..293f6647d 100644 --- a/src/compat/snprintf.h +++ b/src/compat/snprintf.h @@ -3,7 +3,7 @@ * header file for snprintf.c */ /* - * Copyright (C) 2000 - 2023 Eggheads Development Team + * Copyright (C) 2000 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/compat/strlcpy.c b/src/compat/strlcpy.c index f834d6ca5..f162bb149 100644 --- a/src/compat/strlcpy.c +++ b/src/compat/strlcpy.c @@ -2,7 +2,7 @@ * strlcpy.c -- provides strlcpy() if necessary */ /* - * Copyright (C) 2010 - 2023 Eggheads Development Team + * Copyright (C) 2010 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/compat/strlcpy.h b/src/compat/strlcpy.h index 66d8e26d1..dbdc1d169 100644 --- a/src/compat/strlcpy.h +++ b/src/compat/strlcpy.h @@ -3,7 +3,7 @@ * prototypes for strlcpy.c */ /* - * Copyright (C) 2010 - 2023 Eggheads Development Team + * Copyright (C) 2010 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/dcc.c b/src/dcc.c index 931c37d63..9030f1a02 100644 --- a/src/dcc.c +++ b/src/dcc.c @@ -6,7 +6,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/dccutil.c b/src/dccutil.c index ece4d895d..17b5054e9 100644 --- a/src/dccutil.c +++ b/src/dccutil.c @@ -8,7 +8,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/dns.c b/src/dns.c index afa407b07..ab1fdbeae 100644 --- a/src/dns.c +++ b/src/dns.c @@ -7,7 +7,7 @@ /* * Written by Fabian Knittel * - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/dns.h b/src/dns.h index 771798994..5bfe44031 100644 --- a/src/dns.h +++ b/src/dns.h @@ -5,7 +5,7 @@ /* * Written by Fabian Knittel * - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/eggdrop.h b/src/eggdrop.h index 964a63c28..a7774e294 100644 --- a/src/eggdrop.h +++ b/src/eggdrop.h @@ -6,7 +6,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/flags.c b/src/flags.c index c86627794..aea4ec9b2 100644 --- a/src/flags.c +++ b/src/flags.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/flags.h b/src/flags.h index 565709615..bfc868139 100644 --- a/src/flags.h +++ b/src/flags.h @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/lang.h b/src/lang.h index a130819b3..ff7f9b4eb 100644 --- a/src/lang.h +++ b/src/lang.h @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/language.c b/src/language.c index 7d2539159..7056311a2 100644 --- a/src/language.c +++ b/src/language.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/main.c b/src/main.c index b4324f7ac..74688099d 100644 --- a/src/main.c +++ b/src/main.c @@ -7,7 +7,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -989,13 +989,13 @@ int main(int arg_c, char **arg_v) egg_snprintf(egg_version, sizeof egg_version, "%s+%s %u", EGG_STRINGVER, EGG_PATCH, egg_numver); egg_snprintf(ver, sizeof ver, "eggdrop v%s+%s", EGG_STRINGVER, EGG_PATCH); egg_snprintf(version, sizeof version, - "Eggdrop v%s+%s (C) 1997 Robey Pointer (C) 1999-2023 Eggheads", + "Eggdrop v%s+%s (C) 1997 Robey Pointer (C) 2010-2024 Eggheads", EGG_STRINGVER, EGG_PATCH); #else egg_snprintf(egg_version, sizeof egg_version, "%s %u", EGG_STRINGVER, egg_numver); egg_snprintf(ver, sizeof ver, "eggdrop v%s", EGG_STRINGVER); egg_snprintf(version, sizeof version, - "Eggdrop v%s (C) 1997 Robey Pointer (C) 1999-2023 Eggheads", + "Eggdrop v%s (C) 1997 Robey Pointer (C) 2010-2024 Eggheads", EGG_STRINGVER); #endif diff --git a/src/main.h b/src/main.h index 3cba18fd3..d9c3cc50d 100644 --- a/src/main.h +++ b/src/main.h @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mem.c b/src/mem.c index 4c92aa59a..949e6fee6 100644 --- a/src/mem.c +++ b/src/mem.c @@ -5,7 +5,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/misc.c b/src/misc.c index 990a3824a..2418157a5 100644 --- a/src/misc.c +++ b/src/misc.c @@ -9,7 +9,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/misc_file.c b/src/misc_file.c index 84110987b..7d279c4eb 100644 --- a/src/misc_file.c +++ b/src/misc_file.c @@ -3,7 +3,7 @@ * copyfile() movefile() file_readable() */ /* - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/misc_file.h b/src/misc_file.h index 07a7ca1b5..2de9445a9 100644 --- a/src/misc_file.h +++ b/src/misc_file.h @@ -3,7 +3,7 @@ * prototypes for misc_file.c */ /* - * Copyright (C) 2000 - 2023 Eggheads Development Team + * Copyright (C) 2000 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/assoc.mod/assoc.c b/src/mod/assoc.mod/assoc.c index eb41e401f..48891a633 100644 --- a/src/mod/assoc.mod/assoc.c +++ b/src/mod/assoc.mod/assoc.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/assoc.mod/assoc.h b/src/mod/assoc.mod/assoc.h index c0cc1e782..2c105124a 100644 --- a/src/mod/assoc.mod/assoc.h +++ b/src/mod/assoc.mod/assoc.h @@ -2,7 +2,7 @@ * assoc.h -- part of assoc.mod */ /* - * Copyright (C) 2000 - 2023 Eggheads Development Team + * Copyright (C) 2000 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/blowfish.mod/bf_tab.h b/src/mod/blowfish.mod/bf_tab.h index a4e75c7aa..2e20e66c4 100644 --- a/src/mod/blowfish.mod/bf_tab.h +++ b/src/mod/blowfish.mod/bf_tab.h @@ -3,7 +3,7 @@ * Blowfish P-box and S-box tables */ /* - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/blowfish.mod/blowfish.c b/src/mod/blowfish.mod/blowfish.c index f1621d378..caf27b026 100644 --- a/src/mod/blowfish.mod/blowfish.c +++ b/src/mod/blowfish.mod/blowfish.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/blowfish.mod/blowfish.h b/src/mod/blowfish.mod/blowfish.h index dc57eb9a9..fa427fe6a 100644 --- a/src/mod/blowfish.mod/blowfish.h +++ b/src/mod/blowfish.mod/blowfish.h @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/channels.mod/channels.c b/src/mod/channels.mod/channels.c index dc202dc22..95fed762b 100644 --- a/src/mod/channels.mod/channels.c +++ b/src/mod/channels.mod/channels.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/channels.mod/channels.h b/src/mod/channels.mod/channels.h index a165e20be..38dbe0869 100644 --- a/src/mod/channels.mod/channels.h +++ b/src/mod/channels.mod/channels.h @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/channels.mod/cmdschan.c b/src/mod/channels.mod/cmdschan.c index a267dfb08..4d96630a7 100644 --- a/src/mod/channels.mod/cmdschan.c +++ b/src/mod/channels.mod/cmdschan.c @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/channels.mod/tclchan.c b/src/mod/channels.mod/tclchan.c index debfb1368..512702703 100644 --- a/src/mod/channels.mod/tclchan.c +++ b/src/mod/channels.mod/tclchan.c @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/channels.mod/udefchan.c b/src/mod/channels.mod/udefchan.c index 72f645fa3..21518314a 100644 --- a/src/mod/channels.mod/udefchan.c +++ b/src/mod/channels.mod/udefchan.c @@ -3,7 +3,7 @@ * user definable channel flags/settings */ /* - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/channels.mod/userchan.c b/src/mod/channels.mod/userchan.c index 9eb1794d8..4960b42fc 100644 --- a/src/mod/channels.mod/userchan.c +++ b/src/mod/channels.mod/userchan.c @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/compress.mod/compress.c b/src/mod/compress.mod/compress.c index 97639d2d2..e94124fed 100644 --- a/src/mod/compress.mod/compress.c +++ b/src/mod/compress.mod/compress.c @@ -7,7 +7,7 @@ * by Jean-loup Gailly and Miguel Albrecht. */ /* - * Copyright (C) 2000 - 2023 Eggheads Development Team + * Copyright (C) 2000 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/compress.mod/compress.h b/src/mod/compress.mod/compress.h index 3cabf141a..f2ba71135 100644 --- a/src/mod/compress.mod/compress.h +++ b/src/mod/compress.mod/compress.h @@ -3,7 +3,7 @@ * header file for the zlib compression module */ /* - * Copyright (C) 2000 - 2023 Eggheads Development Team + * Copyright (C) 2000 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/compress.mod/configure b/src/mod/compress.mod/configure index 3be5c671f..e95014b1d 100755 --- a/src/mod/compress.mod/configure +++ b/src/mod/compress.mod/configure @@ -13,7 +13,7 @@ # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # -# Copyright (C) 1999 - 2023 Eggheads Development Team +# Copyright (C) 1999 - 2024 Eggheads Development Team ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## @@ -1410,7 +1410,7 @@ Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. -Copyright (C) 1999 - 2023 Eggheads Development Team +Copyright (C) 1999 - 2024 Eggheads Development Team _ACEOF exit fi diff --git a/src/mod/compress.mod/configure.ac b/src/mod/compress.mod/configure.ac index 8455c296e..1dcf19572 100644 --- a/src/mod/compress.mod/configure.ac +++ b/src/mod/compress.mod/configure.ac @@ -9,7 +9,7 @@ AC_INIT([Eggdrop Compress Module],[1.9.5],[bugs@eggheads.org]) AC_CONFIG_SRCDIR(compress.c) AC_CONFIG_AUX_DIR(../../../misc) -AC_COPYRIGHT([Copyright (C) 1999 - 2023 Eggheads Development Team]) +AC_COPYRIGHT([Copyright (C) 1999 - 2024 Eggheads Development Team]) AC_REVISION([m4_esyscmd([../../../misc/getcommit])]) AC_PROG_CC([gcc cc clang]) diff --git a/src/mod/compress.mod/tclcompress.c b/src/mod/compress.mod/tclcompress.c index 9e89538dd..c6c33f862 100644 --- a/src/mod/compress.mod/tclcompress.c +++ b/src/mod/compress.mod/tclcompress.c @@ -5,7 +5,7 @@ * Written by Fabian Knittel */ /* - * Copyright (C) 2000 - 2023 Eggheads Development Team + * Copyright (C) 2000 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/console.mod/console.c b/src/mod/console.mod/console.c index 089c1e326..d54f93751 100644 --- a/src/mod/console.mod/console.c +++ b/src/mod/console.mod/console.c @@ -4,7 +4,7 @@ * by cmwagner/billyjoe/D. Senso */ /* - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/console.mod/console.h b/src/mod/console.mod/console.h index f3155f201..d846d62df 100644 --- a/src/mod/console.mod/console.h +++ b/src/mod/console.mod/console.h @@ -2,7 +2,7 @@ * console.h -- part of console.mod */ /* - * Copyright (C) 2000 - 2023 Eggheads Development Team + * Copyright (C) 2000 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/ctcp.mod/ctcp.c b/src/mod/ctcp.mod/ctcp.c index ace8c7289..ebe45c2fc 100644 --- a/src/mod/ctcp.mod/ctcp.c +++ b/src/mod/ctcp.mod/ctcp.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/ctcp.mod/ctcp.h b/src/mod/ctcp.mod/ctcp.h index 63bdb890f..ff1bc36bc 100644 --- a/src/mod/ctcp.mod/ctcp.h +++ b/src/mod/ctcp.mod/ctcp.h @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/dns.mod/configure b/src/mod/dns.mod/configure index 12ea1bab8..894006d91 100755 --- a/src/mod/dns.mod/configure +++ b/src/mod/dns.mod/configure @@ -13,7 +13,7 @@ # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # -# Copyright (C) 1999 - 2023 Eggheads Development Team +# Copyright (C) 1999 - 2024 Eggheads Development Team ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## @@ -1379,7 +1379,7 @@ Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. -Copyright (C) 1999 - 2023 Eggheads Development Team +Copyright (C) 1999 - 2024 Eggheads Development Team _ACEOF exit fi diff --git a/src/mod/dns.mod/configure.ac b/src/mod/dns.mod/configure.ac index aef8b6a5c..7ec02e33d 100644 --- a/src/mod/dns.mod/configure.ac +++ b/src/mod/dns.mod/configure.ac @@ -9,7 +9,7 @@ AC_INIT([Eggdrop DNS Module],[1.9.5],[bugs@eggheads.org]) AC_CONFIG_SRCDIR(coredns.c) AC_CONFIG_AUX_DIR(../../../misc) -AC_COPYRIGHT([Copyright (C) 1999 - 2023 Eggheads Development Team]) +AC_COPYRIGHT([Copyright (C) 1999 - 2024 Eggheads Development Team]) AC_REVISION([m4_esyscmd([../../../misc/getcommit])]) AC_PROG_CC([gcc cc clang]) diff --git a/src/mod/dns.mod/coredns.c b/src/mod/dns.mod/coredns.c index 6e01ceedc..f1f440770 100644 --- a/src/mod/dns.mod/coredns.c +++ b/src/mod/dns.mod/coredns.c @@ -8,7 +8,7 @@ * /etc/hosts support added by Michael Ortmann */ /* - * Portions Copyright (C) 1999 - 2023 Eggheads Development Team + * Portions Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/dns.mod/dns.c b/src/mod/dns.mod/dns.c index e0b8cb59b..a25ee2be8 100644 --- a/src/mod/dns.mod/dns.c +++ b/src/mod/dns.mod/dns.c @@ -5,7 +5,7 @@ * Written by Fabian Knittel */ /* - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/dns.mod/dns.h b/src/mod/dns.mod/dns.h index 508511ba8..5b8b30e2b 100644 --- a/src/mod/dns.mod/dns.h +++ b/src/mod/dns.mod/dns.h @@ -5,7 +5,7 @@ * Written by Fabian Knittel */ /* - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/filesys.mod/dbcompat.c b/src/mod/filesys.mod/dbcompat.c index b4db2c091..e50550e4c 100644 --- a/src/mod/filesys.mod/dbcompat.c +++ b/src/mod/filesys.mod/dbcompat.c @@ -6,7 +6,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/filesys.mod/dbcompat.h b/src/mod/filesys.mod/dbcompat.h index 341fe5e3a..c8af6c481 100644 --- a/src/mod/filesys.mod/dbcompat.h +++ b/src/mod/filesys.mod/dbcompat.h @@ -6,7 +6,7 @@ * Written for filedb3 by Fabian Knittel */ /* - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/filesys.mod/filedb3.c b/src/mod/filesys.mod/filedb3.c index df2b41d81..37884c5c6 100644 --- a/src/mod/filesys.mod/filedb3.c +++ b/src/mod/filesys.mod/filedb3.c @@ -6,7 +6,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/filesys.mod/filedb3.h b/src/mod/filesys.mod/filedb3.h index bdb28266e..08f15f8e0 100644 --- a/src/mod/filesys.mod/filedb3.h +++ b/src/mod/filesys.mod/filedb3.h @@ -5,7 +5,7 @@ * Written by Fabian Knittel */ /* - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/filesys.mod/filelist.c b/src/mod/filesys.mod/filelist.c index 7342f6913..591dcaa54 100644 --- a/src/mod/filesys.mod/filelist.c +++ b/src/mod/filesys.mod/filelist.c @@ -5,7 +5,7 @@ * Written by Fabian Knittel */ /* - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/filesys.mod/filelist.h b/src/mod/filesys.mod/filelist.h index 10868c43e..456e2fdd3 100644 --- a/src/mod/filesys.mod/filelist.h +++ b/src/mod/filesys.mod/filelist.h @@ -5,7 +5,7 @@ * Written by Fabian Knittel */ /* - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/filesys.mod/files.c b/src/mod/filesys.mod/files.c index 186f5b12e..f6c26edfc 100644 --- a/src/mod/filesys.mod/files.c +++ b/src/mod/filesys.mod/files.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/filesys.mod/files.h b/src/mod/filesys.mod/files.h index 36e419730..f374f2721 100644 --- a/src/mod/filesys.mod/files.h +++ b/src/mod/filesys.mod/files.h @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/filesys.mod/filesys.c b/src/mod/filesys.mod/filesys.c index f5ef33533..2db7aec92 100644 --- a/src/mod/filesys.mod/filesys.c +++ b/src/mod/filesys.mod/filesys.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/filesys.mod/filesys.h b/src/mod/filesys.mod/filesys.h index bf545286a..be566eb69 100644 --- a/src/mod/filesys.mod/filesys.h +++ b/src/mod/filesys.mod/filesys.h @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/filesys.mod/tclfiles.c b/src/mod/filesys.mod/tclfiles.c index c4d4a7ccd..1da1b3049 100644 --- a/src/mod/filesys.mod/tclfiles.c +++ b/src/mod/filesys.mod/tclfiles.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/ident.mod/ident.c b/src/mod/ident.mod/ident.c index e6ea5e7d0..6942d73ad 100644 --- a/src/mod/ident.mod/ident.c +++ b/src/mod/ident.mod/ident.c @@ -3,7 +3,7 @@ */ /* * Copyright (c) 2018 - 2019 Michael Ortmann MIT License - * Copyright (C) 2019 - 2023 Eggheads Development Team + * Copyright (C) 2019 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/irc.mod/chan.c b/src/mod/irc.mod/chan.c index 94807f6e8..46aa48190 100644 --- a/src/mod/irc.mod/chan.c +++ b/src/mod/irc.mod/chan.c @@ -8,7 +8,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/irc.mod/cmdsirc.c b/src/mod/irc.mod/cmdsirc.c index 6f878f983..2491b6731 100644 --- a/src/mod/irc.mod/cmdsirc.c +++ b/src/mod/irc.mod/cmdsirc.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/irc.mod/irc.c b/src/mod/irc.mod/irc.c index 52518ce12..8cce81776 100644 --- a/src/mod/irc.mod/irc.c +++ b/src/mod/irc.mod/irc.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/irc.mod/irc.h b/src/mod/irc.mod/irc.h index 2a030e023..2ea77db73 100644 --- a/src/mod/irc.mod/irc.h +++ b/src/mod/irc.mod/irc.h @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/irc.mod/mode.c b/src/mod/irc.mod/mode.c index 93df97da9..327844c3b 100644 --- a/src/mod/irc.mod/mode.c +++ b/src/mod/irc.mod/mode.c @@ -6,7 +6,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/irc.mod/msgcmds.c b/src/mod/irc.mod/msgcmds.c index 4f3d14756..e8baa831e 100644 --- a/src/mod/irc.mod/msgcmds.c +++ b/src/mod/irc.mod/msgcmds.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/irc.mod/tclirc.c b/src/mod/irc.mod/tclirc.c index 1e1d688e5..52826b8e5 100644 --- a/src/mod/irc.mod/tclirc.c +++ b/src/mod/irc.mod/tclirc.c @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/module.h b/src/mod/module.h index 594182a9f..951241adb 100644 --- a/src/mod/module.h +++ b/src/mod/module.h @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/modvals.h b/src/mod/modvals.h index 5eda82948..9ec2a9e18 100644 --- a/src/mod/modvals.h +++ b/src/mod/modvals.h @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/notes.mod/cmdsnote.c b/src/mod/notes.mod/cmdsnote.c index cb4dd489b..68f9ad494 100644 --- a/src/mod/notes.mod/cmdsnote.c +++ b/src/mod/notes.mod/cmdsnote.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/notes.mod/notes.c b/src/mod/notes.mod/notes.c index 17d9fff31..5c5d47aa8 100644 --- a/src/mod/notes.mod/notes.c +++ b/src/mod/notes.mod/notes.c @@ -7,7 +7,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/notes.mod/notes.h b/src/mod/notes.mod/notes.h index 02c5d123d..79c222702 100644 --- a/src/mod/notes.mod/notes.h +++ b/src/mod/notes.mod/notes.h @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/pbkdf2.mod/pbkdf2.c b/src/mod/pbkdf2.mod/pbkdf2.c index 8210c5fd6..169d92bc8 100644 --- a/src/mod/pbkdf2.mod/pbkdf2.c +++ b/src/mod/pbkdf2.mod/pbkdf2.c @@ -4,7 +4,7 @@ * * Written by thommey and Michael Ortmann * - * Copyright (C) 2017 - 2023 Eggheads Development Team + * Copyright (C) 2017 - 2024 Eggheads Development Team */ #include "src/mod/module.h" diff --git a/src/mod/python.mod/configure b/src/mod/python.mod/configure index 40bd0c84a..532be77df 100755 --- a/src/mod/python.mod/configure +++ b/src/mod/python.mod/configure @@ -12,7 +12,7 @@ # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # -# Copyright (C) 1999 - 2022 Eggheads Development Team +# Copyright (C) 1999 - 2024 Eggheads Development Team ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## @@ -1346,7 +1346,7 @@ Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. -Copyright (C) 1999 - 2022 Eggheads Development Team +Copyright (C) 1999 - 2024 Eggheads Development Team _ACEOF exit fi diff --git a/src/mod/python.mod/configure.ac b/src/mod/python.mod/configure.ac index b52a686b3..249d5ca46 100644 --- a/src/mod/python.mod/configure.ac +++ b/src/mod/python.mod/configure.ac @@ -10,7 +10,7 @@ AC_INIT([Eggdrop Python Module],[1.9.3],[bugs@eggheads.org]) AC_CONFIG_SRCDIR(python.c) AC_CONFIG_AUX_DIR(../../../misc) -AC_COPYRIGHT([Copyright (C) 1999 - 2022 Eggheads Development Team]) +AC_COPYRIGHT([Copyright (C) 1999 - 2024 Eggheads Development Team]) AC_REVISION([m4_esyscmd([../../../misc/getcommit])]) AC_PROG_FGREP diff --git a/src/mod/python.mod/pycmds.c b/src/mod/python.mod/pycmds.c index 302dd82b5..051bf7844 100644 --- a/src/mod/python.mod/pycmds.c +++ b/src/mod/python.mod/pycmds.c @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 2020 - 2021 Eggheads Development Team + * Copyright (C) 2020 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/python.mod/python.c b/src/mod/python.mod/python.c index 4cb3b70d4..814fde8ec 100644 --- a/src/mod/python.mod/python.c +++ b/src/mod/python.mod/python.c @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 2020 - 2021 Eggheads Development Team + * Copyright (C) 2020 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/python.mod/tclpython.c b/src/mod/python.mod/tclpython.c index 88a89b2d7..fed1f6386 100644 --- a/src/mod/python.mod/tclpython.c +++ b/src/mod/python.mod/tclpython.c @@ -2,7 +2,7 @@ * tclpython.c -- tcl functions for python.mod */ /* - * Copyright (C) 2000 - 2023 Eggheads Development Team + * Copyright (C) 2000 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/seen.mod/seen.c b/src/mod/seen.mod/seen.c index de3fc487d..41cea68d2 100644 --- a/src/mod/seen.mod/seen.c +++ b/src/mod/seen.mod/seen.c @@ -11,7 +11,7 @@ * 1.2a 1997-08-24 Minor fixes. [BB] */ /* - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/server.mod/cmdsserv.c b/src/mod/server.mod/cmdsserv.c index 8f6302d45..ab580d208 100644 --- a/src/mod/server.mod/cmdsserv.c +++ b/src/mod/server.mod/cmdsserv.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/server.mod/isupport.c b/src/mod/server.mod/isupport.c index d3d08ada7..61636fc26 100644 --- a/src/mod/server.mod/isupport.c +++ b/src/mod/server.mod/isupport.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/server.mod/server.c b/src/mod/server.mod/server.c index a206b6810..907656c7f 100644 --- a/src/mod/server.mod/server.c +++ b/src/mod/server.mod/server.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/server.mod/server.h b/src/mod/server.mod/server.h index f70d8db91..7764c6228 100644 --- a/src/mod/server.mod/server.h +++ b/src/mod/server.mod/server.h @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/server.mod/servmsg.c b/src/mod/server.mod/servmsg.c index 956fdaf4c..85baed7cf 100644 --- a/src/mod/server.mod/servmsg.c +++ b/src/mod/server.mod/servmsg.c @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/server.mod/tclisupport.c b/src/mod/server.mod/tclisupport.c index e59359e63..9dff94a65 100644 --- a/src/mod/server.mod/tclisupport.c +++ b/src/mod/server.mod/tclisupport.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/server.mod/tclserv.c b/src/mod/server.mod/tclserv.c index b675cb392..c8a753bd6 100644 --- a/src/mod/server.mod/tclserv.c +++ b/src/mod/server.mod/tclserv.c @@ -2,7 +2,7 @@ * tclserv.c -- part of server.mod * * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/share.mod/share.c b/src/mod/share.mod/share.c index 9e7bc519a..9fc14891f 100644 --- a/src/mod/share.mod/share.c +++ b/src/mod/share.mod/share.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/share.mod/share.h b/src/mod/share.mod/share.h index 603f76e2a..cf74f4048 100644 --- a/src/mod/share.mod/share.h +++ b/src/mod/share.mod/share.h @@ -3,7 +3,7 @@ * */ /* - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/share.mod/uf_features.c b/src/mod/share.mod/uf_features.c index c8dec6603..9acd43069 100644 --- a/src/mod/share.mod/uf_features.c +++ b/src/mod/share.mod/uf_features.c @@ -3,7 +3,7 @@ * */ /* - * Copyright (C) 2000 - 2023 Eggheads Development Team + * Copyright (C) 2000 - 2024 Eggheads Development Team * Written by Fabian Knittel * * This program is free software; you can redistribute it and/or diff --git a/src/mod/transfer.mod/tcltransfer.c b/src/mod/transfer.mod/tcltransfer.c index 0456bf56a..e5cf6cd1a 100644 --- a/src/mod/transfer.mod/tcltransfer.c +++ b/src/mod/transfer.mod/tcltransfer.c @@ -1,7 +1,7 @@ /* * tcltransfer.c -- part of transfer.mod * - * Copyright (C) 2003 - 2023 Eggheads Development Team + * Copyright (C) 2003 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/transfer.mod/transfer.c b/src/mod/transfer.mod/transfer.c index 0171b6fbc..9bfdbb1db 100644 --- a/src/mod/transfer.mod/transfer.c +++ b/src/mod/transfer.mod/transfer.c @@ -2,7 +2,7 @@ * transfer.c -- part of transfer.mod * * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/transfer.mod/transfer.h b/src/mod/transfer.mod/transfer.h index 163190355..dbbd145d2 100644 --- a/src/mod/transfer.mod/transfer.h +++ b/src/mod/transfer.mod/transfer.h @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/transfer.mod/transferfstat.c b/src/mod/transfer.mod/transferfstat.c index fec601ae3..76cf57b94 100644 --- a/src/mod/transfer.mod/transferfstat.c +++ b/src/mod/transfer.mod/transferfstat.c @@ -1,7 +1,7 @@ /* * transferfstat.c -- part of transfer.mod * - * Copyright (C) 2003 - 2023 Eggheads Development Team + * Copyright (C) 2003 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/transfer.mod/transferqueue.c b/src/mod/transfer.mod/transferqueue.c index 101bfa235..ab4de05c3 100644 --- a/src/mod/transfer.mod/transferqueue.c +++ b/src/mod/transfer.mod/transferqueue.c @@ -1,7 +1,7 @@ /* * transferqueue.c -- part of transfer.mod * - * Copyright (C) 2003 - 2023 Eggheads Development Team + * Copyright (C) 2003 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/twitch.mod/twitch.c b/src/mod/twitch.mod/twitch.c index c6a90aac2..1ef9e7e60 100644 --- a/src/mod/twitch.mod/twitch.c +++ b/src/mod/twitch.mod/twitch.c @@ -18,7 +18,7 @@ */ /* - * Copyright (C) 2020 - 2023 Eggheads Development Team + * Copyright (C) 2020 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/twitch.mod/twitch.h b/src/mod/twitch.mod/twitch.h index f063d90d2..97b39e938 100644 --- a/src/mod/twitch.mod/twitch.h +++ b/src/mod/twitch.mod/twitch.h @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/uptime.mod/uptime.c b/src/mod/uptime.mod/uptime.c index 0e222cdba..de75b2c21 100644 --- a/src/mod/uptime.mod/uptime.c +++ b/src/mod/uptime.mod/uptime.c @@ -11,7 +11,7 @@ */ /* * Copyright (C) 2001 proton - * Copyright (C) 2001 - 2023 Eggheads Development Team + * Copyright (C) 2001 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/uptime.mod/uptime.h b/src/mod/uptime.mod/uptime.h index f2cd360b1..4468c6156 100644 --- a/src/mod/uptime.mod/uptime.h +++ b/src/mod/uptime.mod/uptime.h @@ -3,7 +3,7 @@ */ /* * Copyright (C) 2001 proton - * Copyright (C) 2001 - 2023 Eggheads Development Team + * Copyright (C) 2001 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/mod/woobie.mod/woobie.c b/src/mod/woobie.mod/woobie.c index 71e49f948..d0a6e19de 100644 --- a/src/mod/woobie.mod/woobie.c +++ b/src/mod/woobie.mod/woobie.c @@ -6,7 +6,7 @@ * Comments by Fabian Knittel 29 December 1999 */ /* - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/modules.c b/src/modules.c index d85a09742..afb614221 100644 --- a/src/modules.c +++ b/src/modules.c @@ -6,7 +6,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/modules.h b/src/modules.h index 8e28878ef..839d5e87f 100644 --- a/src/modules.h +++ b/src/modules.h @@ -6,7 +6,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/net.c b/src/net.c index 85f353d7e..9ea150019 100644 --- a/src/net.c +++ b/src/net.c @@ -8,7 +8,7 @@ * * Changes after Feb 23, 1999 Copyright Eggheads Development Team * - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/proto.h b/src/proto.h index 9183dfa32..e1e0868ac 100644 --- a/src/proto.h +++ b/src/proto.h @@ -9,7 +9,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/rfc1459.c b/src/rfc1459.c index c7756db7d..631d7e62b 100644 --- a/src/rfc1459.c +++ b/src/rfc1459.c @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1990 Jarkko Oikarinen - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This code was more or less cloned from the ircd-hybrid 5.3 source. * The original code was written by Otto Harkoonen and even though it diff --git a/src/stat.h b/src/stat.h index 4b7d54fff..5802a0549 100644 --- a/src/stat.h +++ b/src/stat.h @@ -3,7 +3,7 @@ * file attributes */ /* - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/tandem.h b/src/tandem.h index 97cf1df73..2d41f12d6 100644 --- a/src/tandem.h +++ b/src/tandem.h @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/tcl.c b/src/tcl.c index 6557645d5..db0d50d71 100644 --- a/src/tcl.c +++ b/src/tcl.c @@ -6,7 +6,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/tcldcc.c b/src/tcldcc.c index 6a704de87..601714ba2 100644 --- a/src/tcldcc.c +++ b/src/tcldcc.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/tclegg.h b/src/tclegg.h index caea8283e..d5e868d41 100644 --- a/src/tclegg.h +++ b/src/tclegg.h @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/tclhash.c b/src/tclhash.c index 7f905e816..86bd17633 100644 --- a/src/tclhash.c +++ b/src/tclhash.c @@ -9,7 +9,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/tclhash.h b/src/tclhash.h index c7ebb50b3..5fb0b5f44 100644 --- a/src/tclhash.h +++ b/src/tclhash.h @@ -3,7 +3,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/tclmisc.c b/src/tclmisc.c index cfa6d5420..ad9406809 100644 --- a/src/tclmisc.c +++ b/src/tclmisc.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/tcluser.c b/src/tcluser.c index 8cd52dc95..d8e51a48b 100644 --- a/src/tcluser.c +++ b/src/tcluser.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/tls.c b/src/tls.c index d9500b799..c3297f3ab 100644 --- a/src/tls.c +++ b/src/tls.c @@ -7,7 +7,7 @@ /* * Written by Rumen Stoyanov * - * Copyright (C) 2010 - 2023 Eggheads Development Team + * Copyright (C) 2010 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/userent.c b/src/userent.c index ce92dd590..3fde1f20a 100644 --- a/src/userent.c +++ b/src/userent.c @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/userrec.c b/src/userrec.c index 4fd8eaef3..487fd79a8 100644 --- a/src/userrec.c +++ b/src/userrec.c @@ -6,7 +6,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/users.c b/src/users.c index 2e8f5ff5c..703e344b1 100644 --- a/src/users.c +++ b/src/users.c @@ -12,7 +12,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/users.h b/src/users.h index a97d123cf..49f20853b 100644 --- a/src/users.h +++ b/src/users.h @@ -4,7 +4,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/version.h b/src/version.h index 0bf3573cd..0aec1d28b 100644 --- a/src/version.h +++ b/src/version.h @@ -9,7 +9,7 @@ */ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2023 Eggheads Development Team + * Copyright (C) 1999 - 2024 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/text/CONTENTS b/text/CONTENTS index f012103d5..2e55fba95 100644 --- a/text/CONTENTS +++ b/text/CONTENTS @@ -15,4 +15,4 @@ Last revised: December 02, 2003 _____________________________________________________________________ - Copyright (C) 2003 - 2023 Eggheads Development Team + Copyright (C) 2003 - 2024 Eggheads Development Team diff --git a/text/banner b/text/banner index cce1f61bd..fe5959b99 100644 --- a/text/banner +++ b/text/banner @@ -5,4 +5,4 @@ |___/ |___/ |_| Copyright (C) 1997 Robey Pointer - Copyright (C) 1999 - 2023 Eggheads Development Team + Copyright (C) 1999 - 2024 Eggheads Development Team From d11609c9fa2fedfb7355ae551878379971e56792 Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 14 Jan 2024 16:10:46 -0500 Subject: [PATCH 06/91] update patchlevel --- src/version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/version.h b/src/version.h index 0aec1d28b..63e9d3316 100644 --- a/src/version.h +++ b/src/version.h @@ -27,5 +27,5 @@ */ #define EGG_STRINGVER "1.9.5" -#define EGG_NUMVER 1090504 -#define EGG_PATCH "needtls" +#define EGG_NUMVER 1090505 +#define EGG_PATCH "python" From 40f93b8a313f465dc6914f4baaf5e1921ba1e01a Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 14 Jan 2024 22:20:19 +0100 Subject: [PATCH 07/91] remove quick-logs option Found by: michaelortmann Patch by: michaelortmann Fixes: #1449 Line-buffer instead --- doc/sphinx_source/tutorials/setup.rst | 2 +- doc/sphinx_source/using/core.rst | 7 ----- eggdrop.conf | 6 ---- help/core.help | 1 - help/set/cmds1.help | 7 ----- src/main.c | 16 ++-------- src/misc.c | 45 +++------------------------ src/proto.h | 1 - src/tcl.c | 2 -- 9 files changed, 9 insertions(+), 78 deletions(-) diff --git a/doc/sphinx_source/tutorials/setup.rst b/doc/sphinx_source/tutorials/setup.rst index 364287924..a50d4de9c 100644 --- a/doc/sphinx_source/tutorials/setup.rst +++ b/doc/sphinx_source/tutorials/setup.rst @@ -158,7 +158,7 @@ Now that your Eggdrop is on IRC and you've introduced yourself as owner, it's ti No show? ~~~~~~~~ -If your bot didn't appear on IRC, you should log in to the shell and view the bot's logfile (the default in the config file is "logs/eggdrop.log"). Note that logfile entries are not written to disk immediately unless quick-logs is enabled, so you may have to wait a few minutes before the logfile appears, or contains messages that indicate why your bot isn't showing up. +If your bot didn't appear on IRC, you should log in to the shell and view the bot's logfile (the default in the config file is "logs/eggdrop.log"). Additionally, you can kill the bot via the command line (``kill pid``, the pid is shown to you when you started the bot or can be viewed by running ``ps x``) and then restart it with the -mnt flag, which will launch you directly into the partyline, to assist with troubleshooting. Note that if you use the -t flag, the bot will not persist and you will kill it once you quit the partyline. diff --git a/doc/sphinx_source/using/core.rst b/doc/sphinx_source/using/core.rst index bf560b351..f192c3cac 100644 --- a/doc/sphinx_source/using/core.rst +++ b/doc/sphinx_source/using/core.rst @@ -107,13 +107,6 @@ the logfile of the next day. reaches the size of 550 kilobytes. Note that this only works if you have keep-all-logs set to 0 (OFF). - set quick-logs 0 - This could be good if you have had a problem with logfiles filling - your quota/hard disk or if you log +p and publish it to the web, and - you need more up-to-date info. Note that this setting might increase - the CPU usage of your bot (on the other hand it will decrease your RAM - usage). - set raw-log 0 This setting allows you the logging of raw incoming server traffic via console/log flag 'r', raw outgoing server traffic via console/log mode diff --git a/eggdrop.conf b/eggdrop.conf index fedb6d919..86ac99e64 100755 --- a/eggdrop.conf +++ b/eggdrop.conf @@ -157,12 +157,6 @@ set max-logs 20 # have keep-all-logs 0 (OFF). set max-logsize 0 -# This could be good if you have had problem with the logfile filling -# your quota/hard disk or if you log +p and publish it to the web and -# need more up-to-date info. Note that this setting might increase the -# CPU usage of your bot (on the other hand it will decrease your mem usage). -set quick-logs 0 - # This setting allows you the logging of raw incoming server traffic via # console/log flag 'r', raw outgoing server traffic via console/log mode 'v', # raw incoming botnet traffic via console/log mode 't', raw outgoing botnet diff --git a/help/core.help b/help/core.help index 2f957cc9f..2c8d9d7bc 100644 --- a/help/core.help +++ b/help/core.help @@ -183,7 +183,6 @@ default-flags log-time timestamp-format max-logsize -quick-logs logfile-suffix quiet-save remote-boots diff --git a/help/set/cmds1.help b/help/set/cmds1.help index f6fead459..5d25fbbda 100644 --- a/help/set/cmds1.help +++ b/help/set/cmds1.help @@ -199,13 +199,6 @@ This value is in kilobytes, so '550' would mean cycle logs when it reaches the size of 550 kilobytes. Note that this only works if you have keep-all-logs 0 (OFF). -%{help=set quick-logs}%{+n} -### %bset quick-logs%b <0/1> - This could be good if you have had problem with the logfile - filling your quota/hard disk or if you log +p and publish it to - the web and need more up-to-date info. Note that this setting - might increase the CPU usage of your bot (on the other hand it will - decrease your mem usage). %{help=set logfile-suffix}%{+n} ### %bset logfile-suffix%b If keep-all-logs is 1, this setting will define the suffix of the diff --git a/src/main.c b/src/main.c index 74688099d..f698606a0 100644 --- a/src/main.c +++ b/src/main.c @@ -83,8 +83,7 @@ #endif extern char origbotname[], botnetnick[]; -extern int dcc_total, conmask, cache_hit, cache_miss, max_logs, quick_logs, - quiet_save; +extern int dcc_total, conmask, cache_hit, cache_miss, max_logs, quiet_save; extern struct dcc_t *dcc; extern struct userrec *userlist; extern struct chanset_t *chanset; @@ -179,7 +178,6 @@ void fatal(const char *s, int recoverable) int i; putlog(LOG_MISC, "*", "* %s", s); - flushlogs(); for (i = 0; i < dcc_total; i++) if (dcc[i].sock >= 0) killsock(dcc[i].sock); @@ -589,7 +587,6 @@ static void core_secondly() if (nowmins > lastmin) { memcpy(&nowtm, localtime(&now), sizeof(struct tm)); i = 0; - /* Once a minute */ ++lastmin; call_hook(HOOK_MINUTELY); @@ -610,10 +607,7 @@ static void core_secondly() if (((int) (nowtm.tm_min / 5) * 5) == (nowtm.tm_min)) { /* 5 min */ call_hook(HOOK_5MINUTELY); check_botnet_pings(); - if (!quick_logs) { - flushlogs(); - check_logsize(); - } + if (!miltime) { /* At midnight */ char s[25]; int j; @@ -661,10 +655,7 @@ static void core_minutely() { check_tcl_time_and_cron(&nowtm); do_check_timers(&timer); - if (quick_logs != 0) { - flushlogs(); - check_logsize(); - } + check_logsize(); } static void core_hourly() @@ -901,7 +892,6 @@ static void mainloop(int toplevel) putlog(LOG_MISC, "*", "%s", MOD_STAGNANT); } - flushlogs(); kill_tcl(); init_tcl(argc, argv); init_language(0); diff --git a/src/misc.c b/src/misc.c index 2418157a5..ee7ffc3d6 100644 --- a/src/misc.c +++ b/src/misc.c @@ -43,8 +43,7 @@ extern struct chanset_t *chanset; extern char helpdir[], version[], origbotname[], botname[], admin[], network[], motdfile[], ver[], botnetnick[], bannerfile[], textdir[]; -extern int backgrd, con_chan, term_z, use_stderr, dcc_total, keep_all_logs, - quick_logs; +extern int backgrd, con_chan, term_z, use_stderr, dcc_total, keep_all_logs; extern time_t now; extern Tcl_Interp *interp; @@ -579,9 +578,10 @@ void putlog (int type, char *chname, const char *format, ...) /* Open this logfile */ if (keep_all_logs) { snprintf(path, sizeof path, "%s%s", logs[i].filename, ct); - logs[i].f = fopen(path, "a"); - } else - logs[i].f = fopen(logs[i].filename, "a"); + if ((logs[i].f = fopen(path, "a"))) + setvbuf(logs[i].f, NULL, _IOLBF, 0); /* line buffered */ + } else if ((logs[i].f = fopen(logs[i].filename, "a"))) + setvbuf(logs[i].f, NULL, _IOLBF, 0); /* line buffered */ } if (logs[i].f != NULL) { /* Check if this is the same as the last line added to @@ -653,7 +653,6 @@ void logsuffix_change(char *s) } for (i = 0; i < max_logs; i++) { if (logs[i].f) { - fflush(logs[i].f); fclose(logs[i].f); logs[i].f = NULL; } @@ -678,7 +677,6 @@ void check_logsize() if (logs[i].f) { /* write to the log before closing it huh.. */ putlog(LOG_MISC, "*", MISC_CLOGS, logs[i].filename, ss.st_size); - fflush(logs[i].f); fclose(logs[i].f); logs[i].f = NULL; } @@ -693,39 +691,6 @@ void check_logsize() } } -/* Flush the logfiles to disk - */ -void flushlogs() -{ - int i; - - /* Logs may not be initialised yet. */ - if (!logs) - return; - - /* Now also checks to see if there's a repeat message and - * displays the 'last message repeated...' stuff too - */ - for (i = 0; i < max_logs; i++) { - if (logs[i].f != NULL) { - if ((logs[i].repeats > 0) && quick_logs) { - /* Repeat.. if quicklogs used then display 'last message - * repeated x times' and reset repeats. - */ - char stamp[33]; - - strftime(stamp, sizeof(stamp) - 1, log_ts, localtime(&now)); - fprintf(logs[i].f, "%s ", stamp); - fprintf(logs[i].f, MISC_LOGREPEAT, logs[i].repeats); - /* Reset repeats */ - logs[i].repeats = 0; - } - fflush(logs[i].f); - } - } -} - - /* * String substitution functions */ diff --git a/src/proto.h b/src/proto.h index e1e0868ac..463a087d6 100644 --- a/src/proto.h +++ b/src/proto.h @@ -228,7 +228,6 @@ void debug_mem_to_dcc(int); int egg_strcatn(char *, const char *, size_t); int my_strcpy(char *, char *); void putlog(int type, char *chname, const char *format, ...) ATTRIBUTE_FORMAT(printf,3,4); -void flushlogs(void); void check_logsize(void); void splitc(char *, char *, char); void splitcn(char *, char *, char, size_t); diff --git a/src/tcl.c b/src/tcl.c index db0d50d71..fe9b7eedf 100644 --- a/src/tcl.c +++ b/src/tcl.c @@ -87,7 +87,6 @@ int allow_dk_cmds = 1; int must_be_owner = 1; int quiet_reject = 1; int max_socks = 100; -int quick_logs = 0; int par_telnet_flood = 1; int quiet_save = 0; int strtot = 0; @@ -480,7 +479,6 @@ static tcl_ints def_tcl_ints[] = { {"max-socks", &max_socks, 0}, {"max-logs", &max_logs, 0}, {"max-logsize", &max_logsize, 0}, - {"quick-logs", &quick_logs, 0}, {"raw-log", &raw_log, 1}, {"protect-telnet", &protect_telnet, 0}, {"dcc-sanitycheck", &dcc_sanitycheck, 0}, From 9fc0ae9e6e9fe971ead30c85f79d7a9251e39bc2 Mon Sep 17 00:00:00 2001 From: Geo Date: Mon, 15 Jan 2024 09:34:55 -0500 Subject: [PATCH 08/91] change py init from Isolated to Python --- src/mod/python.mod/python.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mod/python.mod/python.c b/src/mod/python.mod/python.c index 814fde8ec..60b3a052f 100644 --- a/src/mod/python.mod/python.c +++ b/src/mod/python.mod/python.c @@ -63,7 +63,7 @@ static void init_python() { putlog(LOG_MISC, "*", "Python: Python version %d is lower than 3.8, not loading Python module", PY_VERSION_HEX); return; } - PyConfig_InitIsolatedConfig(&config); + PyConfig_InitPythonConfig(&config); config.install_signal_handlers = 0; config.parse_argv = 0; status = PyConfig_SetBytesString(&config, &config.program_name, argv0); @@ -160,4 +160,4 @@ char *python_start(Function *global_funcs) add_builtins(H_dcc, mydcc); add_tcl_commands(my_tcl_cmds); return NULL; -} \ No newline at end of file +} From 8751ce59532a349591df6282fe0d225673c1f9fa Mon Sep 17 00:00:00 2001 From: Geo Date: Wed, 17 Jan 2024 19:56:15 -0500 Subject: [PATCH 09/91] Switch autoscripts to GitHub --- scripts/autoscripts.tcl | 47 +++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/scripts/autoscripts.tcl b/scripts/autoscripts.tcl index 2c0e8306d..ef6e4bc9d 100644 --- a/scripts/autoscripts.tcl +++ b/scripts/autoscripts.tcl @@ -78,7 +78,7 @@ proc send_http {url type} { catch {set req [http::geturl $url -binary 1 -channel $fs]} error close $fs } else { - catch {set req [http::geturl $url -timeout 10000]} error + catch {set req [http::geturl $url -headers [dict create "User-Agent" "Mozilla/5.0"] -timeout 10000]} error } set status [http::status $req] if {$status != "ok"} { @@ -334,14 +334,18 @@ proc egg_set {idx script setting value} { # For future eggheads- 100 is the maximum WP supports without doing pagination proc egg_remote {idx} { global cmdtxt + global eggdir putdcc $idx "* Retrieving script list, please wait..." - set jsondata [send_http "https://www.eggheads.org/wp-json/wp/v2/media?mime_type=application\/x-gzip&orderby=slug&per_page=100&order=asc" 0] + send_http "https://raw.githubusercontent.com/eggheads/autoscripts/master/manifest" 1 + set fp [open $eggdir/manifest r] + set jsondata [read $fp] + close $fp set datadict [json::json2dict $jsondata] putdcc $idx "Scripts available for download:" putdcc $idx "-------------------------------" foreach scriptentry $datadict { - regsub -all {<[^>]+>} [dict get $scriptentry caption rendered] "" scriptcap - putdcc $idx "* [format "%-16s %s" [dict get $scriptentry slug] [string trim $scriptcap "\n"]]" +# regsub -all {<[^>]+>} [dict get $scriptentry caption rendered] "" scriptcap + putdcc $idx "* [format "%-16s %s" [dict get $scriptentry name] [dict get $scriptentry description]]" } putdcc $idx "\n" putdcc $idx "* Type 'fetch ' to download a script" @@ -369,15 +373,14 @@ proc egg_update {idx tgtscript} { set found 0 readjsonfile - set jsondata [send_http "https://www.eggheads.org/wp-json/wp/v2/media?mime_type=application\/x-gzip&orderby=slug&per_page=100&order=asc" 0] - set jsondata [send_http "https://www.eggheads.org/wp-content/uploads/2023/05/asman.json" 0] + set jsondata [send_http "https://raw.githubusercontent.com/eggheads/autoscripts/master/manifest" 0] set datadict [json::json2dict $jsondata] foreach localscript $jsondict { foreach remotescript $datadict { if {[string equal -nocase [dict get $remotescript name] [dict get $localscript name]]} { - if { ([dict get $remotescript minor] > [dict get $localscript version_minor] && - [dict get $remotescript major] >= [dict get $localscript version_major]) || - ([dict get $remotescript major] > [dict get $localscript version_major]) } { + if { ([dict get $remotescript version_minor] > [dict get $localscript version_minor] && + [dict get $remotescript version_major] >= [dict get $localscript version_major]) || + ([dict get $remotescript version_major] > [dict get $localscript version_major]) } { ## If we're looking for a specific script, suppress other found messages if {[string equal -nocase $tgtscript ""]} { putdcc $idx "* [dict get $localscript name] has an update available." @@ -452,24 +455,28 @@ proc egg_fetch {idx script} { putidx $idx "$cmdtxt" return } -### CHECK IF IT IS ON SITE FIRST putdcc $idx "* Downloading, please wait..." - set jsondata [send_http "https://www.eggheads.org/wp-json/wp/v2/media?mime_type=application\/x-gzip" 0] + set jsondata [send_http "https://api.github.com/repos/eggheads/autoscripts/contents/packages" 0] set datadict [json::json2dict $jsondata] foreach scriptentry $datadict { - if {[string match $script [dict get $scriptentry slug]]} { - send_http [dict get $scriptentry source_url] 1 - file mkdir $eggdir/[dict get $scriptentry slug] - exec tar -zxf $eggdir/[dict get $scriptentry slug].tgz -C $eggdir/[dict get $scriptentry slug] - file delete $eggdir/[dict get $scriptentry slug].tgz - putdcc $idx "* [dict get $scriptentry slug] downloaded." - putdcc $idx "* Use 'config [dict get $scriptentry slug]' to configure and then 'load [dict get $scriptentry slug]' to load." - putidx $idx "$cmdtxt" - readjsonfile + if {[string match ${script}.tgz [dict get $scriptentry name]]} { + send_http "[dict get $scriptentry download_url]" 1 + putdcc $idx "* [dict get $scriptentry name] downloaded." + exec tar -zxf $eggdir/[dict get $scriptentry name] -C $eggdir + if {[file exists $eggdir/$script]} { + file delete $eggdir/[dict get $scriptentry name] + putdcc $idx "* [dict get $scriptentry name] extracted." + putdcc $idx "* Use 'config $script' to configure and then 'load $script' to load." + putidx $idx "$cmdtxt" + readjsonfile + } else { + putdcc $idx "* ERROR: [dict get $scriptentry name] not found. Cannot continue." + } } } } + proc egg_clean {idx script} { global cmdtxt global eggdir From c0f9afe8470dbff9cf303b717ad2fe6294e9a567 Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 20 Jan 2024 10:01:08 -0500 Subject: [PATCH 10/91] Add internal bind values to docs Fixes: #1446 --- doc/html/tutorials/module.html | 80 ++++++++++++- doc/sphinx_source/modules/internals.rst | 147 +++++++++++++++++------- doc/sphinx_source/tutorials/module.rst | 6 +- 3 files changed, 185 insertions(+), 48 deletions(-) diff --git a/doc/html/tutorials/module.html b/doc/html/tutorials/module.html index 097ce753d..89463216a 100644 --- a/doc/html/tutorials/module.html +++ b/doc/html/tutorials/module.html @@ -234,10 +234,9 @@

    Adding a Tcl Commandreturn TCL_ERROR; } } - -A few notes on this example. BADARGS is a macro that checks the input provided to the Tcl command. The first argument BADARGS accepts is the minimum number of parameters the Tcl command must accept (including the command itself). The second argument is the maximum number of parameters that BADARGS will accept. The third argument is the help text that will be displayed if these boundaries are exceeded. For example, BADARGS(2, 4, " name ?date? ?place?") requires at least one argument to be passed, and a maximum of three arguments. Eggdrop code style is to enclose optional arguments between qusetion marks in the help text.

    +

    A few notes on this example. BADARGS is a macro that checks the input provided to the Tcl command. The first argument BADARGS accepts is the minimum number of parameters the Tcl command must accept (including the command itself). The second argument is the maximum number of parameters that BADARGS will accept. The third argument is the help text that will be displayed if these boundaries are exceeded. For example, BADARGS(2, 4, “ name ?date? ?place?”) requires at least one argument to be passed, and a maximum of three arguments. Eggdrop code style is to enclose optional arguments between qusetion marks in the help text.

    Similar to adding a partyline command, you also have to create a function table for a new Tcl command:

    static tcl_cmds mytcl[] = {
       {"echome",           tcl_echome},
    @@ -302,7 +301,7 @@ 

    Defining bind arguments

    Calling the Bind

    -

    To call the bind, Eggdrop coding style it to name that function “check_tcl_bindname”. So here, whenever we reach a point in code that should trigger the bind, we’ll call check_tcl_woobie() and pass the arguments we defined- in this case, two arguments that woobie_2char was created to handle. Here is some sample code:

    +

    To call the bind, Eggdrop coding style is to name that function “check_tcl_bindname”. So here, whenever we reach a point in code that should trigger the bind, we’ll call check_tcl_woobie() and pass the arguments we defined- in this case, two arguments that woobie_2char was created to handle. Here is some sample code:

    check_tcl_woobie(chan, nick);
     
     
    @@ -321,7 +320,80 @@ 

    Calling the Bind +

    Bind Configuration Settings

    +

    The last argument to check_tcl_bind sets additional configurations for the bind, these are the defined values:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Value

    Description

    MATCH_PARTIAL

    Check the triggering value against the beginning of the bind mask, ie DIR triggers a mask for DIRECTORY (case insensitive)

    MATCH_EXACT

    Check the triggering value exactly against the bind mask value (case insensitive)

    MATCH_CASE

    Check the triggering value exactly against the bind mask value (case sensitive)

    MATCH_MASK

    Check if the bind mask is contained within the triggering value, as a wildcarded value

    MATCH_MODE

    Check if the triggering value is contained within the bind mask, as a wildcarded value

    MATCH_CRON

    Check the triggering value against a bind mask formatted as a cron entry, ie “30 7 6 7 * “ triggers a mask for “30 7 * * * “

    BIND_USE_ATTR

    Check the flags of the user match the flags required to trigger the bind

    BIND_STACKABLE

    Allow multiple binds to call the same Tcl proc

    BIND_WANTRET

    With stacked binds, if the called Tcl proc called returns a ‘1’, halt processing any further binds triggered by the action

    BIND_STACKRET

    Used with BIND_WANTRET; allow stacked binds to continue despite receiving a ‘1’

    BIND_ALTER_ARGS

    Replaces arguments (which ones?) with the result returned from the called Tcl proc

    +

    The value returned by the bind is often matched against a desired value to return a ‘1’ (often used with BIND_WANTRET and BIND_STACKRET) to the calling function.

    +

    +
    +

    Bind Return Values

    + + + + + + + + + + + + + + + + + + + + + + + + +

    Value

    Description

    BIND_NOMATCH

    The bind was not triggered due to not meeting the criteria set for the bind

    BIND_AMBIGUOUS

    The bind was ambiguous, similar to this explanation

    BIND_MATCHED

    The bind criteria was met, but the Tcl proc it tried to call could not be found

    BIND_EXECUTED

    The bind criteria was met and the Tcl proc was called

    BIND_EXEC_LOG

    The bind criteria was met, the Tcl proc was called, and Eggdrop logged the bind being called

    BIND_QUIT

    The bind was triggered in conjunction with the target leaving the partyline or filesys area (?)

    +
    diff --git a/doc/sphinx_source/modules/internals.rst b/doc/sphinx_source/modules/internals.rst index 5e026a391..2d7d7c16a 100644 --- a/doc/sphinx_source/modules/internals.rst +++ b/doc/sphinx_source/modules/internals.rst @@ -9,10 +9,19 @@ It already exists and is suitable to illustrate the details of bind handling in Note: All code snippets are altered for brevity and simplicity, see original source code for the full and current versions. -Bind Table Creation -------------------- +General Workflow To Create a New Bind +------------------------------------- + +To create a new type of bind, there are generally three steps. First, you must add the new bind type to the `Bind Table`_. Once you have registered the bind type with the bind table, you must create a `C Function`_ that will be called to perform the functionality you wish to occur when the bind is triggered. Finally, once the C code supporting the new bind has been finished, the new `Tcl Binding`_ is ready to be used in a Tcl script. + +.. _Bind Table: -The bind table is added by calling, either at module initialization or startup:: +Adding a New Bind Type to the Bind Table +---------------------------------------- + +The bind is added to the bind table is by calling, either at module initialization or startup + +.. code-block:: C /* Global symbol, available to other C files with * extern p_tcl_bind_list H_dcc; @@ -31,40 +40,28 @@ What the :code:`C handler` does is explained later, because a lot happens before :code:`H_dcc` can be exported from core and imported into modules as any other variable or function. That should be explained in a separate document. +.. _HT_STACKABLE: + Stackable Binds: HT_STACKABLE ------------------------------ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -:code:`HT_STACKABLE` means that multiple binds can exist for the same mask. -:: +:code:`HT_STACKABLE` means that multiple binds can exist for the same mask. An example of what happens when NOT using this flag shown in the code block below. + +.. code-block:: Tcl bind dcc - test proc1; # not stackable bind dcc - test proc2; # overwrites the first one, only proc2 will be called -It does not automatically call multiple binds that match, see later in the `Triggering any Bind`_ section for details. - -Tcl Binding ------------ - -After the bind table is created with :code:`add_bind_table`, Tcl procs can already be registered to this bind by calling:: - - bind dcc -|- test myproc - proc myproc {args} { - putlog "myproc was called, argument list: '[join $args ',']'" - return 0 - } +To enable this feature, you must set the second argument to ``add_bind_table()`` with ``HT_STACKABLE``. Using ``HT_STACKABLE`` does not automatically call all the binds that match, see the bind flags listed in `Triggering any Bind`_ section for details on the partner flags ``BIND_STACKABLE`` and ``BIND_WANTRET`` used in ``check_tcl_bind()``. -Of course it is not clear so far: +.. _C Function: -* If flags :code:`-|-` matter for this bind at all and what they are checked against -* If channel flags have a meaning or global/bot only -* What :code:`test` is matched against to see if the bind should trigger -* Which arguments :code:`myproc` receives, the example just accepts all arguments +Adding Bind Functionality +------------------------- -Triggering the Bind -------------------- +A C function must created that will be called when the bind is triggered. Importantly, the function is designed to accept specific arguments passed by Tcl. -To trigger the bind and call it with the desired arguments, a function is created. -:: +.. code-block:: C int check_tcl_dcc(const char *cmd, int idx, const char *args) { struct flag_record fr = { FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0 }; @@ -92,10 +89,34 @@ This shows which arguments the callbacks in Tcl get: The call to :code:`check_tcl_dcc` can be found in the DCC parsing in `src/dcc.c`. +Using the Bind in Tcl +--------------------- + +After the bind table is created with :code:`add_bind_table`, Tcl procs can already be registered to this bind by calling + +.. code-block:: Tcl + + bind dcc -|- test myproc + proc myproc {args} { + putlog "myproc was called, argument list: '[join $args ',']'" + return 0 + } + +Of course it is not clear so far: + +* If flags :code:`-|-` matter for this bind at all and what they are checked against +* If channel flags have a meaning or global/bot only +* What :code:`test` is matched against to see if the bind should trigger +* Which arguments :code:`myproc` receives, the example just accepts all arguments + +.. _triggering_any_bind: + Triggering any Bind ------------------- -`check_tcl_bind` is used by all binds and does the following:: +`check_tcl_bind` is used by all binds and does the following + +.. code-block:: C /* Generic function to call one/all matching binds * @param[in] tcl_bind_list_t *tl Bind table (e.g. H_dcc) @@ -125,15 +146,54 @@ Triggering any Bind return x; } -The supplied flags to :code:`check_tcl_bind` in `check_tcl_dcc` are what defines how matching is performed. - -In the case of a DCC bind we had: - -* Matchtype :code:`MATCH_PARTIAL`: Prefix-Matching if the command can be uniquely identified (e.g. dcc .help calls .help) -* Additional flag :code:`BIND_USE_ATTR`: Flags are checked -* Additional flag :code:`BIND_HAS_BUILTINS`: Something with flag matching, unsure - -For details on the available match types (wildcard matching, exact matching, etc.) see :code:`src/tclegg.h`. Additional flags are also described there as well as the return codes of :code:`check_tcl_bind` (e.g. :code:`BIND_NOMATCH`). +Bind Flags +^^^^^^^^^^ + +The last argument to :code:`check_tcl_bind` in `check_tcl_dcc` sets additional configurations for the bind. These are the allowed defined values: + ++-------------------+-------------------------------------------------------------------------------------------------------------------------------+ +| **Value** | **Description** | ++-------------------+-------------------------------------------------------------------------------------------------------------------------------+ +| MATCH_PARTIAL | Check the triggering value against the beginning of the bind mask, ie DIR triggers a mask for DIRECTORY (case insensitive) | ++-------------------+-------------------------------------------------------------------------------------------------------------------------------+ +| MATCH_EXACT | Check the triggering value exactly against the bind mask value (case insensitive) | ++-------------------+-------------------------------------------------------------------------------------------------------------------------------+ +| MATCH_CASE | Check the triggering value exactly against the bind mask value (case sensitive) | ++-------------------+-------------------------------------------------------------------------------------------------------------------------------+ +| MATCH_MASK | Check if the bind mask is matched against the triggering value as a wildcarded value | ++-------------------+-------------------------------------------------------------------------------------------------------------------------------+ +| MATCH_MODE | Check if the triggering value matches the bind mask as a wildcarded value | ++-------------------+-------------------------------------------------------------------------------------------------------------------------------+ +| MATCH_CRON | Check the triggering value against a bind mask formatted as a cron entry, ie "30 7 6 7 5 " triggers a mask for "30 7 * * * " | ++-------------------+-------------------------------------------------------------------------------------------------------------------------------+ +| BIND_USE_ATTR | Check the flags of the user match the flags required to trigger the bind | ++-------------------+-------------------------------------------------------------------------------------------------------------------------------+ +| BIND_STACKABLE | Allow one mask to be re-used to call multiple Tcl proc. Must be used with HT_STACKABLE_ | ++-------------------+-------------------------------------------------------------------------------------------------------------------------------+ +| BIND_WANTRET | With stacked binds, if the called Tcl proc called returns a '1', halt processing any further binds triggered by the action | ++-------------------+-------------------------------------------------------------------------------------------------------------------------------+ +| BIND_STACKRET | Used with BIND_WANTRET; allow stacked binds to continue despite receiving a '1' | ++-------------------+-------------------------------------------------------------------------------------------------------------------------------+ + +Bind Return Values +^^^^^^^^^^^^^^^^^^ +The value returned by the bind is often matched against a desired value to return a '1' (often used with BIND_WANTRET and BIND_STACKRET) to the calling function. + ++----------------+--------------------------------------------------------------------------------------------------------------+ +| **Value** | **Description** | ++----------------+--------------------------------------------------------------------------------------------------------------+ +| BIND_NOMATCH | The bind was not triggered due to not meeting the criteria set for the bind | ++----------------+--------------------------------------------------------------------------------------------------------------+ +| BIND_AMBIGUOUS | The triggering action matched multiple non-stackable binds | ++----------------+--------------------------------------------------------------------------------------------------------------+ +| BIND_MATCHED | The bind criteria was met, but the Tcl proc it tried to call could not be found | ++----------------+--------------------------------------------------------------------------------------------------------------+ +| BIND_EXECUTED | The bind criteria was met and the Tcl proc was called | ++----------------+--------------------------------------------------------------------------------------------------------------+ +| BIND_EXEC_LOG | The bind criteria was met, the Tcl proc was called, and Eggdrop logged the bind being called | ++----------------+--------------------------------------------------------------------------------------------------------------+ +| BIND_QUIT | The bind was triggered in conjunction with the target leaving the partyline or filesys area (?) | ++----------------+--------------------------------------------------------------------------------------------------------------+ Note: For a bind type to be stackable it needs to be registered with :code:`HT_STACKABLE` AND :code:`check_tcl_bind` must be called with :code:`BIND_STACKABLE`. @@ -141,7 +201,8 @@ C Binding --------- To create a C function that is called by the bind, Eggdrop provides the :code:`add_builtins` function. -:: + +.. code-block:: C /* Add a list of C function callbacks to a bind * @param[in] tcl_bind_list_t * the bind type (e.g. H_dcc) @@ -178,7 +239,9 @@ Now we can actually look at the C function handler for dcc as an example and wha C Handler --------- -The example handler for DCC looks as follows:: +The example handler for DCC looks as follows + +.. code-block:: C /* Typical Tcl_Command arguments, just like e.g. tcl_putdcc is a Tcl/C command for [putdcc] */ static int builtin_dcc (ClientData cd, Tcl_Interp *irp, int argc, char *argv[]) { @@ -209,13 +272,15 @@ The example handler for DCC looks as follows:: This is finally the part where we see the arguments a C function gets for a DCC bind as opposed to a Tcl proc. -code:`F(dcc[idx].user, idx, argv[3])`: +:code:`F(dcc[idx].user, idx, argv[3])`: * User information as struct userrec * * IDX as int * The 3rd string argument from the Tcl call to \*dcc:cmd_boot, which was :code:`$_dcc3` which was :code:`args` to :code:`check_tcl_dcc` which was everything after the dcc command -So this is how we register C callbacks for binds with the correct arguments:: +So this is how we register C callbacks for binds with the correct arguments + +.. code-block:: C /* We know the return value is ignored because the return value of F * in builtin_dcc is ignored, so it can be void, but for other binds diff --git a/doc/sphinx_source/tutorials/module.rst b/doc/sphinx_source/tutorials/module.rst index 532b70d16..42c30b76d 100644 --- a/doc/sphinx_source/tutorials/module.rst +++ b/doc/sphinx_source/tutorials/module.rst @@ -138,7 +138,7 @@ Eggdrop uses the Tcl C API library to interact with the Tcl interpreter. Learnin } } - A few notes on this example. BADARGS is a macro that checks the input provided to the Tcl command. The first argument BADARGS accepts is the minimum number of parameters the Tcl command must accept (including the command itself). The second argument is the maximum number of parameters that BADARGS will accept. The third argument is the help text that will be displayed if these boundaries are exceeded. For example, BADARGS(2, 4, " name ?date? ?place?") requires at least one argument to be passed, and a maximum of three arguments. Eggdrop code style is to enclose optional arguments between qusetion marks in the help text. +A few notes on this example. BADARGS is a macro that checks the input provided to the Tcl command. The first argument BADARGS accepts is the minimum number of parameters the Tcl command must accept (including the command itself). The second argument is the maximum number of parameters that BADARGS will accept. The third argument is the help text that will be displayed if these boundaries are exceeded. For example, BADARGS(2, 4, " name ?date? ?place?") requires at least one argument to be passed, and a maximum of three arguments. Eggdrop code style is to enclose optional arguments between qusetion marks in the help text. Similar to adding a partyline command, you also have to create a function table for a new Tcl command:: @@ -208,7 +208,7 @@ Like before, BADARGS still checks that the number of arguments passed is correct Calling the Bind ^^^^^^^^^^^^^^^^ -To call the bind, Eggdrop coding style it to name that function "check_tcl_bindname". So here, whenever we reach a point in code that should trigger the bind, we'll call check_tcl_woobie() and pass the arguments we defined- in this case, two arguments that woobie_2char was created to handle. Here is some sample code:: +To call the bind, Eggdrop coding style is to name that function "check_tcl_bindname". So here, whenever we reach a point in code that should trigger the bind, we'll call check_tcl_woobie() and pass the arguments we defined- in this case, two arguments that woobie_2char was created to handle. Here is some sample code:: check_tcl_woobie(chan, nick); @@ -227,7 +227,7 @@ To call the bind, Eggdrop coding style it to name that function "check_tcl_bindn return (x == BIND_EXEC_LOG); } -Now that we have encountered a condition that triggers the bind, we need to check it against the binds the user has loaded in scripts and see if it matches those conditions. This is done with check_tcl_bind(), called with the bind type, the userhost of the user, the flag record of the user if it exists, the bind arguments, and bind options. +Now that we have encountered a condition that triggers the bind type (in code by calling ``check_tcl_woobie()`` ), we need to check it against the binds the user has loaded in scripts and see if it matches those conditions. This is done with ``check_tcl_bind()``, called with the bind type, the userhost of the user, the flag record of the user if it exists, the bind arguments, and bind options. We can configure how we want to check the triggering action against the bind, and we can further use the return value from ``check_tcl_bind()`` to take additional action by Eggdrop. You can read more about the specific calues used in ``check_tcl_bind`` in :ref:`triggering_any_bind` Exporting the Bind ------------------ From 26aa8cb68cd23f9c3d0b23cb7459d781f163edd1 Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 20 Jan 2024 10:03:31 -0500 Subject: [PATCH 11/91] Properly report channel bans in .bans Found by: @wilkowy Patch by: Geo Fixes: #1297 Prior to this patch, .bans was inconsistent. With a console of '*', Eggdrop only reported channels bans of the first channel in the channel record, and .bans #channel didn't report the bans on the requested channel. --- src/mod/channels.mod/userchan.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/mod/channels.mod/userchan.c b/src/mod/channels.mod/userchan.c index 4960b42fc..12d5c3202 100644 --- a/src/mod/channels.mod/userchan.c +++ b/src/mod/channels.mod/userchan.c @@ -752,7 +752,7 @@ static void display_invite(int idx, int number, maskrec *invite, static void tell_bans(int idx, int show_inact, char *match) { int k = 1; - char *chname; + char *chname = NULL; struct chanset_t *chan = NULL; maskrec *u; @@ -788,7 +788,16 @@ static void tell_bans(int idx, int show_inact, char *match) } else display_ban(idx, k++, u, chan, show_inact); } - if (chan) { + for (chan = chanset; chan; chan = chan->next) { + /* Show a channel's bans if: + * - the console is set to * + * - the console is set to this channel + * - we're matching a mask + * - this channel was specifically requested in .bans + */ + if ( (!strcmp(dcc[idx].u.chat->con_chan, "*")) || + (!strcmp(dcc[idx].u.chat->con_chan, chan->dname) && (!chname || match[0])) || + (chname && !strcasecmp(chname, chan->dname)) ) { if (show_inact) dprintf(idx, "%s %s: (! = %s, * = %s)\n", BANS_BYCHANNEL, chan->dname, MODES_NOTACTIVE2, MODES_NOTBYBOT); @@ -801,6 +810,9 @@ static void tell_bans(int idx, int show_inact, char *match) (wild_match(match, u->desc)) || (wild_match(match, u->user))) display_ban(idx, k, u, chan, 1); k++; + } else if (chname && !strcasecmp(chname, chan->dname)) { + display_ban(idx, k, u, chan, 0); + k++; } else display_ban(idx, k++, u, chan, show_inact); } @@ -831,6 +843,7 @@ static void tell_bans(int idx, int show_inact, char *match) } } } + } } if (k == 1) dprintf(idx, "(There are no bans, permanent or otherwise.)\n"); From 05377ac00e8c8e2e1f0e41d3b0e723999d9f8884 Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 20 Jan 2024 10:08:01 -0500 Subject: [PATCH 12/91] Add userhost-in-names capability (#1374) Patch by: Geo Fixes #1188 This updates channel records with hostmasks received from the userhost-in-names capability, and nothing more. It also adds the isupport_get_prefixchars() function to get valid prefixchars from the 005 message, which we can use in other areas of the codebase now. --- doc/sphinx_source/using/ircv3.rst | 10 ++++- src/mod/irc.mod/chan.c | 62 ++++++++++++++++++++++++++++++- src/mod/server.mod/isupport.c | 12 ++++++ src/mod/server.mod/server.c | 3 +- src/mod/server.mod/server.h | 5 +++ 5 files changed, 89 insertions(+), 3 deletions(-) diff --git a/doc/sphinx_source/using/ircv3.rst b/doc/sphinx_source/using/ircv3.rst index c2fff5299..8ed8e5afa 100644 --- a/doc/sphinx_source/using/ircv3.rst +++ b/doc/sphinx_source/using/ircv3.rst @@ -41,6 +41,14 @@ The following capabilities are supported by Eggdrop: * Monitor * server-time * setname + * userhost-in-names * +typing -Copyright (C) 2010 - 2024 Eggheads Development Team +------ +Errata +------ + +* Enabling echo-message will cause Eggdrop to trigger PUB/PUBM binds on its own messages (because now it can actually see them). This may cause unintentional functionality with some scripts +* Enabling userhost-in-names will cause Eggdrop's internal mechanisms to mark a channel's userlist as synch'd upon receiving the NAMES list after a join, instead of waiting for a full WHO listing. This is done because the assumption is that userhost-in-names was enabled as a response to WHO queries being disabled on a server, which prevents Eggdrop from populating its userlist. To avoid unintended functionality, it is suggested that this capability only be enabled on servers that disable WHO queries. + +Copyright (C) 2010 - 2024 Eggheads Development Team \ No newline at end of file diff --git a/src/mod/irc.mod/chan.c b/src/mod/irc.mod/chan.c index 46aa48190..dda2fe2d8 100644 --- a/src/mod/irc.mod/chan.c +++ b/src/mod/irc.mod/chan.c @@ -1214,7 +1214,7 @@ static int got354(char *from, char *msg) } return 0; } - + /* React to IRCv3 CHGHOST command. CHGHOST changes the hostname and/or * ident of the user. Format: * :geo!awesome@eggdrop.com CHGHOST tehgeo foo.io @@ -1251,6 +1251,65 @@ static int gotchghost(char *from, char *msg){ return 0; } +/* got 353: NAMES + * 353 :[+/@]nick [+/@]nick .... + * + * if userhost-in-names is enabled, nick is nick@userhost.com + * this function is added solely to handle userhost-in-names stuff, and will + * update hostnames for nicks received + */ +static int got353(char *from, char *msg) +{ + char prefixchars[64]; + char *nameptr, *chname, *uhost, *nick, *p, *host; + struct chanset_t *chan; + int i; + + if (find_capability("userhost-in-names")) { + strlcpy(prefixchars, isupport_get_prefixchars(), sizeof prefixchars); + newsplit(&msg); + newsplit(&msg); /* Get rid of =, @, or * symbol */ + chname = newsplit(&msg); + nameptr = newsplit(&msg); + fixcolon(nameptr); + while ((uhost = newsplit(&nameptr))) { + if (!strcmp(uhost, "")) { + break; + } + fixcolon(uhost); + nick = splitnick(&uhost); + /* Strip @, +, etc chars prefixed to nicks in NAMES */ + for (i = 0; prefixchars[i]; i++) { + if(nick[0] == prefixchars[i]) { + nick=nick+1; + } + } + if ((nick[0] == '+') || (nick[0] == '%')) { + nick=nick+1; + } + p = strchr(uhost, '@'); + if (p) { + *p = 0; + host = p+1; + } + chan = findchan(chname); /* See if I'm on channel */ + if (chan && host) { + /* Pretend we got a WHO and pass the info we got from NAMES */ + got352or4(chan, uhost, host, nick, "", NULL); + } + } + /* The assumption here is the user enabled userhost-in-names because WHO + * is disabled. We remove the pending flag here because we'll never get a + * a WHO to do it + */ + if (chan) { + chan->status |= CHAN_ACTIVE; + chan->status &= ~CHAN_PEND; + } + } + return 0; +} + /* React to 396 numeric (HOSTHIDDEN), sent when user mode +x (hostmasking) was * successfully set. Format: * :barjavel.freenode.net 396 BeerBot unaffiliated/geo/bot/beerbot :is now your hidden host (set by services.) @@ -2820,6 +2879,7 @@ static int gotrawt(char *from, char *msg, Tcl_Obj *tags) { static cmd_t irc_raw[] = { {"324", "", (IntFunc) got324, "irc:324"}, {"352", "", (IntFunc) got352, "irc:352"}, + {"353", "", (IntFunc) got353, "irc:353"}, {"354", "", (IntFunc) got354, "irc:354"}, {"315", "", (IntFunc) got315, "irc:315"}, {"366", "", (IntFunc) gottwitch366, "irc:t366"}, diff --git a/src/mod/server.mod/isupport.c b/src/mod/server.mod/isupport.c index 61636fc26..0ad50614f 100644 --- a/src/mod/server.mod/isupport.c +++ b/src/mod/server.mod/isupport.c @@ -509,3 +509,15 @@ void isupport_report(int idx, const char *prefix, int details) } } +static const char *isupport_get_prefixchars(void) +{ + const char *str = isupport_get("PREFIX", strlen("PREFIX")); + + if (str) { + str = strchr(str, ')'); + if (str && str[1]) { + return str + 1; + } + } + return "+%@&~"; +} diff --git a/src/mod/server.mod/server.c b/src/mod/server.mod/server.c index 907656c7f..80d0ad5f1 100644 --- a/src/mod/server.mod/server.c +++ b/src/mod/server.mod/server.c @@ -2385,7 +2385,8 @@ static Function server_table[] = { (Function) & find_capability, (Function) encode_msgtags, /* 52 - 55 */ - (Function) & H_monitor + (Function) & H_monitor, + (Function) isupport_get_prefixchars }; char *server_start(Function *global_funcs) diff --git a/src/mod/server.mod/server.h b/src/mod/server.mod/server.h index 7764c6228..ac81a5422 100644 --- a/src/mod/server.mod/server.h +++ b/src/mod/server.mod/server.h @@ -98,6 +98,11 @@ /* #define check_tcl_account NULL */ #define find_capability ((struct capability *(*)(char *))(server_funcs[50])) #define encode_msgtags ((char *(*)(Tcl_Obj *))(server_funcs[51])) +/* 52 - 55 */ +#define H_monitor (*(p_tcl_bind_list *)(server_funcs[52])) +#define isupport_get_prefixchars ((const char *(*)(void))server_funcs[53]) + + #endif /* MAKING_SERVER */ struct server_list { From 2fe13ed88d555083c73de9582d125107325ef5c3 Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 20 Jan 2024 10:16:51 -0500 Subject: [PATCH 13/91] Additional internals doc tweaks --- doc/sphinx_source/modules/internals.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/sphinx_source/modules/internals.rst b/doc/sphinx_source/modules/internals.rst index 2d7d7c16a..256f96fdc 100644 --- a/doc/sphinx_source/modules/internals.rst +++ b/doc/sphinx_source/modules/internals.rst @@ -162,7 +162,8 @@ The last argument to :code:`check_tcl_bind` in `check_tcl_dcc` sets additional c +-------------------+-------------------------------------------------------------------------------------------------------------------------------+ | MATCH_MASK | Check if the bind mask is matched against the triggering value as a wildcarded value | +-------------------+-------------------------------------------------------------------------------------------------------------------------------+ -| MATCH_MODE | Check if the triggering value matches the bind mask as a wildcarded value | +| MATCH_MODE | Special mode for `bind mode` similar to `MATCH_MASK`. This uses case-insensitive matching before the first space in the mask, | +| | (the channel), and then case sensitive after the first space (the modes) | +-------------------+-------------------------------------------------------------------------------------------------------------------------------+ | MATCH_CRON | Check the triggering value against a bind mask formatted as a cron entry, ie "30 7 6 7 5 " triggers a mask for "30 7 * * * " | +-------------------+-------------------------------------------------------------------------------------------------------------------------------+ @@ -192,7 +193,8 @@ The value returned by the bind is often matched against a desired value to retur +----------------+--------------------------------------------------------------------------------------------------------------+ | BIND_EXEC_LOG | The bind criteria was met, the Tcl proc was called, and Eggdrop logged the bind being called | +----------------+--------------------------------------------------------------------------------------------------------------+ -| BIND_QUIT | The bind was triggered in conjunction with the target leaving the partyline or filesys area (?) | +| BIND_QUIT | Sentinel value to signal that quit was triggered by the target leaving the partyline or filesys area. | +| | (Virtual bind to CMD_LEAVE) | +----------------+--------------------------------------------------------------------------------------------------------------+ Note: For a bind type to be stackable it needs to be registered with :code:`HT_STACKABLE` AND :code:`check_tcl_bind` must be called with :code:`BIND_STACKABLE`. From bd2d900a4fbb885bb802b506d15a7b857d9d2e09 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 21 Jan 2024 16:24:13 +0100 Subject: [PATCH 14/91] Fix SSL_get_server_tmp_key not available Found by: Jobe --- src/tls.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tls.c b/src/tls.c index c3297f3ab..180af6b37 100644 --- a/src/tls.c +++ b/src/tls.c @@ -740,7 +740,6 @@ static void ssl_info(const SSL *ssl, int where, int ret) #endif SSL_CIPHER *cipher; int secret, processed, i; - EVP_PKEY *key; if (!(data = (ssl_appdata *) SSL_get_app_data(ssl))) return; @@ -783,11 +782,14 @@ static void ssl_info(const SSL *ssl, int where, int ret) buf[i - 1] = 0; debug1("TLS: cipher details: %s", buf); +#if OPENSSL_VERSION_NUMBER >= 0x10002000L /* 1.0.2 */ + EVP_PKEY *key; if (SSL_get_server_tmp_key((SSL *) ssl, &key)) { putlog(LOG_DEBUG, "*", "TLS: diffie–hellman ephemeral key used: %s, bits %d", OBJ_nid2sn(EVP_PKEY_id(key)), EVP_PKEY_bits(key)); EVP_PKEY_free(key); } +#endif } else if (where & SSL_CB_ALERT) { if (strcmp(SSL_alert_type_string(ret), "W") || strcmp(SSL_alert_desc_string(ret), "CN")) { From 9e0f3f1f3cf46905b334291657707dd59acd09e3 Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 28 Jan 2024 09:49:17 -0500 Subject: [PATCH 15/91] any user can use .-account --- src/cmds.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmds.c b/src/cmds.c index ceb7bca49..708f5fde2 100644 --- a/src/cmds.c +++ b/src/cmds.c @@ -3317,7 +3317,7 @@ cmd_t C_dcc[] = { {"+host", "t|m", (IntFunc) cmd_pls_host, NULL}, {"+ignore", "m", (IntFunc) cmd_pls_ignore, NULL}, {"+user", "m", (IntFunc) cmd_pls_user, NULL}, - {"-account", "t|m", (IntFunc) cmd_mns_account,NULL}, + {"-account", "", (IntFunc) cmd_mns_account,NULL}, {"-bot", "t", (IntFunc) cmd_mns_user, NULL}, {"-host", "", (IntFunc) cmd_mns_host, NULL}, {"-ignore", "m", (IntFunc) cmd_mns_ignore, NULL}, From eaf2435ecd8091611f7537e3927f051a84281706 Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 28 Jan 2024 09:50:15 -0500 Subject: [PATCH 16/91] Update core.help with current commands --- help/core.help | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/help/core.help b/help/core.help index 2c8d9d7bc..33b05c3db 100644 --- a/help/core.help +++ b/help/core.help @@ -7,15 +7,17 @@ DCC commands for %B, %V: %bwhoami echo strip su%b %btrace fixcodes bottree vbottree%b %bbotinfo relay -host fprint%b - %bchfinger%b + %bchfinger back note -account%b %{o|o} For ops: %baddlog console match whois%b + %bresetconsole%b %{+t} For botnet masters: %b+bot botattr chhandle chpass%b %b+host -bot link chaddr%b %bboot unlink banner dccstat%b + %b+account%b %{+m|m} For channel masters: %bchattr save backup reload%b From afbd429fb8ad593b7f453d6730de3a4668a8b6da Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 28 Jan 2024 09:53:31 -0500 Subject: [PATCH 17/91] update gendocs to create mod.python file --- misc/generatedocs | 1 + 1 file changed, 1 insertion(+) diff --git a/misc/generatedocs b/misc/generatedocs index b00e847ac..563118d3e 100755 --- a/misc/generatedocs +++ b/misc/generatedocs @@ -120,6 +120,7 @@ mv tmpdocs/ident.txt $BASEDIR/../doc/modules/mod.ident mv tmpdocs/irc.txt $BASEDIR/../doc/modules/mod.irc mv tmpdocs/notes.txt $BASEDIR/../doc/modules/mod.notes mv tmpdocs/pbkdf2.txt $BASEDIR/../doc/modules/mod.pbkdf2 +mv tmpdocs/python.txt $BASEDIR/../doc/modules/mod.python mv tmpdocs/seen.txt $BASEDIR/../doc/modules/mod.seen mv tmpdocs/server.txt $BASEDIR/../doc/modules/mod.server mv tmpdocs/share.txt $BASEDIR/../doc/modules/mod.share From b314c1e817fd8275dc6caff11f1c05a1e5bbc498 Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 28 Jan 2024 10:07:57 -0500 Subject: [PATCH 18/91] initialize vars --- src/mod/irc.mod/chan.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mod/irc.mod/chan.c b/src/mod/irc.mod/chan.c index dda2fe2d8..0a80927e9 100644 --- a/src/mod/irc.mod/chan.c +++ b/src/mod/irc.mod/chan.c @@ -1261,8 +1261,8 @@ static int gotchghost(char *from, char *msg){ static int got353(char *from, char *msg) { char prefixchars[64]; - char *nameptr, *chname, *uhost, *nick, *p, *host; - struct chanset_t *chan; + char *nameptr, *chname, *uhost, *nick, *p, *host = NULL; + struct chanset_t *chan = NULL; int i; if (find_capability("userhost-in-names")) { From d604d82c3c2572790df91672ce0935811ec97e65 Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 28 Jan 2024 10:17:10 -0500 Subject: [PATCH 19/91] doc typos --- doc/sphinx_source/modules/mod/python.rst | 4 ++-- doc/sphinx_source/tutorials/module.rst | 7 +------ 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/doc/sphinx_source/modules/mod/python.rst b/doc/sphinx_source/modules/mod/python.rst index 97500493c..55307eb6f 100644 --- a/doc/sphinx_source/modules/mod/python.rst +++ b/doc/sphinx_source/modules/mod/python.rst @@ -49,7 +49,7 @@ Tcl Commands pysource ^^^^^^^^^^^^^^^^^^^^^^^ -The ``pysource`` command is analgous to the Tcl ``source`` command, except that it loads a Python script into Eggdrop instead of a Tcl script. +The ``pysource`` command is analogous to the Tcl ``source`` command, except that it loads a Python script into Eggdrop instead of a Tcl script. ----------------------- Eggdrop Python Commands @@ -124,7 +124,7 @@ You can view examples of Python scripts in the exampleScripts folder included wi This script shows how to use an existing third-party module to extend a Python script, in this case retrieving information from imdb.com. listtls.py - This script demonstrates how to use parse-tcl_list() and parse_tcl_dict() to convert a list of dicts provided by Tcl into something that is usuable by Python. + This script demonstrates how to use parse-tcl_list() and parse_tcl_dict() to convert a list of dicts provided by Tcl into something that is usable by Python. urltitle.py This script shows how to use an existing third-party module to extend a Python script, in this case using an http parser to collect title information from a provided web page. diff --git a/doc/sphinx_source/tutorials/module.rst b/doc/sphinx_source/tutorials/module.rst index 42c30b76d..efd0e6160 100644 --- a/doc/sphinx_source/tutorials/module.rst +++ b/doc/sphinx_source/tutorials/module.rst @@ -227,9 +227,4 @@ To call the bind, Eggdrop coding style is to name that function "check_tcl_bindn return (x == BIND_EXEC_LOG); } -Now that we have encountered a condition that triggers the bind type (in code by calling ``check_tcl_woobie()`` ), we need to check it against the binds the user has loaded in scripts and see if it matches those conditions. This is done with ``check_tcl_bind()``, called with the bind type, the userhost of the user, the flag record of the user if it exists, the bind arguments, and bind options. We can configure how we want to check the triggering action against the bind, and we can further use the return value from ``check_tcl_bind()`` to take additional action by Eggdrop. You can read more about the specific calues used in ``check_tcl_bind`` in :ref:`triggering_any_bind` - -Exporting the Bind ------------------- - -Do we need to do this? +Now that we have encountered a condition that triggers the bind type (in code by calling ``check_tcl_woobie()`` ), we need to check it against the binds the user has loaded in scripts and see if it matches those conditions. This is done with ``check_tcl_bind()``, called with the bind type, the userhost of the user, the flag record of the user if it exists, the bind arguments, and bind options. We can configure how we want to check the triggering action against the bind, and we can further use the return value from ``check_tcl_bind()`` to take additional action by Eggdrop. You can read more about the specific values used in ``check_tcl_bind`` in :ref:`triggering_any_bind` From c2b1f07ee33a55b8066a9b79f9cd2eaae14322e7 Mon Sep 17 00:00:00 2001 From: Thomas Sader Date: Sat, 3 Feb 2024 12:25:29 +0100 Subject: [PATCH 20/91] allow python.mod static builds --- src/mod/python.mod/Makefile.in | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mod/python.mod/Makefile.in b/src/mod/python.mod/Makefile.in index 6b6c4ad5d..e5b251ee9 100644 --- a/src/mod/python.mod/Makefile.in +++ b/src/mod/python.mod/Makefile.in @@ -11,6 +11,7 @@ doofus: cd ../../../ && $(MAKE) static: ../python.o + @echo "$(PYTHON_LDFLAGS)" >> ../mod.xlibs modules: ../../../python.$(MOD_EXT) From 39ade54fc4931c76cecb025a50e651783ddd5494 Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 3 Feb 2024 14:21:26 -0500 Subject: [PATCH 21/91] fix sasl-mechanism name --- doc/sphinx_source/tutorials/firststeps.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/sphinx_source/tutorials/firststeps.rst b/doc/sphinx_source/tutorials/firststeps.rst index 71330a631..0d67d92fc 100644 --- a/doc/sphinx_source/tutorials/firststeps.rst +++ b/doc/sphinx_source/tutorials/firststeps.rst @@ -150,7 +150,7 @@ Simple Authentication and Security Layer (SASL) is becoming a prevalant method o * **PLAIN**: To use this method, set sasl-mechanism to 0. This method passes the username and password (set in the sasl-username and sasl-password config file settings) to the IRC server in plaintext. If you only connect to the IRC server using a connection protected by SSL/TLS this is a generally safe method of authentication; however you probably want to avoid this method if you connect to a server on a non-protected port as the exchange itself is not encrypted. -* **ECDSA-NIST256P-CHALLENGE**: To use this method, set sasl-method to 1. This method uses a public/private keypair to authenticate, so no username/password is required. Not all servers support this method. If your server does support this, you you must generate a certificate pair using:: +* **ECDSA-NIST256P-CHALLENGE**: To use this method, set sasl-mechanism to 1. This method uses a public/private keypair to authenticate, so no username/password is required. Not all servers support this method. If your server does support this, you you must generate a certificate pair using:: openssl ecparam -genkey -name prime256v1 -out eggdrop-ecdsa.pem @@ -162,7 +162,7 @@ Simple Authentication and Security Layer (SASL) is becoming a prevalant method o /msg NickServ set pubkey -* **EXTERNAL**: To use this method, set sasl-method to 2. This method allows you to use other TLS certificates to connect to the IRC server, if the IRC server supports it. An EXTERNAL authentication method usually requires you to connect to the IRC server using SSL/TLS. There are many ways to generate certificates; one such way is generating your own certificate using:: +* **EXTERNAL**: To use this method, set sasl-mechanism to 2. This method allows you to use other TLS certificates to connect to the IRC server, if the IRC server supports it. An EXTERNAL authentication method usually requires you to connect to the IRC server using SSL/TLS. There are many ways to generate certificates; one such way is generating your own certificate using:: openssl req -new -x509 -nodes -keyout eggdrop.key -out eggdrop.crt From 8c72bd35d2ec6fd7316b0be32c7ec706a4edfbda Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 3 Feb 2024 14:21:39 -0500 Subject: [PATCH 22/91] Don't load autoscripts if packages missing --- scripts/autoscripts.tcl | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/scripts/autoscripts.tcl b/scripts/autoscripts.tcl index ef6e4bc9d..43e49236e 100644 --- a/scripts/autoscripts.tcl +++ b/scripts/autoscripts.tcl @@ -1,8 +1,12 @@ -package require json -package require json::write -package require http -package require tls - +set pkgs {"json" "json::write" "http" "tls"} +foreach pkg $pkgs { + if {[catch {package require $pkg}]} { + putlog "$pkg is not installed. Autoscripts cannot load" + putlog "$pkg can be installed via your host's command line package manager" + return 1 + } +} + set asidx 0 set eggdir "autoscripts" set cmdtxt "\nEnter your command (done to exit):" From 6792f143335d8bf72411429aba241ac4bdaa2da2 Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 3 Feb 2024 14:22:26 -0500 Subject: [PATCH 23/91] update UPGRADING --- doc/sphinx_source/install/upgrading.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/sphinx_source/install/upgrading.rst b/doc/sphinx_source/install/upgrading.rst index 0c1c53810..aa610ff48 100644 --- a/doc/sphinx_source/install/upgrading.rst +++ b/doc/sphinx_source/install/upgrading.rst @@ -14,15 +14,15 @@ How to Upgrade Then, simply follow the same steps you followed to install Eggdrop previously. Download the source, unzip/untar it, and run the './configure', 'make config', 'make', and 'make install' commands. Restart your Eggdrop and you will be up and running with the latest version of Eggdrop. -Must-read changes for Eggdrop v1.9 ----------------------------------- +Must-read changes for Eggdrop v1.10 +----------------------------------- These are NOT all the changes or new settings; rather just the "killer" changes that may directly affect Eggdrop's previous performance without modification. Config file changes ^^^^^^^^^^^^^^^^^^^ -To migrate from a 1.8 to a 1.9 Eggdrop, some changes are suggested to be made in your configuration file: +To migrate from a 1.8 to a |majversion| Eggdrop, some changes are suggested to be made in your configuration file: * Eggdrop has deprecated the blowfish module for password hashing in favor of the PBKDF2 module. This is a BIG change which, if done carelessly, has the potential to render stored passwords useless. Please see doc/PBKDF2 for information on how to properly migrate your userfiles and passwords to the new module. @@ -44,17 +44,17 @@ To migrate from a 1.8 to a 1.9 Eggdrop, some changes are suggested to be made in Modules ^^^^^^^ -While most 3rd party modules that worked on Eggdrop v1.6/v1.8 should still work with Eggdrop v1.9, many of them contain a version check that only allows them to run on 1.6.x bots. We have removed the version check from some of the more popular modules provide them at ``_ +While most 3rd party modules that worked on older Eggdrop versions should still work with Eggdrop |majversion|, many of them contain a version check that only allows them to run on 1.6.x bots. We have removed the version check from some of the more popular modules provide them at ``_ Scripts ^^^^^^^ -All 3rd party Tcl scripts that work with Eggdrop v1.6/v1.8 should fully work with Eggdrop v1.9. +All 3rd party Tcl scripts that worked with Eggdrop versions as early as v1.6 should still fully work with Eggdrop |majversion|. Botnet ^^^^^^ -In Eggdrop v1.8, Eggdrop bots would automatically attempt to upgrade any botnet link to an SSL/TLS connection. In v1.9, the user is required to explicitly request an SSL/TLS connection by prefixing the port with a '+'. If you wish your botnet to take advantage of encryption, use the .chaddr command to update your ports to start with a '+'. +In Eggdrop v1.8, Eggdrop bots would automatically attempt to upgrade any botnet link to an SSL/TLS connection. Since v1.9, the user is required to explicitly request an SSL/TLS connection by prefixing the port with a '+'. If you wish your botnet to take advantage of encryption, use the .chaddr command to update your ports to start with a '+'. Tcl Commands ^^^^^^^^^^^^ From 03da52a02a2611b2e49a72ed6f3d3d8b90952d98 Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 4 Feb 2024 23:24:22 -0500 Subject: [PATCH 24/91] fix autoscript filt bind --- scripts/autoscripts.tcl | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scripts/autoscripts.tcl b/scripts/autoscripts.tcl index 43e49236e..caf45fce0 100644 --- a/scripts/autoscripts.tcl +++ b/scripts/autoscripts.tcl @@ -9,7 +9,7 @@ foreach pkg $pkgs { set asidx 0 set eggdir "autoscripts" -set cmdtxt "\nEnter your command (done to exit):" +set cmdtxt "\nEnter your command ('done' to return to partyline):" set jsondict [dict create] set asmajor 1 set asminor 0 @@ -128,7 +128,7 @@ proc parse_egg {idx text} { # Check if this is the user who triggered the console if {$idx != $asidx} { - return + return $text } set args [split $text] set args [lassign $args subcmd arg1 arg2] @@ -173,6 +173,9 @@ proc egg_list {idx} { readjsonfile putdcc $idx "\nThe following scripts are available for configuration:" putdcc $idx "-------------------------------------------------------" + if {[dict size $jsondict] == 0} { + putdcc $idx "* No scripts have been downloaded" + } foreach script $jsondict { set loaded [expr {[dict get $script config loaded] == 1 ? "\[X\]" : "\[ \]"}] putdcc $idx "* $loaded [dict get $script name] (v[dict get $script version_major].[dict get $script version_minor]) - [dict get $script description]" From f29429541c121fe86a24ffed54be89168b9c07a8 Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 11 Feb 2024 10:03:08 -0500 Subject: [PATCH 25/91] add check for isidentified Found by: @crazycatdevs Patch by: Geo Fixes: #1533 --- src/mod/server.mod/tclserv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mod/server.mod/tclserv.c b/src/mod/server.mod/tclserv.c index c8a753bd6..f54796b77 100644 --- a/src/mod/server.mod/tclserv.c +++ b/src/mod/server.mod/tclserv.c @@ -210,7 +210,7 @@ static int tcl_isidentified STDVAR { } while (chan && (thechan == NULL || thechan == chan)) { if ((m = ismember(chan, argv[1]))) { - if (strcmp(m->account, "")) { + if (strcmp(m->account, "*") && strcmp(m->account, "")) { Tcl_AppendResult(irp, "1", NULL); return TCL_OK; } From 488f07b31415e2e24053d4b584fb84eeec51c920 Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 17 Feb 2024 21:04:05 -0500 Subject: [PATCH 26/91] Update FILT bind doc --- doc/sphinx_source/using/tcl-commands.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sphinx_source/using/tcl-commands.rst b/doc/sphinx_source/using/tcl-commands.rst index f18290c2b..7953dccbd 100644 --- a/doc/sphinx_source/using/tcl-commands.rst +++ b/doc/sphinx_source/using/tcl-commands.rst @@ -3282,7 +3282,7 @@ The following is a list of bind types and how they work. Below each bind type is procname - Description: party line and file system users have their text sent through filt before being processed. If the proc returns a blank string, the text is considered parsed. Otherwise, the bot will use the text returned from the proc and continue parsing that + Description: party line and file system users have their text sent through filt before being processed. 'mask' is a text mask that can contain wildcards and is used for matching text sent on the partyline. If the proc returns a blank string, the partyline texr is continued to be parsed as-is. Otherwise, the bot will instead use the text returned from the proc for continued parsing. Module: core From 36be9cd13fc77279521bd88864ab9e2ecfce7255 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 18 Feb 2024 14:54:30 +0100 Subject: [PATCH 27/91] Fix b64_ntop -lresolv detection for -fsanitize=address Found by: michaelortmann Patch by: michaelortmann --- aclocal.m4 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/aclocal.m4 b/aclocal.m4 index d0924793f..ff8a0c158 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -316,7 +316,7 @@ AC_DEFUN([EGG_FUNC_B64_NTOP], # Check for b64_ntop. If we have b64_ntop, we assume b64_pton as well. AC_MSG_CHECKING(for b64_ntop) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[ + AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include #include #include @@ -328,7 +328,7 @@ AC_DEFUN([EGG_FUNC_B64_NTOP], AC_MSG_CHECKING(for b64_ntop with -lresolv) OLD_LIBS="$LIBS" LIBS="$LIBS -lresolv" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[ + AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include #include #include @@ -341,7 +341,7 @@ AC_DEFUN([EGG_FUNC_B64_NTOP], AC_MSG_CHECKING(for b64_ntop with -lnetwork) OLD_LIBS="$LIBS" LIBS="-lnetwork" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[ + AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include #include #include From 5aabf4de2484b1a65bad989f89cb8bd7c9383b45 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 18 Feb 2024 14:55:28 +0100 Subject: [PATCH 28/91] Fix format string Found by: michaelortmann Patch by: michaelortmann --- src/tclhash.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tclhash.c b/src/tclhash.c index 86bd17633..5128821ba 100644 --- a/src/tclhash.c +++ b/src/tclhash.c @@ -738,7 +738,7 @@ static int trigger_bind(const char *proc, const char *param, char *mask) if(proc && proc[0] != '*') { /* proc[0] != '*' excludes internal binds */ #ifdef DEBUG_CONTEXT - snprintf(last_bind_called, sizeof last_bind_called, proc); + strlcpy(last_bind_called, proc, sizeof last_bind_called); #endif debug1("triggering bind %s", proc); r = getrusage(RUSAGE_SELF, &ru1); From 1c5ea7050352dcced69d728c2a222c72f3511be1 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 18 Feb 2024 15:00:35 +0100 Subject: [PATCH 29/91] refix format string Found by: michaelortmann Patch by: michaelortmann --- src/botmsg.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/botmsg.c b/src/botmsg.c index 3a4cb37d5..5096ec41c 100644 --- a/src/botmsg.c +++ b/src/botmsg.c @@ -755,7 +755,7 @@ int add_note(char *to, char *from, char *msg, int idx, int echo) { #define FROMLEN 40 int status, i, iaway, sock; - char *p, botf[FROMLEN + 1 + HANDLEN + 1], ss[81], ssf[81]; + char *p, botf[FROMLEN + 1 + HANDLEN + 1], ss[81], ssf[20 + 1 + sizeof botf]; struct userrec *u; /* Notes have a length limit. Note + PRIVMSG header + nick + date must @@ -786,7 +786,7 @@ int add_note(char *to, char *from, char *msg, int idx, int echo) if (strchr(from, '@')) { strcpy(botf, from); } else - sprintf(botf, "%s@%s", from, botnetnick); + snprintf(botf, sizeof botf, "%s@%s", from, botnetnick); } else strcpy(botf, botnetnick); @@ -803,7 +803,7 @@ int add_note(char *to, char *from, char *msg, int idx, int echo) dprintf(idx, "-> %s@%s: %s\n", x, p, msg); if (idx >= 0) { - sprintf(ssf, "%lu:%s", dcc[idx].sock, botf); + snprintf(ssf, sizeof ssf, "%lu:%s", dcc[idx].sock, botf); botnet_send_priv(i, ssf, x, p, "%s", msg); } else botnet_send_priv(i, botf, x, p, "%s", msg); From afef79bee7eb86e7f395fc2b38f9e6cf9a4fc269 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 18 Feb 2024 15:07:12 +0100 Subject: [PATCH 30/91] Join threads instead of detach Found by: michaelortmann Patch by: michaelortmann --- src/dns.c | 18 ++---------------- src/eggdrop.h | 1 + src/net.c | 3 +++ 3 files changed, 6 insertions(+), 16 deletions(-) diff --git a/src/dns.c b/src/dns.c index ab1fdbeae..2e5035b88 100644 --- a/src/dns.c +++ b/src/dns.c @@ -568,7 +568,6 @@ void *thread_dns_ipbyhost(void *arg) void core_dns_hostbyip(sockname_t *addr) { struct dns_thread_node *dtn = nmalloc(sizeof(struct dns_thread_node)); - pthread_t thread; /* only used by pthread_create(), no need to save */ pthread_attr_t attr; if (pthread_attr_init(&attr)) { @@ -577,12 +576,6 @@ void core_dns_hostbyip(sockname_t *addr) nfree(dtn); return; } - if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED)) { - putlog(LOG_MISC, "*", "core_dns_hostbyip(): pthread_attr_setdetachstate(): error = %s", strerror(errno)); - call_hostbyip(addr, iptostr(&addr->addr.sa), 0); - nfree(dtn); - return; - } if (pthread_mutex_init(&dtn->mutex, NULL)) fatal("ERROR: core_dns_hostbyip(): pthread_mutex_init() failed", 0); if (pipe(dtn->fildes) < 0) { @@ -592,7 +585,7 @@ void core_dns_hostbyip(sockname_t *addr) return; } memcpy(&dtn->addr, addr, sizeof *addr); - if (pthread_create(&thread, &attr, thread_dns_hostbyip, (void *) dtn)) { + if (pthread_create(&(dtn->thread_id), &attr, thread_dns_hostbyip, (void *) dtn)) { putlog(LOG_MISC, "*", "core_dns_hostbyip(): pthread_create(): error = %s", strerror(errno)); call_hostbyip(addr, iptostr(&addr->addr.sa), 0); close(dtn->fildes[0]); @@ -609,7 +602,6 @@ void core_dns_ipbyhost(char *host) { sockname_t addr; struct dns_thread_node *dtn; - pthread_t thread; /* only used by pthread_create(), no need to save */ pthread_attr_t attr; /* if addr is ip instead of host */ @@ -624,12 +616,6 @@ void core_dns_ipbyhost(char *host) nfree(dtn); return; } - if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED)) { - putlog(LOG_MISC, "*", "core_dns_ipbyhost(): pthread_attr_setdetachstate(): error = %s", strerror(errno)); - call_ipbyhost(host, &addr, 0); - nfree(dtn); - return; - } if (pthread_mutex_init(&dtn->mutex, NULL)) fatal("ERROR: core_dns_ipbyhost(): pthread_mutex_init() failed", 0); if (pipe(dtn->fildes) < 0) { @@ -641,7 +627,7 @@ void core_dns_ipbyhost(char *host) dtn->next = dns_thread_head->next; dns_thread_head->next = dtn; strlcpy(dtn->host, host, sizeof dtn->host); - if (pthread_create(&thread, &attr, thread_dns_ipbyhost, (void *) dtn)) { + if (pthread_create(&(dtn->thread_id), &attr, thread_dns_ipbyhost, (void *) dtn)) { putlog(LOG_MISC, "*", "core_dns_ipbyhost(): pthread_create(): error = %s", strerror(errno)); call_ipbyhost(host, &addr, 0); close(dtn->fildes[0]); diff --git a/src/eggdrop.h b/src/eggdrop.h index a7774e294..076a16252 100644 --- a/src/eggdrop.h +++ b/src/eggdrop.h @@ -751,6 +751,7 @@ enum { /* linked list instead of array because of multi threading */ struct dns_thread_node { + pthread_t thread_id; pthread_mutex_t mutex; int fildes[2]; int type; diff --git a/src/net.c b/src/net.c index 9ea150019..c8aa62cd5 100644 --- a/src/net.c +++ b/src/net.c @@ -899,6 +899,7 @@ int sockread(char *s, int *len, sock_list *slist, int slistmax, int tclonly) #ifdef EGG_TDNS int fd; struct dns_thread_node *dtn, *dtn_prev; + void *res; #endif maxfd_r = preparefdset(&fdr, slist, slistmax, tclonly, TCL_READABLE); @@ -1065,6 +1066,8 @@ int sockread(char *s, int *len, sock_list *slist, int slistmax, int tclonly) pthread_mutex_unlock(&dtn->mutex); } close(dtn->fildes[0]); + if (pthread_join(dtn->thread_id, &res)) + putlog(LOG_MISC, "*", "sockread(): pthread_join(): error = %s", strerror(errno)); dtn_prev->next = dtn->next; nfree(dtn); dtn = dtn_prev; From edd0e77d7ae3b3023cd036f9cb96e91d48e28756 Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 25 Feb 2024 13:49:41 -0500 Subject: [PATCH 31/91] fix autoscript requires logic --- scripts/autoscripts.tcl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/autoscripts.tcl b/scripts/autoscripts.tcl index caf45fce0..0e38208bd 100644 --- a/scripts/autoscripts.tcl +++ b/scripts/autoscripts.tcl @@ -173,7 +173,7 @@ proc egg_list {idx} { readjsonfile putdcc $idx "\nThe following scripts are available for configuration:" putdcc $idx "-------------------------------------------------------" - if {[dict size $jsondict] == 0} { + if {[llength $jsondict] == 0} { putdcc $idx "* No scripts have been downloaded" } foreach script $jsondict { @@ -182,7 +182,7 @@ proc egg_list {idx} { if {[dict exists $script config requires] && [string length [dict get $script config requires]]} { foreach pkg [dict get $script config requires] { if {![string equal $pkg "null"]} { - if {![lsearch -exact [package names] $pkg]} { + if {[lsearch -exact [package names] $pkg] == -1} { putdcc $idx " ( ^ Must install Tcl $pkg package on host before loading)" } } From 7b212635c574cf332d45dd4e4c78fdd39a5020f3 Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 25 Feb 2024 16:40:30 -0500 Subject: [PATCH 32/91] hide autoscript manifest entry --- scripts/autoscripts.tcl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/autoscripts.tcl b/scripts/autoscripts.tcl index 0e38208bd..6bddf555e 100644 --- a/scripts/autoscripts.tcl +++ b/scripts/autoscripts.tcl @@ -352,7 +352,9 @@ proc egg_remote {idx} { putdcc $idx "-------------------------------" foreach scriptentry $datadict { # regsub -all {<[^>]+>} [dict get $scriptentry caption rendered] "" scriptcap - putdcc $idx "* [format "%-16s %s" [dict get $scriptentry name] [dict get $scriptentry description]]" + if {![string equal -nocase [dict get $scriptentry name] "autoscripts"]} { + putdcc $idx "* [format "%-16s %s" [dict get $scriptentry name] [dict get $scriptentry description]]" + } } putdcc $idx "\n" putdcc $idx "* Type 'fetch ' to download a script" From b2ca96991eb98ce910b6f6efb19e9dc5c7e736e5 Mon Sep 17 00:00:00 2001 From: Geo Date: Thu, 29 Feb 2024 21:47:46 -0500 Subject: [PATCH 33/91] uniqueify console procname Found by: DasBrain --- scripts/autoscripts.tcl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/autoscripts.tcl b/scripts/autoscripts.tcl index 6bddf555e..71bfcca2e 100644 --- a/scripts/autoscripts.tcl +++ b/scripts/autoscripts.tcl @@ -14,9 +14,9 @@ set jsondict [dict create] set asmajor 1 set asminor 0 -bind DCC n autoscript console +bind DCC n autoscript asconsole -proc console {hand idx arg} { +proc asconsole {hand idx arg} { global echostatus global oldchan global asidx From fd2662f68f510ff40697ef03d687bce04928a1f2 Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 2 Mar 2024 12:36:34 -0500 Subject: [PATCH 34/91] Add userfile sharing tutorial --- doc/sphinx_source/index.rst | 3 +- .../tutorials/userfilesharing.rst | 50 +++++++++++++++++++ doc/sphinx_source/using/botnet.rst | 17 ++++--- 3 files changed, 63 insertions(+), 7 deletions(-) create mode 100644 doc/sphinx_source/tutorials/userfilesharing.rst diff --git a/doc/sphinx_source/index.rst b/doc/sphinx_source/index.rst index 44f020898..08946d5a6 100644 --- a/doc/sphinx_source/index.rst +++ b/doc/sphinx_source/index.rst @@ -78,8 +78,9 @@ The Eggheads development team can be found lurking on #eggdrop on the Libera net tutorials/setup tutorials/firststeps tutorials/tlssetup + tutorials/userfilesharing tutorials/firstscript - tutorials/module.rst + tutorials/module .. toctree:: :caption: Eggdrop Modules diff --git a/doc/sphinx_source/tutorials/userfilesharing.rst b/doc/sphinx_source/tutorials/userfilesharing.rst new file mode 100644 index 000000000..ed40c46f5 --- /dev/null +++ b/doc/sphinx_source/tutorials/userfilesharing.rst @@ -0,0 +1,50 @@ +Sharing Userfiles +================= + +One of the great features of Eggdrop is bot linking, allowing you to create your own 'botnet'. A botnet can consist of two linked bots to as many as hundreds of linked bots. If you're using an Eggdrop for channel management, the most important feature of linked bots is userfile sharing. With userfile sharing, the bots can keep their user lists, ban lists, and ignore lists in sync with one another. A botnet also has many other possible capabilities, such as allowing bots to op one another securely, and making all bots join a channel with one command. + +Linking bots can be a confusing process for first timers, but it's quite simple if you know how. The first thing you need to do is chose a hub bot. The hub is the main bot which all the other bots on the botnet (which will become leaf bots) connect to. Even if you are only using two bots, it's best to use one as a hub bot, and the other as a leaf. The hub bot should be the most reliable bot on your botnet, running on a fast, stable, and secure shell - so keep that in mind when deciding which bot will be the hub. + +Once you've decided on the hub, it's time to set up the linking. + +How to share userfiles- the super-short version +----------------------------------------------- + +(This example steps assume Eggdrop has been compiled with TLS support, and you are sharing all channels) + +On the Hub Bot +^^^^^^^^^^^^^^ + +# Ensure you know what ports your bot is listening on, this is set in the config and those ports will be used in the example below. For this example, our config looks like:: + + listen +3333/+4444 all + +# On the hub (for this example, the Hub is called Hubalicious), add the leaf bot (for this example, the Leaf is called LeifErikson) with `.+bot LeifErikson +4444/+3333 `. + +# On the hub, give the leaf bot the appropriate leaf sharing flags with `.botattr LiefErikson +gs`. + +On the Leaf Bot +^^^^^^^^^^^^^^^ + +# Ensure you know what ports your bot is listening on, this is set in the config and those ports will be used in the example below. For this example, our config looks like:: + + listen +5555/+6666 all + +# Now on the leaf, add the hub bot with `.+bot Hubalicious +6666/+5555 `. + +# On the leaf, give the hub bot the appropriate hub and sharing flags with `.botattr Hubalicious +ghp`. + +At this point, the leaf bot should attempt to connect to the hub bot within the next minute, or you can force the link connection with `.link Hubalicious`. You can also use .bottree to see your botnet structure. + +Explaining the Linking/Sharing Process +-------------------------------------- + +Eggdrop bots can talk to each other for a variety of reasons. In order for an Eggdrop to talk to another Eggdrop for anything, they must link. This is done by adding a bot record the remote bot on the hub bot (In our example above, using `.+bot LeifErikson` on Hubalicious, and using `.+bot Hubalicious` on LiefErikson). Once the bot records are added, bots can be manually connected using the `.link` command. + +In the example above, we add the +s bot flag to LiefErikson's bot record on Hubalicious to tell Hubalicious that LiefErikson is not only allowed to connect, but is authorized to download the userfiles from Hubalicious. Similarly, we add the +p bot flag to Hubalicious's bot record on LiefErikson to tell LiefErikson that Hubalicous is authorized to send userfiles to LiefErikson. The +h bot flag is added to Hubalicious's bot record on LiefErikson so tell LiefErikson that Hubalicious is the hub, and it should always try to automatically connect to Hubalicious. + +Lastly, the +g flag is used on both bot records to indicate that Hubalicious is authorized to send userfiles for all channels. This is a shortcut method to sharing all channels instead of setting the `+shared` channel setting on the hub for each channel userfile you wish the hub to share (set via .chanset), and using the `|+s #channel` bot flag for each channel userfile that the leaf is authorized to receive userfiles from the hub. As an example of channel-specific userfile sharing, you would use `.botattr LiefErikson |+s #theforest` on Hubalicious to set #theforest as a channel authorized to be shared to LiefErikson, and `chanset #theforest +shared` to tell LiefErikson to accept the channel userfile for #theforest. + +One more commonly used flag is the `+a` flag. This flag specifies an alternate hub to connect to incase the primary hub goes down. The alternate hub should be linked to hub and maintain all channel userfiles the hub maintains to ensure there is no desynchronization while the hub bot is down. Should the hub bot go down, and assuming the `+h` flag is set for the hub on a leaf, the leafbost will automatically try to reconnect to the hub every minute, even if it makes a connection with the alternate hub in the meantime. An alternate hub is added the same as a hub, except swapping out the `h` for the `a`: `.botattr AltRock +agp`. + +Now that you have a hub and leaf bot successfully connected and sharing userfiles, you can repeat the `On the Leaf Bot`_ section to add additional leafs to your hub. diff --git a/doc/sphinx_source/using/botnet.rst b/doc/sphinx_source/using/botnet.rst index 53a11046e..9ac8f7812 100644 --- a/doc/sphinx_source/using/botnet.rst +++ b/doc/sphinx_source/using/botnet.rst @@ -69,17 +69,22 @@ The following are some common terms used in this document: **Port** The telnet port is used by the bot to communicate with other bots and/or users. Note that you can define separate ports for user and bot connections. -Example bottree ---------------- +Example bottrees +---------------- :: BotA |-+BotB - `-+BotC - -BotB is linked to a master sharebot, BotA, and a slave sharebot, BotC. BotB shares passively with [receives from] BotA and shares aggressively with [sends to] BotC. - + |==BotC + |=+BotD + `--BotC + +Legend: +* -- means the bots are linked, but not sharing userfiles +* -+ means the bots are sharing userfiles +* == means the bots have an encrypted link between them, and are not sharing userfiles +* =+ means the bots have an encrypted link between them, and are sharing userfiles Bot Flags --------- From 30442cb0386afc0cc834b578b5a4189ffef0de82 Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 2 Mar 2024 13:00:18 -0500 Subject: [PATCH 35/91] Check python version at compile --- m4/ax_compare_version.m4 | 177 ++++++++++++++++++++++++++++++++ m4/python.m4 | 26 +---- src/mod/python.mod/configure.ac | 41 ++++++-- 3 files changed, 217 insertions(+), 27 deletions(-) create mode 100644 m4/ax_compare_version.m4 diff --git a/m4/ax_compare_version.m4 b/m4/ax_compare_version.m4 new file mode 100644 index 000000000..ffb4997e8 --- /dev/null +++ b/m4/ax_compare_version.m4 @@ -0,0 +1,177 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_compare_version.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_COMPARE_VERSION(VERSION_A, OP, VERSION_B, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# +# DESCRIPTION +# +# This macro compares two version strings. Due to the various number of +# minor-version numbers that can exist, and the fact that string +# comparisons are not compatible with numeric comparisons, this is not +# necessarily trivial to do in a autoconf script. This macro makes doing +# these comparisons easy. +# +# The six basic comparisons are available, as well as checking equality +# limited to a certain number of minor-version levels. +# +# The operator OP determines what type of comparison to do, and can be one +# of: +# +# eq - equal (test A == B) +# ne - not equal (test A != B) +# le - less than or equal (test A <= B) +# ge - greater than or equal (test A >= B) +# lt - less than (test A < B) +# gt - greater than (test A > B) +# +# Additionally, the eq and ne operator can have a number after it to limit +# the test to that number of minor versions. +# +# eq0 - equal up to the length of the shorter version +# ne0 - not equal up to the length of the shorter version +# eqN - equal up to N sub-version levels +# neN - not equal up to N sub-version levels +# +# When the condition is true, shell commands ACTION-IF-TRUE are run, +# otherwise shell commands ACTION-IF-FALSE are run. The environment +# variable 'ax_compare_version' is always set to either 'true' or 'false' +# as well. +# +# Examples: +# +# AX_COMPARE_VERSION([3.15.7],[lt],[3.15.8]) +# AX_COMPARE_VERSION([3.15],[lt],[3.15.8]) +# +# would both be true. +# +# AX_COMPARE_VERSION([3.15.7],[eq],[3.15.8]) +# AX_COMPARE_VERSION([3.15],[gt],[3.15.8]) +# +# would both be false. +# +# AX_COMPARE_VERSION([3.15.7],[eq2],[3.15.8]) +# +# would be true because it is only comparing two minor versions. +# +# AX_COMPARE_VERSION([3.15.7],[eq0],[3.15]) +# +# would be true because it is only comparing the lesser number of minor +# versions of the two values. +# +# Note: The characters that separate the version numbers do not matter. An +# empty string is the same as version 0. OP is evaluated by autoconf, not +# configure, so must be a string, not a variable. +# +# The author would like to acknowledge Guido Draheim whose advice about +# the m4_case and m4_ifvaln functions make this macro only include the +# portions necessary to perform the specific comparison specified by the +# OP argument in the final configure script. +# +# LICENSE +# +# Copyright (c) 2008 Tim Toolan +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 13 + +dnl ######################################################################### +AC_DEFUN([AX_COMPARE_VERSION], [ + AC_REQUIRE([AC_PROG_AWK]) + + # Used to indicate true or false condition + ax_compare_version=false + + # Convert the two version strings to be compared into a format that + # allows a simple string comparison. The end result is that a version + # string of the form 1.12.5-r617 will be converted to the form + # 0001001200050617. In other words, each number is zero padded to four + # digits, and non digits are removed. + AS_VAR_PUSHDEF([A],[ax_compare_version_A]) + A=`echo "$1" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \ + -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/[[^0-9]]//g'` + + AS_VAR_PUSHDEF([B],[ax_compare_version_B]) + B=`echo "$3" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \ + -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/[[^0-9]]//g'` + + dnl # In the case of le, ge, lt, and gt, the strings are sorted as necessary + dnl # then the first line is used to determine if the condition is true. + dnl # The sed right after the echo is to remove any indented white space. + m4_case(m4_tolower($2), + [lt],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/false/;s/x${B}/true/;1q"` + ], + [gt],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort | sed "s/x${A}/false/;s/x${B}/true/;1q"` + ], + [le],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort | sed "s/x${A}/true/;s/x${B}/false/;1q"` + ], + [ge],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/true/;s/x${B}/false/;1q"` + ],[ + dnl Split the operator from the subversion count if present. + m4_bmatch(m4_substr($2,2), + [0],[ + # A count of zero means use the length of the shorter version. + # Determine the number of characters in A and B. + ax_compare_version_len_A=`echo "$A" | $AWK '{print(length)}'` + ax_compare_version_len_B=`echo "$B" | $AWK '{print(length)}'` + + # Set A to no more than B's length and B to no more than A's length. + A=`echo "$A" | sed "s/\(.\{$ax_compare_version_len_B\}\).*/\1/"` + B=`echo "$B" | sed "s/\(.\{$ax_compare_version_len_A\}\).*/\1/"` + ], + [[0-9]+],[ + # A count greater than zero means use only that many subversions + A=`echo "$A" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"` + B=`echo "$B" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"` + ], + [.+],[ + AC_WARNING( + [invalid OP numeric parameter: $2]) + ],[]) + + # Pad zeros at end of numbers to make same length. + ax_compare_version_tmp_A="$A`echo $B | sed 's/./0/g'`" + B="$B`echo $A | sed 's/./0/g'`" + A="$ax_compare_version_tmp_A" + + # Check for equality or inequality as necessary. + m4_case(m4_tolower(m4_substr($2,0,2)), + [eq],[ + test "x$A" = "x$B" && ax_compare_version=true + ], + [ne],[ + test "x$A" != "x$B" && ax_compare_version=true + ],[ + AC_WARNING([invalid OP parameter: $2]) + ]) + ]) + + AS_VAR_POPDEF([A])dnl + AS_VAR_POPDEF([B])dnl + + dnl # Execute ACTION-IF-TRUE / ACTION-IF-FALSE. + if test "$ax_compare_version" = "true" ; then + m4_ifvaln([$4],[$4],[:])dnl + m4_ifvaln([$5],[else $5])dnl + fi +]) dnl AX_COMPARE_VERSION diff --git a/m4/python.m4 b/m4/python.m4 index 5409d7b6b..6b7b32359 100644 --- a/m4/python.m4 +++ b/m4/python.m4 @@ -19,33 +19,17 @@ dnl dnl EGG_PYTHON_ENABLE dnl -AC_DEFUN([EGG_PYTHON_ENABLE], -[ - AC_MSG_CHECKING([whether to compile the Python module]) - AC_ARG_ENABLE(python, - [ --enable-python enable Python support (autodetect)], - [egg_enable_python="$enableval"]) - AC_ARG_ENABLE(python, - [ --disable-python disable Python support], [egg_enable_python="$enableval"], - [egg_enable_python="autodetect"]) - - AC_MSG_RESULT([$egg_enable_python]) - AC_SUBST(egg_enable_python) -]) - dnl EGG_PYTHON_WITHCONFIG dnl AC_DEFUN(EGG_PYTHON_WITHCONFIG, [ AC_ARG_WITH(python-config, [ --with-python-config=PATH Path to python-config], [ - if test "x$enable_python" != "xno"; then - if test -d "$withval" || test -x "$withval"; then - egg_with_python_config="$withval" - else - egg_with_python_config="no" - AC_MSG_WARN([Invalid path to python-config. $withval is not a directory and not an executable.]) - fi + if test -d "$withval" || test -x "$withval"; then + egg_with_python_config="$withval" + else + egg_with_python_config="no" + AC_MSG_WARN([Invalid path to python-config. $withval is not a directory and not an executable.]) fi ]) AC_SUBST(egg_with_python_config) diff --git a/src/mod/python.mod/configure.ac b/src/mod/python.mod/configure.ac index 249d5ca46..dba914235 100644 --- a/src/mod/python.mod/configure.ac +++ b/src/mod/python.mod/configure.ac @@ -4,8 +4,9 @@ AC_PREREQ(2.69) sinclude(../eggmod.m4) builtin(include,../../../m4/python.m4) +builtin(include,../../../m4/ax_compare_version.m4) -AC_INIT([Eggdrop Python Module],[1.9.3],[bugs@eggheads.org]) +AC_INIT([Eggdrop Python Module],[1.10.0],[bugs@eggheads.org]) AC_CONFIG_SRCDIR(python.c) AC_CONFIG_AUX_DIR(../../../misc) @@ -14,7 +15,6 @@ AC_COPYRIGHT([Copyright (C) 1999 - 2024 Eggheads Development Team]) AC_REVISION([m4_esyscmd([../../../misc/getcommit])]) AC_PROG_FGREP -EGG_PYTHON_ENABLE EGG_PYTHON_WITHCONFIG python_avail="false" @@ -60,14 +60,43 @@ if test "x$python_config_bin" != "x"; then python_avail="true" fi +# Check python path +AC_ARG_VAR([PYTHON_VERSION],[The installed Python +version to use, for example '2.3'. This string +will be appended to the Python interpreter +canonical name.]) + +AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]]) + if test -z "$PYTHON"; then + AC_MSG_WARN([Cannot find python$PYTHON_VERSION in your system path]) + if ! $ax_python_devel_optional; then + AC_MSG_ERROR([Giving up, python development not available]) + fi + ax_python_devel_found=no + PYTHON_VERSION="" +fi + +# Check for python version + python_ver=`$PYTHON -c "import sys; \ + print(sys.version.split ()[[0]])"` + AX_COMPARE_VERSION([$python_ver],[ge],[3.8.0], [ax_check_ver="yes"], [ax_check_ver="no"]) + AC_MSG_CHECKING([$PYTHON version is >= 3.8.0]) + if test "x$ax_check_ver" = x"no"; then + python_avail="false" + AC_MSG_RESULT([no ($python_ver)]) + AC_MSG_WARN([Eggdrop requires python version 3.8.0 or higher]) + else + AC_MSG_RESULT([yes ($python_ver)]) + fi + # Disable the module if test "x$python_avail" = "xfalse"; then if test "x$egg_enable_python" != "xno"; then cat >&2 < Date: Sun, 3 Mar 2024 14:30:45 -0500 Subject: [PATCH 36/91] Update releaseprep for 1.10 --- misc/releaseprep | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/misc/releaseprep b/misc/releaseprep index de3fc5612..f51689fb3 100755 --- a/misc/releaseprep +++ b/misc/releaseprep @@ -81,8 +81,8 @@ regenerate_changelog() { if git rev-parse -q --verify release/${TRIMVERSION} > /dev/null; then INCLUDE="${INCLUDE} -i ./release/${TRIMVERSION}" fi - echo "misc/genchanges -l -e v1.8.4 $INCLUDE -v ${EGGVERSION}${EGG_RC} -r origin short > doc/Changes1.9" - misc/genchanges -l -e v1.8.4 $INCLUDE -v ${EGGVERSION}${EGG_RC} -r origin short > doc/Changes1.9 + echo "misc/genchanges -l -e v1.8.4 -e v1.9.5 $INCLUDE -v ${EGGVERSION}${EGG_RC} -r origin short > doc/Changes1.10" + misc/genchanges -l -e v1.8.4 -e v1.9.5 $INCLUDE -v ${EGGVERSION}${EGG_RC} -r origin short > doc/Changes1.10 git commit -m "Generate ChangeLog/Changes files for ${EGGVERSION}" > /dev/null if test -f ChangeLog.gz; then @@ -99,8 +99,8 @@ regenerate_changelog() { exit 1 fi git add ChangeLog.gz - git add doc/Changes1.8 - git commit -m "Generate ChangeLog/Changes files for ${EGGVERSION}${EGG_RC}" > /dev/null + git add doc/Changes1.10 + git commit -m "Generate ChangeLog/Changes files for ${EGGVERSION}${EGG_RC}" > /dev/null } change_default_make() { From 426f33f7a93ff665c9e19bb172d570224c5f3671 Mon Sep 17 00:00:00 2001 From: "ZarTek @ CREOLE" Date: Sun, 14 Apr 2024 03:33:08 +0200 Subject: [PATCH 37/91] Fix typo Patch by: ZarTek-Creole --- src/mod/python.mod/scripts/urlTitle.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mod/python.mod/scripts/urlTitle.py b/src/mod/python.mod/scripts/urlTitle.py index 60dc6ae00..f8b498226 100644 --- a/src/mod/python.mod/scripts/urlTitle.py +++ b/src/mod/python.mod/scripts/urlTitle.py @@ -24,4 +24,4 @@ def pubGetTitle(nick, host, handle, channel, text, **kwargs): # Call binds at the end of the script, not the top- the functions must be defined! bind("pub", "*", "!title", pubGetTitle) -print('Loaded example.py') +print('Loaded urlTitle.py') From 77f8c1f6a17535faab60b56affe230352cab58ed Mon Sep 17 00:00:00 2001 From: TehPeGaSuS <25697531+TehPeGaSuS@users.noreply.github.com> Date: Sun, 5 May 2024 16:24:25 +0200 Subject: [PATCH 38/91] Update core.portuguese.lang Patch by: @TehPeGaSuS --- language/core.portuguese.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language/core.portuguese.lang b/language/core.portuguese.lang index e1dd8958a..c1f9afbb6 100644 --- a/language/core.portuguese.lang +++ b/language/core.portuguese.lang @@ -431,4 +431,4 @@ Entre em ligação telnet com o bot e digite 'NEW' como o seu nick. 0xe34,Timeout em ligação de identificação 0xe35,Por favor, remova o #comentário na configuração de listen e tente novamente 0xe36,Esta porta é apenas para bots -0xe37,Esta porta é apenas para utilizadores (sem bots) +0xe37,Esta porta é apenas para utilizadores (não bots) From e9870badc4f3316cf0da44ac702cf0f22fa34684 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 16:58:31 +0200 Subject: [PATCH 39/91] Un-hardcode buffer size Co-authored-by: Michael Ortmann --- src/chanprog.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chanprog.c b/src/chanprog.c index c4b679c07..6fca64736 100644 --- a/src/chanprog.c +++ b/src/chanprog.c @@ -407,7 +407,7 @@ void tell_settings(int idx) void reaffirm_owners() { - char *p, *q, s[121]; + char *p, *q, s[sizeof owner]; struct userrec *u; /* Please stop breaking this function. */ From 82e24bbf56cb90ca4c81a7dbf867b4bf2baab986 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 17:00:34 +0200 Subject: [PATCH 40/91] Fix timer drift log (#1556) Found by: SergioR Patch by: michaelortmann Broken in eggdrop 1.9.4 commit faec900 --- src/main.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main.c b/src/main.c index f698606a0..5a4782ef6 100644 --- a/src/main.c +++ b/src/main.c @@ -565,6 +565,7 @@ static void core_secondly() int miltime; time_t nowmins; int i; + uint64_t drift_mins; do_check_timers(&utimer); /* Secondly timers */ cnt++; @@ -595,14 +596,14 @@ static void core_secondly() /* In case for some reason more than 1 min has passed: */ while (nowmins != lastmin) { /* Timer drift, dammit */ - debug1("timer: drift (%" PRId64 " seconds)", (int64_t) (nowmins - lastmin)); + drift_mins = nowmins - lastmin; + debug2("timer: drift (%" PRId64 " minute%s)", drift_mins, drift_mins == 1 ? "" : "s"); i++; ++lastmin; call_hook(HOOK_MINUTELY); } - if (i > 1) - putlog(LOG_MISC, "*", "(!) timer drift -- spun %" PRId64 " minutes", - ((int64_t) (nowmins - lastmin)) / 60); + if (i) + putlog(LOG_MISC, "*", "(!) timer drift -- spun %i minute%s", i, i == 1 ? "" : "s"); miltime = (nowtm.tm_hour * 100) + (nowtm.tm_min); if (((int) (nowtm.tm_min / 5) * 5) == (nowtm.tm_min)) { /* 5 min */ call_hook(HOOK_5MINUTELY); From a7ba4f89924bed0d104c7040a142c9fe96d03dd2 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 17:01:57 +0200 Subject: [PATCH 41/91] Fix autoconf of tls action-if-not-given Found by: ZarTek-Creole Patch by: michaelortmann Fixes: #1554 --- aclocal.m4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aclocal.m4 b/aclocal.m4 index ff8a0c158..748fb2969 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1520,7 +1520,7 @@ AC_DEFUN([EGG_TLS_ENABLE], AC_MSG_CHECKING([whether to enable TLS support]) AC_ARG_ENABLE(tls, [ --disable-tls disable TLS support ], [tls_enabled="$enableval"], - [tls_enabled="$enableval"]) + [tls_enabled="yes"]) AC_MSG_RESULT([$tls_enabled]) ]) From c1394b8af39a8486ff254ed877b3c6005922adcc Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 17:42:47 +0200 Subject: [PATCH 42/91] strncpy() -> strlcpy() Patch by: michaelortmann --- src/botnet.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/botnet.c b/src/botnet.c index 88484235d..bb6b4aad3 100644 --- a/src/botnet.c +++ b/src/botnet.c @@ -174,10 +174,8 @@ int addparty(char *bot, char *nick, int chan, char flag, int sock, party = nrealloc(party, party_size * sizeof(party_t)); debug1("botnet: party size doubled to %i.", party_size); } - strncpy(party[parties].nick, nick, HANDLEN); - party[parties].nick[HANDLEN] = 0; - strncpy(party[parties].bot, bot, HANDLEN); - party[parties].bot[HANDLEN] = 0; + strlcpy(party[parties].nick, nick, HANDLEN + 1); + strlcpy(party[parties].bot, bot, HANDLEN + 1); party[parties].chan = chan; party[parties].sock = sock; party[parties].status = 0; From 34c98084889ab80c9ef967d9b479995873daaf1c Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 17:43:57 +0200 Subject: [PATCH 43/91] Cleanup console.mod Patch by: michaelortmann --- src/mod/console.mod/console.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/mod/console.mod/console.c b/src/mod/console.mod/console.c index d54f93751..95fa4a78b 100644 --- a/src/mod/console.mod/console.c +++ b/src/mod/console.mod/console.c @@ -25,7 +25,6 @@ #define MAKING_CONSOLE #include "src/mod/module.h" -#include #include "console.h" static Function *global = NULL; @@ -134,13 +133,12 @@ static int console_set(struct userrec *u, struct user_entry *e, void *buf) return 1; } -static int console_tcl_format(char *work, struct console_info *i) +static void console_tcl_format(char *work, struct console_info *i) { simple_sprintf(work, "%s %s %s %d %d %d", i->channel, masktype(i->conflags), stripmasktype(i->stripflags), i->echoflags, i->page, i->conchan); - return 0; } static int console_tcl_get(Tcl_Interp *irp, struct userrec *u, From f726ba8e87e3cd87d99fcf583207e40faf5fd244 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 17:44:22 +0200 Subject: [PATCH 44/91] Tcl_AppendResult() -> Tcl_SetResult() (#1571) Patch by: michaelortmann --- src/dns.c | 2 +- src/flags.c | 2 +- src/language.c | 6 +++--- src/mod/console.mod/console.c | 2 +- src/mod/irc.mod/tclirc.c | 2 +- src/mod/python.mod/pycmds.c | 2 +- src/mod/server.mod/tclisupport.c | 4 ++-- src/tcl.c | 6 +++--- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/dns.c b/src/dns.c index 2e5035b88..d1b8042ef 100644 --- a/src/dns.c +++ b/src/dns.c @@ -726,7 +726,7 @@ static int tcl_dnslookup STDVAR tcl_dnshostbyip(&addr, argv[2], Tcl_DStringValue(¶s)); else { if (strlen(argv[1]) > 255) { - Tcl_AppendResult(irp, "hostname too long. max 255 chars.", NULL); + Tcl_SetResult(irp, "hostname too long. max 255 chars.", TCL_STATIC); return TCL_ERROR; } tcl_dnsipbyhost(argv[1], argv[2], Tcl_DStringValue(¶s)); diff --git a/src/flags.c b/src/flags.c index aea4ec9b2..b7bb0bd86 100644 --- a/src/flags.c +++ b/src/flags.c @@ -1419,7 +1419,7 @@ static int botfl_tcl_get(Tcl_Interp *interp, struct userrec *u, fr.bot = e->u.ulong; build_flags(x, &fr, NULL); - Tcl_AppendResult(interp, x, NULL); + Tcl_SetResult(interp, x, TCL_STATIC); return TCL_OK; } diff --git a/src/language.c b/src/language.c index 7056311a2..534aace7b 100644 --- a/src/language.c +++ b/src/language.c @@ -649,7 +649,7 @@ static int tcl_language STDVAR strcpy(buf, argv[1]); if (!split_lang(buf, &lang, §ion)) { - Tcl_AppendResult(irp, "Invalid parameter", NULL); + Tcl_SetResult(irp, "Invalid parameter", TCL_STATIC); nfree(buf); return TCL_ERROR; } @@ -677,7 +677,7 @@ static int tcl_mnslang STDVAR BADARGS(2, 2, " language"); if (!del_lang(argv[1])) { - Tcl_AppendResult(irp, "Language not found.", NULL); + Tcl_SetResult(irp, "Language not found.", TCL_STATIC); return TCL_ERROR; } recheck_lang_sections(); @@ -698,7 +698,7 @@ static int tcl_dellangsection STDVAR BADARGS(2, 2, " section"); if (!del_lang_section(argv[1])) { - Tcl_AppendResult(irp, "Section not found", NULL); + Tcl_SetResult(irp, "Section not found", TCL_STATIC); return TCL_ERROR; } return TCL_OK; diff --git a/src/mod/console.mod/console.c b/src/mod/console.mod/console.c index 95fa4a78b..c91d11e59 100644 --- a/src/mod/console.mod/console.c +++ b/src/mod/console.mod/console.c @@ -147,7 +147,7 @@ static int console_tcl_get(Tcl_Interp *irp, struct userrec *u, char work[1024]; console_tcl_format(work, e->u.extra); - Tcl_AppendResult(irp, work, NULL); + Tcl_SetResult(irp, work, TCL_STATIC); return TCL_OK; } diff --git a/src/mod/irc.mod/tclirc.c b/src/mod/irc.mod/tclirc.c index 52826b8e5..8f60e7f0f 100644 --- a/src/mod/irc.mod/tclirc.c +++ b/src/mod/irc.mod/tclirc.c @@ -511,7 +511,7 @@ static int tcl_accounttracking STDVAR if (current->enabled) { acctnotify = 1; } - Tcl_SetResult(irp, use_354 && extjoin && acctnotify ? "1" : "0", NULL); + Tcl_SetResult(irp, use_354 && extjoin && acctnotify ? "1" : "0", TCL_STATIC); return TCL_OK; } diff --git a/src/mod/python.mod/pycmds.c b/src/mod/python.mod/pycmds.c index 051bf7844..1e55088c4 100644 --- a/src/mod/python.mod/pycmds.c +++ b/src/mod/python.mod/pycmds.c @@ -149,7 +149,7 @@ static int tcl_call_python(ClientData cd, Tcl_Interp *irp, int objc, Tcl_Obj *co } if (!PyObject_Call(bindinfo->callback, args, NULL)) { PyErr_Print(); - Tcl_SetResult(irp, "Error calling python code", NULL); + Tcl_SetResult(irp, "Error calling python code", TCL_STATIC); return TCL_ERROR; } return TCL_OK; diff --git a/src/mod/server.mod/tclisupport.c b/src/mod/server.mod/tclisupport.c index 9dff94a65..6ac22d7b3 100644 --- a/src/mod/server.mod/tclisupport.c +++ b/src/mod/server.mod/tclisupport.c @@ -101,7 +101,7 @@ static int tcl_isupport_isset STDOBJVAR BADOBJARGS(3, 3, 2, "setting"); key = Tcl_GetStringFromObj(objv[2], &keylen); value = isupport_get(key, keylen); - Tcl_SetResult(interp, value ? "1" : "0", NULL); + Tcl_SetResult(interp, value ? "1" : "0", TCL_STATIC); return TCL_OK; } @@ -138,7 +138,7 @@ static int tcl_isupport_unset STDOBJVAR TCL_ERR_NOTSET(irp, objv[2]); } if (!data->value) { - Tcl_SetResult(interp, "no server value set, cannot unset default values, change 'set isupport-default' instead", NULL); + Tcl_SetResult(interp, "no server value set, cannot unset default values, change 'set isupport-default' instead", TCL_STATIC); return TCL_ERROR; } isupport_unset(key, keylen); diff --git a/src/tcl.c b/src/tcl.c index fe9b7eedf..9b069347f 100644 --- a/src/tcl.c +++ b/src/tcl.c @@ -1242,17 +1242,17 @@ time_t get_expire_time(Tcl_Interp * irp, const char *s) { long expire_foo = strtol(s, &endptr, 10); if (*endptr) { - Tcl_AppendResult(irp, "bogus expire time", NULL); + Tcl_SetResult(irp, "bogus expire time", TCL_STATIC); return -1; } if (expire_foo < 0) { - Tcl_AppendResult(irp, "expire time must be 0 (perm) or greater than 0 days", NULL); + Tcl_SetResult(irp, "expire time must be 0 (perm) or greater than 0 days", TCL_STATIC); return -1; } if (expire_foo == 0) return 0; if (expire_foo > (60 * 24 * 2000)) { - Tcl_AppendResult(irp, "expire time must be equal to or less than 2000 days", NULL); + Tcl_SetResult(irp, "expire time must be equal to or less than 2000 days", TCL_STATIC); return -1; } return now + 60 * expire_foo; From 7c0df73734ee7876a7676c7e99551ffba415fd3c Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 17:45:59 +0200 Subject: [PATCH 45/91] Add logging of user/sys times for evaluated .tcl --- src/cmds.c | 12 +++++++++++- src/tclhash.c | 15 ++++++--------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/cmds.c b/src/cmds.c index 708f5fde2..e1730507a 100644 --- a/src/cmds.c +++ b/src/cmds.c @@ -22,6 +22,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include #include "main.h" #include "tandem.h" #include "modules.h" @@ -2834,6 +2835,8 @@ static void cmd_page(struct userrec *u, int idx, char *par) */ static void cmd_tcl(struct userrec *u, int idx, char *msg) { + struct rusage ru1, ru2; + int r = 0; int code; char *result; Tcl_DString dstr; @@ -2842,8 +2845,15 @@ static void cmd_tcl(struct userrec *u, int idx, char *msg) dprintf(idx, "%s", MISC_NOSUCHCMD); return; } - debug1("tcl: evaluate (.tcl): %s", msg); + debug1("tcl: evaluating .tcl %s", msg); + r = getrusage(RUSAGE_SELF, &ru1); code = Tcl_GlobalEval(interp, msg); + if (!r && !getrusage(RUSAGE_SELF, &ru2)) + debug3("tcl: evaluated .tcl %s, user %.3fms sys %.3fms", msg, + (double) (ru2.ru_utime.tv_usec - ru1.ru_utime.tv_usec) / 1000 + + (double) (ru2.ru_utime.tv_sec - ru1.ru_utime.tv_sec ) * 1000, + (double) (ru2.ru_stime.tv_usec - ru1.ru_stime.tv_usec) / 1000 + + (double) (ru2.ru_stime.tv_sec - ru1.ru_stime.tv_sec ) * 1000); /* properly convert string to system encoding. */ Tcl_DStringInit(&dstr); diff --git a/src/tclhash.c b/src/tclhash.c index 5128821ba..76d170af8 100644 --- a/src/tclhash.c +++ b/src/tclhash.c @@ -744,15 +744,12 @@ static int trigger_bind(const char *proc, const char *param, char *mask) r = getrusage(RUSAGE_SELF, &ru1); } x = Tcl_VarEval(interp, proc, param, NULL); - if (proc && proc[0] != '*' && !r) { - if (!getrusage(RUSAGE_SELF, &ru2)) { - debug3("triggered bind %s, user %.3fms sys %.3fms", proc, - (double) (ru2.ru_utime.tv_usec - ru1.ru_utime.tv_usec) / 1000 + - (double) (ru2.ru_utime.tv_sec - ru1.ru_utime.tv_sec ) * 1000, - (double) (ru2.ru_stime.tv_usec - ru1.ru_stime.tv_usec) / 1000 + - (double) (ru2.ru_stime.tv_sec - ru1.ru_stime.tv_sec ) * 1000); - } - } + if (proc && proc[0] != '*' && !r && !getrusage(RUSAGE_SELF, &ru2)) + debug3("triggered bind %s, user %.3fms sys %.3fms", proc, + (double) (ru2.ru_utime.tv_usec - ru1.ru_utime.tv_usec) / 1000 + + (double) (ru2.ru_utime.tv_sec - ru1.ru_utime.tv_sec ) * 1000, + (double) (ru2.ru_stime.tv_usec - ru1.ru_stime.tv_usec) / 1000 + + (double) (ru2.ru_stime.tv_sec - ru1.ru_stime.tv_sec ) * 1000); if (x == TCL_ERROR) { /* FIXME: we really should be able to log longer errors */ From 7a11f22ada8fed47ce0747891b82e7394d2923dd Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 17:47:06 +0200 Subject: [PATCH 46/91] Do not call modules restart() function if null pointer Patch by: michaelortmann --- src/main.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index 5a4782ef6..2b1f059d7 100644 --- a/src/main.c +++ b/src/main.c @@ -901,7 +901,10 @@ static void mainloop(int toplevel) for (p = module_list; p; p = p->next) { if (p->funcs) { startfunc = p->funcs[MODCALL_START]; - startfunc(NULL); + if (startfunc) + startfunc(NULL); + else + debug2("module: %s: %s", p->name, MOD_NOSTARTDEF); } } From 093cc36cf99582b9c57f338b2a7c695db179e82a Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 17:47:32 +0200 Subject: [PATCH 47/91] Enhance module status report for zlib and python (#1563) Patch by: michaelortmann --- src/main.c | 4 ++-- src/mod/compress.mod/compress.c | 2 +- src/mod/python.mod/python.c | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main.c b/src/main.c index 2b1f059d7..ae7257645 100644 --- a/src/main.c +++ b/src/main.c @@ -303,10 +303,10 @@ static void write_debug() tcl_resultstring() : "*unknown*"); /* info tclversion/patchlevel */ - dprintf(-x, "Tcl version: %s (header version %s)\n", + dprintf(-x, "Tcl version: %s (header version " TCL_PATCH_LEVEL ")\n", ((interp) && (Tcl_Eval(interp, "info patchlevel") == TCL_OK)) ? tcl_resultstring() : (Tcl_Eval(interp, "info tclversion") == TCL_OK) ? - tcl_resultstring() : "*unknown*", TCL_PATCH_LEVEL); + tcl_resultstring() : "*unknown*"); if (tcl_threaded()) dprintf(-x, "Tcl is threaded\n"); diff --git a/src/mod/compress.mod/compress.c b/src/mod/compress.mod/compress.c index e94124fed..c4a86fb76 100644 --- a/src/mod/compress.mod/compress.c +++ b/src/mod/compress.mod/compress.c @@ -396,7 +396,7 @@ static int compress_report(int idx, int details) if (details) { int size = compress_expmem(); - dprintf(idx, " zlib version %s\n", ZLIB_VERSION); + dprintf(idx, " zlib version: %s (header version " ZLIB_VERSION ")\n", zlibVersion()); dprintf(idx, " %u file%s compressed\n", compressed_files, (compressed_files != 1) ? "s" : ""); dprintf(idx, " %u file%s uncompressed\n", uncompressed_files, diff --git a/src/mod/python.mod/python.c b/src/mod/python.mod/python.c index 60b3a052f..7a4ed7fce 100644 --- a/src/mod/python.mod/python.c +++ b/src/mod/python.mod/python.c @@ -112,7 +112,8 @@ static void kill_python() { static void python_report(int idx, int details) { - // TODO + if (details) + dprintf(idx, " python version: %s (header version " PY_VERSION ")\n", Py_GetVersion()); } static char *python_close() From d7d3c0c2b0dc04a4fa31c56c6daff8ad3f37ed78 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 17:47:51 +0200 Subject: [PATCH 48/91] Enhance auto detection of python-config Patch by: michaelortmann --- src/mod/python.mod/configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mod/python.mod/configure.ac b/src/mod/python.mod/configure.ac index dba914235..d91c6e503 100644 --- a/src/mod/python.mod/configure.ac +++ b/src/mod/python.mod/configure.ac @@ -21,7 +21,7 @@ python_avail="false" if test "x$egg_enable_python" != "xno"; then if test "x$egg_with_python_config" = "x"; then - AC_PATH_PROGS([python_config_bin], [python3-config python-config]) + AC_PATH_PROGS([python_config_bin], [python3-config python-config python3.12-config python3.11-config python3.10-config python3.9-config python3.8-config]) else if test -d "$egg_with_python_config"; then AC_MSG_NOTICE([Checking for python-config binaries in $egg_with_python_config]) From d0d075491ee0838dac6ea250f0d2263fd57a0225 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 17:48:27 +0200 Subject: [PATCH 49/91] Fix possible memleak from dns threads to main Patch by: michaelortmann --- src/dns.c | 22 +++++++++++++++------- src/eggdrop.h | 2 +- src/net.c | 6 ++++-- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/dns.c b/src/dns.c index d1b8042ef..69b3a03e5 100644 --- a/src/dns.c +++ b/src/dns.c @@ -492,6 +492,8 @@ void call_ipbyhost(char *hostn, sockname_t *ip, int ok) * is closed and the thread is ended by return. The other end will make * eggdrops mainloop select() return, read the result from the dns_thread_node * and call call_hostbyip() or call_ipbyhost(). No signal or tcl thread problem. + * + * defer debug() / putlog() from dns threads to main thread via dtn.strerror */ void *thread_dns_hostbyip(void *arg) @@ -502,8 +504,10 @@ void *thread_dns_hostbyip(void *arg) i = getnameinfo((const struct sockaddr *) &addr->addr.sa, addr->addrlen, dtn->host, sizeof dtn->host, NULL, 0, 0); - if (i) { - debug1("dns: thread_dns_hostbyip(): getnameinfo(): error = %s", gai_strerror(i)); + if (!i) + *dtn->strerror = 0; + else { + snprintf(dtn->strerror, sizeof dtn->strerror, "dns: thread_dns_hostbyip(): getnameinfo(): %s", gai_strerror(i)); #ifdef IPV6 if (addr->family == AF_INET6) inet_ntop(AF_INET6, &addr->addr.s6.sin6_addr, dtn->host, sizeof dtn->host); @@ -512,7 +516,6 @@ void *thread_dns_hostbyip(void *arg) inet_ntop(AF_INET, &addr->addr.s4.sin_addr.s_addr, dtn->host, sizeof dtn->host); } pthread_mutex_lock(&dtn->mutex); - dtn->ok = !i; close(dtn->fildes[1]); pthread_mutex_unlock(&dtn->mutex); return NULL; @@ -528,6 +531,7 @@ void *thread_dns_ipbyhost(void *arg) error = getaddrinfo(dtn->host, NULL, NULL, &res0); memset(addr, 0, sizeof *addr); if (!error) { + *dtn->strerror = 0; #ifdef IPV6 for (res = res0; res; res = res->ai_next) { if (res == res0 || res->ai_family == (pref_af ? AF_INET6 : AF_INET)) { @@ -545,21 +549,25 @@ void *thread_dns_ipbyhost(void *arg) addr->family = res->ai_family; addr->addrlen = res->ai_addrlen; memcpy(&addr->addr.sa, res->ai_addr, res->ai_addrlen); - error = 0; + error = 0; + *dtn->strerror = 0; break; } } + if (error) + snprintf(dtn->strerror, sizeof dtn->strerror, "dns: thread_dns_ipbyhost(): no ipv4"); #endif if (res0) /* The behavior of freeadrinfo(NULL) is left unspecified by RFCs * 2553 and 3493. Avoid to be compatible with all OSes. */ freeaddrinfo(res0); } else if (error == EAI_NONAME) - debug1("dns: thread_dns_ipbyhost(): getaddrinfo(): hostname %s not known", dtn->host); + snprintf(dtn->strerror, sizeof dtn->strerror, "dns: thread_dns_ipbyhost(): getaddrinfo(): not known"); + else if (error == EAI_SYSTEM) + snprintf(dtn->strerror, sizeof dtn->strerror, "dns: thread_dns_ipbyhost(): getaddrinfo(): %s: %s", gai_strerror(error), strerror(errno)); else - debug1("dns: thread_dns_ipbyhost(): getaddrinfo(): error = %s", gai_strerror(error)); + snprintf(dtn->strerror, sizeof dtn->strerror, "dns: thread_dns_ipbyhost(): getaddrinfo(): %s", gai_strerror(error)); pthread_mutex_lock(&dtn->mutex); - dtn->ok = !error; close(dtn->fildes[1]); pthread_mutex_unlock(&dtn->mutex); return NULL; diff --git a/src/eggdrop.h b/src/eggdrop.h index 076a16252..04296062d 100644 --- a/src/eggdrop.h +++ b/src/eggdrop.h @@ -757,7 +757,7 @@ struct dns_thread_node { int type; sockname_t addr; char host[256]; - int ok; + char strerror[3 * 64]; /* msg + gai_strerror() + strerror() */ struct dns_thread_node *next; }; diff --git a/src/net.c b/src/net.c index c8aa62cd5..8196d2b6e 100644 --- a/src/net.c +++ b/src/net.c @@ -1053,16 +1053,18 @@ int sockread(char *s, int *len, sock_list *slist, int slistmax, int tclonly) #ifdef EGG_TDNS dtn_prev = dns_thread_head; for (dtn = dtn_prev->next; dtn; dtn = dtn->next) { + if (*dtn->strerror) + debug2("%s: hostname %s", dtn->strerror, dtn->host); fd = dtn->fildes[0]; if (FD_ISSET(fd, &fdr)) { if (dtn->type == DTN_TYPE_HOSTBYIP) { pthread_mutex_lock(&dtn->mutex); - call_hostbyip(&dtn->addr, dtn->host, dtn->ok); + call_hostbyip(&dtn->addr, dtn->host, !*dtn->strerror); pthread_mutex_unlock(&dtn->mutex); } else { pthread_mutex_lock(&dtn->mutex); - call_ipbyhost(dtn->host, &dtn->addr, dtn->ok); + call_ipbyhost(dtn->host, &dtn->addr, !*dtn->strerror); pthread_mutex_unlock(&dtn->mutex); } close(dtn->fildes[0]); From f4eb285a41474209daeca3a4df5e084998c54807 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 17:49:05 +0200 Subject: [PATCH 50/91] Enhance verification of userfile perm Patch by: michaelortmann --- src/misc.c | 1 + src/tcl.c | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/misc.c b/src/misc.c index ee7ffc3d6..1c521475e 100644 --- a/src/misc.c +++ b/src/misc.c @@ -1422,6 +1422,7 @@ void make_rand_str(char *s, const int len) /* Convert an octal string into a decimal integer value. If the string * is empty or contains non-octal characters, -1 is returned. + * Deprecated, use strtol() instead. */ int oatoi(const char *octal) { diff --git a/src/tcl.c b/src/tcl.c index 9b069347f..5015fd5b5 100644 --- a/src/tcl.c +++ b/src/tcl.c @@ -183,9 +183,10 @@ static char *tcl_eggint(ClientData cdata, Tcl_Interp *irp, EGG_CONST char *name1, EGG_CONST char *name2, int flags) { - char *s, s1[40]; + char *s, s1[40], *endptr; long l; intinfo *ii = (intinfo *) cdata; + int p; if (flags & (TCL_TRACE_READS | TCL_TRACE_UNSETS)) { /* Special cases */ @@ -223,10 +224,9 @@ static char *tcl_eggint(ClientData cdata, Tcl_Interp *irp, default_uflags = fr.udef_global; } else if ((int *) ii->var == &userfile_perm) { - int p = oatoi(s); - - if (p <= 0) - return "Invalid userfile permissions"; + p = strtol(s, &endptr, 8); + if ((p < 01) || (p > 0777) || (*endptr)) + return "Invalid userfile permissions, must be octal between 01 and 0777"; userfile_perm = p; } else if ((ii->ro == 2) || ((ii->ro == 1) && protect_readonly)) return "Read-only variable"; From 077eb4ee0901970b4dcf131077c4607a4e70c2a4 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 17:49:28 +0200 Subject: [PATCH 51/91] Fix SERVER_NICKLEN off-by-one error Patch by: michaelortmann --- src/mod/filesys.mod/files.c | 12 ++++++------ src/mod/modvals.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/mod/filesys.mod/files.c b/src/mod/filesys.mod/files.c index f6c26edfc..edc491e3d 100644 --- a/src/mod/filesys.mod/files.c +++ b/src/mod/filesys.mod/files.c @@ -425,6 +425,12 @@ static void cmd_reget_get(int idx, char *par, int resend) long where = 0; int nicklen = NICKLEN; + if (!par[0]) { + dprintf(idx, "%s: %sget [nickname]\n", MISC_USAGE, + resend ? "re" : ""); + return; + } + what = newsplit(&par); /* Get the nick length if necessary. */ if (NICKLEN > 9) { module_entry *me = module_find("server", 1, 1); @@ -432,12 +438,6 @@ static void cmd_reget_get(int idx, char *par, int resend) if (me && me->funcs) nicklen = (*(int *)me->funcs[SERVER_NICKLEN]); } - if (!par[0]) { - dprintf(idx, "%s: %sget [nickname]\n", MISC_USAGE, - resend ? "re" : ""); - return; - } - what = newsplit(&par); if (strlen(par) > nicklen) { dprintf(idx, "%s", FILES_BADNICK); return; diff --git a/src/mod/modvals.h b/src/mod/modvals.h index 9ec2a9e18..6b955cad3 100644 --- a/src/mod/modvals.h +++ b/src/mod/modvals.h @@ -72,7 +72,7 @@ /* Server */ #define SERVER_BOTNAME 4 #define SERVER_BOTUSERHOST 5 -#define SERVER_NICKLEN 38 +#define SERVER_NICKLEN 37 /* IRC */ #define IRC_RECHECK_CHANNEL 15 #define IRC_RECHECK_CHANNEL_MODES 17 From 9ab2446f1ffa1712a7431ec135746af5d016a3af Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 17:49:44 +0200 Subject: [PATCH 52/91] Fix strcpy-param-overlap Patch by: michaelortmann --- src/mod/filesys.mod/filesys.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/mod/filesys.mod/filesys.c b/src/mod/filesys.mod/filesys.c index 2db7aec92..1c12721ba 100644 --- a/src/mod/filesys.mod/filesys.c +++ b/src/mod/filesys.mod/filesys.c @@ -212,11 +212,14 @@ static void dcc_files_pass(int idx, char *buf, int x) */ static int got_files_cmd(int idx, char *msg) { + const char *filt; char *code; - strcpy(msg, check_tcl_filt(idx, msg)); - if (!msg[0]) + filt = check_tcl_filt(idx, msg); + if (!filt[0]) return 1; + if (filt != msg) + strcpy(msg, filt); if (msg[0] == '.') msg++; code = newsplit(&msg); @@ -225,13 +228,17 @@ static int got_files_cmd(int idx, char *msg) static void dcc_files(int idx, char *buf, int i) { + const char*filt; + if (buf[0] && detect_dcc_flood(&dcc[idx].timeval, dcc[idx].u.file->chat, idx)) return; dcc[idx].timeval = now; - strcpy(buf, check_tcl_filt(idx, buf)); - if (!buf[0]) + filt = check_tcl_filt(idx, buf); + if (!filt[0]) return; + if (filt != buf) + strcpy(buf, filt); touch_laston(dcc[idx].user, "filearea", now); if (buf[0] == ',') { for (i = 0; i < dcc_total; i++) { From 0a389c350addd215303f811b2f2020b2f69c8413 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 17:50:07 +0200 Subject: [PATCH 53/91] Cleanup includes --- src/botcmd.c | 2 -- src/dcc.c | 1 - src/dccutil.c | 3 --- src/main.c | 1 - src/tclmisc.c | 1 - src/tcluser.c | 3 --- src/userrec.c | 2 -- src/users.c | 2 -- 8 files changed, 15 deletions(-) diff --git a/src/botcmd.c b/src/botcmd.c index f3440f3c7..1e14d0999 100644 --- a/src/botcmd.c +++ b/src/botcmd.c @@ -24,8 +24,6 @@ #include "main.h" #include "tandem.h" -#include "users.h" -#include "chan.h" #include "modules.h" extern char botnetnick[], ver[], admin[], network[], motdfile[]; diff --git a/src/dcc.c b/src/dcc.c index 9030f1a02..8079b84c5 100644 --- a/src/dcc.c +++ b/src/dcc.c @@ -25,7 +25,6 @@ #include "main.h" #include -#include "modules.h" #include "tandem.h" /* Includes for botnet md5 challenge/response code */ diff --git a/src/dccutil.c b/src/dccutil.c index 17b5054e9..24cb43cfd 100644 --- a/src/dccutil.c +++ b/src/dccutil.c @@ -27,9 +27,6 @@ #include #include "main.h" -#include -#include "chan.h" -#include "modules.h" #include "tandem.h" extern struct dcc_t *dcc; diff --git a/src/main.c b/src/main.c index ae7257645..8d2874f62 100644 --- a/src/main.c +++ b/src/main.c @@ -67,7 +67,6 @@ #include "version.h" #include "chan.h" #include "modules.h" -#include "tandem.h" #include "bg.h" #ifdef DEBUG /* For debug compile */ diff --git a/src/tclmisc.c b/src/tclmisc.c index ad9406809..c5db7090c 100644 --- a/src/tclmisc.c +++ b/src/tclmisc.c @@ -24,7 +24,6 @@ #include #include "main.h" #include "modules.h" -#include "tandem.h" #include "md5/md5.h" #ifdef HAVE_SYS_TIME_H diff --git a/src/tcluser.c b/src/tcluser.c index d8e51a48b..383de67f7 100644 --- a/src/tcluser.c +++ b/src/tcluser.c @@ -22,9 +22,6 @@ */ #include "main.h" -#include "users.h" -#include "chan.h" -#include "tandem.h" #include "modules.h" #include "string.h" diff --git a/src/userrec.c b/src/userrec.c index 487fd79a8..549d3ecf7 100644 --- a/src/userrec.c +++ b/src/userrec.c @@ -25,8 +25,6 @@ #include #include "main.h" -#include "users.h" -#include "chan.h" #include "modules.h" #include "tandem.h" diff --git a/src/users.c b/src/users.c index 703e344b1..2e35feb02 100644 --- a/src/users.c +++ b/src/users.c @@ -30,8 +30,6 @@ */ #include "main.h" -#include "users.h" -#include "chan.h" #include "modules.h" #include "tandem.h" From 31b43128a3e35ad9f872818dd53aac964ce09c12 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 17:50:42 +0200 Subject: [PATCH 54/91] Cleanup get_user_by_handle() Patch by: michaelortmann --- src/chanprog.c | 14 -------------- src/proto.h | 1 - src/userrec.c | 19 +++++++++++++++++-- src/users.h | 1 - 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/chanprog.c b/src/chanprog.c index 6fca64736..e8205f17b 100644 --- a/src/chanprog.c +++ b/src/chanprog.c @@ -140,20 +140,6 @@ struct userrec *check_chanlist(const char *host) return NULL; } -/* Shortcut for get_user_by_handle -- might have user record in channels - */ -struct userrec *check_chanlist_hand(const char *hand) -{ - struct chanset_t *chan; - memberlist *m; - - for (chan = chanset; chan; chan = chan->next) - for (m = chan->channel.member; m && m->nick[0]; m = m->next) - if (m->user && !strcasecmp(m->user->handle, hand)) - return m->user; - return NULL; -} - /* Clear the user pointers in the chanlists. * * Necessary when a hostmask is added/removed, a user is added or a new diff --git a/src/proto.h b/src/proto.h index 463a087d6..0d95ae488 100644 --- a/src/proto.h +++ b/src/proto.h @@ -338,7 +338,6 @@ void correct_handle(char *); int write_user(struct userrec *, FILE *, int); int write_ignores(FILE *f, int); void write_userfile(int); -struct userrec *check_dcclist_hand(char *); void touch_laston(struct userrec *, char *, time_t); void user_del_chan(char *); int check_conflags(struct flag_record *fr, int md); diff --git a/src/userrec.c b/src/userrec.c index 549d3ecf7..da5da6b42 100644 --- a/src/userrec.c +++ b/src/userrec.c @@ -159,7 +159,9 @@ int count_users(struct userrec *bu) return tot; } -struct userrec *check_dcclist_hand(char *handle) +/* Shortcut for get_user_by_handle -- might have user record in dccs + */ +static struct userrec *check_dcclist_hand(char *handle) { int i; @@ -169,6 +171,20 @@ struct userrec *check_dcclist_hand(char *handle) return NULL; } +/* Shortcut for get_user_by_handle -- might have user record in channels + */ +static struct userrec *check_chanlist_hand(const char *hand) +{ + struct chanset_t *chan; + memberlist *m; + + for (chan = chanset; chan; chan = chan->next) + for (m = chan->channel.member; m && m->nick[0]; m = m->next) + if (m->user && !strcasecmp(m->user->handle, hand)) + return m->user; + return NULL; +} + /* Search userlist for a provided account name * Returns: userrecord for user containing the account */ @@ -190,7 +206,6 @@ struct userrec *get_user_by_account(char *acct) return NULL; } - struct userrec *get_user_by_handle(struct userrec *bu, char *handle) { struct userrec *u, *ret; diff --git a/src/users.h b/src/users.h index 49f20853b..e9a451418 100644 --- a/src/users.h +++ b/src/users.h @@ -185,7 +185,6 @@ struct userrec *get_user_by_host(char *); struct userrec *get_user_by_account(char *); struct userrec *get_user_by_nick(char *); struct userrec *check_chanlist(const char *); -struct userrec *check_chanlist_hand(const char *); /* All the default userentry stuff, for code re-use */ From 0b6d61bb4ffafb33d74cf58fb5773460418bf137 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 17:50:58 +0200 Subject: [PATCH 55/91] Fix strcmp handle Patch by: michaelortmann --- src/mod/irc.mod/cmdsirc.c | 8 ++++---- src/mod/irc.mod/msgcmds.c | 2 +- src/mod/irc.mod/tclirc.c | 6 +++--- src/users.c | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/mod/irc.mod/cmdsirc.c b/src/mod/irc.mod/cmdsirc.c index 2491b6731..1caefe53e 100644 --- a/src/mod/irc.mod/cmdsirc.c +++ b/src/mod/irc.mod/cmdsirc.c @@ -389,7 +389,7 @@ static void cmd_halfop(struct userrec *u, int idx, char *par) egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); u2 = m->user ? m->user : get_user_by_host(s); - if (!u2 || strcmp(u2->handle, dcc[idx].nick) || (!chan_halfop(user) && + if (!u2 || strcasecmp(u2->handle, dcc[idx].nick) || (!chan_halfop(user) && (!glob_halfop(user) || chan_dehalfop(user)))) { dprintf(idx, "You are not a channel op on %s.\n", chan->dname); return; @@ -455,7 +455,7 @@ static void cmd_dehalfop(struct userrec *u, int idx, char *par) egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); u2 = m->user ? m->user : get_user_by_host(s); - if (!u2 || strcmp(u2->handle, dcc[idx].nick) || (!chan_halfop(user) && + if (!u2 || strcasecmp(u2->handle, dcc[idx].nick) || (!chan_halfop(user) && (!glob_halfop(user) || chan_dehalfop(user)))) { dprintf(idx, "You are not a channel op on %s.\n", chan->dname); return; @@ -536,7 +536,7 @@ static void cmd_voice(struct userrec *u, int idx, char *par) egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); u2 = m->user ? m->user : get_user_by_host(s); - if (!u2 || strcmp(u2->handle, dcc[idx].nick) || (!chan_voice(user) && + if (!u2 || strcasecmp(u2->handle, dcc[idx].nick) || (!chan_voice(user) && (!glob_voice(user) || chan_quiet(user)))) { dprintf(idx, "You are not a channel op or halfop on %s.\n", chan->dname); return; @@ -589,7 +589,7 @@ static void cmd_devoice(struct userrec *u, int idx, char *par) egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); u2 = m->user ? m->user : get_user_by_host(s); - if (!u2 || strcmp(u2->handle, dcc[idx].nick) || (!chan_voice(user) && + if (!u2 || strcasecmp(u2->handle, dcc[idx].nick) || (!chan_voice(user) && (!glob_voice(user) || chan_quiet(user)))) { dprintf(idx, "You are not a channel op or halfop on %s.\n", chan->dname); return; diff --git a/src/mod/irc.mod/msgcmds.c b/src/mod/irc.mod/msgcmds.c index e8baa831e..d179ceac9 100644 --- a/src/mod/irc.mod/msgcmds.c +++ b/src/mod/irc.mod/msgcmds.c @@ -226,7 +226,7 @@ static int msg_addhost(char *nick, char *host, struct userrec *u, char *par) if (!par[0]) { if (!quiet_reject) dprintf(DP_HELP, "NOTICE %s :You must supply a hostmask\n", nick); - } else if (rfc_casecmp(u->handle, origbotname)) { + } else if (strcasecmp(u->handle, origbotname)) { /* This could be used as detection... */ if (u_pass_match(u, "-")) { if (!quiet_reject) diff --git a/src/mod/irc.mod/tclirc.c b/src/mod/irc.mod/tclirc.c index 8f60e7f0f..36b485a2a 100644 --- a/src/mod/irc.mod/tclirc.c +++ b/src/mod/irc.mod/tclirc.c @@ -369,7 +369,7 @@ static int tcl_handonchan STDVAR egg_snprintf(nuh, sizeof nuh, "%s!%s", m->nick, m->userhost); m->user = get_user_by_host(nuh); } - if (m->user && !rfc_casecmp(m->user->handle, argv[1])) { + if (m->user && !strcasecmp(m->user->handle, argv[1])) { Tcl_AppendResult(irp, "1", NULL); return TCL_OK; } @@ -1056,7 +1056,7 @@ static int tcl_hand2nicks STDVAR m->tried_getuser = 1; m->user = get_user_by_host(nuh); } - if (m->user && !rfc_casecmp(m->user->handle, argv[1])) { + if (m->user && !strcasecmp(m->user->handle, argv[1])) { /* Is the nick of the user already in the list? */ Tcl_ListObjGetElements(irp, nicks, &nicksc, &nicksv); for (i = 0; i < nicksc; i++) { @@ -1101,7 +1101,7 @@ static int tcl_hand2nick STDVAR m->tried_getuser = 1; m->user = get_user_by_host(nuh); } - if (m->user && !rfc_casecmp(m->user->handle, argv[1])) { + if (m->user && !strcasecmp(m->user->handle, argv[1])) { Tcl_AppendResult(irp, m->nick, NULL); return TCL_OK; } diff --git a/src/users.c b/src/users.c index 2e35feb02..d5c48f234 100644 --- a/src/users.c +++ b/src/users.c @@ -1031,7 +1031,7 @@ void autolink_cycle(char *start) } /* new run through the user list */ while (u && !autc) { while (u && !autc) { - if (u->flags & USER_BOT && strcmp(u->handle, botnetnick)) { /* ignore our own user record */ + if (u->flags & USER_BOT && strcasecmp(u->handle, botnetnick)) { /* ignore our own user record */ bfl = bot_flags(u); if (bfl & (BOT_HUB | BOT_ALT)) { linked = 0; From 77f36579ba320484d277b393b99b6e9904ad93f2 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 17:52:52 +0200 Subject: [PATCH 56/91] TCL_INTERP_DESTROYED -> Tcl_InterpDeleted() Patch by: michaelortmann --- src/net.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/net.c b/src/net.c index 8196d2b6e..3e23acb97 100644 --- a/src/net.c +++ b/src/net.c @@ -1710,8 +1710,9 @@ char *traced_myiphostname(ClientData cd, Tcl_Interp *irp, EGG_CONST char *name1, { const char *value; - if (flags & TCL_INTERP_DESTROYED) + if (Tcl_InterpDeleted(irp)) return NULL; + /* Recover trace in case of unset. */ if (flags & TCL_TRACE_DESTROYED) { Tcl_TraceVar2(irp, name1, name2, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, traced_myiphostname, cd); From a9770041f147f78abe90a641f5d3ebb38f23b64f Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 5 May 2024 17:53:27 +0200 Subject: [PATCH 57/91] Cleanup includes Patch by: michaelortmann --- src/eggdrop.h | 7 ------- src/main.h | 7 +------ 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/src/eggdrop.h b/src/eggdrop.h index 04296062d..cca60c09a 100644 --- a/src/eggdrop.h +++ b/src/eggdrop.h @@ -89,13 +89,6 @@ #define PASSWORDMAX 30 /* highest value compatible to older eggdrop */ #define PASSWORDLEN PASSWORDMAX + 1 - -/* We have to generate compiler errors in a weird way since not all compilers - * support the #error preprocessor directive. */ -#ifndef STDC_HEADERS -# include "Error: Your system must have standard ANSI C headers." -#endif - #ifdef HAVE_UNISTD_H # include #endif diff --git a/src/main.h b/src/main.h index d9c3cc50d..f8f2b5032 100644 --- a/src/main.h +++ b/src/main.h @@ -57,12 +57,7 @@ # define TCL_CONST86 #endif -#ifdef HAVE_STDARG_H -# include -#else -# error "Must have stdarg.h" -#endif - +#include #include #include #include From cf3f1fbd5e6931c423269b8b4893d9aa3a092cbb Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 5 May 2024 13:33:46 -0400 Subject: [PATCH 58/91] Fix pbkdf2 bot linking Found by: @michaelortmann Patch by: @michaelortmann Fixes: Fix botnet linking issue in pbkdf2-only environment to properly access/compare PASS2 entries --- src/dcc.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/dcc.c b/src/dcc.c index 8079b84c5..3ce979ee5 100644 --- a/src/dcc.c +++ b/src/dcc.c @@ -354,10 +354,25 @@ static void dcc_bot_digest(int idx, char *challenge, char *password) dcc[idx].nick); } +static char *get_bot_pass(struct userrec *u) { + char *pass2 = get_user(&USERENTRY_PASS2, u); + char *pass = get_user(&USERENTRY_PASS, u); + if (pass2) { + if (!pass) { + pass = pass2; + if (encrypt_pass) + set_user(&USERENTRY_PASS, u, pass); + } else if (strcmp(pass2, pass) && encrypt_pass2) + pass = pass2; + } else if (pass && encrypt_pass2) + set_user(&USERENTRY_PASS2, u, pass); + return pass; +} + static void dcc_bot_new(int idx, char *buf, int x) { struct userrec *u = get_user_by_handle(userlist, dcc[idx].nick); - char *code, *pass2 = NULL, *pass = NULL; + char *code, *pass; if (raw_log) { if (!strncmp(buf, "s ", 2)) @@ -375,17 +390,7 @@ static void dcc_bot_new(int idx, char *buf, int x) /* We entered the wrong password */ putlog(LOG_BOTS, "*", DCC_BADPASS, dcc[idx].nick); else if (!strcasecmp(code, "passreq")) { - pass2 = get_user(&USERENTRY_PASS2, u); - pass = get_user(&USERENTRY_PASS, u); - if (pass2) { - if (!pass) { - pass = pass2; - if (encrypt_pass) - set_user(&USERENTRY_PASS, u, pass); - } else if (strcmp(pass2, pass) && encrypt_pass2) - pass = pass2; - } else if (pass && encrypt_pass2) - set_user(&USERENTRY_PASS2, u, pass); + pass = get_bot_pass(u); if (!pass || !strcmp(pass, "-")) { putlog(LOG_BOTS, "*", DCC_PASSREQ, dcc[idx].nick); dprintf(idx, "-\n"); @@ -595,7 +600,7 @@ static int dcc_bot_check_digest(int idx, char *remote_digest) char digest_string[33]; /* 32 for digest in hex + null */ unsigned char digest[16]; int i, ret; - char *password = get_user(&USERENTRY_PASS, dcc[idx].user); + char *password = get_bot_pass(dcc[idx].user); if (!password) return 1; From 134c18162a939634e161cf8e9568fa1b8bfc8f01 Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 5 May 2024 23:42:23 -0400 Subject: [PATCH 59/91] run autotools, makedepend --- configure | 101 +-- src/Makefile.in | 12 +- src/mod/compress.mod/configure | 2 +- src/mod/dns.mod/configure | 2 +- src/mod/python.mod/Makefile.in | 4 +- src/mod/python.mod/configure | 1107 ++++++++++++++++++-------------- 6 files changed, 703 insertions(+), 525 deletions(-) diff --git a/configure b/configure index 2f2ee20a6..2a6387317 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 1b958239. +# From configure.ac 98f8972a. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for Eggdrop 1.9.5. # @@ -617,7 +617,7 @@ PACKAGE_TARNAME='eggdrop' PACKAGE_VERSION='1.9.5' PACKAGE_STRING='Eggdrop 1.9.5' PACKAGE_BUGREPORT='bugs@eggheads.org' -PACKAGE_URL='' +PACKAGE_URL='https://www.eggheads.org' ac_unique_file="src/eggdrop.h" ac_default_prefix=\${HOME}/eggdrop @@ -660,7 +660,6 @@ MOD_UPDIR DEST EGGVERSION egg_with_python_config -egg_enable_python SSL_LIBS SSL_INCLUDES DEBCFLGS @@ -803,7 +802,6 @@ enable_tls with_sslinc with_ssllib enable_tdns -enable_python with_python_config ' ac_precious_vars='build_alias @@ -1462,8 +1460,6 @@ Optional Features and Packages: --with-sslinc=PATH Path to OpenSSL headers --with-ssllib=PATH Path to OpenSSL libraries --disable-tdns disable threaded DNS core - --enable-python enable Python support (autodetect) - --disable-python disable Python support --with-python-config=PATH Path to python-config Some influential environment variables: @@ -1480,6 +1476,7 @@ Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . +Eggdrop home page: . _ACEOF ac_status=$? fi @@ -8316,6 +8313,13 @@ rm -rf conftest* # Check for b64_ntop. If we have b64_ntop, we assume b64_pton as well. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for b64_ntop" >&5 printf %s "checking for b64_ntop... " >&6; } + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8331,15 +8335,17 @@ b64_ntop(NULL, 0, NULL, 0); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" +if ac_fn_c_try_run "$LINENO" then : found_b64_ntop=yes else $as_nop found_b64_ntop=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + if test "x$found_b64_ntop" = xno; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } @@ -8348,7 +8354,14 @@ printf "%s\n" "no" >&6; } printf %s "checking for b64_ntop with -lresolv... " >&6; } OLD_LIBS="$LIBS" LIBS="$LIBS -lresolv" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -8363,15 +8376,17 @@ b64_ntop(NULL, 0, NULL, 0); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" +if ac_fn_c_try_run "$LINENO" then : found_b64_ntop=yes else $as_nop found_b64_ntop=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + if test "x$found_b64_ntop" = xno; then LIBS="$OLD_LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 @@ -8381,7 +8396,14 @@ printf "%s\n" "no" >&6; } printf %s "checking for b64_ntop with -lnetwork... " >&6; } OLD_LIBS="$LIBS" LIBS="-lnetwork" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -8396,15 +8418,17 @@ b64_ntop(NULL, 0, NULL, 0); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" +if ac_fn_c_try_run "$LINENO" then : found_b64_ntop=yes else $as_nop found_b64_ntop=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + if test "x$found_b64_ntop" = xno; then LIBS="$OLD_LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 @@ -10124,7 +10148,7 @@ if test ${enable_tls+y} then : enableval=$enable_tls; tls_enabled="$enableval" else $as_nop - tls_enabled="$enableval" + tls_enabled="yes" fi @@ -10611,39 +10635,19 @@ printf "%s\n" "#define EGG_TDNS 1" >>confdefs.h # Check for Python - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile the Python module" >&5 -$as_echo_n "checking whether to compile the Python module... " >&6; } - # Check whether --enable-python was given. -if test "${enable_python+set}" = set; then : - enableval=$enable_python; egg_enable_python="$enableval" -fi - - # Check whether --enable-python was given. -if test "${enable_python+set}" = set; then : - enableval=$enable_python; egg_enable_python="$enableval" -else - egg_enable_python="autodetect" -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $egg_enable_python" >&5 -$as_echo "$egg_enable_python" >&6; } - - +EGG_PYTHON_ENABLE # Check whether --with-python-config was given. -if test "${with_python_config+set}" = set; then : +if test ${with_python_config+y} +then : withval=$with_python_config; - if test "x$enable_python" != "xno"; then - if test -d "$withval" || test -x "$withval"; then - egg_with_python_config="$withval" - else - egg_with_python_config="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Invalid path to python-config. $withval is not a directory and not an executable." >&5 -$as_echo "$as_me: WARNING: Invalid path to python-config. $withval is not a directory and not an executable." >&2;} - fi + if test -d "$withval" || test -x "$withval"; then + egg_with_python_config="$withval" + else + egg_with_python_config="no" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Invalid path to python-config. $withval is not a directory and not an executable." >&5 +printf "%s\n" "$as_me: WARNING: Invalid path to python-config. $withval is not a directory and not an executable." >&2;} fi fi @@ -11262,7 +11266,8 @@ $config_headers Configuration commands: $config_commands -Report bugs to ." +Report bugs to . +Eggdrop home page: ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` diff --git a/src/Makefile.in b/src/Makefile.in index b6254d13c..6c6be3ac1 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -118,13 +118,12 @@ dcc.o: dcc.c main.h ../config.h ../eggint.h ../lush.h lang.h eggdrop.h \ compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h tclhash.h \ chan.h users.h compat/compat.h compat/base64.h compat/inet_aton.h \ ../src/main.h compat/snprintf.h compat/explicit_bzero.h compat/strlcpy.h \ - modules.h mod/modvals.h tandem.h md5/md5.h + tandem.h md5/md5.h dccutil.o: dccutil.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/explicit_bzero.h compat/strlcpy.h modules.h mod/modvals.h \ - tandem.h + compat/explicit_bzero.h compat/strlcpy.h tandem.h dns.o: dns.c main.h ../config.h ../eggint.h ../lush.h lang.h eggdrop.h \ compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h tclhash.h \ chan.h users.h compat/compat.h compat/base64.h compat/inet_aton.h \ @@ -144,7 +143,7 @@ main.o: main.c ../config.h main.h ../eggint.h ../lush.h lang.h eggdrop.h \ compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h tclhash.h \ chan.h users.h compat/compat.h compat/base64.h compat/inet_aton.h \ ../src/main.h compat/snprintf.h compat/explicit_bzero.h compat/strlcpy.h \ - version.h modules.h mod/modvals.h tandem.h bg.h + version.h modules.h mod/modvals.h bg.h match.o: match.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ @@ -200,13 +199,12 @@ tclmisc.o: tclmisc.c main.h ../config.h ../eggint.h ../lush.h lang.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ compat/explicit_bzero.h compat/strlcpy.h modules.h mod/modvals.h \ - tandem.h md5/md5.h + md5/md5.h tcluser.o: tcluser.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/explicit_bzero.h compat/strlcpy.h tandem.h modules.h \ - mod/modvals.h + compat/explicit_bzero.h compat/strlcpy.h modules.h mod/modvals.h tls.o: tls.c main.h ../config.h ../eggint.h ../lush.h lang.h eggdrop.h \ compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h tclhash.h \ chan.h users.h compat/compat.h compat/base64.h compat/inet_aton.h \ diff --git a/src/mod/compress.mod/configure b/src/mod/compress.mod/configure index e95014b1d..2c3f4c0cc 100755 --- a/src/mod/compress.mod/configure +++ b/src/mod/compress.mod/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 1b958239. +# From configure.ac 98f8972a. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for Eggdrop Compress Module 1.9.5. # diff --git a/src/mod/dns.mod/configure b/src/mod/dns.mod/configure index 894006d91..07c7b3b57 100755 --- a/src/mod/dns.mod/configure +++ b/src/mod/dns.mod/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 1b958239. +# From configure.ac 98f8972a. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for Eggdrop DNS Module 1.9.5. # diff --git a/src/mod/python.mod/Makefile.in b/src/mod/python.mod/Makefile.in index e5b251ee9..be58760c3 100644 --- a/src/mod/python.mod/Makefile.in +++ b/src/mod/python.mod/Makefile.in @@ -43,5 +43,5 @@ distclean: clean ../../../src/mod/modvals.h ../../../src/tandem.h \ ../../../src/mod/irc.mod/irc.h ../../../src/mod/server.mod/server.h \ ../../../src/mod/python.mod/python.h \ - ../../../src/mod/python.mod/tclpython.c \ - ../../../src/mod/python.mod/pycmds.c + ../../../src/mod/python.mod/pycmds.c \ + ../../../src/mod/python.mod/tclpython.c diff --git a/src/mod/python.mod/configure b/src/mod/python.mod/configure index 532be77df..eadf4ed9c 100755 --- a/src/mod/python.mod/configure +++ b/src/mod/python.mod/configure @@ -1,12 +1,13 @@ #! /bin/sh -# From configure.ac 9fdf80a3. +# From configure.ac 98f8972a. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for Eggdrop Python Module 1.9.3. +# Generated by GNU Autoconf 2.71 for Eggdrop Python Module 1.10.0. # # Report bugs to . # # -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Inc. # # # This configure script is free software; the Free Software Foundation @@ -19,14 +20,16 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -36,46 +39,46 @@ esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -84,13 +87,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -99,8 +95,12 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -112,30 +112,10 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. @@ -157,20 +137,22 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + as_bourne_compatible="as_nop=: +if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else +else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( @@ -190,42 +172,53 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ) +then : -else +else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 +blah=\$(echo \$(echo blah)) +test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : + if (eval "$as_required") 2>/dev/null +then : as_have_required=yes -else +else $as_nop as_have_required=no fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null +then : -else +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base + as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null +then : break 2 fi fi @@ -233,14 +226,21 @@ fi esac as_found=false done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi +fi - if test "x$CONFIG_SHELL" != x; then : + if test "x$CONFIG_SHELL" != x +then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -258,18 +258,19 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." + if test x$as_have_required = xno +then : + printf "%s\n" "$0: This script requires a shell more modern than all" + printf "%s\n" "$0: the shells that I found on your system." + if test ${ZSH_VERSION+y} ; then + printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" + printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else - $as_echo "$0: Please tell bug-autoconf@gnu.org and bugs@eggheads.org + printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and bugs@eggheads.org $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do @@ -297,6 +298,7 @@ as_fn_unset () } as_unset=as_fn_unset + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -314,6 +316,14 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -328,7 +338,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -337,7 +347,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -376,12 +386,13 @@ as_fn_executable_p () # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -393,18 +404,27 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -416,9 +436,9 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -445,7 +465,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -489,7 +509,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -503,6 +523,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits exit } + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -516,6 +540,13 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -583,20 +614,22 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Eggdrop Python Module' PACKAGE_TARNAME='eggdrop-python-module' -PACKAGE_VERSION='1.9.3' -PACKAGE_STRING='Eggdrop Python Module 1.9.3' +PACKAGE_VERSION='1.10.0' +PACKAGE_STRING='Eggdrop Python Module 1.10.0' PACKAGE_BUGREPORT='bugs@eggheads.org' PACKAGE_URL='' ac_unique_file="python.c" ac_subst_vars='LTLIBOBJS LIBOBJS +AWK +PYTHON +PYTHON_VERSION PYTHON_LDFLAGS PYTHON_CFLAGS PYTHON_CONFIG_ARGS python_config_bin egg_with_python_config -egg_enable_python FGREP GREP target_alias @@ -641,12 +674,12 @@ SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking -enable_python with_python_config ' ac_precious_vars='build_alias host_alias -target_alias' +target_alias +PYTHON_VERSION' # Initialize some variables set by options. @@ -715,8 +748,6 @@ do *) ac_optarg=yes ;; esac - # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -757,9 +788,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -783,9 +814,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -996,9 +1027,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1012,9 +1043,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1058,9 +1089,9 @@ Try \`$0 --help' for more information" *) # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1076,7 +1107,7 @@ if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1140,7 +1171,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | +printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1197,7 +1228,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Eggdrop Python Module 1.9.3 to adapt to many kinds of systems. +\`configure' configures Eggdrop Python Module 1.10.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1260,22 +1291,24 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Eggdrop Python Module 1.9.3:";; + short | recursive ) echo "Configuration of Eggdrop Python Module 1.10.0:";; esac cat <<\_ACEOF -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-python enable Python support (autodetect) - --disable-python disable Python support - Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-python-config=PATH Path to python-config +Some influential environment variables: + PYTHON_VERSION + The installed Python version to use, for example '2.3'. This + string will be appended to the Python interpreter canonical + name. + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + Report bugs to . _ACEOF ac_status=$? @@ -1292,9 +1325,9 @@ if test "$ac_init_help" = "recursive"; then case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1322,7 +1355,8 @@ esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. + # Check for configure.gnu first; this name is used for a wrapper for + # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -1330,7 +1364,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix echo && $SHELL "$ac_srcdir/configure" --help=recursive else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1339,10 +1373,10 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Eggdrop Python Module configure 1.9.3 -generated by GNU Autoconf 2.69 +Eggdrop Python Module configure 1.10.0 +generated by GNU Autoconf 2.71 -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. @@ -1354,14 +1388,34 @@ fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## +ac_configure_args_raw= +for ac_arg +do + case $ac_arg in + *\'*) + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_configure_args_raw " '$ac_arg'" +done + +case $ac_configure_args_raw in + *$as_nl*) + ac_safe_unquote= ;; + *) + ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. + ac_unsafe_a="$ac_unsafe_z#~" + ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" + ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; +esac + cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Eggdrop Python Module $as_me 1.9.3, which was -generated by GNU Autoconf 2.69. Invocation command line was +It was created by Eggdrop Python Module $as_me 1.10.0, which was +generated by GNU Autoconf 2.71. Invocation command line was - $ $0 $@ + $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log @@ -1394,8 +1448,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS @@ -1430,7 +1488,7 @@ do | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -1465,11 +1523,13 @@ done # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? + # Sanitize IFS. + IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - $as_echo "## ---------------- ## + printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -1480,8 +1540,8 @@ trap 'exit_status=$? case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -1505,7 +1565,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ) echo - $as_echo "## ----------------- ## + printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -1513,14 +1573,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## + printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -1528,15 +1588,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - $as_echo "## ----------- ## + printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -1544,8 +1604,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; echo fi test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" + printf "%s\n" "$as_me: caught signal $ac_signal" + printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -1559,63 +1619,48 @@ ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -$as_echo "/* confdefs.h */" > confdefs.h +printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF +printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF +printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF +printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF +printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF +printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF +printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac + ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site + ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site + ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" + +for ac_site_file in $ac_site_files do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} + case $ac_site_file in #( + */*) : + ;; #( + *) : + ac_site_file=./$ac_site_file ;; +esac + if test -f "$ac_site_file" && test -r "$ac_site_file"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi @@ -1625,16 +1670,16 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi @@ -1648,12 +1693,12 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -1662,24 +1707,24 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in @@ -1689,11 +1734,12 @@ $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi done if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## @@ -1708,44 +1754,17 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -ac_aux_dir= -for ac_dir in ../../../misc "$srcdir"/../../../misc; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in ../../../misc \"$srcdir\"/../../../misc" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +printf %s "checking for grep that handles long lines and -e... " >&6; } +if test ${ac_cv_path_GREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST @@ -1753,10 +1772,15 @@ else for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in grep ggrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP @@ -1765,13 +1789,13 @@ case `"$ac_path_GREP" --version 2>&1` in ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" + printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -1799,16 +1823,17 @@ else fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +printf %s "checking for fgrep... " >&6; } +if test ${ac_cv_path_FGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else @@ -1819,10 +1844,15 @@ else for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in fgrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP @@ -1831,13 +1861,13 @@ case `"$ac_path_FGREP" --version 2>&1` in ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" + printf "%s\n" 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -1866,44 +1896,23 @@ fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +printf "%s\n" "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile the Python module" >&5 -$as_echo_n "checking whether to compile the Python module... " >&6; } - # Check whether --enable-python was given. -if test "${enable_python+set}" = set; then : - enableval=$enable_python; egg_enable_python="$enableval" -fi - - # Check whether --enable-python was given. -if test "${enable_python+set}" = set; then : - enableval=$enable_python; egg_enable_python="$enableval" -else - egg_enable_python="autodetect" -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $egg_enable_python" >&5 -$as_echo "$egg_enable_python" >&6; } - - - # Check whether --with-python-config was given. -if test "${with_python_config+set}" = set; then : +if test ${with_python_config+y} +then : withval=$with_python_config; - if test "x$enable_python" != "xno"; then - if test -d "$withval" || test -x "$withval"; then - egg_with_python_config="$withval" - else - egg_with_python_config="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Invalid path to python-config. $withval is not a directory and not an executable." >&5 -$as_echo "$as_me: WARNING: Invalid path to python-config. $withval is not a directory and not an executable." >&2;} - fi + if test -d "$withval" || test -x "$withval"; then + egg_with_python_config="$withval" + else + egg_with_python_config="no" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Invalid path to python-config. $withval is not a directory and not an executable." >&5 +printf "%s\n" "$as_me: WARNING: Invalid path to python-config. $withval is not a directory and not an executable." >&2;} fi fi @@ -1915,15 +1924,16 @@ python_avail="false" if test "x$egg_enable_python" != "xno"; then if test "x$egg_with_python_config" = "x"; then - for ac_prog in python3-config python-config + for ac_prog in python3-config python-config python3.12-config python3.11-config python3.10-config python3.9-config python3.8-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_python_config_bin+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_python_config_bin+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $python_config_bin in [\\/]* | ?:[\\/]*) ac_cv_path_python_config_bin="$python_config_bin" # Let the user override the test with a path. @@ -1933,11 +1943,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_python_config_bin="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_python_config_bin="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -1949,11 +1963,11 @@ esac fi python_config_bin=$ac_cv_path_python_config_bin if test -n "$python_config_bin"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_config_bin" >&5 -$as_echo "$python_config_bin" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $python_config_bin" >&5 +printf "%s\n" "$python_config_bin" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -1962,17 +1976,18 @@ done else if test -d "$egg_with_python_config"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Checking for python-config binaries in $egg_with_python_config" >&5 -$as_echo "$as_me: Checking for python-config binaries in $egg_with_python_config" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Checking for python-config binaries in $egg_with_python_config" >&5 +printf "%s\n" "$as_me: Checking for python-config binaries in $egg_with_python_config" >&6;} for ac_prog in python3-config python-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_python_config_bin+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_python_config_bin+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $python_config_bin in [\\/]* | ?:[\\/]*) ac_cv_path_python_config_bin="$python_config_bin" # Let the user override the test with a path. @@ -1982,11 +1997,15 @@ else for as_dir in $egg_with_python_config do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_python_config_bin="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_python_config_bin="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -1998,11 +2017,11 @@ esac fi python_config_bin=$ac_cv_path_python_config_bin if test -n "$python_config_bin"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_config_bin" >&5 -$as_echo "$python_config_bin" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $python_config_bin" >&5 +printf "%s\n" "$python_config_bin" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -2013,59 +2032,217 @@ done if test -x "$egg_with_python_config"; then python_config_bin="$egg_with_python_config" else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Specified --with-python-config=$egg_with_python_config does not exist." >&5 -$as_echo "$as_me: WARNING: Specified --with-python-config=$egg_with_python_config does not exist." >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Specified --with-python-config=$egg_with_python_config does not exist." >&5 +printf "%s\n" "$as_me: WARNING: Specified --with-python-config=$egg_with_python_config does not exist." >&2;} fi fi fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: Python module disabled." >&5 -$as_echo "$as_me: Python module disabled." >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Python module disabled." >&5 +printf "%s\n" "$as_me: Python module disabled." >&6;} fi if test "x$python_config_bin" != "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether python-config supports --embed" >&5 -$as_echo_n "checking whether python-config supports --embed... " >&6; } - if $python_config_bin --help | $FGREP -q -- --embed; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether python-config supports --embed" >&5 +printf %s "checking whether python-config supports --embed... " >&6; } + if $python_config_bin --help | $FGREP -q -- --embed +then : PYTHON_CONFIG_ARGS="--embed" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -else +else $as_nop PYTHON_CONFIG_ARGS="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python C flags" >&5 -$as_echo_n "checking for python C flags... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for python C flags" >&5 +printf %s "checking for python C flags... " >&6; } PYTHON_CFLAGS=`$python_config_bin $PYTHON_CONFIG_ARGS --cflags` - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_CFLAGS" >&5 -$as_echo "$PYTHON_CFLAGS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON_CFLAGS" >&5 +printf "%s\n" "$PYTHON_CFLAGS" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python LD flags" >&5 -$as_echo_n "checking for python LD flags... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for python LD flags" >&5 +printf %s "checking for python LD flags... " >&6; } PYTHON_LDFLAGS=`$python_config_bin $PYTHON_CONFIG_ARGS --ldflags` - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_LDFLAGS" >&5 -$as_echo "$PYTHON_LDFLAGS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON_LDFLAGS" >&5 +printf "%s\n" "$PYTHON_LDFLAGS" >&6; } python_avail="true" fi +# Check python path + + +# Extract the first word of "python[$PYTHON_VERSION]", so it can be a program name with args. +set dummy python$PYTHON_VERSION; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PYTHON+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +printf "%s\n" "$PYTHON" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + if test -z "$PYTHON"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find python$PYTHON_VERSION in your system path" >&5 +printf "%s\n" "$as_me: WARNING: Cannot find python$PYTHON_VERSION in your system path" >&2;} + if ! $ax_python_devel_optional; then + as_fn_error $? "Giving up, python development not available" "$LINENO" 5 + fi + ax_python_devel_found=no + PYTHON_VERSION="" +fi + +# Check for python version + python_ver=`$PYTHON -c "import sys; \ + print(sys.version.split ()[0])"` + for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AWK+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +printf "%s\n" "$AWK" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + test -n "$AWK" && break +done + + + + + # Used to indicate true or false condition + ax_compare_version=false + + # Convert the two version strings to be compared into a format that + # allows a simple string comparison. The end result is that a version + # string of the form 1.12.5-r617 will be converted to the form + # 0001001200050617. In other words, each number is zero padded to four + # digits, and non digits are removed. + + ax_compare_version_A=`echo "$python_ver" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ + -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/[^0-9]//g'` + + + ax_compare_version_B=`echo "3.8.0" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ + -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/[^0-9]//g'` + + + ax_compare_version=`echo "x$ax_compare_version_A +x$ax_compare_version_B" | sed 's/^ *//' | sort -r | sed "s/x${ax_compare_version_A}/true/;s/x${ax_compare_version_B}/false/;1q"` + + + + if test "$ax_compare_version" = "true" ; then + ax_check_ver="yes" + else ax_check_ver="no" + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking $PYTHON version is >= 3.8.0" >&5 +printf %s "checking $PYTHON version is >= 3.8.0... " >&6; } + if test "x$ax_check_ver" = x"no"; then + python_avail="false" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no ($python_ver)" >&5 +printf "%s\n" "no ($python_ver)" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Eggdrop requires python version 3.8.0 or higher" >&5 +printf "%s\n" "$as_me: WARNING: Eggdrop requires python version 3.8.0 or higher" >&2;} + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes ($python_ver)" >&5 +printf "%s\n" "yes ($python_ver)" >&6; } + fi + # Disable the module if test "x$python_avail" = "xfalse"; then if test "x$egg_enable_python" != "xno"; then cat >&2 <&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -2134,15 +2311,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -2156,8 +2333,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;} fi fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -2210,7 +2387,7 @@ U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" @@ -2226,8 +2403,8 @@ LTLIBOBJS=$ac_ltlibobjs ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL @@ -2250,14 +2427,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -2267,46 +2446,46 @@ esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -2315,13 +2494,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -2330,8 +2502,12 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -2343,30 +2519,10 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] @@ -2379,13 +2535,14 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -2412,18 +2569,20 @@ as_fn_unset () { eval $1=; unset $1;} } as_unset=as_fn_unset + # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -2435,12 +2594,13 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` @@ -2471,7 +2631,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -2493,6 +2653,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -2506,6 +2670,12 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -2547,7 +2717,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -2556,7 +2726,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -2618,8 +2788,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Eggdrop Python Module $as_me 1.9.3, which was -generated by GNU Autoconf 2.69. Invocation command line was +This file was extended by Eggdrop Python Module $as_me 1.10.0, which was +generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -2668,19 +2838,22 @@ $config_files Report bugs to ." _ACEOF +ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` +ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -Eggdrop Python Module config.status 1.9.3 -configured by $0, generated by GNU Autoconf 2.69, +Eggdrop Python Module config.status 1.10.0 +configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' +AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF @@ -2712,21 +2885,21 @@ do -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; + printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; + printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; + printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; @@ -2754,7 +2927,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -2768,7 +2941,7 @@ exec 5>>config.log sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - $as_echo "$ac_log" + printf "%s\n" "$ac_log" } >&5 _ACEOF @@ -2793,7 +2966,7 @@ done # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree @@ -3021,7 +3194,7 @@ do esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done @@ -3029,17 +3202,17 @@ do # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | + ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -3056,7 +3229,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | +printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -3080,9 +3253,9 @@ $as_echo X"$ac_file" | case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -3135,8 +3308,8 @@ ac_sed_dataroot=' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' @@ -3178,9 +3351,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -3227,6 +3400,8 @@ if test "$no_create" != yes; then $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi + + From e28a0a023fe077fbec2343f8eb494371138fcd44 Mon Sep 17 00:00:00 2001 From: Geo Date: Thu, 9 May 2024 15:12:14 -0400 Subject: [PATCH 60/91] Add IRCv3 standard-replies --- src/mod/server.mod/servmsg.c | 51 ++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/mod/server.mod/servmsg.c b/src/mod/server.mod/servmsg.c index 85baed7cf..952ff70bf 100644 --- a/src/mod/server.mod/servmsg.c +++ b/src/mod/server.mod/servmsg.c @@ -2001,6 +2001,54 @@ static int got730or1(char *from, char *msg, int code) return 0; } +/* Got IRCv3 standard-reply + * [...] + */ +static int gotstdreply(char *from, char *msgtype, char *msg) +{ + char *cmd, *code, *text; + char context[MSGMAX] = ""; + int len; + + cmd = newsplit(&msg); + code = newsplit(&msg); +/* TODO: Once this feature is better implemented, consider how to handle + * one-word descriptions that aren't technically required to have a : + */ + text = strstr(msg, " :"); + if (text) { + text++; + if (text != msg) { + len = text - msg; + snprintf(context, sizeof context, "%.*s", len, msg); + } + fixcolon(text); + } + putlog(LOG_SERV, "*", "%s: %s: Received a %s message from %s: %s", cmd, code, msgtype, from, text); + return 0; +} + +/* Got IRCv3 FAIL standard-reply */ +static int gotstdfail(char *from, char *msg) +{ + gotstdreply(from, "FAIL", msg); + return 0; +} + +/* Got IRCv3 NOTE standard-reply */ +static int gotstdnote(char *from, char *msg) +{ + gotstdreply(from, "NOTE", msg); + return 0; +} + +/* Got IRCv3 WARN standard-reply */ +static int gotstdwarn(char *from, char *msg) +{ + gotstdreply(from, "WARN", msg); + return 0; +} + /* Got 730/RPL_MONONLINE * : 730 :target[!user@host][,target[!user@host]]* */ @@ -2097,6 +2145,9 @@ static cmd_t my_raw_binds[] = { {"PING", "", (IntFunc) gotping, NULL}, {"PONG", "", (IntFunc) gotpong, NULL}, {"WALLOPS", "", (IntFunc) gotwall, NULL}, + {"FAIL", "", (IntFunc) gotstdfail, NULL}, + {"NOTE", "", (IntFunc) gotstdnote, NULL}, + {"WARN", "", (IntFunc) gotstdwarn, NULL}, {"001", "", (IntFunc) got001, NULL}, {"005", "", (IntFunc) got005, NULL}, {"303", "", (IntFunc) got303, NULL}, From 39a582cda2e587d2aa6f95028d078ab4f739ecbe Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 25 May 2024 11:46:05 -0400 Subject: [PATCH 61/91] Full account tacking (#1585) Patch by: Geo, thommey Closes: #1369 --- doc/sphinx_source/using/tcl-commands.rst | 2 +- src/chan.h | 3 +- src/chanprog.c | 45 +------ src/mod/channels.mod/userchan.c | 7 +- src/mod/irc.mod/chan.c | 151 ++++++++++++----------- src/mod/irc.mod/cmdsirc.c | 68 ++++------ src/mod/irc.mod/irc.c | 40 +++--- src/mod/irc.mod/mode.c | 31 ++--- src/mod/irc.mod/msgcmds.c | 7 +- src/mod/irc.mod/tclirc.c | 48 +++---- src/mod/module.h | 3 +- src/mod/notes.mod/notes.c | 4 +- src/mod/seen.mod/seen.c | 10 +- src/modules.c | 4 +- src/userrec.c | 61 ++++----- src/users.h | 1 + src/version.h | 4 +- 17 files changed, 200 insertions(+), 289 deletions(-) diff --git a/doc/sphinx_source/using/tcl-commands.rst b/doc/sphinx_source/using/tcl-commands.rst index 7953dccbd..6a662052c 100644 --- a/doc/sphinx_source/using/tcl-commands.rst +++ b/doc/sphinx_source/using/tcl-commands.rst @@ -1136,7 +1136,7 @@ nick2hand [channel] Module: irc ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -account2nicks [channel] +account2nicks [channel] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Returns: a de-duplicated Tcl list of the nickname(s) on the specified channel (if one is specified) whose nickname matches the given account; "" is returned if no match is found. This command will only work if a server supports (and Eggdrop has enabled) the account-notify and extended-join capabilities, and the server understands WHOX requests (also known as raw 354 responses). If no channel is specified, all channels are checked. diff --git a/src/chan.h b/src/chan.h index 19a56e5a1..d5f11257d 100644 --- a/src/chan.h +++ b/src/chan.h @@ -50,8 +50,7 @@ typedef struct memstruct { time_t split; /* in case they were just netsplit */ time_t last; /* for measuring idle time */ time_t delay; /* for delayed autoop */ - struct userrec *user; - int tried_getuser; + int tried_getuser; // TODO: use it to invalidate user cache struct memstruct *next; } memberlist; diff --git a/src/chanprog.c b/src/chanprog.c index e8205f17b..37e03d61a 100644 --- a/src/chanprog.c +++ b/src/chanprog.c @@ -116,30 +116,6 @@ struct chanset_t *findchan_by_dname(const char *name) return NULL; } - -/* - * "caching" functions - */ - -/* Shortcut for get_user_by_host -- might have user record in one - * of the channel caches. - */ -struct userrec *check_chanlist(const char *host) -{ - char *nick, *uhost, buf[UHOSTLEN]; - memberlist *m; - struct chanset_t *chan; - - strlcpy(buf, host, sizeof buf); - uhost = buf; - nick = splitnick(&uhost); - for (chan = chanset; chan; chan = chan->next) - for (m = chan->channel.member; m && m->nick[0]; m = m->next) - if (!rfc_casecmp(nick, m->nick) && !strcasecmp(uhost, m->userhost)) - return m->user; - return NULL; -} - /* Clear the user pointers in the chanlists. * * Necessary when a hostmask is added/removed, a user is added or a new @@ -152,13 +128,12 @@ void clear_chanlist(void) for (chan = chanset; chan; chan = chan->next) for (m = chan->channel.member; m && m->nick[0]; m = m->next) { - m->user = NULL; m->tried_getuser = 0; } } /* Clear the user pointer of a specific nick in the chanlists. - * + * Necessary when a hostmask is added/removed, a nick changes, etc. * Does not completely invalidate the channel cache like clear_chanlist(). */ @@ -170,29 +145,11 @@ void clear_chanlist_member(const char *nick) for (chan = chanset; chan; chan = chan->next) for (m = chan->channel.member; m && m->nick[0]; m = m->next) if (!rfc_casecmp(m->nick, nick)) { - m->user = NULL; m->tried_getuser = 0; break; } } -/* If this user@host is in a channel, set it (it was null) - */ -void set_chanlist(const char *host, struct userrec *rec) -{ - char *nick, *uhost, buf[UHOSTLEN]; - memberlist *m; - struct chanset_t *chan; - - strlcpy(buf, host, sizeof buf); - uhost = buf; - nick = splitnick(&uhost); - for (chan = chanset; chan; chan = chan->next) - for (m = chan->channel.member; m && m->nick[0]; m = m->next) - if (!rfc_casecmp(nick, m->nick) && !strcasecmp(uhost, m->userhost)) - m->user = rec; -} - /* Calculate the memory we should be using */ int expmem_chanprog() diff --git a/src/mod/channels.mod/userchan.c b/src/mod/channels.mod/userchan.c index 12d5c3202..2bac2ac3a 100644 --- a/src/mod/channels.mod/userchan.c +++ b/src/mod/channels.mod/userchan.c @@ -1270,12 +1270,7 @@ static int expired_mask(struct chanset_t *chan, char *who) * present in the channel and has op. */ - if (m->user) - u = m->user; - else { - simple_sprintf(buf, "%s!%s", m->nick, m->userhost); - u = get_user_by_host(buf); - } + u = get_user_from_member(m); /* Do not expire masks set by bots. */ if (u && u->flags & USER_BOT) return 0; diff --git a/src/mod/irc.mod/chan.c b/src/mod/irc.mod/chan.c index 0a80927e9..1d0082547 100644 --- a/src/mod/irc.mod/chan.c +++ b/src/mod/irc.mod/chan.c @@ -110,7 +110,7 @@ static void setaccount(char *nick, char *account) } else { putlog(LOG_MODES, chan->dname, "%s!%s logged in to their account %s", nick, m->userhost, account); } - check_tcl_account(m->nick, m->userhost, m->user, chan->dname, account); + check_tcl_account(m->nick, m->userhost, get_user_from_member(m), chan->dname, account); } strlcpy(m->account, account, sizeof m->account); } @@ -207,9 +207,11 @@ static void do_mask(struct chanset_t *chan, masklist *m, char *mask, char mode) /* This is a clone of detect_flood, but works for channel specificity now * and handles kick & deop as well. + * + * victim for flood-deop, account for flood-join */ static int detect_chan_flood(char *floodnick, char *floodhost, char *from, - struct chanset_t *chan, int which, char *victim) + struct chanset_t *chan, int which, char *victim_or_account) { char h[NICKMAX+UHOSTLEN+1], ftype[12], *p; struct userrec *u; @@ -236,7 +238,16 @@ static int detect_chan_flood(char *floodnick, char *floodhost, char *from, if (!m && (which != FLOOD_JOIN)) return 0; - get_user_flagrec(get_user_by_host(from), &fr, chan->dname); + if (m) { + u = get_user_from_member(m); + } else { + u = victim_or_account ? get_user_by_account(victim_or_account) : NULL; + if (!u) { + u = get_user_by_host(from); + } + } + + get_user_flagrec(u, &fr, chan->dname); if (glob_bot(fr) || ((which == FLOOD_DEOP) && (glob_master(fr) || chan_master(fr)) && (glob_friend(fr) || chan_friend(fr))) || ((which == FLOOD_KICK) && (glob_master(fr) || chan_master(fr)) && @@ -307,10 +318,10 @@ static int detect_chan_flood(char *floodnick, char *floodhost, char *from, } /* Deop'n the same person, sillyness ;) - so just ignore it */ if (which == FLOOD_DEOP) { - if (!rfc_casecmp(chan->deopd, victim)) + if (!rfc_casecmp(chan->deopd, victim_or_account)) return 0; else - strlcpy(chan->deopd, victim, sizeof chan->deopd); + strlcpy(chan->deopd, victim_or_account, sizeof chan->deopd); } chan->floodnum[which]++; if (chan->floodnum[which] >= thr) { /* FLOOD */ @@ -320,7 +331,7 @@ static int detect_chan_flood(char *floodnick, char *floodhost, char *from, chan->floodwho[which][0] = 0; if (which == FLOOD_DEOP) chan->deopd[0] = 0; - u = get_user_by_host(from); + u = get_user_from_member(m); if (check_tcl_flud(floodnick, floodhost, u, ftype, chan->dname)) return 0; switch (which) { @@ -425,8 +436,7 @@ static void kick_all(struct chanset_t *chan, char *hostmask, char *comment, flushed = 0; kicknick[0] = 0; for (m = chan->channel.member; m && m->nick[0]; m = m->next) { - sprintf(s, "%s!%s", m->nick, m->userhost); - get_user_flagrec(m->user ? m->user : get_user_by_host(s), &fr, chan->dname); + get_user_flagrec(get_user_from_member(m), &fr, chan->dname); if ((me_op(chan) || (me_halfop(chan) && !chan_hasop(m))) && match_addr(hostmask, s) && !chan_sentkick(m) && !match_my_nick(m->nick) && !chan_issplit(m) && @@ -474,10 +484,7 @@ static void refresh_ban_kick(struct chanset_t *chan, char *user, char *nick) if (match_addr(b->mask, user)) { struct flag_record fr = { FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0 }; char c[512]; /* The ban comment. */ - char s[NICKMAX+UHOSTLEN+1]; - - sprintf(s, "%s!%s", m->nick, m->userhost); - get_user_flagrec(m->user ? m->user : get_user_by_host(s), &fr, + get_user_flagrec(get_user_from_member(m), &fr, chan->dname); if (!glob_friend(fr) && !chan_friend(fr)) { add_mode(chan, '-', 'o', nick); /* Guess it can't hurt. */ @@ -869,7 +876,7 @@ static void check_this_member(struct chanset_t *chan, char *nick, (me_op(chan) || (me_halfop(chan) && !chan_hasop(m)))) { check_exemptlist(chan, s); quickban(chan, m->userhost); - p = get_user(&USERENTRY_COMMENT, m->user); + p = get_user(&USERENTRY_COMMENT, get_user_from_member(m)); dprintf(DP_SERVER, "KICK %s %s :%s\n", chan->name, m->nick, p ? p : IRC_POLITEKICK); m->flags |= SENTKICK; @@ -888,8 +895,7 @@ static void check_this_user(char *hand, int delete, char *host) for (chan = chanset; chan; chan = chan->next) for (m = chan->channel.member; m && m->nick[0]; m = m->next) { - sprintf(s, "%s!%s", m->nick, m->userhost); - u = m->user ? m->user : get_user_by_host(s); + u = get_user_from_member(m); if ((u && !strcasecmp(u->handle, hand) && delete < 2) || (!u && delete == 2 && match_addr(host, s))) { u = delete ? NULL : u; @@ -904,8 +910,8 @@ static void check_this_user(char *hand, int delete, char *host) static void recheck_channel(struct chanset_t *chan, int dobans) { memberlist *m; - char s[NICKMAX+UHOSTLEN+1]; struct flag_record fr = { FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0 }; + struct userrec *u; static int stacking = 0; int stop_reset = 0; @@ -915,12 +921,8 @@ static void recheck_channel(struct chanset_t *chan, int dobans) stacking++; /* Okay, sort through who needs to be deopped. */ for (m = chan->channel.member; m && m->nick[0]; m = m->next) { - sprintf(s, "%s!%s", m->nick, m->userhost); - if (!m->user && !m->tried_getuser) { - m->tried_getuser = 1; - m->user = get_user_by_host(s); - } - get_user_flagrec(m->user, &fr, chan->dname); + u = get_user_from_member(m); + get_user_flagrec(u, &fr, chan->dname); if (glob_bot(fr) && chan_hasop(m) && !match_my_nick(m->nick)) stop_reset = 1; /* Perhaps we were halfop and tried to halfop/kick the user earlier but @@ -1084,7 +1086,6 @@ static int got352or4(struct chanset_t *chan, char *user, char *host, simple_sprintf(m->userhost, "%s@%s", user, host); simple_sprintf(userhost, "%s!%s", nick, m->userhost); /* Combine n!u@h */ - m->user = NULL; /* No handle match (yet) */ if (match_my_nick(nick)) /* Is it me? */ strcpy(botuserhost, m->userhost); /* Yes, save my own userhost */ m->flags |= WHO_SYNCED; @@ -1115,7 +1116,6 @@ static int got352or4(struct chanset_t *chan, char *user, char *host, if (chan->need_op[0]) do_tcl("need-op", chan->need_op); } - m->user = get_user_by_host(userhost); /* Update accountname in channel records, 0 means logged out */ /* A 0 is not a change from "" */ @@ -1214,7 +1214,7 @@ static int got354(char *from, char *msg) } return 0; } - + /* React to IRCv3 CHGHOST command. CHGHOST changes the hostname and/or * ident of the user. Format: * :geo!awesome@eggdrop.com CHGHOST tehgeo foo.io @@ -1234,17 +1234,16 @@ static int gotchghost(char *from, char *msg){ if (match_my_nick(nick)) { snprintf(botuserhost, UHOSTMAX, "%s@%s", ident, msg); } - u = get_user_by_host(from); /* Run the bind for each channel the user is on */ for (chan = chanset; chan; chan = chan->next) { chname = chan->dname; m = ismember(chan, nick); if (m) { + u = get_user_from_member(m); snprintf(m->userhost, sizeof m->userhost, "%s@%s", ident, msg); snprintf(mask, sizeof mask, "%s %s!%s@%s", chname, nick, ident, msg); check_tcl_chghost(nick, from, mask, u, chname, ident, msg); - get_user_flagrec(m->user ? m->user : get_user_by_host(s1), &fr, - chan->dname); + get_user_flagrec(u, &fr, chan->dname); check_this_member(chan, m->nick, &fr); } } @@ -1309,7 +1308,7 @@ static int got353(char *from, char *msg) } return 0; } - + /* React to 396 numeric (HOSTHIDDEN), sent when user mode +x (hostmasking) was * successfully set. Format: * :barjavel.freenode.net 396 BeerBot unaffiliated/geo/bot/beerbot :is now your hidden host (set by services.) @@ -1400,12 +1399,12 @@ static int gotaway(char *from, char *msg) strlcpy(s1, from, sizeof buf); nick = splitnick(&s1); - u = get_user_by_host(from); /* Run the bind for each channel the user is on */ for (chan = chanset; chan; chan = chan->next) { chname = chan->dname; m = ismember(chan, nick); if (m) { + u = get_user_from_member(m); snprintf(mask, sizeof mask, "%s %s", chname, from); check_tcl_ircaway(nick, from, mask, u, chname, msg); if (strlen(msg)) { @@ -1831,7 +1830,6 @@ static int gottopic(char *from, char *msg) chname = newsplit(&msg); fixcolon(msg); - u = get_user_by_host(from); nick = splitnick(&from); chan = findchan(chname); if (chan) { @@ -1841,6 +1839,7 @@ static int gottopic(char *from, char *msg) if (m != NULL) m->last = now; set_topic(chan, msg); + u = get_user_from_member(m); check_tcl_topc(nick, from, u, chan->dname, msg); } return 0; @@ -1942,28 +1941,27 @@ static void set_delay(struct chanset_t *chan, char *nick) */ static int gotjoin(char *from, char *channame) { - char *nick, *p, buf[UHOSTLEN], *uhost = buf, *chname; + char *nick, *p, buf[UHOSTLEN], *uhost = buf, *chname, *account = NULL; char *ch_dname = NULL; - int extjoin = 0; struct chanset_t *chan; memberlist *m; masklist *b; - struct capability *current; + int extjoin = 0; + struct capability *captmp; struct userrec *u; struct flag_record fr = { FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0 }; - /* Check if extended-join CAP is enabled */ - current = cap; - while (current != NULL) { - if (!strcasecmp("extended-join", current->name)) { - extjoin = current->enabled ? 1 : 0; - } - current = current->next; - } + captmp = find_capability("extended-join"); + extjoin = captmp && captmp->enabled; + strlcpy(uhost, from, sizeof buf); nick = splitnick(&uhost); chname = newsplit(&channame); - if (!extjoin) { + if (extjoin) { + // :nick!user@host JOIN #chan account :realname + account = newsplit(&channame); + } else { + // :nick!user@host JOIN :#chan fixcolon(chname); } chan = findchan_by_dname(chname); @@ -2014,7 +2012,8 @@ static int gotjoin(char *from, char *channame) } } else if (!channel_pending(chan)) { chan->status &= ~CHAN_STOP_CYCLE; - detect_chan_flood(nick, uhost, from, chan, FLOOD_JOIN, NULL); + + detect_chan_flood(nick, uhost, from, chan, FLOOD_JOIN, extjoin ? account : NULL); chan = findchan(chname); if (!chan) { @@ -2027,9 +2026,6 @@ static int gotjoin(char *from, char *channame) /* The channel doesn't exist anymore, so get out of here. */ goto exit; - /* Grab last time joined before we update it */ - u = get_user_by_host(from); - get_user_flagrec(u, &fr, chan->dname); /* Lam: fix to work with !channels */ if (!channel_active(chan) && !match_my_nick(nick)) { /* uh, what?! i'm on the channel?! */ putlog(LOG_MISC, chan->dname, @@ -2041,6 +2037,8 @@ static int gotjoin(char *from, char *channame) } else { m = ismember(chan, nick); if (m && m->split && !strcasecmp(m->userhost, uhost)) { + u = get_user_from_member(m); + get_user_flagrec(u, &fr, chan->dname); check_tcl_rejn(nick, uhost, u, chan->dname); chan = findchan(chname); @@ -2055,12 +2053,11 @@ static int gotjoin(char *from, char *channame) goto exit; /* The tcl binding might have deleted the current user. Recheck. */ - u = get_user_by_host(from); + u = get_user_from_member(m); m->split = 0; m->last = now; m->delay = 0L; m->flags = (chan_hasop(m) ? WASOP : 0) | (chan_hashalfop(m) ? WASHALFOP : 0); - m->user = u; set_handle_laston(chan->dname, u, now); m->flags |= STOPWHO; putlog(LOG_JOIN, chan->dname, "%s (%s) returned to %s.", nick, uhost, @@ -2076,19 +2073,19 @@ static int gotjoin(char *from, char *channame) m->delay = 0L; strlcpy(m->nick, nick, sizeof m->nick); strlcpy(m->userhost, uhost, sizeof m->userhost); - m->user = u; m->flags |= STOPWHO; + u = get_user_from_member(m); + if (extjoin) { /* calls check_tcl_account which can delete the channel */ - setaccount(nick, newsplit(&channame)); - + setaccount(nick, account); + if (!(chan = findchan(chname)) && !(chan = findchan_by_dname(ch_dname ? ch_dname : chname))) { /* The channel doesn't exist anymore, so get out of here. */ goto exit; } } - check_tcl_join(nick, uhost, u, chan->dname); if (!(chan = findchan(chname)) && !(chan = findchan_by_dname(ch_dname ? ch_dname : chname))) { @@ -2098,7 +2095,6 @@ static int gotjoin(char *from, char *channame) /* The record saved in the channel record always gets updated, * so we can use that. */ - u = m->user; if (match_my_nick(nick)) { /* It was me joining! Need to update the channel record with the @@ -2129,9 +2125,9 @@ static int gotjoin(char *from, char *channame) if (u) { struct laston_info *li = 0; - cr = get_chanrec(m->user, chan->dname); + cr = get_chanrec(get_user_from_member(m), chan->dname); if (!cr && no_chanrec_info) - li = get_user(&USERENTRY_LASTON, m->user); + li = get_user(&USERENTRY_LASTON, get_user_from_member(m)); if (channel_greet(chan) && use_info && ((cr && now - cr->laston > wait_info) || (no_chanrec_info && (!li || now - li->laston > wait_info)))) { @@ -2189,7 +2185,7 @@ static int gotjoin(char *from, char *channame) (me_op(chan) || (me_halfop(chan) && !chan_hasop(m)))) { check_exemptlist(chan, from); quickban(chan, from); - p = get_user(&USERENTRY_COMMENT, m->user); + p = get_user(&USERENTRY_COMMENT, get_user_from_member(m)); dprintf(DP_MODE, "KICK %s %s :%s\n", chname, nick, (p && (p[0] != '@')) ? p : IRC_COMMENTKICK); m->flags |= SENTKICK; @@ -2249,6 +2245,7 @@ static int gotpart(char *from, char *msg) char *nick, *chname, *key; struct chanset_t *chan; struct userrec *u; + memberlist *m; chname = newsplit(&msg); fixcolon(chname); @@ -2260,8 +2257,9 @@ static int gotpart(char *from, char *msg) return 0; } if (chan && !channel_pending(chan)) { - u = get_user_by_host(from); nick = splitnick(&from); + m = ismember(chan, nick); + u = get_user_from_member(m); if (!channel_active(chan)) { /* whoa! */ putlog(LOG_MISC, chan->dname, @@ -2341,7 +2339,6 @@ static int gotkick(char *from, char *origmsg) } if (channel_active(chan)) { fixcolon(msg); - u = get_user_by_host(from); strlcpy(buf, from, sizeof buf); uhost = buf; whodid = splitnick(&uhost); @@ -2352,6 +2349,7 @@ static int gotkick(char *from, char *origmsg) return 0; m = ismember(chan, whodid); + u = get_user_from_member(m); if (m) m->last = now; /* This _needs_ to use chan->dname */ @@ -2368,7 +2366,7 @@ static int gotkick(char *from, char *origmsg) struct userrec *u2; simple_sprintf(s1, "%s!%s", m->nick, m->userhost); - u2 = get_user_by_host(s1); + u2 = get_user_from_member(m); set_handle_laston(chan->dname, u2, now); maybe_revenge(chan, from, s1, REVENGE_KICK); } @@ -2451,12 +2449,11 @@ static int gotnick(char *from, char *msg) m->flags &= ~(SENTKICK | SENTDEOP | SENTOP | SENTDEHALFOP | SENTHALFOP | SENTVOICE | SENTDEVOICE); /* nick-ban or nick is +k or something? */ - get_user_flagrec(m->user ? m->user : get_user_by_host(s1), &fr, - chan->dname); + u = get_user_from_member(m); + get_user_flagrec(u, &fr, chan->dname); check_this_member(chan, m->nick, &fr); /* Make sure this is in the loop, someone could have changed the record * in an earlier iteration of the loop. */ - u = get_user_by_host(from); found = 1; check_tcl_nick(nick, uhost, u, chan->dname, msg); @@ -2467,10 +2464,9 @@ static int gotnick(char *from, char *msg) } } if (!found) { - u = get_user_by_host(from); s1[0] = '*'; s1[1] = 0; - check_tcl_nick(nick, uhost, u, s1, msg); + check_tcl_nick(nick, uhost, NULL, s1, msg); } return 0; } @@ -2514,7 +2510,7 @@ static int gotquit(char *from, char *msg) chname = chan->dname; m = ismember(chan, nick); if (m) { - u = get_user_by_host(from2); + u = get_user_from_member(m); if (u) /* If you remove this, the bot will crash when the user record in * question is removed/modified during the tcl binds below, and the @@ -2569,6 +2565,7 @@ static int gotmsg(char *from, char *msg) int ctcp_count = 0, ignoring; struct chanset_t *chan; struct userrec *u; + memberlist *m; /* Only handle if message is to a channel, or to @#channel. */ /* FIXME: Properly handle ovNotices (@+#channel), vNotices (+#channel), etc. */ @@ -2612,7 +2609,15 @@ static int gotmsg(char *from, char *msg) ctcp_count++; if (ctcp[0] != ' ') { code = newsplit(&ctcp); - u = get_user_by_host(from); + u = NULL; + for (chan = chanset; chan; chan = chan->next) { + for (m = chan->channel.member; m && m->nick[0]; m = m->next) { + if (!rfc_casecmp(m->nick, nick)) { + u = get_user_from_member(m); + break; + } + } + } if (!ignoring || trigger_on_ignore) { if (!check_tcl_ctcp(nick, uhost, u, to, code, ctcp)) { chan = findchan(realto); @@ -2691,6 +2696,7 @@ static int gotnotice(char *from, char *msg) char *ctcp, *code; struct userrec *u; struct chanset_t *chan; + memberlist *m; int ignoring; if (!strchr(CHANMETA "@", *msg)) @@ -2704,8 +2710,15 @@ static int gotnotice(char *from, char *msg) fixcolon(msg); strlcpy(uhost, from, sizeof buf); nick = splitnick(&uhost); - u = get_user_by_host(from); - + u = NULL; + for (chan = chanset; chan; chan = chan->next) { + for (m = chan->channel.member; m && m->nick[0]; m = m->next) { + if (!rfc_casecmp(m->nick, nick)) { + u = get_user_from_member(m); + break; + } + } + } /* Check for CTCP: */ p = strchr(msg, 1); while (p && *p) { diff --git a/src/mod/irc.mod/cmdsirc.c b/src/mod/irc.mod/cmdsirc.c index 1caefe53e..3b387c8f6 100644 --- a/src/mod/irc.mod/cmdsirc.c +++ b/src/mod/irc.mod/cmdsirc.c @@ -68,13 +68,11 @@ static int has_oporhalfop(int idx, struct chanset_t *chan) */ static char *getnick(char *handle, struct chanset_t *chan) { - char s[UHOSTLEN]; struct userrec *u; memberlist *m; for (m = chan->channel.member; m && m->nick[0]; m = m->next) { - egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); - if ((u = get_user_by_host(s)) && !strcasecmp(u->handle, handle)) + if ((u = get_user_from_member(m)) && !strcasecmp(u->handle, handle)) return m->nick; } return NULL; @@ -163,8 +161,8 @@ static void cmd_kickban(struct userrec *u, int idx, char *par) struct chanset_t *chan; char *chname, *nick, *s1; memberlist *m; - char s[UHOSTLEN]; char bantype = 0; + char s[UHOSTLEN]; if (!par[0]) { dprintf(idx, "Usage: kickban [channel] [-|@] [reason]\n"); @@ -208,7 +206,7 @@ static void cmd_kickban(struct userrec *u, int idx, char *par) return; } egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); - u = get_user_by_host(s); + u = get_user_from_member(m); get_user_flagrec(u, &victim, chan->dname); if ((chan_op(victim) || (glob_op(victim) && !chan_deop(victim))) && !(chan_master(user) || glob_master(user))) { @@ -265,7 +263,6 @@ static void cmd_op(struct userrec *u, int idx, char *par) struct chanset_t *chan; char *nick; memberlist *m; - char s[UHOSTLEN]; nick = newsplit(&par); chan = get_channel(idx, par); @@ -294,8 +291,7 @@ static void cmd_op(struct userrec *u, int idx, char *par) dprintf(idx, "%s is not on %s.\n", nick, chan->dname); return; } - egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); - u = get_user_by_host(s); + u = get_user_from_member(m); get_user_flagrec(u, &victim, chan->dname); if (chan_deop(victim) || (glob_deop(victim) && !glob_op(victim))) { dprintf(idx, "%s is currently being auto-deopped.\n", m->nick); @@ -315,7 +311,6 @@ static void cmd_deop(struct userrec *u, int idx, char *par) struct chanset_t *chan; char *nick; memberlist *m; - char s[UHOSTLEN]; nick = newsplit(&par); chan = get_channel(idx, par); @@ -348,8 +343,7 @@ static void cmd_deop(struct userrec *u, int idx, char *par) dprintf(idx, "I'm not going to deop myself.\n"); return; } - egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); - u = get_user_by_host(s); + u = get_user_from_member(m); get_user_flagrec(u, &victim, chan->dname); if ((chan_master(victim) || glob_master(victim)) && !(chan_owner(user) || glob_owner(user))) { @@ -371,7 +365,6 @@ static void cmd_halfop(struct userrec *u, int idx, char *par) struct userrec *u2; char *nick; memberlist *m; - char s[UHOSTLEN]; nick = newsplit(&par); chan = get_channel(idx, par); @@ -386,8 +379,7 @@ static void cmd_halfop(struct userrec *u, int idx, char *par) get_user_flagrec(dcc[idx].user, &user, chan->dname); m = ismember(chan, nick); if (m && !chan_op(user) && (!glob_op(user) || chan_deop(user))) { - egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); - u2 = m->user ? m->user : get_user_by_host(s); + u2 = get_user_from_member(m); if (!u2 || strcasecmp(u2->handle, dcc[idx].nick) || (!chan_halfop(user) && (!glob_halfop(user) || chan_dehalfop(user)))) { @@ -414,8 +406,7 @@ static void cmd_halfop(struct userrec *u, int idx, char *par) dprintf(idx, "%s is not on %s.\n", nick, chan->dname); return; } - egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); - u = get_user_by_host(s); + u = get_user_from_member(m); get_user_flagrec(u, &victim, chan->dname); if (chan_dehalfop(victim) || (glob_dehalfop(victim) && !glob_halfop(victim))) { dprintf(idx, "%s is currently being auto-dehalfopped.\n", m->nick); @@ -437,7 +428,6 @@ static void cmd_dehalfop(struct userrec *u, int idx, char *par) struct userrec *u2; char *nick; memberlist *m; - char s[UHOSTLEN]; nick = newsplit(&par); chan = get_channel(idx, par); @@ -452,9 +442,7 @@ static void cmd_dehalfop(struct userrec *u, int idx, char *par) get_user_flagrec(dcc[idx].user, &user, chan->dname); m = ismember(chan, nick); if (m && !chan_op(user) && (!glob_op(user) || chan_deop(user))) { - egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); - u2 = m->user ? m->user : get_user_by_host(s); - + u2 = get_user_from_member(m); if (!u2 || strcasecmp(u2->handle, dcc[idx].nick) || (!chan_halfop(user) && (!glob_halfop(user) || chan_dehalfop(user)))) { dprintf(idx, "You are not a channel op on %s.\n", chan->dname); @@ -484,8 +472,7 @@ static void cmd_dehalfop(struct userrec *u, int idx, char *par) dprintf(idx, "I'm not going to dehalfop myself.\n"); return; } - egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); - u = get_user_by_host(s); + u = get_user_from_member(m); get_user_flagrec(u, &victim, chan->dname); if ((chan_master(victim) || glob_master(victim)) && !(chan_owner(user) || glob_owner(user))) { @@ -512,7 +499,6 @@ static void cmd_voice(struct userrec *u, int idx, char *par) struct userrec *u2; char *nick; memberlist *m; - char s[UHOSTLEN]; nick = newsplit(&par); chan = get_channel(idx, par); @@ -533,8 +519,7 @@ static void cmd_voice(struct userrec *u, int idx, char *par) * - stdarg */ if (m && !(chan_op(user) || chan_halfop(user) || (glob_op(user) && !chan_deop(user)) || (glob_halfop(user) && !chan_dehalfop(user)))) { - egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); - u2 = m->user ? m->user : get_user_by_host(s); + u2 = get_user_from_member(m); if (!u2 || strcasecmp(u2->handle, dcc[idx].nick) || (!chan_voice(user) && (!glob_voice(user) || chan_quiet(user)))) { @@ -570,7 +555,6 @@ static void cmd_devoice(struct userrec *u, int idx, char *par) struct userrec *u2; char *nick; memberlist *m; - char s[UHOSTLEN]; nick = newsplit(&par); chan = get_channel(idx, par); @@ -586,8 +570,7 @@ static void cmd_devoice(struct userrec *u, int idx, char *par) m = ismember(chan, nick); if (m && !(chan_op(user) || chan_halfop(user) || (glob_op(user) && !chan_deop(user)) || (glob_halfop(user) && !chan_dehalfop(user)))) { - egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); - u2 = m->user ? m->user : get_user_by_host(s); + u2 = get_user_from_member(m); if (!u2 || strcasecmp(u2->handle, dcc[idx].nick) || (!chan_voice(user) && (!glob_voice(user) || chan_quiet(user)))) { @@ -623,7 +606,6 @@ static void cmd_kick(struct userrec *u, int idx, char *par) struct chanset_t *chan; char *chname, *nick; memberlist *m; - char s[UHOSTLEN]; if (!par[0]) { dprintf(idx, "Usage: kick [channel] [reason]\n"); @@ -663,8 +645,7 @@ static void cmd_kick(struct userrec *u, int idx, char *par) chan->dname); return; } - egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); - u = get_user_by_host(s); + u = get_user_from_member(m); get_user_flagrec(u, &victim, chan->dname); if ((chan_op(victim) || (glob_op(victim) && !chan_deop(victim))) && !(chan_master(user) || glob_master(user))) { @@ -748,8 +729,9 @@ static void cmd_channel(struct userrec *u, int idx, char *par) for (m = chan->channel.member; m && m->nick[0]; m = m->next) { if (strlen(m->nick) > maxnicklen) maxnicklen = strlen(m->nick); - if ((m->user) && (strlen(m->user->handle) > maxhandlen)) - maxhandlen = strlen(m->user->handle); + u = get_user_from_member(m); + if (u && (strlen(u->handle) > maxhandlen)) + maxhandlen = strlen(u->handle); } if (maxnicklen < 9) maxnicklen = 9; @@ -768,15 +750,14 @@ static void cmd_channel(struct userrec *u, int idx, char *par) strftime(s, 6, "%H:%M", localtime(&(m->joined))); } else strlcpy(s, " --- ", sizeof s); - if (m->user == NULL) { - egg_snprintf(s1, sizeof s1, "%s!%s", m->nick, m->userhost); - m->user = get_user_by_host(s1); - } - if (m->user == NULL) + egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); + + u = get_user_from_member(m); + if (u == NULL) strlcpy(handle, "*", sizeof handle); else - strlcpy(handle, m->user->handle, sizeof handle); - get_user_flagrec(m->user, &user, chan->dname); + strlcpy(handle, u->handle, sizeof handle); + get_user_flagrec(u, &user, chan->dname); /* Determine status char to use */ if (glob_bot(user) && (glob_op(user) || chan_op(user))) atrflag = 'B'; @@ -1022,7 +1003,7 @@ static void cmd_adduser(struct userrec *u, int idx, char *par) if (strlen(hand) > HANDLEN) hand[HANDLEN] = 0; egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); - u = get_user_by_host(s); + u = get_user_from_member(m); if (u) { dprintf(idx, "%s is already known as %s.\n", nick, u->handle); return; @@ -1059,7 +1040,7 @@ static void cmd_adduser(struct userrec *u, int idx, char *par) static void cmd_deluser(struct userrec *u, int idx, char *par) { - char *nick, s[UHOSTLEN]; + char *nick; struct chanset_t *chan; memberlist *m = NULL; struct flag_record victim = { FR_GLOBAL | FR_CHAN | FR_ANYWH, 0, 0, 0, 0, 0 }; @@ -1080,8 +1061,7 @@ static void cmd_deluser(struct userrec *u, int idx, char *par) return; } get_user_flagrec(u, &user, chan->dname); - egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); - u = get_user_by_host(s); + u = get_user_from_member(m); if (!u) { dprintf(idx, "%s is not a valid user.\n", nick); return; diff --git a/src/mod/irc.mod/irc.c b/src/mod/irc.mod/irc.c index 8cce81776..dc03c7f24 100644 --- a/src/mod/irc.mod/irc.c +++ b/src/mod/irc.mod/irc.c @@ -142,7 +142,6 @@ static void punish_badguy(struct chanset_t *chan, char *whobad, /* Set the offender +d */ if ((chan->revenge_mode > 0) && !(chan_deop(fr) || glob_deop(fr))) { char s[UHOSTLEN], s1[UHOSTLEN]; - memberlist *mx = NULL; /* Removing op */ if (chan_op(fr) || (glob_op(fr) && !chan_deop(fr))) { @@ -186,8 +185,6 @@ static void punish_badguy(struct chanset_t *chan, char *whobad, fr.chan = USER_DEOP; fr.udef_chan = 0; u = get_user_by_handle(userlist, s1); - if ((mx = ismember(chan, badnick))) - mx->user = u; set_user_flagrec(u, &fr, chan->dname); simple_sprintf(s, "(%s) %s (%s)", ct, reason, whobad); set_user(&USERENTRY_COMMENT, u, (void *) s); @@ -230,17 +227,20 @@ static void maybe_revenge(struct chanset_t *chan, char *whobad, char *badnick, *victim; int mevictim; struct userrec *u, *u2; + memberlist *m; if (!chan || (type < 0)) return; /* Get info about offender */ - u = get_user_by_host(whobad); badnick = splitnick(&whobad); + m = ismember(chan, badnick); + u = get_user_from_member(m); /* Get info about victim */ - u2 = get_user_by_host(whovictim); victim = splitnick(&whovictim); + m = ismember(chan, victim); + u2 = get_user_from_member(m); mevictim = match_my_nick(victim); /* Do we want to revenge? */ @@ -264,12 +264,10 @@ static void set_key(struct chanset_t *chan, char *k) static int hand_on_chan(struct chanset_t *chan, struct userrec *u) { - char s[NICKMAX+UHOSTLEN+1]; memberlist *m; for (m = chan->channel.member; m && m->nick[0]; m = m->next) { - sprintf(s, "%s!%s", m->nick, m->userhost); - if (u == get_user_by_host(s)) + if (u == get_user_from_member(m)) return 1; } return 0; @@ -531,7 +529,6 @@ static void status_log() static void check_lonely_channel(struct chanset_t *chan) { memberlist *m; - char s[NICKMAX+UHOSTLEN+1]; int i = 0; if (channel_pending(chan) || !channel_active(chan) || me_op(chan) || @@ -576,8 +573,7 @@ static void check_lonely_channel(struct chanset_t *chan) chan->status |= CHAN_WHINED; } for (m = chan->channel.member; m && m->nick[0]; m = m->next) { - sprintf(s, "%s!%s", m->nick, m->userhost); - u = get_user_by_host(s); + u = get_user_from_member(m); if (!match_my_nick(m->nick) && (!u || !(u->flags & USER_BOT))) { ok = 0; break; @@ -601,7 +597,7 @@ static void check_expired_chanstuff() { masklist *b, *e; memberlist *m, *n; - char *key, s[NICKMAX+UHOSTLEN+1]; + char *key; struct chanset_t *chan; struct flag_record fr = { FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0 }; @@ -670,9 +666,7 @@ static void check_expired_chanstuff() for (m = chan->channel.member; m && m->nick[0]; m = m->next) if (now - m->last >= chan->idle_kick * 60 && !match_my_nick(m->nick) && !chan_issplit(m)) { - sprintf(s, "%s!%s", m->nick, m->userhost); - get_user_flagrec(m->user ? m->user : get_user_by_host(s), - &fr, chan->dname); + get_user_flagrec(get_user_from_member(m), &fr, chan->dname); if ((!(glob_bot(fr) || glob_friend(fr) || (glob_op(fr) && !chan_deop(fr)) || chan_friend(fr) || chan_op(fr))) && (me_op(chan) || (me_halfop(chan) && !chan_hasop(m)))) { @@ -685,9 +679,7 @@ static void check_expired_chanstuff() for (m = chan->channel.member; m && m->nick[0]; m = n) { n = m->next; if (m->split && now - m->split > wait_split) { - sprintf(s, "%s!%s", m->nick, m->userhost); - check_tcl_sign(m->nick, m->userhost, - m->user ? m->user : get_user_by_host(s), + check_tcl_sign(m->nick, m->userhost, get_user_from_member(m), chan->dname, "lost in the netsplit"); putlog(LOG_JOIN, chan->dname, "%s (%s) got lost in the net-split.", m->nick, m->userhost); @@ -915,12 +907,16 @@ static int check_tcl_pub(char *nick, char *from, char *chname, char *msg) struct flag_record fr = { FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0 }; int x; char buf[512], *args = buf, *cmd, host[161], *hand; + struct chanset_t *chan; struct userrec *u; + memberlist *m; strlcpy(buf, msg, sizeof buf); cmd = newsplit(&args); simple_sprintf(host, "%s!%s", nick, from); - u = get_user_by_host(host); + chan = findchan(chname); + m = ismember(chan, nick); + u = get_user_from_member(m); hand = u ? u->handle : "*"; get_user_flagrec(u, &fr, chname); Tcl_SetVar(interp, "_pub1", nick, 0); @@ -943,10 +939,14 @@ static int check_tcl_pubm(char *nick, char *from, char *chname, char *msg) int x; char buf[1024], host[161]; struct userrec *u; + struct chanset_t *chan; + memberlist *m; simple_sprintf(buf, "%s %s", chname, msg); simple_sprintf(host, "%s!%s", nick, from); - u = get_user_by_host(host); + chan = findchan(chname); + m = ismember(chan, nick); + u = get_user_from_member(m); get_user_flagrec(u, &fr, chname); Tcl_SetVar(interp, "_pubm1", nick, 0); Tcl_SetVar(interp, "_pubm2", from, 0); diff --git a/src/mod/irc.mod/mode.c b/src/mod/irc.mod/mode.c index 327844c3b..88814d3bf 100644 --- a/src/mod/irc.mod/mode.c +++ b/src/mod/irc.mod/mode.c @@ -421,11 +421,7 @@ static void got_op(struct chanset_t *chan, char *nick, char *from, check_chan = 1; strcpy(ch, chan->name); - simple_sprintf(s, "%s!%s", m->nick, m->userhost); - if (!m->user) - u = get_user_by_host(s); - else - u = m->user; + u = get_user_from_member(m); get_user_flagrec(u, &victim, chan->dname); /* Flags need to be set correctly right from the beginning now, so that @@ -519,11 +515,7 @@ static void got_halfop(struct chanset_t *chan, char *nick, char *from, check_chan = 1; strcpy(ch, chan->name); - simple_sprintf(s, "%s!%s", m->nick, m->userhost); - if (!m->user) - u = get_user_by_host(s); - else - u = m->user; + u = get_user_from_member(m); get_user_flagrec(u, &victim, chan->dname); /* Flags need to be set correctly right from the beginning now, so that @@ -612,7 +604,7 @@ static void got_deop(struct chanset_t *chan, char *nick, char *from, strcpy(ch, chan->name); simple_sprintf(s, "%s!%s", m->nick, m->userhost); simple_sprintf(s1, "%s!%s", nick, from); - u = get_user_by_host(s); + u = get_user_from_member(m); get_user_flagrec(u, &victim, chan->dname); had_halfop = chan_hasop(m); @@ -703,9 +695,8 @@ static void got_dehalfop(struct chanset_t *chan, char *nick, char *from, } strcpy(ch, chan->name); - simple_sprintf(s, "%s!%s", m->nick, m->userhost); simple_sprintf(s1, "%s!%s", nick, from); - u = get_user_by_host(s); + u = get_user_from_member(m); get_user_flagrec(u, &victim, chan->dname); had_halfop = chan_hasop(m); @@ -784,7 +775,7 @@ static void got_ban(struct chanset_t *chan, char *nick, char *from, char *who, for (m = chan->channel.member; m && m->nick[0]; m = m->next) { egg_snprintf(s1, sizeof s1, "%s!%s", m->nick, m->userhost); if (match_addr(who, s1)) { - targ = get_user_by_host(s1); + targ = get_user_from_member(m); if (targ) { get_user_flagrec(targ, &victim, chan->dname); if ((glob_friend(victim) || (glob_op(victim) && !chan_deop(victim)) || @@ -1025,12 +1016,15 @@ static int gotmode(char *from, char *origmsg) msg[z] = 0; putlog(LOG_MODES, chan->dname, "%s: mode change '%s %s' by %s", ch, chg, msg, from); - u = get_user_by_host(from); - get_user_flagrec(u, &user, ch); nick = splitnick(&from); m = ismember(chan, nick); - if (m) + if (m) { + u = get_user_from_member(m); + get_user_flagrec(u, &user, ch); m->last = now; + } else { + u = NULL; + } if (m && channel_active(chan) && (me_op(chan) || (me_halfop(chan) && !chan_hasop(m))) && !(glob_friend(user) || chan_friend(user) || (channel_dontkickops(chan) && (chan_op(user) || (glob_op(user) && @@ -1249,8 +1243,7 @@ static int gotmode(char *from, char *origmsg) refresh_who_chan(chan->name); } else { simple_sprintf(s, "%s!%s", m->nick, m->userhost); - get_user_flagrec(m->user ? m->user : get_user_by_host(s), - &victim, chan->dname); + get_user_flagrec(get_user_from_member(m), &victim, chan->dname); if (ms2[0] == '+') { m->flags &= ~SENTVOICE; m->flags |= CHANVOICE; diff --git a/src/mod/irc.mod/msgcmds.c b/src/mod/irc.mod/msgcmds.c index d179ceac9..282687425 100644 --- a/src/mod/irc.mod/msgcmds.c +++ b/src/mod/irc.mod/msgcmds.c @@ -383,7 +383,7 @@ static int msg_who(char *nick, char *host, struct userrec *u, char *par) struct userrec *u; egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); - u = get_user_by_host(s); + u = get_user_from_member(m); info = get_user(&USERENTRY_INFO, u); if (u && (u->flags & USER_BOT)) info = 0; @@ -431,7 +431,7 @@ static int msg_who(char *nick, char *host, struct userrec *u, char *par) static int msg_whois(char *nick, char *host, struct userrec *u, char *par) { - char s[UHOSTLEN + 1], s1[143], *s2, stime[14]; + char s1[143], *s2, stime[14]; int ok; struct chanset_t *chan; memberlist *m; @@ -462,8 +462,7 @@ static int msg_whois(char *nick, char *host, struct userrec *u, char *par) for (chan = chanset; chan && !ok; chan = chan->next) { m = ismember(chan, par); if (m) { - egg_snprintf(s, sizeof s, "%s!%s", par, m->userhost); - u2 = get_user_by_host(s); + u2 = get_user_from_member(m); if (u2) { ok = 1; dprintf(DP_HELP, "NOTICE %s :[%s] AKA '%s':\n", nick, diff --git a/src/mod/irc.mod/tclirc.c b/src/mod/irc.mod/tclirc.c index 36b485a2a..b8a93b3cd 100644 --- a/src/mod/irc.mod/tclirc.c +++ b/src/mod/irc.mod/tclirc.c @@ -24,10 +24,10 @@ */ static int tcl_chanlist STDVAR { - char nuh[1024]; int f; memberlist *m; struct chanset_t *chan; + struct userrec *u; struct flag_record plus = { FR_CHAN | FR_GLOBAL | FR_BOT, 0, 0, 0, 0, 0 }, minus = { FR_CHAN | FR_GLOBAL | FR_BOT, 0, 0, 0, 0, 0}, user = { FR_CHAN | FR_GLOBAL | FR_BOT, 0, 0, 0, 0, 0 }; @@ -55,11 +55,8 @@ static int tcl_chanlist STDVAR minus.match = plus.match ^ (FR_AND | FR_OR); for (m = chan->channel.member; m && m->nick[0]; m = m->next) { - if (!m->user) { - egg_snprintf(nuh, sizeof nuh, "%s!%s", m->nick, m->userhost); - m->user = get_user_by_host(nuh); - } - get_user_flagrec(m->user, &user, argv[1]); + u = get_user_from_member(m); + get_user_flagrec(u, &user, argv[1]); user.match = plus.match; if (flagrec_eq(&plus, &user)) { if (!f || !flagrec_eq(&minus, &user)) @@ -347,8 +344,8 @@ static int tcl_onchan STDVAR static int tcl_handonchan STDVAR { - char nuh[1024]; struct chanset_t *chan, *thechan = NULL; + struct userrec *u; memberlist *m; BADARGS(2, 3, " handle ?channel?"); @@ -365,11 +362,8 @@ static int tcl_handonchan STDVAR while (chan && (thechan == NULL || thechan == chan)) { for (m = chan->channel.member; m && m->nick[0]; m = m->next) { - if (!m->user) { - egg_snprintf(nuh, sizeof nuh, "%s!%s", m->nick, m->userhost); - m->user = get_user_by_host(nuh); - } - if (m->user && !strcasecmp(m->user->handle, argv[1])) { + u = get_user_from_member(m); + if (u && !strcasecmp(u->handle, argv[1])) { Tcl_AppendResult(irp, "1", NULL); return TCL_OK; } @@ -1027,9 +1021,9 @@ static int tcl_account2nicks STDVAR static int tcl_hand2nicks STDVAR { - char nuh[1024]; memberlist *m; struct chanset_t *chan, *thechan = NULL; + struct userrec *u; Tcl_Obj *nicks; Tcl_Obj **nicksv = NULL; int nicksc = 0, i, found; @@ -1050,13 +1044,8 @@ static int tcl_hand2nicks STDVAR while (chan && (thechan == NULL || thechan == chan)) { for (m = chan->channel.member; m && m->nick[0]; m = m->next) { found = 0; - /* Does this user have the account we're looking for? */ - if (!m->user && !m->tried_getuser) { - egg_snprintf(nuh, sizeof nuh, "%s!%s", m->nick, m->userhost); - m->tried_getuser = 1; - m->user = get_user_by_host(nuh); - } - if (m->user && !strcasecmp(m->user->handle, argv[1])) { + u = get_user_from_member(m); + if (u && !strcasecmp(u->handle, argv[1])) { /* Is the nick of the user already in the list? */ Tcl_ListObjGetElements(irp, nicks, &nicksc, &nicksv); for (i = 0; i < nicksc; i++) { @@ -1078,9 +1067,9 @@ static int tcl_hand2nicks STDVAR static int tcl_hand2nick STDVAR { - char nuh[1024]; memberlist *m; struct chanset_t *chan, *thechan = NULL; + struct userrec *u; BADARGS(2, 3, " handle ?channel?"); @@ -1096,12 +1085,8 @@ static int tcl_hand2nick STDVAR while (chan && (thechan == NULL || thechan == chan)) { for (m = chan->channel.member; m && m->nick[0]; m = m->next) { - if (!m->user && !m->tried_getuser) { - egg_snprintf(nuh, sizeof nuh, "%s!%s", m->nick, m->userhost); - m->tried_getuser = 1; - m->user = get_user_by_host(nuh); - } - if (m->user && !strcasecmp(m->user->handle, argv[1])) { + u = get_user_from_member(m); + if (u && !strcasecmp(u->handle, argv[1])) { Tcl_AppendResult(irp, m->nick, NULL); return TCL_OK; } @@ -1113,9 +1098,9 @@ static int tcl_hand2nick STDVAR static int tcl_nick2hand STDVAR { - char nuh[1024]; memberlist *m; struct chanset_t *chan, *thechan = NULL; + struct userrec *u; BADARGS(2, 3, " nick ?channel?"); @@ -1132,11 +1117,8 @@ static int tcl_nick2hand STDVAR while (chan && (thechan == NULL || thechan == chan)) { m = ismember(chan, argv[1]); if (m) { - if (!m->user) { - egg_snprintf(nuh, sizeof nuh, "%s!%s", m->nick, m->userhost); - m->user = get_user_by_host(nuh); - } - Tcl_AppendResult(irp, m->user ? m->user->handle : "*", NULL); + u = get_user_from_member(m); + Tcl_AppendResult(irp, u ? u->handle : "*", NULL); return TCL_OK; } chan = chan->next; diff --git a/src/mod/module.h b/src/mod/module.h index 951241adb..da1651c0a 100644 --- a/src/mod/module.h +++ b/src/mod/module.h @@ -524,7 +524,8 @@ typedef void (*chanout_butfunc)(int, int, const char *, ...) ATTRIBUTE_FORMAT(pr #define bind_bind_entry ((int(*)(tcl_bind_list_t *, const char *, const char *, const char *))global[320]) #define unbind_bind_entry ((int(*)(tcl_bind_list_t *, const char *, const char *, const char *))global[321]) #define argv0 ((char *)global[322]) - +#define get_user_from_member ((struct userrec * (*)(memberlist *))global[323]) +/* 324 - 327 */ /* hostmasking */ diff --git a/src/mod/notes.mod/notes.c b/src/mod/notes.mod/notes.c index 5c5d47aa8..ee9a9b3e5 100644 --- a/src/mod/notes.mod/notes.c +++ b/src/mod/notes.mod/notes.c @@ -834,13 +834,11 @@ static void notes_hourly() memberlist *m; int k; int l; - char s1[NICKMAX+UHOSTLEN+1]; struct userrec *u; for (chan = chanset; chan; chan = chan->next) { for (m = chan->channel.member; m && m->nick[0]; m = m->next) { - sprintf(s1, "%s!%s", m->nick, m->userhost); - u = get_user_by_host(s1); + u = get_user_from_member(m); if (u) { k = num_notes(u->handle); for (l = 0; l < dcc_total; l++) diff --git a/src/mod/seen.mod/seen.c b/src/mod/seen.mod/seen.c index 41cea68d2..5dbb095da 100644 --- a/src/mod/seen.mod/seen.c +++ b/src/mod/seen.mod/seen.c @@ -148,7 +148,7 @@ static int dcc_seen(struct userrec *u, int idx, char *par) static void do_seen(int idx, char *prefix, char *nick, char *hand, char *channel, char *text) { - char stuff[512], word1[512], word2[512], whotarget[128], object[128], + char word1[512], word2[512], whotarget[128], object[128], whoredirect[512], *oix, *lastonplace = 0; struct userrec *urec; struct chanset_t *chan; @@ -194,8 +194,7 @@ static void do_seen(int idx, char *prefix, char *nick, char *hand, m = ismember(chan, object); if (m) { onchan = 1; - snprintf(stuff, sizeof stuff, "%s!%s", object, m->userhost); - urec = get_user_by_host(stuff); + urec = get_user_from_member(m); if (!urec || !strcasecmp(object, urec->handle)) break; strcat(whoredirect, object); @@ -342,7 +341,7 @@ static void do_seen(int idx, char *prefix, char *nick, char *hand, if (m) { onchan = 1; snprintf(word1, sizeof word1, "%s!%s", whotarget, m->userhost); - urec = get_user_by_host(word1); + urec = get_user_from_member(m); if (!urec || !strcasecmp(whotarget, urec->handle)) break; strcat(whoredirect, whotarget); @@ -359,8 +358,7 @@ static void do_seen(int idx, char *prefix, char *nick, char *hand, while (chan) { m = chan->channel.member; while (m && m->nick[0]) { - snprintf(word2, sizeof word2, "%s!%s", m->nick, m->userhost); - urec = get_user_by_host(word2); + urec = get_user_from_member(m); if (urec && !strcasecmp(urec->handle, whotarget)) { strcat(whoredirect, whotarget); strcat(whoredirect, " is "); diff --git a/src/modules.c b/src/modules.c index afb614221..61ae64716 100644 --- a/src/modules.c +++ b/src/modules.c @@ -626,7 +626,9 @@ Function global_table[] = { /* 320 - 323 */ (Function) bind_bind_entry, (Function) unbind_bind_entry, - (Function) & argv0 + (Function) & argv0, + (Function) get_user_from_member +/* 324 - 327 */ }; void init_modules(void) diff --git a/src/userrec.c b/src/userrec.c index da5da6b42..61af179d5 100644 --- a/src/userrec.c +++ b/src/userrec.c @@ -171,20 +171,6 @@ static struct userrec *check_dcclist_hand(char *handle) return NULL; } -/* Shortcut for get_user_by_handle -- might have user record in channels - */ -static struct userrec *check_chanlist_hand(const char *hand) -{ - struct chanset_t *chan; - memberlist *m; - - for (chan = chanset; chan; chan = chan->next) - for (m = chan->channel.member; m && m->nick[0]; m = m->next) - if (m->user && !strcasecmp(m->user->handle, hand)) - return m->user; - return NULL; -} - /* Search userlist for a provided account name * Returns: userrecord for user containing the account */ @@ -193,12 +179,11 @@ struct userrec *get_user_by_account(char *acct) struct userrec *u; struct list_type *q; - if (acct == NULL) + if (!acct || !acct[0] || !strcmp(acct, "*")) return NULL; for (u = userlist; u; u = u->next) { - q = get_user(&USERENTRY_ACCOUNT, u); - for (; q; q = q->next) { - if(q && !strcasecmp(q->extra, acct)) { + for (q = get_user(&USERENTRY_ACCOUNT, u); q; q = q->next) { + if (!rfc_casecmp(q->extra, acct)) { return u; } } @@ -226,11 +211,6 @@ struct userrec *get_user_by_handle(struct userrec *bu, char *handle) cache_hit++; return ret; } - ret = check_chanlist_hand(handle); - if (ret) { - cache_hit++; - return ret; - } cache_miss++; } for (u = bu; u; u = u->next) @@ -242,6 +222,29 @@ struct userrec *get_user_by_handle(struct userrec *bu, char *handle) return NULL; } +struct userrec *get_user_from_member(memberlist *m) +{ + struct userrec *ret; + + /* Check if there is a user with a matching account if one is provided */ + if (m->account[0] != '*') { + ret = get_user_by_account(m->account); + if (ret) { + return ret; + } + } + /* Check if there is a user with a matching hostmask if one is provided */ + if ((m->userhost[0] != '\0') && (m->nick[0] != '\0')) { + char s[NICKMAX+UHOSTLEN+1]; + sprintf(s, "%s!%s", m->nick, m->userhost); + ret = get_user_by_host(s); + if (ret) { + return ret; + } + } + return NULL; +} + /* Fix capitalization, etc */ void correct_handle(char *handle) @@ -265,8 +268,6 @@ void clear_masks(maskrec *m) temp = m->next; if (m->mask) nfree(m->mask); - if (m->user) - nfree(m->user); if (m->desc) nfree(m->desc); nfree(m); @@ -311,12 +312,10 @@ void clear_userlist(struct userrec *bu) /* Find CLOSEST host match * (if "*!*@*" and "*!*@*clemson.edu" both match, use the latter!) - * - * Checks the chanlist first, to possibly avoid needless search. */ struct userrec *get_user_by_host(char *host) { - struct userrec *u, *ret; + struct userrec *u, *ret = NULL; struct list_type *q; int cnt, i; char host2[UHOSTLEN]; @@ -326,12 +325,7 @@ struct userrec *get_user_by_host(char *host) rmspace(host); if (!host[0]) return NULL; - ret = check_chanlist(host); cnt = 0; - if (ret != NULL) { - cache_hit++; - return ret; - } cache_miss++; strlcpy(host2, host, sizeof host2); for (u = userlist; u; u = u->next) { @@ -346,7 +340,6 @@ struct userrec *get_user_by_host(char *host) } if (ret != NULL) { lastuser = ret; - set_chanlist(host2, ret); } return ret; } diff --git a/src/users.h b/src/users.h index e9a451418..a273ca95c 100644 --- a/src/users.h +++ b/src/users.h @@ -184,6 +184,7 @@ struct userrec *get_user_by_handle(struct userrec *, char *); struct userrec *get_user_by_host(char *); struct userrec *get_user_by_account(char *); struct userrec *get_user_by_nick(char *); +struct userrec *get_user_from_member(memberlist *); struct userrec *check_chanlist(const char *); /* All the default userentry stuff, for code re-use diff --git a/src/version.h b/src/version.h index 63e9d3316..64e4e4698 100644 --- a/src/version.h +++ b/src/version.h @@ -27,5 +27,5 @@ */ #define EGG_STRINGVER "1.9.5" -#define EGG_NUMVER 1090505 -#define EGG_PATCH "python" +#define EGG_NUMVER 1090506 +#define EGG_PATCH "accounttracking" From 9068233364b28ca9c6840aca7fbd30ecdfa0ac33 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 2 Jun 2024 21:00:54 +0200 Subject: [PATCH 62/91] Fix memory leak in egg_string_unicodesup_desurrogate() Patch by: michaelortmann --- src/tcl.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/tcl.c b/src/tcl.c index 5015fd5b5..71fe6d9be 100644 --- a/src/tcl.c +++ b/src/tcl.c @@ -767,6 +767,7 @@ Tcl_Obj *egg_string_unicodesup_desurrogate(const char *oldstr, int len) { int stridx = 0, bufidx = 0; char *buf = nmalloc(len); + Tcl_Obj *o; while (stridx < len) { uint32_t low, high; @@ -787,7 +788,10 @@ Tcl_Obj *egg_string_unicodesup_desurrogate(const char *oldstr, int len) } } } - return Tcl_NewStringObj(buf, bufidx); + + o = Tcl_NewStringObj(buf, bufidx); + nfree(buf); + return o; } /* C function called for ::egg_tcl_tolower/toupper/totitle From 0ee04c25700268e91f2f0bb7974b1ececf3aa380 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 2 Jun 2024 21:03:29 +0200 Subject: [PATCH 63/91] Fix leak Patch by: michaelortmann --- src/mod/channels.mod/tclchan.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/mod/channels.mod/tclchan.c b/src/mod/channels.mod/tclchan.c index 512702703..79df93d02 100644 --- a/src/mod/channels.mod/tclchan.c +++ b/src/mod/channels.mod/tclchan.c @@ -1998,17 +1998,17 @@ static void init_masklist(masklist *m) static void init_channel(struct chanset_t *chan, int reset) { int flags = reset ? reset : CHAN_RESETALL; + memberlist *m, *m1; if (flags & CHAN_RESETWHO) { - if (chan->channel.member) { - nfree(chan->channel.member); + for (m = chan->channel.member; m; m = m1) { + m1 = m->next; + nfree(m); } chan->channel.members = 0; chan->channel.member = nmalloc(sizeof *chan->channel.member); /* Since we don't have channel_malloc, manually bzero */ egg_bzero(chan->channel.member, sizeof *chan->channel.member); - chan->channel.member->nick[0] = 0; - chan->channel.member->next = NULL; } if (flags & CHAN_RESETMODES) { From 844439af999c1600c12f83c1e652a8add1c49d34 Mon Sep 17 00:00:00 2001 From: Johannes Kuhn Date: Tue, 4 Jun 2024 15:24:59 +0200 Subject: [PATCH 64/91] Add Tcl 9 compatibility init_tcl has been split into 2 parts: init_tcl0 sets the notifier, calls Tcl_FindExecutable and if Tcl >= 9 calls Tcl_InitSubsystem. init_tcl1 does the rest. init_tcl0 must be called before the thread local storage is used. Tests show that this compiles and runs with both Tcl 8.6.11 and Tcl 9.0b1. Following minor changes have been made: Replace TCL_INTERP_DESTROYED with Tcl_InterpDeleted() (also see TCL_INTERP_DESTROYED -> Tcl_InterpDeleted() #1537) Define EGG_CONST as const (CONST is gone) Introduce Tcl_Size - which is typedef int Tcl_Size if not provided by tcl.h Update variable types to Tcl_Size where needed. Replace Tcl_DStringTrunc with Tcl_DStringSetLength Test cases demonstrating functionality (if applicable): [Tcl9Eggdrop] (): Running Eggdrop 1.9.5+python 1090505 with Tcl 9.0b [Tcl8Eggdrop] (): Running Eggdrop 1.9.5+python 1090505 with Tcl 8.6. --- src/main.c | 8 +++++--- src/main.h | 13 ++++++++----- src/mod/channels.mod/channels.c | 2 +- src/mod/channels.mod/cmdschan.c | 2 +- src/mod/channels.mod/tclchan.c | 6 +++--- src/mod/irc.mod/tclirc.c | 6 ++++-- src/mod/server.mod/server.c | 5 +++-- src/mod/server.mod/tclisupport.c | 10 +++++----- src/tcl.c | 28 +++++++++++++++++----------- src/userent.c | 3 ++- 10 files changed, 49 insertions(+), 34 deletions(-) diff --git a/src/main.c b/src/main.c index 8d2874f62..17133c5b5 100644 --- a/src/main.c +++ b/src/main.c @@ -722,7 +722,8 @@ int init_userent(); int init_misc(); int init_bots(); int init_modules(); -void init_tcl(int, char **); +void init_tcl0(int, char **); +void init_tcl1(int, char **); void init_language(int); #ifdef TLS int ssl_init(); @@ -893,7 +894,7 @@ static void mainloop(int toplevel) } kill_tcl(); - init_tcl(argc, argv); + init_tcl1(argc, argv); init_language(0); /* this resets our modules which we didn't unload (encryption and uptime) */ @@ -1037,6 +1038,7 @@ int main(int arg_c, char **arg_v) init_mem(); if (argc > 1) do_arg(); + init_tcl0(argc, argv); init_language(1); printf("\n%s\n", version); @@ -1056,7 +1058,7 @@ int main(int arg_c, char **arg_v) init_modules(); if (backgrd) bg_prepare_split(); - init_tcl(argc, argv); + init_tcl1(argc, argv); init_language(0); #ifdef STATIC link_statics(); diff --git a/src/main.h b/src/main.h index f8f2b5032..79d388492 100644 --- a/src/main.h +++ b/src/main.h @@ -41,15 +41,18 @@ #include "eggint.h" #include "lush.h" +#ifndef TCL_SIZE_MAX + typedef int Tcl_Size; +# define Tcl_GetSizeIntFromObj Tcl_GetIntFromObj +# define TCL_SIZE_MAX INT_MAX +# define TCL_SIZE_MODIFIER "" +#endif + #ifndef TCL_PATCH_LEVEL # define TCL_PATCH_LEVEL "*unknown*" #endif -#ifdef CONST -# define EGG_CONST CONST -#else -# define EGG_CONST -#endif +#define EGG_CONST const #ifdef CONST86 # define TCL_CONST86 CONST86 diff --git a/src/mod/channels.mod/channels.c b/src/mod/channels.mod/channels.c index 95fed762b..d5d849879 100644 --- a/src/mod/channels.mod/channels.c +++ b/src/mod/channels.mod/channels.c @@ -737,7 +737,7 @@ static char *traced_globchanset(ClientData cdata, Tcl_Interp *irp, EGG_CONST char *name1, EGG_CONST char *name2, int flags) { - int i, items; + Tcl_Size i, items; char *t, *s; EGG_CONST char **item, *s2; diff --git a/src/mod/channels.mod/cmdschan.c b/src/mod/channels.mod/cmdschan.c index 4d96630a7..d613f43a9 100644 --- a/src/mod/channels.mod/cmdschan.c +++ b/src/mod/channels.mod/cmdschan.c @@ -1191,7 +1191,7 @@ static void cmd_mns_chrec(struct userrec *u, int idx, char *par) static void cmd_pls_chan(struct userrec *u, int idx, char *par) { - int i, argc; + Tcl_Size i, argc; EGG_CONST char **argv; char *chname; struct chanset_t *chan; diff --git a/src/mod/channels.mod/tclchan.c b/src/mod/channels.mod/tclchan.c index 79df93d02..f40f9f8d2 100644 --- a/src/mod/channels.mod/tclchan.c +++ b/src/mod/channels.mod/tclchan.c @@ -1013,7 +1013,7 @@ static int tcl_channel_getlist(Tcl_Interp *irp, struct chanset_t *chan) { char s[121], *str; EGG_CONST char **argv = NULL; - int argc = 0; + Tcl_Size argc = 0; struct udef_struct *ul; /* String values first */ @@ -1133,7 +1133,7 @@ static int tcl_channel_get(Tcl_Interp *irp, struct chanset_t *chan, { char s[121], *str = NULL; EGG_CONST char **argv = NULL; - int argc = 0; + Tcl_Size argc = 0; struct udef_struct *ul; if (!strcmp(setting, "chanmode")) @@ -2089,7 +2089,7 @@ static void clear_channel(struct chanset_t *chan, int reset) */ static int tcl_channel_add(Tcl_Interp *irp, char *newname, char *options) { - int items; + Tcl_Size items; int ret = TCL_OK; int join = 0; char buf[2048], buf2[256]; diff --git a/src/mod/irc.mod/tclirc.c b/src/mod/irc.mod/tclirc.c index b8a93b3cd..2e27744a8 100644 --- a/src/mod/irc.mod/tclirc.c +++ b/src/mod/irc.mod/tclirc.c @@ -980,7 +980,8 @@ static int tcl_account2nicks STDVAR struct chanset_t *chan, *thechan = NULL; Tcl_Obj *nicks; Tcl_Obj **nicksv = NULL; - int nicksc = 0, i, found; + Tcl_Size nicksc = 0, i; + int found; BADARGS(2, 3, " account ?channel?"); @@ -1026,7 +1027,8 @@ static int tcl_hand2nicks STDVAR struct userrec *u; Tcl_Obj *nicks; Tcl_Obj **nicksv = NULL; - int nicksc = 0, i, found; + Tcl_Size nicksc = 0, i; + int found; BADARGS(2, 3, " handle ?channel?"); diff --git a/src/mod/server.mod/server.c b/src/mod/server.mod/server.c index 80d0ad5f1..6aff0e488 100644 --- a/src/mod/server.mod/server.c +++ b/src/mod/server.mod/server.c @@ -1413,7 +1413,7 @@ static int server_raw STDVAR static int server_rawt STDVAR { - int unused; + Tcl_Size unused; Tcl_Obj *tagdict; Function F = (Function) cd; @@ -1809,7 +1809,8 @@ static char *tcl_eggserver(ClientData cdata, Tcl_Interp *irp, EGG_CONST char *name1, EGG_CONST char *name2, int flags) { - int lc, code, i; + Tcl_Size lc, i; + int code; char x[1024]; EGG_CONST char **list, *slist; struct server_list *q; diff --git a/src/mod/server.mod/tclisupport.c b/src/mod/server.mod/tclisupport.c index 6ac22d7b3..66fa72aae 100644 --- a/src/mod/server.mod/tclisupport.c +++ b/src/mod/server.mod/tclisupport.c @@ -67,7 +67,7 @@ int tcl_isupport STDOBJVAR static int tcl_isupport_get STDOBJVAR { - int keylen; + Tcl_Size keylen; const char *key, *value; Tcl_Obj *tclres; @@ -95,7 +95,7 @@ static int tcl_isupport_get STDOBJVAR static int tcl_isupport_isset STDOBJVAR { - int keylen; + Tcl_Size keylen; const char *key, *value; BADOBJARGS(3, 3, 2, "setting"); @@ -109,7 +109,7 @@ static int tcl_isupport_isset STDOBJVAR /* not exposed for now */ static int tcl_isupport_set STDOBJVAR { - int keylen, valuelen; + Tcl_Size keylen, valuelen; const char *key, *value; /* First one to check for type validity only */ @@ -126,7 +126,7 @@ static int tcl_isupport_set STDOBJVAR static int tcl_isupport_unset STDOBJVAR { struct isupport *data; - int keylen; + Tcl_Size keylen; const char *key; BADOBJARGS(3, 3, 2, "setting"); @@ -170,7 +170,7 @@ char *traced_isupport(ClientData cdata, Tcl_Interp *irp, } /* remove trailing space */ if (Tcl_DStringLength(&ds)) - Tcl_DStringTrunc(&ds, Tcl_DStringLength(&ds) - 1); + Tcl_DStringSetLength(&ds, Tcl_DStringLength(&ds) - 1); Tcl_SetVar2(interp, name1, name2, Tcl_DStringValue(&ds), TCL_GLOBAL_ONLY); Tcl_DStringFree(&ds); diff --git a/src/tcl.c b/src/tcl.c index 71fe6d9be..64409ee25 100644 --- a/src/tcl.c +++ b/src/tcl.c @@ -905,17 +905,10 @@ void init_unicodesup(void) } #endif /* TCL_WORKAROUND_UNICODESUP */ -/* Not going through Tcl's crazy main() system (what on earth was he - * smoking?!) so we gotta initialize the Tcl interpreter - */ -void init_tcl(int argc, char **argv) +void init_tcl0(int argc, char **argv) { Tcl_NotifierProcs notifierprocs; - - const char *encoding; - int i, j; - char *langEnv, pver[1024] = ""; - + egg_bzero(¬ifierprocs, sizeof(notifierprocs)); notifierprocs.initNotifierProc = tickle_InitNotifier; notifierprocs.createFileHandlerProc = tickle_CreateFileHandler; @@ -927,8 +920,8 @@ void init_tcl(int argc, char **argv) notifierprocs.serviceModeHookProc = tickle_ServiceModeHook; Tcl_SetNotifier(¬ifierprocs); - -/* This must be done *BEFORE* Tcl_SetSystemEncoding(), + + /* This must be done *BEFORE* Tcl_SetSystemEncoding(), * or Tcl_SetSystemEncoding() will cause a segfault. */ /* This is used for 'info nameofexecutable'. @@ -936,6 +929,19 @@ void init_tcl(int argc, char **argv) * the environment variable PATH for it to register anything. */ Tcl_FindExecutable(argv[0]); +#if TCL_MAJOR_VERSION >= 9 + Tcl_InitSubsystems(); +#endif +} + +/* Not going through Tcl's crazy main() system (what on earth was he + * smoking?!) so we gotta initialize the Tcl interpreter + */ +void init_tcl1(int argc, char **argv) +{ + const char *encoding; + int i, j; + char *langEnv, pver[1024] = ""; /* Initialize the interpreter */ interp = Tcl_CreateInterp(); diff --git a/src/userent.c b/src/userent.c index 3fde1f20a..a070995fd 100644 --- a/src/userent.c +++ b/src/userent.c @@ -1036,7 +1036,8 @@ static int xtra_pack(struct userrec *u, struct user_entry *e) static void xtra_display(int idx, struct user_entry *e) { - int code, lc, j; + int code; + Tcl_Size lc, j; EGG_CONST char **list; struct xtra_key *xk; From d58f56347a16947757a0112715b13561f49fb539 Mon Sep 17 00:00:00 2001 From: Thomas Sader Date: Wed, 5 Jun 2024 19:30:11 +0200 Subject: [PATCH 65/91] Reintroduce user lookup cache Found by: mortmann Patch by: thommey Fixes: #1599 --- src/chan.h | 3 ++- src/chanprog.c | 16 +++++++++++----- src/mod/irc.mod/chan.c | 6 +++++- src/userrec.c | 16 +++++++++++++--- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/src/chan.h b/src/chan.h index d5f11257d..31b639834 100644 --- a/src/chan.h +++ b/src/chan.h @@ -50,7 +50,8 @@ typedef struct memstruct { time_t split; /* in case they were just netsplit */ time_t last; /* for measuring idle time */ time_t delay; /* for delayed autoop */ - int tried_getuser; // TODO: use it to invalidate user cache + struct userrec *user; /* cached user lookup */ + int tried_getuser; /* negative user lookup cache */ struct memstruct *next; } memberlist; diff --git a/src/chanprog.c b/src/chanprog.c index 37e03d61a..f589593fb 100644 --- a/src/chanprog.c +++ b/src/chanprog.c @@ -118,8 +118,11 @@ struct chanset_t *findchan_by_dname(const char *name) /* Clear the user pointers in the chanlists. * - * Necessary when a hostmask is added/removed, a user is added or a new - * userfile is loaded. + * Necessary when: + * - a hostmask is added/removed + * - an account is added/removed + * - a user is added + * - new userfile is loaded */ void clear_chanlist(void) { @@ -128,14 +131,16 @@ void clear_chanlist(void) for (chan = chanset; chan; chan = chan->next) for (m = chan->channel.member; m && m->nick[0]; m = m->next) { + m->user = NULL; m->tried_getuser = 0; } } /* Clear the user pointer of a specific nick in the chanlists. - - * Necessary when a hostmask is added/removed, a nick changes, etc. - * Does not completely invalidate the channel cache like clear_chanlist(). + * + * Necessary when: + * - their hostmask changed (chghost) + * - their account changed */ void clear_chanlist_member(const char *nick) { @@ -145,6 +150,7 @@ void clear_chanlist_member(const char *nick) for (chan = chanset; chan; chan = chan->next) for (m = chan->channel.member; m && m->nick[0]; m = m->next) if (!rfc_casecmp(m->nick, nick)) { + m->user = NULL; m->tried_getuser = 0; break; } diff --git a/src/mod/irc.mod/chan.c b/src/mod/irc.mod/chan.c index 1d0082547..f0cb827d7 100644 --- a/src/mod/irc.mod/chan.c +++ b/src/mod/irc.mod/chan.c @@ -116,6 +116,8 @@ static void setaccount(char *nick, char *account) } } } + /* Username for nick could be different after account change, invalidate cache */ + clear_chanlist_member(nick); } /* Returns the current channel mode. @@ -1220,7 +1222,7 @@ static int got354(char *from, char *msg) * :geo!awesome@eggdrop.com CHGHOST tehgeo foo.io * changes user hostmask to tehgeo@foo.io */ -static int gotchghost(char *from, char *msg){ +static int gotchghost(char *from, char *msg) { struct flag_record fr = { FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0 }; struct userrec *u; struct chanset_t *chan; @@ -1247,6 +1249,8 @@ static int gotchghost(char *from, char *msg){ check_this_member(chan, m->nick, &fr); } } + /* Username for nick could be different after host change, invalidate cache */ + clear_chanlist_member(nick); return 0; } diff --git a/src/userrec.c b/src/userrec.c index 61af179d5..084dbcd64 100644 --- a/src/userrec.c +++ b/src/userrec.c @@ -224,24 +224,34 @@ struct userrec *get_user_by_handle(struct userrec *bu, char *handle) struct userrec *get_user_from_member(memberlist *m) { - struct userrec *ret; + struct userrec *ret = NULL; + + /* Check positive/negative cache first */ + if (m->user || m->tried_getuser) { + return m->user; + } /* Check if there is a user with a matching account if one is provided */ if (m->account[0] != '*') { ret = get_user_by_account(m->account); if (ret) { - return ret; + goto getuser_done; } } + /* Check if there is a user with a matching hostmask if one is provided */ if ((m->userhost[0] != '\0') && (m->nick[0] != '\0')) { char s[NICKMAX+UHOSTLEN+1]; sprintf(s, "%s!%s", m->nick, m->userhost); ret = get_user_by_host(s); if (ret) { - return ret; + goto getuser_done; } } + +getuser_done: + m->user = ret; + m->tried_getuser = 1; return NULL; } From e931e2299a33fe9c730656eb0de4503c286680fc Mon Sep 17 00:00:00 2001 From: Thomas Sader Date: Sun, 16 Jun 2024 21:43:02 +0200 Subject: [PATCH 66/91] Github CI with matrix tests (#1620) --- .github/workflows/ccpp.yml | 23 ------ .github/workflows/configure_flags.yml | 41 ----------- .github/workflows/dependencies.yml | 100 ++++++++++++++++++++++++++ .github/workflows/make.yml | 39 ++++++++++ .github/workflows/misc.yml | 45 ++++++++++++ src/Makefile.in | 3 + 6 files changed, 187 insertions(+), 64 deletions(-) delete mode 100644 .github/workflows/ccpp.yml delete mode 100644 .github/workflows/configure_flags.yml create mode 100644 .github/workflows/dependencies.yml create mode 100644 .github/workflows/make.yml create mode 100644 .github/workflows/misc.yml diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml deleted file mode 100644 index 485733521..000000000 --- a/.github/workflows/ccpp.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: C/C++ CI - -on: - pull_request: - branches: - - develop - -jobs: - build: - name: compile test - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - name: install dependencies - run: sudo apt-get install tcl tcl-dev openssl libssl-dev - - name: configure - run: ./configure - - name: make config - run: make config - - name: make - run: make - - name: make install - run: make install diff --git a/.github/workflows/configure_flags.yml b/.github/workflows/configure_flags.yml deleted file mode 100644 index 60a8c07bb..000000000 --- a/.github/workflows/configure_flags.yml +++ /dev/null @@ -1,41 +0,0 @@ -on: - workflow_dispatch: - inputs: - name: - description: 'Test configure flags' - -jobs: - configure-nosslflag: - name: Configure, --disable-tls - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - run: sudo apt-get install tcl tcl-dev - - run: ./configure --disable-tls - - run: make config - - run: make - - run: make install - - - configure-noipv6: - name: Configure, --disable-ipv6 - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - run: sudo apt-get install tcl tcl-dev - - run: ./configure --disable-ipv6 - - run: make config - - run: make - - run: make install - - - configure-notdns: - name: Configure, --disable-tdns - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - run: sudo apt-get install tcl tcl-dev - - run: ./configure --disable-tdns - - run: make config - - run: make - - run: make install diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml new file mode 100644 index 000000000..ae9dfcfa1 --- /dev/null +++ b/.github/workflows/dependencies.yml @@ -0,0 +1,100 @@ +name: Tcl/SSL Versions + +on: + pull_request: + branches: [ develop ] + push: + branches: [ develop ] + +jobs: + tcl-versions: + name: Tcl Versions + needs: default-build + strategy: + matrix: + tcl_version: [ '8.5.19', '8.6.14', '8.7a5', '9.0b2' ] + continue-on-error: true + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: install dependencies + run: sudo apt-get install openssl libssl-dev + - name: Build Tcl + run: | + wget http://prdownloads.sourceforge.net/tcl/tcl${{ matrix.tcl_version }}-src.tar.gz && \ + tar xzf tcl${{ matrix.tcl_version }}-src.tar.gz && \ + cd tcl${{ matrix.tcl_version }}/unix && \ + ./configure --prefix=$HOME/tcl && \ + make -j4 && make install + - name: Build + run: ./configure --with-tcl=$HOME/tcl/lib && LD_LIBRARY_PATH=$HOME/tcl/lib make config eggdrop + ssl-version-10: + name: OpenSSL 1.0 + needs: default-build + continue-on-error: true + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + path: 'eggdrop' + - name: install dependencies + run: sudo apt-get install tcl tcl-dev + - name: Build OpenSSL + run: | + wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2u.tar.gz && tar xzf openssl-1.0.2u.tar.gz && \ + cd openssl-1.0.2u && ./config --prefix=$HOME/ssl -fPIC && make -j4 && make install_sw + - name: Build + run: cd $GITHUB_WORKSPACE/eggdrop && ./configure --with-sslinc=$HOME/ssl/include --with-ssllib=$HOME/ssl/lib && LD_LIBRARY_PATH=$HOME/ssl/lib make config eggdrop + ssl-version-11: + name: OpenSSL 1.1 + needs: default-build + continue-on-error: true + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + repository: openssl/openssl + ref: 'OpenSSL_1_1_1w' + path: 'openssl' + - name: Build OpenSSL + run: | + cd $GITHUB_WORKSPACE/openssl && ./config --prefix=$HOME/ssl && make -j4 && make install_sw + - name: install dependencies + run: sudo apt-get install tcl tcl-dev + - uses: actions/checkout@v4 + with: + path: 'eggdrop' + - name: Build + run: cd $GITHUB_WORKSPACE/eggdrop && ./configure --with-sslinc=$HOME/ssl/include --with-ssllib=$HOME/ssl/lib && LD_LIBRARY_PATH=$HOME/ssl/lib make config eggdrop + ssl-versions-3x: + name: OpenSSL 3.x + needs: default-build + strategy: + matrix: + ssl_version: [ '3.0', '3.1', '3.2', '3.3' ] + continue-on-error: true + runs-on: ubuntu-latest + steps: + - uses: oprypin/find-latest-tag@v1 + with: + repository: openssl/openssl + releases-only: true + prefix: 'openssl-' + regex: "${{ matrix.ssl_version }}.[0-9]+" + sort-tags: true + id: openssl + - uses: actions/checkout@v4 + with: + repository: openssl/openssl + ref: ${{ steps.openssl.outputs.tag }} + path: 'openssl' + - name: Build OpenSSL + run: | + cd $GITHUB_WORKSPACE/openssl && ./config --prefix=$HOME/ssl && make -j4 && make install_sw + - uses: actions/checkout@v4 + with: + path: 'eggdrop' + - name: install dependencies + run: sudo apt-get install tcl tcl-dev + - name: Build + run: cd $GITHUB_WORKSPACE/eggdrop && ./configure --with-sslinc=$HOME/ssl/include --with-ssllib=$HOME/ssl/lib64 && LD_LIBRARY_PATH=$HOME/ssl/lib64 make config eggdrop diff --git a/.github/workflows/make.yml b/.github/workflows/make.yml new file mode 100644 index 000000000..e1dc3be6b --- /dev/null +++ b/.github/workflows/make.yml @@ -0,0 +1,39 @@ +name: Eggdrop Compile + +on: + pull_request: + branches: [ develop ] + push: + branches: [ develop ] + +jobs: + default-build: + name: Compile Test + strategy: + matrix: + cc: [ 'gcc', 'clang' ] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: install dependencies + run: sudo apt-get install clang tcl tcl-dev openssl libssl-dev + - name: Build + env: + CC: ${{ matrix.cc }} + run: ./configure && make config && make -j4 && make install + feature-test: + name: Features + continue-on-error: true + needs: default-build + strategy: + matrix: + conf_tls: [ '', '--disable-tls' ] + conf_ipv6: [ '', '--disable-ipv6' ] + conf_tdns: [ '', '--disable-tdns' ] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: install dependencies + run: sudo apt-get install tcl tcl-dev openssl libssl-dev + - name: Build + run: ./configure ${{ matrix.conf_tls }} ${{ matrix.conf_ipv6 }} ${{ matrix.conf_tdns }} && make config && make -j4 diff --git a/.github/workflows/misc.yml b/.github/workflows/misc.yml new file mode 100644 index 000000000..b6a894b30 --- /dev/null +++ b/.github/workflows/misc.yml @@ -0,0 +1,45 @@ +name: Check autotools/makedepend + +on: + pull_request: + branches: [ develop ] + push: + branches: [ develop ] + +jobs: + autotools-check: + name: Check if misc/runautotools needs to be run + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: install dependencies + run: sudo apt-get install build-essential autoconf + - name: Stage configure with revision removed + run: | + for i in `find . -name configure`; do sed -i 's/From configure.ac .*//' $i; git add $i; done + - name: Run autotools + run: misc/runautotools + - name: Remove configure revision again + run: | + for i in `find . -name configure`; do sed -i 's/From configure.ac .*//' $i; done + - name: Check diff + run: | + git diff | tee .gitdiff + if [ -s .gitdiff ]; then + exit 1 + fi + makedepend-check: + name: Check if misc/makedepend needs to be run + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: install dependencies + run: sudo apt-get install build-essential autoconf tcl-dev tcl openssl libssl-dev + - name: Run makedepend + run: misc/makedepend + - name: Check diff + run: | + git diff | tee .gitdiff + if [ -s .gitdiff ]; then + exit 1 + fi diff --git a/src/Makefile.in b/src/Makefile.in index 6c6be3ac1..4a3cc4d7e 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -6,6 +6,7 @@ srcdir = @srcdir@ VPATH = @srcdir@ @SET_MAKE@ +EGGEXEC = @EGGEXEC@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ @@ -18,6 +19,8 @@ CFLAGS = @CFLAGS@ -I.. -I$(top_srcdir) @SSL_INCLUDES@ @DEFS@ $(CFLGS) CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ +XLIBS = @SSL_LIBS@ @TCL_LIB_SPEC@ @LIBS@ + eggdrop_objs = bg.o botcmd.o botmsg.o botnet.o chanprog.o cmds.o dcc.o \ dccutil.o dns.o flags.o language.o match.o main.o mem.o misc.o misc_file.o \ modules.o net.o rfc1459.o tcl.o tcldcc.o tclhash.o tclmisc.o tcluser.o \ From 95f630ee045c23526b17ad646ca1f0cf7397485f Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 16 Jun 2024 21:51:33 +0200 Subject: [PATCH 67/91] Fix include sys/time.h and time.h. Both are POSIX 2001. Found by: thommey Patch by: michaelortmann Fixes: #1619 --- config.h.in | 125 +- configure | 2220 ++++++++++++++++++-------------- configure.ac | 3 +- src/eggdrop.h | 8 +- src/main.c | 6 - src/mod/compress.mod/configure | 517 ++++---- src/mod/dns.mod/configure | 495 +++---- src/mod/filesys.mod/filesys.c | 6 - src/mod/python.mod/configure | 301 ++--- src/mod/seen.mod/seen.c | 6 - src/mod/server.mod/cmdsserv.c | 1 - src/tclmisc.c | 7 - 12 files changed, 2049 insertions(+), 1646 deletions(-) diff --git a/config.h.in b/config.h.in index 30cc2b7da..80466fec7 100644 --- a/config.h.in +++ b/config.h.in @@ -56,7 +56,7 @@ #undef EGG_VERSION /* Define to nothing if C supports flexible array members, and to 1 if it does - not. That way, with a declaration like `struct s { int n; double + not. That way, with a declaration like 'struct s { int n; double d[FLEXIBLE_ARRAY_MEMBER]; };', the struct hack can be used with pre-C99 compilers. When computing the size of such an object, don't use 'sizeof (struct s)' as it overestimates the size. Use 'offsetof (struct s, d)' @@ -64,7 +64,7 @@ MSVC and with C++ compilers. */ #undef FLEXIBLE_ARRAY_MEMBER -/* Define to 1 if you have the `a2i_IPADDRESS' function. */ +/* Define to 1 if you have the 'a2i_IPADDRESS' function. */ #undef HAVE_A2I_IPADDRESS /* Define to 1 if you have the header file. */ @@ -73,48 +73,48 @@ /* Define if b64_ntop exists. */ #undef HAVE_BASE64 -/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't. +/* Define to 1 if you have the declaration of 'tzname', and to 0 if you don't. */ #undef HAVE_DECL_TZNAME -/* Define to 1 if you have the header file, and it defines `DIR'. +/* Define to 1 if you have the header file, and it defines 'DIR'. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H -/* Define to 1 if you have the `dlopen' function. */ +/* Define to 1 if you have the 'dlopen' function. */ #undef HAVE_DLOPEN /* Define to 1 if you have the header file. */ #undef HAVE_DL_H -/* Define to 1 if you have the `dprintf' function. */ +/* Define to 1 if you have the 'dprintf' function. */ #undef HAVE_DPRINTF -/* Define to 1 if you have the `EVP_md5' function. */ +/* Define to 1 if you have the 'EVP_md5' function. */ #undef HAVE_EVP_MD5 -/* Define to 1 if you have the `EVP_PKEY_get1_EC_KEY' function. */ +/* Define to 1 if you have the 'EVP_PKEY_get1_EC_KEY' function. */ #undef HAVE_EVP_PKEY_GET1_EC_KEY -/* Define to 1 if you have the `EVP_sha1' function. */ +/* Define to 1 if you have the 'EVP_sha1' function. */ #undef HAVE_EVP_SHA1 -/* Define to 1 if you have the `explicit_bzero' function. */ +/* Define to 1 if you have the 'explicit_bzero' function. */ #undef HAVE_EXPLICIT_BZERO -/* Define to 1 if you have the `explicit_memset' function. */ +/* Define to 1 if you have the 'explicit_memset' function. */ #undef HAVE_EXPLICIT_MEMSET /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H -/* Define to 1 if you have the `getpagesize' function. */ +/* Define to 1 if you have the 'getpagesize' function. */ #undef HAVE_GETPAGESIZE -/* Define to 1 if you have the `getrandom' function. */ +/* Define to 1 if you have the 'getrandom' function. */ #undef HAVE_GETRANDOM /* Define to 1 if you have the in6addr_any constant. */ @@ -123,31 +123,31 @@ /* Define to 1 if you have the in6addr_loopback constant. */ #undef HAVE_IN6ADDR_LOOPBACK -/* Define to 1 if you have the `inet_aton' function. */ +/* Define to 1 if you have the 'inet_aton' function. */ #undef HAVE_INET_ATON -/* Define to 1 if the system has the type `intptr_t'. */ +/* Define to 1 if the system has the type 'intptr_t'. */ #undef HAVE_INTPTR_T /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H -/* Define to 1 if you have the `isascii' function. */ +/* Define to 1 if you have the 'isascii' function. */ #undef HAVE_ISASCII -/* Define to 1 if you have the `crypto' library (-lcrypto). */ +/* Define to 1 if you have the 'crypto' library (-lcrypto). */ #undef HAVE_LIBCRYPTO -/* Define to 1 if you have the `dld' library (-ldld). */ +/* Define to 1 if you have the 'dld' library (-ldld). */ #undef HAVE_LIBDLD -/* Define to 1 if you have the `ssl' library (-lssl). */ +/* Define to 1 if you have the 'ssl' library (-lssl). */ #undef HAVE_LIBSSL /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H -/* Define to 1 if you have the `load' function. */ +/* Define to 1 if you have the 'load' function. */ #undef HAVE_LOAD /* Define to 1 if you have the header file. */ @@ -162,28 +162,28 @@ /* Define to 1 if you have the header file. */ #undef HAVE_MACH_O_RLD_H -/* Define to 1 if you have the `MD5_Final' function. */ +/* Define to 1 if you have the 'MD5_Final' function. */ #undef HAVE_MD5_FINAL -/* Define to 1 if you have the `MD5_Init' function. */ +/* Define to 1 if you have the 'MD5_Init' function. */ #undef HAVE_MD5_INIT -/* Define to 1 if you have the `MD5_Update' function. */ +/* Define to 1 if you have the 'MD5_Update' function. */ #undef HAVE_MD5_UPDATE -/* Define to 1 if you have the `memset_explicit' function. */ +/* Define to 1 if you have the 'memset_explicit' function. */ #undef HAVE_MEMSET_EXPLICIT -/* Define to 1 if you have the `memset_s' function. */ +/* Define to 1 if you have the 'memset_s' function. */ #undef HAVE_MEMSET_S /* Define to 1 if you have the header file. */ #undef HAVE_MINIX_CONFIG_H -/* Define to 1 if you have a working `mmap' system call. */ +/* Define to 1 if you have a working 'mmap' system call. */ #undef HAVE_MMAP -/* Define to 1 if you have the header file, and it defines `DIR'. */ +/* Define to 1 if you have the header file, and it defines 'DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the header file. */ @@ -195,7 +195,7 @@ /* Do we have ? */ #undef HAVE_NET_ERRNO_H -/* Define to 1 if you have the `NSLinkModule' function. */ +/* Define to 1 if you have the 'NSLinkModule' function. */ #undef HAVE_NSLINKMODULE /* Define this if your OpenSSL library has MD5 cipher support. */ @@ -216,13 +216,13 @@ /* Define to 1 if you have the header file. */ #undef HAVE_RLD_H -/* Define to 1 if you have the `rld_load' function. */ +/* Define to 1 if you have the 'rld_load' function. */ #undef HAVE_RLD_LOAD -/* Define to 1 if you have the `shl_load' function. */ +/* Define to 1 if you have the 'shl_load' function. */ #undef HAVE_SHL_LOAD -/* Define to 1 if you have the `snprintf' function. */ +/* Define to 1 if you have the 'snprintf' function. */ #undef HAVE_SNPRINTF /* Define to 1 if you have the header file. */ @@ -246,26 +246,26 @@ /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H -/* Define to 1 if you have the `strlcpy' function. */ +/* Define to 1 if you have the 'strlcpy' function. */ #undef HAVE_STRLCPY -/* Define to 1 if the system has the type `struct in6_addr'. */ +/* Define to 1 if the system has the type 'struct in6_addr'. */ #undef HAVE_STRUCT_IN6_ADDR -/* Define to 1 if the system has the type `struct sockaddr_in6'. */ +/* Define to 1 if the system has the type 'struct sockaddr_in6'. */ #undef HAVE_STRUCT_SOCKADDR_IN6 -/* Define to 1 if `tm_zone' is a member of `struct tm'. */ +/* Define to 1 if 'tm_zone' is a member of 'struct tm'. */ #undef HAVE_STRUCT_TM_TM_ZONE -/* Define to 1 if you have the header file, and it defines `DIR'. +/* Define to 1 if you have the header file, and it defines 'DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_FILE_H -/* Define to 1 if you have the header file, and it defines `DIR'. +/* Define to 1 if you have the header file, and it defines 'DIR'. */ #undef HAVE_SYS_NDIR_H @@ -287,18 +287,21 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H -/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use - `HAVE_STRUCT_TM_TM_ZONE' instead. */ +/* Define to 1 if you have the header file. */ +#undef HAVE_TIME_H + +/* Define to 1 if your 'struct tm' has 'tm_zone'. Deprecated, use + 'HAVE_STRUCT_TM_TM_ZONE' instead. */ #undef HAVE_TM_ZONE -/* Define to 1 if you don't have `tm_zone' but do have the external array - `tzname'. */ +/* Define to 1 if you don't have 'tm_zone' but do have the external array + 'tzname'. */ #undef HAVE_TZNAME /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H -/* Define to 1 if you have the `vsnprintf' function. */ +/* Define to 1 if you have the 'vsnprintf' function. */ #undef HAVE_VSNPRINTF /* Define to 1 if you have the header file. */ @@ -357,31 +360,31 @@ /* Define if running under QNX. */ #undef QNX_HACKS -/* Define to the type of arg 1 for `select'. */ +/* Define to the type of arg 1 for 'select'. */ #undef SELECT_TYPE_ARG1 -/* Define to the type of args 2, 3 and 4 for `select'. */ +/* Define to the type of args 2, 3 and 4 for 'select'. */ #undef SELECT_TYPE_ARG234 -/* Define to the type of arg 5 for `select'. */ +/* Define to the type of arg 5 for 'select'. */ #undef SELECT_TYPE_ARG5 -/* The size of `char', as computed by sizeof. */ +/* The size of 'char', as computed by sizeof. */ #undef SIZEOF_CHAR -/* The size of `int', as computed by sizeof. */ +/* The size of 'int', as computed by sizeof. */ #undef SIZEOF_INT -/* The size of `long', as computed by sizeof. */ +/* The size of 'long', as computed by sizeof. */ #undef SIZEOF_LONG -/* The size of `short', as computed by sizeof. */ +/* The size of 'short', as computed by sizeof. */ #undef SIZEOF_SHORT -/* The size of `void*', as computed by sizeof. */ +/* The size of 'void*', as computed by sizeof. */ #undef SIZEOF_VOIDP -/* Define to 1 if all of the C90 standard headers exist (not just the ones +/* Define to 1 if all of the C89 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #undef STDC_HEADERS @@ -392,10 +395,10 @@ /* Define this to enable SSL support. */ #undef TLS -/* Define to 1 if your declares `struct tm'. */ +/* Define to 1 if your declares 'struct tm'. */ #undef TM_IN_SYS_TIME -/* Enable extensions on AIX 3, Interix. */ +/* Enable extensions on AIX, Interix, z/OS. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif @@ -456,11 +459,15 @@ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif +/* Enable extensions specified by C23 Annex F. */ +#ifndef __STDC_WANT_IEC_60559_EXT__ +# undef __STDC_WANT_IEC_60559_EXT__ +#endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif -/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ +/* Enable extensions specified by C23 Annex H and ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif @@ -498,14 +505,14 @@ /* Define this to a 64-bit type on Cygwin to satisfy OpenSSL dependencies. */ #undef __int64 -/* Define to empty if `const' does not conform to ANSI C. */ +/* Define to empty if 'const' does not conform to ANSI C. */ #undef const /* Define this to ASN1_STRING_get0_data when using OpenSSL 1.1.0+, ASN1_STRING_data otherwise. */ #undef egg_ASN1_string_data -/* Define to `__inline__' or `__inline' if that's what the C compiler +/* Define to '__inline__' or '__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline @@ -518,14 +525,14 @@ /* Define as a signed integer type capable of holding a process identifier. */ #undef pid_t -/* Define to `unsigned int' if does not define. */ +/* Define as 'unsigned int' if doesn't define. */ #undef size_t /* Substitute for socklen_t */ #undef socklen_t -/* Define to empty if the keyword `volatile' does not work. Warning: valid - code using `volatile' can become incorrect without. Disable with care. */ +/* Define to empty if the keyword 'volatile' does not work. Warning: valid + code using 'volatile' can become incorrect without. Disable with care. */ #undef volatile #endif /* !_EGG_CONFIG_H */ diff --git a/configure b/configure index 2a6387317..41fc0085f 100755 --- a/configure +++ b/configure @@ -1,12 +1,12 @@ #! /bin/sh -# From configure.ac 98f8972a. +# From configure.ac bc7bc2ee. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for Eggdrop 1.9.5. +# Generated by GNU Autoconf 2.72 for Eggdrop 1.9.5. # # Report bugs to . # # -# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, # Inc. # # @@ -20,7 +20,6 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -29,12 +28,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop - case `(set -o) 2>/dev/null` in #( +else case e in #( + e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi @@ -106,7 +106,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as `sh COMMAND' +# We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -136,15 +136,14 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. +# out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="as_nop=: -if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 + as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: @@ -152,12 +151,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else \$as_nop - case \`(set -o) 2>/dev/null\` in #( +else case e in #( + e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi " @@ -175,8 +175,9 @@ as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : -else \$as_nop - exitcode=1; echo positional parameters were not saved. +else case e in #( + e) exitcode=1; echo positional parameters were not saved. ;; +esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) @@ -190,14 +191,15 @@ test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes -else $as_nop - as_have_required=no +else case e in #( + e) as_have_required=no ;; +esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : -else $as_nop - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else case e in #( + e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do @@ -230,12 +232,13 @@ IFS=$as_save_IFS if $as_found then : -else $as_nop - if { test -f "$SHELL" || test -f "$SHELL.exe"; } && +else case e in #( + e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes -fi +fi ;; +esac fi @@ -257,7 +260,7 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. +# out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi @@ -277,7 +280,8 @@ $0: manually run the script under such a shell if you do $0: have one." fi exit 1 -fi +fi ;; +esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} @@ -316,14 +320,6 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -392,11 +388,12 @@ then : { eval $1+=\$2 }' -else $as_nop - as_fn_append () +else case e in #( + e) as_fn_append () { eval $1=\$$1\$2 - } + } ;; +esac fi # as_fn_append # as_fn_arith ARG... @@ -410,21 +407,14 @@ then : { as_val=$(( $* )) }' -else $as_nop - as_fn_arith () +else case e in #( + e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } + } ;; +esac fi # as_fn_arith -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -498,6 +488,8 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits /[$]LINENO/= ' <$as_myself | sed ' + t clear + :clear s/[$]LINENO.*/&-/ t lineno b @@ -546,7 +538,6 @@ esac as_echo='printf %s\n' as_echo_n='printf %s' - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -558,9 +549,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. + # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -585,10 +576,12 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed '$as_sed_sh'" # deprecated test -n "$DJDIR" || exec 7<&0 /dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -947,7 +938,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1160,7 +1151,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1176,7 +1167,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1206,8 +1197,8 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" + -*) as_fn_error $? "unrecognized option: '$ac_option' +Try '$0 --help' for more information" ;; *=*) @@ -1215,7 +1206,7 @@ Try \`$0 --help' for more information" # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; @@ -1265,7 +1256,7 @@ do as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done -# There might be people who depend on the old broken behavior: `$host' +# There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias @@ -1333,7 +1324,7 @@ if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` @@ -1361,7 +1352,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Eggdrop 1.9.5 to adapt to many kinds of systems. +'configure' configures Eggdrop 1.9.5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1375,11 +1366,11 @@ Configuration: --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages + -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' + -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] + --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @@ -1387,10 +1378,10 @@ Installation directories: --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. +By default, 'make install' will install all the files in +'$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify +an installation prefix other than '$ac_default_prefix' using '--prefix', +for instance '--prefix=\$HOME'. For better control, use the options below. @@ -1472,7 +1463,7 @@ Some influential environment variables: you have headers in a nonstandard directory CPP C preprocessor -Use these variables to override the choices made by `configure' or to help +Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . @@ -1541,9 +1532,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Eggdrop configure 1.9.5 -generated by GNU Autoconf 2.71 +generated by GNU Autoconf 2.72 -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. @@ -1584,11 +1575,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 } && test -s conftest.$ac_objext then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval @@ -1607,8 +1599,8 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> @@ -1616,10 +1608,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1659,11 +1653,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 } then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would @@ -1702,11 +1697,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 } then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval @@ -1724,15 +1720,15 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. */ + which can conflict with char $2 (void); below. */ #include #undef $2 @@ -1743,7 +1739,7 @@ else $as_nop #ifdef __cplusplus extern "C" #endif -char $2 (); +char $2 (void); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ @@ -1762,11 +1758,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1805,12 +1803,13 @@ printf "%s\n" "$ac_try_echo"; } >&5 test $ac_status = 0; }; } then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: program exited with status $ac_status" >&5 +else case e in #( + e) printf "%s\n" "$as_me: program exited with status $ac_status" >&5 printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=$ac_status + ac_retval=$ac_status ;; +esac fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno @@ -1830,8 +1829,8 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @@ -1861,12 +1860,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - eval "$3=yes" +else case e in #( + e) eval "$3=yes" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1887,8 +1888,8 @@ printf %s "checking for $2.$3... " >&6; } if eval test \${$4+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int @@ -1904,8 +1905,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$4=yes" -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int @@ -1921,12 +1922,15 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$4=yes" -else $as_nop - eval "$4=no" +else case e in #( + e) eval "$4=no" ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$4 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1948,8 +1952,8 @@ printf %s "checking whether $as_decl_name is declared... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` +else case e in #( + e) as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` eval ac_save_FLAGS=\$$6 as_fn_append $6 " $5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -1973,12 +1977,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval $6=\$ac_save_FLAGS - + ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -2032,18 +2038,19 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_hi=$ac_mid; break -else $as_nop - as_fn_arith $ac_mid + 1 && ac_lo=$as_val +else case e in #( + e) as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int @@ -2078,20 +2085,23 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_lo=$ac_mid; break -else $as_nop - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val +else case e in #( + e) as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else $as_nop - ac_lo= ac_hi= +else case e in #( + e) ac_lo= ac_hi= ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Binary search between lo and hi bounds. @@ -2114,8 +2124,9 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_hi=$ac_mid -else $as_nop - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +else case e in #( + e) as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done @@ -2163,8 +2174,9 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : echo >>conftest.val; read $3 &6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } fi done @@ -2485,9 +2497,7 @@ struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; +static char *e (char **p, int i) { return p[i]; } @@ -2501,6 +2511,21 @@ static char *f (char * (*g) (char **, int), char **p, ...) return s; } +/* C89 style stringification. */ +#define noexpand_stringify(a) #a +const char *stringified = noexpand_stringify(arbitrary+token=sequence); + +/* C89 style token pasting. Exercises some of the corner cases that + e.g. old MSVC gets wrong, but not very hard. */ +#define noexpand_concat(a,b) a##b +#define expand_concat(a,b) noexpand_concat(a,b) +extern int vA; +extern int vbee; +#define aye A +#define bee B +int *pvA = &expand_concat(v,aye); +int *pvbee = &noexpand_concat(v,bee); + /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated @@ -2528,16 +2553,19 @@ ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' -// Does the compiler advertise C99 conformance? +/* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif +// See if C++-style comments work. + #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); +extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare @@ -2587,7 +2615,6 @@ typedef const char *ccp; static inline int test_restrict (ccp restrict text) { - // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) @@ -2653,6 +2680,8 @@ ac_c_conftest_c99_main=' ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; + // Work around memory leak warnings. + free (ia); // Check named initializers. struct named_init ni = { @@ -2674,7 +2703,7 @@ ac_c_conftest_c99_main=' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' -// Does the compiler advertise C11 conformance? +/* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif @@ -2789,7 +2818,6 @@ as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H" as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" -as_fn_append ac_header_c_list " sys/time.h sys_time_h HAVE_SYS_TIME_H" as_fn_append ac_header_c_list " sys/select.h sys_select_h HAVE_SYS_SELECT_H" as_fn_append ac_header_c_list " sys/socket.h sys_socket_h HAVE_SYS_SOCKET_H" as_fn_append ac_header_c_list " sys/param.h sys_param_h HAVE_SYS_PARAM_H" @@ -2873,8 +2901,9 @@ IFS=$as_save_IFS if $as_found then : -else $as_nop - as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; +esac fi @@ -2902,12 +2931,12 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -2916,18 +2945,18 @@ printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. @@ -2943,11 +2972,11 @@ printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi done if $ac_cache_corrupted; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## @@ -3049,8 +3078,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3072,7 +3101,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -3098,8 +3128,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3121,7 +3151,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -3150,10 +3181,10 @@ esac fi -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 @@ -3225,8 +3256,8 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' + # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. +# So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. @@ -3246,7 +3277,7 @@ do ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' + # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. @@ -3257,8 +3288,9 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else $as_nop - ac_file='' +else case e in #( + e) ac_file='' ;; +esac fi if test -z "$ac_file" then : @@ -3267,13 +3299,14 @@ printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } +See 'config.log' for more details" "$LINENO" 5; } +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } @@ -3297,10 +3330,10 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. + # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) +# catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will +# work properly (i.e., refer to 'conftest.exe'), while it won't with +# 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in @@ -3310,11 +3343,12 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 @@ -3330,6 +3364,8 @@ int main (void) { FILE *f = fopen ("conftest.out", "w"); + if (!f) + return 1; return ferror (f) || fclose (f) != 0; ; @@ -3369,26 +3405,27 @@ printf "%s\n" "$ac_try_echo"; } >&5 if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } +If you meant to cross compile, use '--host'. +See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +rm -f conftest.$ac_ext conftest$ac_cv_exeext \ + conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3420,16 +3457,18 @@ then : break;; esac done -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext +rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } @@ -3440,8 +3479,8 @@ printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3458,12 +3497,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no +else case e in #( + e) ac_compiler_gnu=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } @@ -3481,8 +3522,8 @@ printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_save_c_werror_flag=$ac_c_werror_flag +else case e in #( + e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" @@ -3500,8 +3541,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes -else $as_nop - CFLAGS="" +else case e in #( + e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -3516,8 +3557,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - ac_c_werror_flag=$ac_save_c_werror_flag +else case e in #( + e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -3534,12 +3575,15 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag + ac_c_werror_flag=$ac_save_c_werror_flag ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } @@ -3566,8 +3610,8 @@ printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no +else case e in #( + e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -3584,25 +3628,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" + CC="$CC $ac_cv_prog_cc_c11" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 + ac_prog_cc_stdc=c11 ;; +esac fi fi if test x$ac_prog_cc_stdc = xno @@ -3612,8 +3659,8 @@ printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no +else case e in #( + e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -3630,25 +3677,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" + CC="$CC $ac_cv_prog_cc_c99" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 + ac_prog_cc_stdc=c99 ;; +esac fi fi if test x$ac_prog_cc_stdc = xno @@ -3658,8 +3708,8 @@ printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no +else case e in #( + e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -3676,25 +3726,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" + CC="$CC $ac_cv_prog_cc_c89" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 + ac_prog_cc_stdc=c89 ;; +esac fi fi @@ -3771,8 +3824,8 @@ printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test ${ac_cv_safe_to_define___extensions__+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 @@ -3788,10 +3841,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_safe_to_define___extensions__=yes -else $as_nop - ac_cv_safe_to_define___extensions__=no +else case e in #( + e) ac_cv_safe_to_define___extensions__=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } @@ -3801,8 +3856,8 @@ printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } if test ${ac_cv_should_define__xopen_source+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_should_define__xopen_source=no +else case e in #( + e) ac_cv_should_define__xopen_source=no if test $ac_cv_header_wchar_h = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -3821,8 +3876,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 @@ -3840,10 +3895,12 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_should_define__xopen_source=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi +fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } @@ -3868,6 +3925,8 @@ printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_IEC_60559_EXT__ 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h @@ -3887,8 +3946,9 @@ then : printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h -else $as_nop - MINIX= +else case e in #( + e) MINIX= ;; +esac fi if test $ac_cv_safe_to_define___extensions__ = yes then : @@ -3906,15 +3966,21 @@ printf %s "checking for library containing strerror... " >&6; } if test ${ac_cv_search_strerror+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char strerror (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char strerror (void); int main (void) { @@ -3945,11 +4011,13 @@ done if test ${ac_cv_search_strerror+y} then : -else $as_nop - ac_cv_search_strerror=no +else case e in #( + e) ac_cv_search_strerror=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 printf "%s\n" "$ac_cv_search_strerror" >&6; } @@ -3969,8 +4037,8 @@ printf %s "checking for icc... " >&6; } if test ${egg_cv_var_cc_icc+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -3984,13 +4052,15 @@ then : egg_cv_var_cc_icc="yes" -else $as_nop - +else case e in #( + e) egg_cv_var_cc_icc="no" - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $egg_cv_var_cc_icc" >&5 printf "%s\n" "$egg_cv_var_cc_icc" >&6; } @@ -4008,8 +4078,8 @@ printf %s "checking whether the compiler understands -pipe... " >&6; } if test ${egg_cv_var_ccpipe+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) ac_old_CC="$CC" CC="$CC -pipe" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -4028,14 +4098,16 @@ then : egg_cv_var_ccpipe="yes" -else $as_nop - +else case e in #( + e) egg_cv_var_ccpipe="no" - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CC="$ac_old_CC" - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $egg_cv_var_ccpipe" >&5 printf "%s\n" "$egg_cv_var_ccpipe" >&6; } @@ -4060,8 +4132,8 @@ printf %s "checking whether the compiler understands -Wall... " >&6; } if test ${egg_cv_var_ccwall+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) ac_old_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wall" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -4080,14 +4152,16 @@ then : egg_cv_var_ccwall="yes" -else $as_nop - +else case e in #( + e) egg_cv_var_ccwall="no" - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$ac_old_CFLAGS" - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $egg_cv_var_ccwall" >&5 printf "%s\n" "$egg_cv_var_ccwall" >&6; } @@ -4141,8 +4215,8 @@ if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 -else $as_nop - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else case e in #( + e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS @@ -4196,7 +4270,8 @@ esac IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir - + ;; +esac fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install @@ -4228,8 +4303,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_MAKE+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$MAKE"; then +else case e in #( + e) if test -n "$MAKE"; then ac_cv_prog_MAKE="$MAKE" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4251,7 +4326,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi MAKE=$ac_cv_prog_MAKE if test -n "$MAKE"; then @@ -4273,8 +4349,8 @@ ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 -else $as_nop - cat >conftest.make <<\_ACEOF +else case e in #( + e) cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' @@ -4286,7 +4362,8 @@ case `${MAKE-make} -f conftest.make 2>/dev/null` in *) eval ac_cv_prog_make_${ac_make}_set=no;; esac -rm -f conftest.make +rm -f conftest.make ;; +esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 @@ -4306,8 +4383,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$RANLIB"; then +else case e in #( + e) if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4329,7 +4406,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then @@ -4351,8 +4429,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_RANLIB"; then +else case e in #( + e) if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4374,7 +4452,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then @@ -4424,8 +4503,8 @@ printf %s "checking whether $ac_prog works... " >&6; } if test ${ac_cv_prog_HEAD_1+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) if test -n "$HEAD_1"; then # Let the user override the test. ac_cv_prog_HEAD_1="$HEAD_1" @@ -4434,7 +4513,8 @@ else $as_nop ac_cv_prog_HEAD_1="$ac_prog" fi fi - + ;; +esac fi if test -n "$ac_cv_prog_HEAD_1"; then @@ -4470,8 +4550,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$STRIP"; then +else case e in #( + e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4493,7 +4573,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then @@ -4519,8 +4600,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$AWK"; then +else case e in #( + e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4542,7 +4623,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then @@ -4576,8 +4658,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_BASENAME+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$BASENAME"; then +else case e in #( + e) if test -n "$BASENAME"; then ac_cv_prog_BASENAME="$BASENAME" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4599,7 +4681,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi BASENAME=$ac_cv_prog_BASENAME if test -n "$BASENAME"; then @@ -4629,8 +4712,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UNAME+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$UNAME"; then +else case e in #( + e) if test -n "$UNAME"; then ac_cv_prog_UNAME="$UNAME" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4652,7 +4735,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi UNAME=$ac_cv_prog_UNAME if test -n "$UNAME"; then @@ -4673,8 +4757,9 @@ fi if test ${enable_strip+y} then : enableval=$enable_strip; enable_strip="$enableval" -else $as_nop - enable_strip="no" +else case e in #( + e) enable_strip="no" ;; +esac fi @@ -4706,15 +4791,16 @@ printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_build_alias=$build_alias +else case e in #( + e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } @@ -4741,14 +4827,15 @@ printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "x$host_alias" = x; then +else case e in #( + e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } @@ -4775,8 +4862,8 @@ printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ +else case e in #( + e) ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done @@ -4801,9 +4888,10 @@ do as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in +case `"$ac_path_SED" --version 2>&1` in #( *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -4838,7 +4926,8 @@ IFS=$as_save_IFS else ac_cv_path_SED=$SED fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } @@ -4860,8 +4949,8 @@ if test -z "$CPP"; then if test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 -else $as_nop - # Double quotes because $CC needs to be expanded +else case e in #( + e) # Double quotes because $CC needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false @@ -4879,9 +4968,10 @@ _ACEOF if ac_fn_c_try_cpp "$LINENO" then : -else $as_nop - # Broken: fails on valid input. -continue +else case e in #( + e) # Broken: fails on valid input. +continue ;; +esac fi rm -f conftest.err conftest.i conftest.$ac_ext @@ -4895,15 +4985,16 @@ if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue -else $as_nop - # Passes both tests. +else case e in #( + e) # Passes both tests. ac_preproc_ok=: -break +break ;; +esac fi rm -f conftest.err conftest.i conftest.$ac_ext done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +# Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : @@ -4912,7 +5003,8 @@ fi done ac_cv_prog_CPP=$CPP - + ;; +esac fi CPP=$ac_cv_prog_CPP else @@ -4935,9 +5027,10 @@ _ACEOF if ac_fn_c_try_cpp "$LINENO" then : -else $as_nop - # Broken: fails on valid input. -continue +else case e in #( + e) # Broken: fails on valid input. +continue ;; +esac fi rm -f conftest.err conftest.i conftest.$ac_ext @@ -4951,24 +5044,26 @@ if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue -else $as_nop - # Passes both tests. +else case e in #( + e) # Passes both tests. ac_preproc_ok=: -break +break ;; +esac fi rm -f conftest.err conftest.i conftest.$ac_ext done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +# Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi ac_ext=c @@ -4978,14 +5073,14 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -printf %s "checking for grep that handles long lines and -e... " >&6; } -if test ${ac_cv_path_GREP+y} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep -e" >&5 +printf %s "checking for egrep -e... " >&6; } +if test ${ac_cv_path_EGREP_TRADITIONAL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -z "$GREP"; then - ac_path_GREP_found=false +else case e in #( + e) if test -z "$EGREP_TRADITIONAL"; then + ac_path_EGREP_TRADITIONAL_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin @@ -4999,13 +5094,14 @@ do for ac_prog in grep ggrep do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in + ac_path_EGREP_TRADITIONAL="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP_TRADITIONAL" || continue +# Check for GNU ac_path_EGREP_TRADITIONAL and select it if it is found. + # Check for GNU $ac_path_EGREP_TRADITIONAL +case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #( *GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; + ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -5014,14 +5110,14 @@ case `"$ac_path_GREP" --version 2>&1` in cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - printf "%s\n" 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + printf "%s\n" 'EGREP_TRADITIONAL' >> "conftest.nl" + "$ac_path_EGREP_TRADITIONAL" -E 'EGR(EP|AC)_TRADITIONAL$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then + if test $ac_count -gt ${ac_path_EGREP_TRADITIONAL_max-0}; then # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count + ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" + ac_path_EGREP_TRADITIONAL_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break @@ -5029,35 +5125,24 @@ case `"$ac_path_GREP" --version 2>&1` in rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac - $ac_path_GREP_found && break 3 + $ac_path_EGREP_TRADITIONAL_found && break 3 done done done IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + if test -z "$ac_cv_path_EGREP_TRADITIONAL"; then + : fi else - ac_cv_path_GREP=$GREP -fi - + ac_cv_path_EGREP_TRADITIONAL=$EGREP_TRADITIONAL fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -printf "%s\n" "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -printf %s "checking for egrep... " >&6; } -if test ${ac_cv_path_EGREP+y} + if test "$ac_cv_path_EGREP_TRADITIONAL" then : - printf %s "(cached) " >&6 -else $as_nop - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false + ac_cv_path_EGREP_TRADITIONAL="$ac_cv_path_EGREP_TRADITIONAL -E" +else case e in #( + e) if test -z "$EGREP_TRADITIONAL"; then + ac_path_EGREP_TRADITIONAL_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin @@ -5071,13 +5156,14 @@ do for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in + ac_path_EGREP_TRADITIONAL="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP_TRADITIONAL" || continue +# Check for GNU ac_path_EGREP_TRADITIONAL and select it if it is found. + # Check for GNU $ac_path_EGREP_TRADITIONAL +case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #( *GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; + ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -5086,14 +5172,14 @@ case `"$ac_path_EGREP" --version 2>&1` in cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - printf "%s\n" 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + printf "%s\n" 'EGREP_TRADITIONAL' >> "conftest.nl" + "$ac_path_EGREP_TRADITIONAL" 'EGR(EP|AC)_TRADITIONAL$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then + if test $ac_count -gt ${ac_path_EGREP_TRADITIONAL_max-0}; then # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count + ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" + ac_path_EGREP_TRADITIONAL_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break @@ -5101,24 +5187,25 @@ case `"$ac_path_EGREP" --version 2>&1` in rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac - $ac_path_EGREP_found && break 3 + $ac_path_EGREP_TRADITIONAL_found && break 3 done done done IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then + if test -z "$ac_cv_path_EGREP_TRADITIONAL"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else - ac_cv_path_EGREP=$EGREP + ac_cv_path_EGREP_TRADITIONAL=$EGREP_TRADITIONAL fi - - fi + ;; +esac +fi ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -printf "%s\n" "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP_TRADITIONAL" >&5 +printf "%s\n" "$ac_cv_path_EGREP_TRADITIONAL" >&6; } + EGREP_TRADITIONAL=$ac_cv_path_EGREP_TRADITIONAL # FIXME: this needs to be fixed so that it works on IRIX @@ -5132,15 +5219,21 @@ printf %s "checking for library containing gethostbyname... " >&6; } if test ${ac_cv_search_gethostbyname+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char gethostbyname (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (void); int main (void) { @@ -5171,11 +5264,13 @@ done if test ${ac_cv_search_gethostbyname+y} then : -else $as_nop - ac_cv_search_gethostbyname=no +else case e in #( + e) ac_cv_search_gethostbyname=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5 printf "%s\n" "$ac_cv_search_gethostbyname" >&6; } @@ -5191,15 +5286,21 @@ printf %s "checking for library containing socket... " >&6; } if test ${ac_cv_search_socket+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char socket (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char socket (void); int main (void) { @@ -5230,11 +5331,13 @@ done if test ${ac_cv_search_socket+y} then : -else $as_nop - ac_cv_search_socket=no +else case e in #( + e) ac_cv_search_socket=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 printf "%s\n" "$ac_cv_search_socket" >&6; } @@ -5243,23 +5346,29 @@ if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5 printf %s "checking for socket in -lsocket... " >&6; } if test ${ac_cv_lib_socket_socket+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket -lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char socket (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char socket (void); int main (void) { @@ -5271,12 +5380,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_socket_socket=yes -else $as_nop - ac_cv_lib_socket_socket=no +else case e in #( + e) ac_cv_lib_socket_socket=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5 printf "%s\n" "$ac_cv_lib_socket_socket" >&6; } @@ -5284,7 +5395,8 @@ if test "x$ac_cv_lib_socket_socket" = xyes then : LIBS="-lsocket -lnsl $LIBS" fi - + ;; +esac fi @@ -5328,8 +5440,14 @@ printf %s "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char pthread_join (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_join (void); int main (void) { @@ -5423,7 +5541,7 @@ case $host_os in _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1 + $EGREP_TRADITIONAL "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1 then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 printf "%s\n" "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} @@ -5453,8 +5571,8 @@ printf %s "checking whether $CC is Clang... " >&6; } if test ${ax_cv_PTHREAD_CLANG+y} then : printf %s "(cached) " >&6 -else $as_nop - ax_cv_PTHREAD_CLANG=no +else case e in #( + e) ax_cv_PTHREAD_CLANG=no # Note that Autoconf sets GCC=yes for Clang as well as GCC if test "x$GCC" = "xyes"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -5466,14 +5584,15 @@ else $as_nop _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1 + $EGREP_TRADITIONAL "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1 then : ax_cv_PTHREAD_CLANG=yes fi rm -rf conftest* fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 printf "%s\n" "$ax_cv_PTHREAD_CLANG" >&6; } @@ -5523,8 +5642,9 @@ esac if test "x$ax_pthread_check_macro" = "x--" then : ax_pthread_check_cond=0 -else $as_nop - ax_pthread_check_cond="!defined($ax_pthread_check_macro)" +else case e in #( + e) ax_pthread_check_cond="!defined($ax_pthread_check_macro)" ;; +esac fi @@ -5558,8 +5678,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ax_pthread_config+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ax_pthread_config"; then +else case e in #( + e) if test -n "$ax_pthread_config"; then ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5582,7 +5702,8 @@ done IFS=$as_save_IFS test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no" -fi +fi ;; +esac fi ax_pthread_config=$ac_cv_prog_ax_pthread_config if test -n "$ax_pthread_config"; then @@ -5715,8 +5836,8 @@ printf %s "checking whether Clang needs flag to prevent \"argument unused\" warn if test ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+y} then : printf %s "(cached) " >&6 -else $as_nop - ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown +else case e in #( + e) ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown # Create an alternate version of $ac_link that compiles and # links in two steps (.c -> .o, .o -> exe) instead of one # (.c -> exe), because the warning occurs only in the second @@ -5762,7 +5883,8 @@ then : ax_pthread_try=no fi ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 printf "%s\n" "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } @@ -5789,8 +5911,8 @@ printf %s "checking for joinable pthread attribute... " >&6; } if test ${ax_cv_PTHREAD_JOINABLE_ATTR+y} then : printf %s "(cached) " >&6 -else $as_nop - ax_cv_PTHREAD_JOINABLE_ATTR=unknown +else case e in #( + e) ax_cv_PTHREAD_JOINABLE_ATTR=unknown for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -5810,7 +5932,8 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 printf "%s\n" "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } @@ -5830,14 +5953,15 @@ printf %s "checking whether more special flags are required for pthreads... " >& if test ${ax_cv_PTHREAD_SPECIAL_FLAGS+y} then : printf %s "(cached) " >&6 -else $as_nop - ax_cv_PTHREAD_SPECIAL_FLAGS=no +else case e in #( + e) ax_cv_PTHREAD_SPECIAL_FLAGS=no case $host_os in solaris*) ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS" ;; esac - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 printf "%s\n" "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } @@ -5853,8 +5977,8 @@ printf %s "checking for PTHREAD_PRIO_INHERIT... " >&6; } if test ${ax_cv_PTHREAD_PRIO_INHERIT+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -5869,12 +5993,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_PTHREAD_PRIO_INHERIT=yes -else $as_nop - ax_cv_PTHREAD_PRIO_INHERIT=no +else case e in #( + e) ax_cv_PTHREAD_PRIO_INHERIT=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 printf "%s\n" "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } @@ -5924,8 +6050,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PTHREAD_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$PTHREAD_CC"; then +else case e in #( + e) if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5947,7 +6073,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then @@ -5974,8 +6101,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PTHREAD_CXX+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$PTHREAD_CXX"; then +else case e in #( + e) if test -n "$PTHREAD_CXX"; then ac_cv_prog_PTHREAD_CXX="$PTHREAD_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5997,7 +6124,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi PTHREAD_CXX=$ac_cv_prog_PTHREAD_CXX if test -n "$PTHREAD_CXX"; then @@ -6054,15 +6182,21 @@ printf %s "checking for library containing dlopen... " >&6; } if test ${ac_cv_search_dlopen+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dlopen (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (void); int main (void) { @@ -6093,11 +6227,13 @@ done if test ${ac_cv_search_dlopen+y} then : -else $as_nop - ac_cv_search_dlopen=no +else case e in #( + e) ac_cv_search_dlopen=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 printf "%s\n" "$ac_cv_search_dlopen" >&6; } @@ -6113,16 +6249,22 @@ printf %s "checking for tan in -lm... " >&6; } if test ${ac_cv_lib_m_tan+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char tan (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char tan (void); int main (void) { @@ -6134,12 +6276,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_m_tan=yes -else $as_nop - ac_cv_lib_m_tan=no +else case e in #( + e) ac_cv_lib_m_tan=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_tan" >&5 printf "%s\n" "$ac_cv_lib_m_tan" >&6; } @@ -6154,16 +6298,22 @@ printf %s "checking for shl_load in -ldld... " >&6; } if test ${ac_cv_lib_dld_shl_load+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char shl_load (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (void); int main (void) { @@ -6175,12 +6325,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_shl_load=yes -else $as_nop - ac_cv_lib_dld_shl_load=no +else case e in #( + e) ac_cv_lib_dld_shl_load=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } @@ -6203,14 +6355,15 @@ printf %s "checking target system type... " >&6; } if test ${ac_cv_target+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "x$target_alias" = x; then +else case e in #( + e) if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5 fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 printf "%s\n" "$ac_cv_target" >&6; } @@ -6244,8 +6397,9 @@ printf %s "checking system type... " >&6; } if test ${egg_cv_var_system_type+y} then : printf %s "(cached) " >&6 -else $as_nop - egg_cv_var_system_type=`$UNAME -s` +else case e in #( + e) egg_cv_var_system_type=`$UNAME -s` ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $egg_cv_var_system_type" >&5 printf "%s\n" "$egg_cv_var_system_type" >&6; } @@ -6254,8 +6408,9 @@ printf %s "checking system release... " >&6; } if test ${egg_cv_var_system_release+y} then : printf %s "(cached) " >&6 -else $as_nop - egg_cv_var_system_release=`$UNAME -r` +else case e in #( + e) egg_cv_var_system_release=`$UNAME -r` ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $egg_cv_var_system_release" >&5 printf "%s\n" "$egg_cv_var_system_release" >&6; } @@ -6689,14 +6844,14 @@ EOF ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` + as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 printf %s "checking for $ac_hdr that defines DIR... " >&6; } if eval test \${$as_ac_Header+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> @@ -6713,10 +6868,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$as_ac_Header=yes" -else $as_nop - eval "$as_ac_Header=no" +else case e in #( + e) eval "$as_ac_Header=no" ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$as_ac_Header { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -6724,7 +6881,7 @@ printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes" then : cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_hdr" | $as_tr_cpp` 1 +#define `printf "%s\n" "HAVE_$ac_hdr" | sed "$as_sed_cpp"` 1 _ACEOF ac_header_dirent=$ac_hdr; break @@ -6738,16 +6895,22 @@ printf %s "checking for library containing opendir... " >&6; } if test ${ac_cv_search_opendir+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char opendir (); -int + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (void); +int main (void) { return opendir (); @@ -6777,11 +6940,13 @@ done if test ${ac_cv_search_opendir+y} then : -else $as_nop - ac_cv_search_opendir=no +else case e in #( + e) ac_cv_search_opendir=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 printf "%s\n" "$ac_cv_search_opendir" >&6; } @@ -6798,15 +6963,21 @@ printf %s "checking for library containing opendir... " >&6; } if test ${ac_cv_search_opendir+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char opendir (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (void); int main (void) { @@ -6837,11 +7008,13 @@ done if test ${ac_cv_search_opendir+y} then : -else $as_nop - ac_cv_search_opendir=no +else case e in #( + e) ac_cv_search_opendir=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 printf "%s\n" "$ac_cv_search_opendir" >&6; } @@ -6855,8 +7028,6 @@ fi fi - - ac_fn_c_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" if test "x$ac_cv_header_arpa_inet_h" = xyes then : @@ -6940,6 +7111,12 @@ if test "x$ac_cv_header_sys_time_h" = xyes then : printf "%s\n" "#define HAVE_SYS_TIME_H 1" >>confdefs.h +fi +ac_fn_c_check_header_compile "$LINENO" "time.h" "ac_cv_header_time_h" "$ac_includes_default" +if test "x$ac_cv_header_time_h" = xyes +then : + printf "%s\n" "#define HAVE_TIME_H 1" >>confdefs.h + fi ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" if test "x$ac_cv_header_unistd_h" = xyes @@ -6962,8 +7139,8 @@ printf %s "checking for an ANSI C-conforming const... " >&6; } if test ${ac_cv_c_const+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -7027,10 +7204,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_const=yes -else $as_nop - ac_cv_c_const=no +else case e in #( + e) ac_cv_c_const=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 printf "%s\n" "$ac_cv_c_const" >&6; } @@ -7045,8 +7224,8 @@ printf %s "checking whether byte ordering is bigendian... " >&6; } if test ${ac_cv_c_bigendian+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_bigendian=unknown +else case e in #( + e) ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7092,8 +7271,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext int main (void) { -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \\ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \\ && LITTLE_ENDIAN) bogus endian macros #endif @@ -7124,8 +7303,9 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_bigendian=yes -else $as_nop - ac_cv_c_bigendian=no +else case e in #( + e) ac_cv_c_bigendian=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi @@ -7169,8 +7349,9 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_bigendian=yes -else $as_nop - ac_cv_c_bigendian=no +else case e in #( + e) ac_cv_c_bigendian=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi @@ -7197,22 +7378,23 @@ unsigned short int ascii_mm[] = int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } - extern int foo; - -int -main (void) -{ -return use_ascii (foo) == use_ebcdic (foo); - ; - return 0; -} + int + main (int argc, char **argv) + { + /* Intimidate the compiler so that it does not + optimize the arrays away. */ + char *p = argv[0]; + ascii_mm[1] = *p++; ebcdic_mm[1] = *p++; + ascii_ii[1] = *p++; ebcdic_ii[1] = *p++; + return use_ascii (argc) == use_ebcdic (*p); + } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + if grep BIGenDianSyS conftest$ac_exeext >/dev/null; then ac_cv_c_bigendian=yes fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if grep LiTTleEnDian conftest$ac_exeext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else @@ -7221,9 +7403,10 @@ then : fi fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int @@ -7246,14 +7429,17 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_c_bigendian=no -else $as_nop - ac_cv_c_bigendian=yes +else case e in #( + e) ac_cv_c_bigendian=yes ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - fi + fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 printf "%s\n" "$ac_cv_c_bigendian" >&6; } @@ -7278,8 +7464,8 @@ printf %s "checking for inline... " >&6; } if test ${ac_cv_c_inline+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_inline=no +else case e in #( + e) ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7297,7 +7483,8 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$ac_cv_c_inline" != no && break done - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 printf "%s\n" "$ac_cv_c_inline" >&6; } @@ -7323,8 +7510,8 @@ printf %s "checking for flexible array members... " >&6; } if test ${ac_cv_c_flexmember+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -7337,7 +7524,9 @@ int m = getchar (); struct s *p = (struct s *) malloc (offsetof (struct s, d) + m * sizeof (double)); p->d[0] = 0.0; - return p->d != (double *) NULL; + m = p->d != (double *) NULL; + free (p); + return m; ; return 0; } @@ -7345,10 +7534,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_flexmember=yes -else $as_nop - ac_cv_c_flexmember=no +else case e in #( + e) ac_cv_c_flexmember=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_flexmember" >&5 printf "%s\n" "$ac_cv_c_flexmember" >&6; } @@ -7368,8 +7559,8 @@ then : printf "%s\n" "#define HAVE_INTPTR_T 1" >>confdefs.h -else $as_nop - for ac_type in 'int' 'long int' 'long long int'; do +else case e in #( + e) for ac_type in 'int' 'long int' 'long long int'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default @@ -7393,7 +7584,8 @@ printf "%s\n" "#define intptr_t $ac_type" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test -z "$ac_type" && break - done + done ;; +esac fi @@ -7403,8 +7595,8 @@ fi if test "x$ac_cv_type_pid_t" = xyes then : -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _WIN64 && !defined __CYGWIN__ @@ -7423,14 +7615,16 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_pid_type='int' -else $as_nop - ac_pid_type='__int64' +else case e in #( + e) ac_pid_type='__int64' ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h - + ;; +esac fi @@ -7438,10 +7632,11 @@ ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define size_t unsigned int" >>confdefs.h - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 @@ -7449,8 +7644,8 @@ printf %s "checking whether struct tm is in sys/time.h or time.h... " >&6; } if test ${ac_cv_struct_tm+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -7468,10 +7663,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_struct_tm=time.h -else $as_nop - ac_cv_struct_tm=sys/time.h +else case e in #( + e) ac_cv_struct_tm=sys/time.h ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 printf "%s\n" "$ac_cv_struct_tm" >&6; } @@ -7486,8 +7683,8 @@ printf %s "checking for $CC options needed to detect all undeclared functions... if test ${ac_cv_c_undeclared_builtin_options+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_save_CFLAGS=$CFLAGS +else case e in #( + e) ac_save_CFLAGS=$CFLAGS ac_cv_c_undeclared_builtin_options='cannot detect' for ac_arg in '' -fno-builtin; do CFLAGS="$ac_save_CFLAGS $ac_arg" @@ -7506,8 +7703,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - # This test program should compile successfully. +else case e in #( + e) # This test program should compile successfully. # No library function is consistently available on # freestanding implementations, so test against a dummy # declaration. Include always-available headers on the @@ -7535,26 +7732,29 @@ then : if test x"$ac_arg" = x then : ac_cv_c_undeclared_builtin_options='none needed' -else $as_nop - ac_cv_c_undeclared_builtin_options=$ac_arg +else case e in #( + e) ac_cv_c_undeclared_builtin_options=$ac_arg ;; +esac fi break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done CFLAGS=$ac_save_CFLAGS - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } case $ac_cv_c_undeclared_builtin_options in #( 'cannot detect') : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot make $CC report undeclared builtins -See \`config.log' for more details" "$LINENO" 5; } ;; #( +See 'config.log' for more details" "$LINENO" 5; } ;; #( 'none needed') : ac_c_undeclared_builtin_options='' ;; #( *) : @@ -7583,8 +7783,9 @@ else if test "x$ac_cv_have_decl_tzname" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_TZNAME $ac_have_decl" >>confdefs.h @@ -7593,8 +7794,8 @@ printf %s "checking for tzname... " >&6; } if test ${ac_cv_var_tzname+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if !HAVE_DECL_TZNAME @@ -7612,11 +7813,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_var_tzname=yes -else $as_nop - ac_cv_var_tzname=no +else case e in #( + e) ac_cv_var_tzname=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5 printf "%s\n" "$ac_cv_var_tzname" >&6; } @@ -7632,8 +7835,8 @@ printf %s "checking for working volatile... " >&6; } if test ${ac_cv_c_volatile+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -7650,10 +7853,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_volatile=yes -else $as_nop - ac_cv_c_volatile=no +else case e in #( + e) ac_cv_c_volatile=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5 printf "%s\n" "$ac_cv_c_volatile" >&6; } @@ -7668,8 +7873,8 @@ printf %s "checking for socklen_t... " >&6; } if test ${ac_cv_ax_type_socklen_t+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -7684,11 +7889,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_ax_type_socklen_t=yes -else $as_nop - ac_cv_ax_type_socklen_t=no +else case e in #( + e) ac_cv_ax_type_socklen_t=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_ax_type_socklen_t" >&5 printf "%s\n" "$ac_cv_ax_type_socklen_t" >&6; } @@ -7710,8 +7917,8 @@ ac_stdint_h=`echo eggint.h` if test ${ac_cv_header_stdint_t+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) old_CXXFLAGS="$CXXFLAGS" ; CXXFLAGS="" old_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS="" old_CFLAGS="$CFLAGS" ; CFLAGS="" @@ -7730,8 +7937,9 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_stdint_result="(assuming C99 compatible system)" ac_cv_header_stdint_t="stdint.h"; -else $as_nop - ac_cv_header_stdint_t="" +else case e in #( + e) ac_cv_header_stdint_t="" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "$GCC" = "yes" && test ".$ac_cv_header_stdint_t" = "."; then @@ -7756,7 +7964,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi CXXFLAGS="$old_CXXFLAGS" CPPFLAGS="$old_CPPFLAGS" -CFLAGS="$old_CFLAGS" +CFLAGS="$old_CFLAGS" ;; +esac fi @@ -7788,8 +7997,8 @@ printf %s "checking for stdint uintptr_t... " >&6; } if test ${ac_cv_header_stdint_x+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: (..)" >&5 printf "%s\n" "(..)" >&6; } @@ -7802,8 +8011,9 @@ printf "%s\n" "(..)" >&6; } if test "x$ac_cv_type_uintptr_t" = xyes then : ac_cv_header_stdint_x=$i -else $as_nop - continue +else case e in #( + e) continue ;; +esac fi ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include<$i> @@ -7811,8 +8021,9 @@ fi if test "x$ac_cv_type_uint64_t" = xyes then : and64="/uint64_t" -else $as_nop - and64="" +else case e in #( + e) and64="" ;; +esac fi ac_cv_stdint_result="(seen uintptr_t$and64 in $i)" @@ -7820,7 +8031,8 @@ fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdint uintptr_t" >&5 printf %s "checking for stdint uintptr_t... " >&6; } - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_x" >&5 printf "%s\n" "$ac_cv_header_stdint_x" >&6; } @@ -7833,8 +8045,8 @@ printf %s "checking for stdint uint32_t... " >&6; } if test ${ac_cv_header_stdint_o+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: (..)" >&5 printf "%s\n" "(..)" >&6; } @@ -7847,8 +8059,9 @@ printf "%s\n" "(..)" >&6; } if test "x$ac_cv_type_uint32_t" = xyes then : ac_cv_header_stdint_o=$i -else $as_nop - continue +else case e in #( + e) continue ;; +esac fi ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include<$i> @@ -7856,8 +8069,9 @@ fi if test "x$ac_cv_type_uint64_t" = xyes then : and64="/uint64_t" -else $as_nop - and64="" +else case e in #( + e) and64="" ;; +esac fi ac_cv_stdint_result="(seen uint32_t$and64 in $i)" @@ -7866,7 +8080,8 @@ fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdint uint32_t" >&5 printf %s "checking for stdint uint32_t... " >&6; } - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_o" >&5 printf "%s\n" "$ac_cv_header_stdint_o" >&6; } @@ -7881,8 +8096,8 @@ printf %s "checking for stdint u_int32_t... " >&6; } if test ${ac_cv_header_stdint_u+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: (..)" >&5 printf "%s\n" "(..)" >&6; } @@ -7894,8 +8109,9 @@ printf "%s\n" "(..)" >&6; } if test "x$ac_cv_type_u_int32_t" = xyes then : ac_cv_header_stdint_u=$i -else $as_nop - continue +else case e in #( + e) continue ;; +esac fi ac_fn_c_check_type "$LINENO" "u_int64_t" "ac_cv_type_u_int64_t" "#include<$i> @@ -7903,8 +8119,9 @@ fi if test "x$ac_cv_type_u_int64_t" = xyes then : and64="/u_int64_t" -else $as_nop - and64="" +else case e in #( + e) and64="" ;; +esac fi ac_cv_stdint_result="(seen u_int32_t$and64 in $i)" @@ -7913,7 +8130,8 @@ fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdint u_int32_t" >&5 printf %s "checking for stdint u_int32_t... " >&6; } - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_u" >&5 printf "%s\n" "$ac_cv_header_stdint_u" >&6; } @@ -7928,28 +8146,30 @@ printf "%s\n" "(..)" >&6; } # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of char" >&5 printf %s "checking size of char... " >&6; } if test ${ac_cv_sizeof_char+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default" +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default" then : -else $as_nop - if test "$ac_cv_type_char" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_char" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (char) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_char=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5 printf "%s\n" "$ac_cv_sizeof_char" >&6; } @@ -7961,28 +8181,30 @@ printf "%s\n" "#define SIZEOF_CHAR $ac_cv_sizeof_char" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 printf %s "checking size of short... " >&6; } if test ${ac_cv_sizeof_short+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default" +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default" then : -else $as_nop - if test "$ac_cv_type_short" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_short" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (short) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_short=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 printf "%s\n" "$ac_cv_sizeof_short" >&6; } @@ -7994,28 +8216,30 @@ printf "%s\n" "#define SIZEOF_SHORT $ac_cv_sizeof_short" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 printf %s "checking size of int... " >&6; } if test ${ac_cv_sizeof_int+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default" +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default" then : -else $as_nop - if test "$ac_cv_type_int" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_int" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_int=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 printf "%s\n" "$ac_cv_sizeof_int" >&6; } @@ -8027,28 +8251,30 @@ printf "%s\n" "#define SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 printf %s "checking size of long... " >&6; } if test ${ac_cv_sizeof_long+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default" +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default" then : -else $as_nop - if test "$ac_cv_type_long" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_long" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 printf "%s\n" "$ac_cv_sizeof_long" >&6; } @@ -8060,28 +8286,30 @@ printf "%s\n" "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void*" >&5 printf %s "checking size of void*... " >&6; } if test ${ac_cv_sizeof_voidp+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp" "$ac_includes_default" +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp" "$ac_includes_default" then : -else $as_nop - if test "$ac_cv_type_voidp" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_voidp" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (void*) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_voidp=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_voidp" >&5 printf "%s\n" "$ac_cv_sizeof_voidp" >&6; } @@ -8255,8 +8483,8 @@ printf %s "checking types of arguments for select... " >&6; } if test ${ac_cv_func_select_args+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_func_select_args='int,int *,struct timeval *' +else case e in #( + e) ac_cv_func_select_args='int,int *,struct timeval *' for ac_arg234 in 'fd_set *' 'int *' 'void *'; do for ac_arg1 in 'int' 'size_t' 'unsigned long int' 'unsigned int'; do for ac_arg5 in 'struct timeval *' 'const struct timeval *'; do @@ -8288,7 +8516,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done done done - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_select_args" >&5 printf "%s\n" "$ac_cv_func_select_args" >&6; } @@ -8315,12 +8544,12 @@ rm -rf conftest* printf %s "checking for b64_ntop... " >&6; } if test "$cross_compiling" = yes then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +See 'config.log' for more details" "$LINENO" 5; } +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -8338,12 +8567,14 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : found_b64_ntop=yes -else $as_nop - found_b64_ntop=no - +else case e in #( + e) found_b64_ntop=no + ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi if test "x$found_b64_ntop" = xno; then @@ -8356,12 +8587,12 @@ printf %s "checking for b64_ntop with -lresolv... " >&6; } LIBS="$LIBS -lresolv" if test "$cross_compiling" = yes then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +See 'config.log' for more details" "$LINENO" 5; } +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -8379,12 +8610,14 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : found_b64_ntop=yes -else $as_nop - found_b64_ntop=no - +else case e in #( + e) found_b64_ntop=no + ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi if test "x$found_b64_ntop" = xno; then @@ -8398,12 +8631,12 @@ printf %s "checking for b64_ntop with -lnetwork... " >&6; } LIBS="-lnetwork" if test "$cross_compiling" = yes then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +See 'config.log' for more details" "$LINENO" 5; } +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -8421,12 +8654,14 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : found_b64_ntop=yes -else $as_nop - found_b64_ntop=no - +else case e in #( + e) found_b64_ntop=no + ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi if test "x$found_b64_ntop" = xno; then @@ -8472,8 +8707,8 @@ printf %s "checking for working mmap... " >&6; } if test ${ac_cv_func_mmap_fixed_mapped+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on platforms where we know the result. @@ -8481,8 +8716,8 @@ then : # If we don't know, assume the worst. *) ac_cv_func_mmap_fixed_mapped=no ;; esac -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ @@ -8503,21 +8738,21 @@ $ac_includes_default VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get - propagated back to all the places they're supposed to be. - - Grep wants private fixed already mapped. - The main things grep needs to know about mmap are: - * does it exist and is it safe to write into the mmap'd area - * how to use it (BSD variants) */ + propagated back to all the places they're supposed to be. */ #include #include -/* This mess was copied from the GNU getpagesize.h. */ -#ifndef HAVE_GETPAGESIZE +#ifndef getpagesize +/* Prefer sysconf to the legacy getpagesize function, as getpagesize has + been removed from POSIX and is limited to page sizes that fit in 'int'. */ # ifdef _SC_PAGESIZE -# define getpagesize() sysconf(_SC_PAGESIZE) -# else /* no _SC_PAGESIZE */ +# define getpagesize() sysconf (_SC_PAGESIZE) +# elif defined _SC_PAGE_SIZE +# define getpagesize() sysconf (_SC_PAGE_SIZE) +# elif HAVE_GETPAGESIZE +int getpagesize (); +# else # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE @@ -8541,16 +8776,15 @@ $ac_includes_default # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ -# endif /* no _SC_PAGESIZE */ - -#endif /* no HAVE_GETPAGESIZE */ +# endif +#endif int main (void) { char *data, *data2, *data3; const char *cdata2; - int i, pagesize; + long i, pagesize; int fd, fd2; pagesize = getpagesize (); @@ -8584,8 +8818,7 @@ main (void) if (*(data2 + i)) return 7; close (fd2); - if (munmap (data2, pagesize)) - return 8; + /* 'return 8;' not currently used. */ /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that @@ -8622,13 +8855,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_mmap_fixed_mapped=yes -else $as_nop - ac_cv_func_mmap_fixed_mapped=no +else case e in #( + e) ac_cv_func_mmap_fixed_mapped=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 printf "%s\n" "$ac_cv_func_mmap_fixed_mapped" >&6; } @@ -8660,8 +8896,8 @@ cat >confcache <<\_ACEOF # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the +# 'ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF @@ -8691,14 +8927,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote + # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) - # `set' quotes correctly as required by POSIX, so do not add quotes. + # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | @@ -8892,8 +9128,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CYGPATH+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CYGPATH"; then +else case e in #( + e) if test -n "$CYGPATH"; then ac_cv_prog_CYGPATH="$CYGPATH" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8916,7 +9152,8 @@ done IFS=$as_save_IFS test -z "$ac_cv_prog_CYGPATH" && ac_cv_prog_CYGPATH="echo" -fi +fi ;; +esac fi CYGPATH=$ac_cv_prog_CYGPATH if test -n "$CYGPATH"; then @@ -9004,8 +9241,8 @@ printf %s "checking for Tcl configuration... " >&6; } if test ${ac_cv_c_tclconfig+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then @@ -9117,7 +9354,8 @@ printf "%s\n" "$as_me: WARNING: --with-tcl argument should refer to directory co fi done fi - + ;; +esac fi @@ -9225,8 +9463,8 @@ then : TEA_PLATFORM="unix" CYGPATH=echo -else $as_nop - +else case e in #( + e) TEA_PLATFORM="windows" # Extract the first word of "cygpath", so it can be a program name with args. set dummy cygpath; ac_word=$2 @@ -9235,8 +9473,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CYGPATH+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CYGPATH"; then +else case e in #( + e) if test -n "$CYGPATH"; then ac_cv_prog_CYGPATH="$CYGPATH" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -9259,7 +9497,8 @@ done IFS=$as_save_IFS test -z "$ac_cv_prog_CYGPATH" && ac_cv_prog_CYGPATH="echo" -fi +fi ;; +esac fi CYGPATH=$ac_cv_prog_CYGPATH if test -n "$CYGPATH"; then @@ -9271,7 +9510,8 @@ printf "%s\n" "no" >&6; } fi - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CC=$hold_cc @@ -9309,8 +9549,9 @@ printf "%s\n" "#define BUILD_${PACKAGE_NAME} /**/" >>confdefs.h if test "x$ac_cv_func_sin" = xyes then : MATH_LIBS="" -else $as_nop - MATH_LIBS="-lm" +else case e in #( + e) MATH_LIBS="-lm" ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -lieee" >&5 @@ -9318,8 +9559,8 @@ printf %s "checking for main in -lieee... " >&6; } if test ${ac_cv_lib_ieee_main+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lieee $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -9336,12 +9577,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_ieee_main=yes -else $as_nop - ac_cv_lib_ieee_main=no +else case e in #( + e) ac_cv_lib_ieee_main=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ieee_main" >&5 printf "%s\n" "$ac_cv_lib_ieee_main" >&6; } @@ -9361,8 +9604,8 @@ printf %s "checking for main in -linet... " >&6; } if test ${ac_cv_lib_inet_main+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-linet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -9379,12 +9622,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_inet_main=yes -else $as_nop - ac_cv_lib_inet_main=no +else case e in #( + e) ac_cv_lib_inet_main=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_main" >&5 printf "%s\n" "$ac_cv_lib_inet_main" >&6; } @@ -9426,8 +9671,9 @@ fi if test "x$ac_cv_func_connect" = xyes then : tcl_checkSocket=0 -else $as_nop - tcl_checkSocket=1 +else case e in #( + e) tcl_checkSocket=1 ;; +esac fi if test "$tcl_checkSocket" = 1; then @@ -9435,22 +9681,28 @@ fi if test "x$ac_cv_func_setsockopt" = xyes then : -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for setsockopt in -lsocket" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for setsockopt in -lsocket" >&5 printf %s "checking for setsockopt in -lsocket... " >&6; } if test ${ac_cv_lib_socket_setsockopt+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char setsockopt (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char setsockopt (void); int main (void) { @@ -9462,22 +9714,26 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_socket_setsockopt=yes -else $as_nop - ac_cv_lib_socket_setsockopt=no +else case e in #( + e) ac_cv_lib_socket_setsockopt=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_setsockopt" >&5 printf "%s\n" "$ac_cv_lib_socket_setsockopt" >&6; } if test "x$ac_cv_lib_socket_setsockopt" = xyes then : LIBS="$LIBS -lsocket" -else $as_nop - tcl_checkBoth=1 +else case e in #( + e) tcl_checkBoth=1 ;; +esac fi - + ;; +esac fi fi @@ -9488,8 +9744,9 @@ fi if test "x$ac_cv_func_accept" = xyes then : tcl_checkNsl=0 -else $as_nop - LIBS=$tk_oldLibs +else case e in #( + e) LIBS=$tk_oldLibs ;; +esac fi fi @@ -9497,22 +9754,28 @@ fi if test "x$ac_cv_func_gethostbyname" = xyes then : -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 printf %s "checking for gethostbyname in -lnsl... " >&6; } if test ${ac_cv_lib_nsl_gethostbyname+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char gethostbyname (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (void); int main (void) { @@ -9524,12 +9787,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_nsl_gethostbyname=yes -else $as_nop - ac_cv_lib_nsl_gethostbyname=no +else case e in #( + e) ac_cv_lib_nsl_gethostbyname=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 printf "%s\n" "$ac_cv_lib_nsl_gethostbyname" >&6; } @@ -9537,7 +9802,8 @@ if test "x$ac_cv_lib_nsl_gethostbyname" = xyes then : LIBS="$LIBS -lnsl" fi - + ;; +esac fi @@ -9653,80 +9919,90 @@ EOF if test ${enable_debug+y} then : enableval=$enable_debug; enable_debug="$enableval" -else $as_nop - enable_debug="auto" +else case e in #( + e) enable_debug="auto" ;; +esac fi # Check whether --enable-debug was given. if test ${enable_debug+y} then : enableval=$enable_debug; enable_debug="$enableval" -else $as_nop - enable_debug="auto" +else case e in #( + e) enable_debug="auto" ;; +esac fi # Check whether --enable-debug-assert was given. if test ${enable_debug_assert+y} then : enableval=$enable_debug_assert; enable_debug_assert="$enableval" -else $as_nop - enable_debug_assert="auto" +else case e in #( + e) enable_debug_assert="auto" ;; +esac fi # Check whether --enable-debug-assert was given. if test ${enable_debug_assert+y} then : enableval=$enable_debug_assert; enable_debug_assert="$enableval" -else $as_nop - enable_debug_assert="auto" +else case e in #( + e) enable_debug_assert="auto" ;; +esac fi # Check whether --enable-debug-mem was given. if test ${enable_debug_mem+y} then : enableval=$enable_debug_mem; enable_debug_mem="$enableval" -else $as_nop - enable_debug_mem="auto" +else case e in #( + e) enable_debug_mem="auto" ;; +esac fi # Check whether --enable-debug-mem was given. if test ${enable_debug_mem+y} then : enableval=$enable_debug_mem; enable_debug_mem="$enableval" -else $as_nop - enable_debug_mem="auto" +else case e in #( + e) enable_debug_mem="auto" ;; +esac fi # Check whether --enable-debug-dns was given. if test ${enable_debug_dns+y} then : enableval=$enable_debug_dns; enable_debug_dns="$enableval" -else $as_nop - enable_debug_dns="auto" +else case e in #( + e) enable_debug_dns="auto" ;; +esac fi # Check whether --enable-debug-dns was given. if test ${enable_debug_dns+y} then : enableval=$enable_debug_dns; enable_debug_dns="$enableval" -else $as_nop - enable_debug_dns="auto" +else case e in #( + e) enable_debug_dns="auto" ;; +esac fi # Check whether --enable-debug-context was given. if test ${enable_debug_context+y} then : enableval=$enable_debug_context; enable_debug_context="$enableval" -else $as_nop - enable_debug_context="auto" +else case e in #( + e) enable_debug_context="auto" ;; +esac fi # Check whether --enable-debug-context was given. if test ${enable_debug_context+y} then : enableval=$enable_debug_context; enable_debug_context="$enableval" -else $as_nop - enable_debug_context="auto" +else case e in #( + e) enable_debug_context="auto" ;; +esac fi @@ -9913,8 +10189,8 @@ printf %s "checking for system IPv6 support... " >&6; } if test ${egg_cv_var_ipv6_supported+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) if test "$cross_compiling" = yes then : @@ -9945,15 +10221,16 @@ then : egg_cv_var_ipv6_supported="yes" -else $as_nop - +else case e in #( + e) egg_cv_var_ipv6_supported="no" - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -9980,16 +10257,19 @@ then : egg_cv_var_ipv6_supported="yes" -else $as_nop - +else case e in #( + e) egg_cv_var_ipv6_supported="no" - + ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $egg_cv_var_ipv6_supported" >&5 printf "%s\n" "$egg_cv_var_ipv6_supported" >&6; } @@ -10000,8 +10280,9 @@ printf "%s\n" "$egg_cv_var_ipv6_supported" >&6; } if test ${enable_ipv6+y} then : enableval=$enable_ipv6; enable_ipv6="$enableval" -else $as_nop - enable_ipv6="$egg_cv_var_ipv6_supported" +else case e in #( + e) enable_ipv6="$egg_cv_var_ipv6_supported" ;; +esac fi # Check whether --enable-ipv6 was given. @@ -10037,8 +10318,9 @@ then : printf "%s\n" "#define HAVE_STRUCT_IN6_ADDR 1" >>confdefs.h egg_cv_var_have_in6_addr="yes" -else $as_nop - egg_cv_var_have_in6_addr="no" +else case e in #( + e) egg_cv_var_have_in6_addr="no" ;; +esac fi if test "$egg_cv_var_have_in6_addr" = "yes"; then @@ -10048,8 +10330,8 @@ printf %s "checking for the in6addr_any constant... " >&6; } if test ${egg_cv_var_have_in6addr_any+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -10067,11 +10349,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : egg_cv_var_have_in6addr_any="yes" -else $as_nop - egg_cv_var_have_in6addr_any="no" +else case e in #( + e) egg_cv_var_have_in6addr_any="no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $egg_cv_var_have_in6addr_any" >&5 printf "%s\n" "$egg_cv_var_have_in6addr_any" >&6; } @@ -10086,8 +10370,8 @@ printf %s "checking for the in6addr_loopback constant... " >&6; } if test ${egg_cv_var_have_in6addr_loopback+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -10105,11 +10389,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : egg_cv_var_have_in6addr_loopback="yes" -else $as_nop - egg_cv_var_have_in6addr_loopback="no" +else case e in #( + e) egg_cv_var_have_in6addr_loopback="no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $egg_cv_var_have_in6addr_loopback" >&5 printf "%s\n" "$egg_cv_var_have_in6addr_loopback" >&6; } @@ -10147,8 +10433,9 @@ printf %s "checking whether to enable TLS support... " >&6; } if test ${enable_tls+y} then : enableval=$enable_tls; tls_enabled="$enableval" -else $as_nop - tls_enabled="yes" +else case e in #( + e) tls_enabled="yes" ;; +esac fi @@ -10170,7 +10457,7 @@ then : CPP="$CPP -I$withval" for ac_header in openssl/ssl.h openssl/x509v3.h do : - as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` + as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | sed "$as_sed_sh"` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" " #ifdef CYGWIN_HACKS # ifndef __int64 @@ -10182,15 +10469,16 @@ ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" " if eval test \"x\$"$as_ac_Header"\" = x"yes" then : cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `printf "%s\n" "HAVE_$ac_header" | sed "$as_sed_cpp"` 1 _ACEOF sslinc="-I$withval" -else $as_nop - +else case e in #( + e) as_fn_error $? "Invalid path to OpenSSL headers. $withval/openssl/ doesn't contain the required files." "$LINENO" 5 sslinc="" break - + ;; +esac fi done @@ -10218,16 +10506,22 @@ printf %s "checking for X509_digest in -lcrypto... " >&6; } if test ${ac_cv_lib_crypto_X509_digest+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lcrypto -L$withval -lssl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char X509_digest (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char X509_digest (void); int main (void) { @@ -10239,12 +10533,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_crypto_X509_digest=yes -else $as_nop - ac_cv_lib_crypto_X509_digest=no +else case e in #( + e) ac_cv_lib_crypto_X509_digest=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_X509_digest" >&5 printf "%s\n" "$ac_cv_lib_crypto_X509_digest" >&6; } @@ -10254,8 +10550,9 @@ then : LIBS="-lcrypto $LIBS" -else $as_nop - havessllib="no" +else case e in #( + e) havessllib="no" ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SSL_accept in -lssl" >&5 @@ -10263,16 +10560,22 @@ printf %s "checking for SSL_accept in -lssl... " >&6; } if test ${ac_cv_lib_ssl_SSL_accept+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lssl -L$withval -lcrypto $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char SSL_accept (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char SSL_accept (void); int main (void) { @@ -10284,12 +10587,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_ssl_SSL_accept=yes -else $as_nop - ac_cv_lib_ssl_SSL_accept=no +else case e in #( + e) ac_cv_lib_ssl_SSL_accept=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ssl_SSL_accept" >&5 printf "%s\n" "$ac_cv_lib_ssl_SSL_accept" >&6; } @@ -10299,8 +10604,9 @@ then : LIBS="-lssl $LIBS" -else $as_nop - havessllib="no" +else case e in #( + e) havessllib="no" ;; +esac fi if test "$havessllib" = "no"; then @@ -10323,7 +10629,7 @@ fi if test -z "$SSL_INCLUDES"; then for ac_header in openssl/ssl.h openssl/x509v3.h do : - as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` + as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | sed "$as_sed_sh"` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" " #ifdef CYGWIN_HACKS # ifndef __int64 @@ -10335,11 +10641,12 @@ ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" " if eval test \"x\$"$as_ac_Header"\" = x"yes" then : cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `printf "%s\n" "HAVE_$ac_header" | sed "$as_sed_cpp"` 1 _ACEOF -else $as_nop - havesslinc="no" +else case e in #( + e) havesslinc="no" ;; +esac fi done @@ -10350,16 +10657,22 @@ printf %s "checking for X509_digest in -lcrypto... " >&6; } if test ${ac_cv_lib_crypto_X509_digest+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lcrypto -lssl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char X509_digest (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char X509_digest (void); int main (void) { @@ -10371,12 +10684,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_crypto_X509_digest=yes -else $as_nop - ac_cv_lib_crypto_X509_digest=no +else case e in #( + e) ac_cv_lib_crypto_X509_digest=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_X509_digest" >&5 printf "%s\n" "$ac_cv_lib_crypto_X509_digest" >&6; } @@ -10386,8 +10701,9 @@ then : LIBS="-lcrypto $LIBS" -else $as_nop - havessllib="no" +else case e in #( + e) havessllib="no" ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SSL_accept in -lssl" >&5 @@ -10395,16 +10711,22 @@ printf %s "checking for SSL_accept in -lssl... " >&6; } if test ${ac_cv_lib_ssl_SSL_accept+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lssl -lcrypto $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char SSL_accept (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char SSL_accept (void); int main (void) { @@ -10416,12 +10738,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_ssl_SSL_accept=yes -else $as_nop - ac_cv_lib_ssl_SSL_accept=no +else case e in #( + e) ac_cv_lib_ssl_SSL_accept=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ssl_SSL_accept" >&5 printf "%s\n" "$ac_cv_lib_ssl_SSL_accept" >&6; } @@ -10431,26 +10755,28 @@ then : LIBS="-lssl $LIBS" -else $as_nop - havessllib="no" +else case e in #( + e) havessllib="no" ;; +esac fi for ac_func in EVP_sha1 a2i_IPADDRESS do : - as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` + as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | sed "$as_sed_sh"` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes" then : cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `printf "%s\n" "HAVE_$ac_func" | sed "$as_sed_cpp"` 1 _ACEOF -else $as_nop - +else case e in #( + e) havessllib="no" break - + ;; +esac fi done @@ -10466,44 +10792,48 @@ fi if test "x$ac_cv_func_OPENSSL_buf2hexstr" = xyes then : -else $as_nop - ac_fn_c_check_func "$LINENO" "hex_to_string" "ac_cv_func_hex_to_string" +else case e in #( + e) ac_fn_c_check_func "$LINENO" "hex_to_string" "ac_cv_func_hex_to_string" if test "x$ac_cv_func_hex_to_string" = xyes then : printf "%s\n" "#define OPENSSL_buf2hexstr hex_to_string" >>confdefs.h -else $as_nop - +else case e in #( + e) havessllib="no" break - + ;; +esac fi - + ;; +esac fi ac_fn_c_check_func "$LINENO" "OPENSSL_hexstr2buf" "ac_cv_func_OPENSSL_hexstr2buf" if test "x$ac_cv_func_OPENSSL_hexstr2buf" = xyes then : -else $as_nop - ac_fn_c_check_func "$LINENO" "string_to_hex" "ac_cv_func_string_to_hex" +else case e in #( + e) ac_fn_c_check_func "$LINENO" "string_to_hex" "ac_cv_func_string_to_hex" if test "x$ac_cv_func_string_to_hex" = xyes then : printf "%s\n" "#define OPENSSL_hexstr2buf string_to_hex" >>confdefs.h -else $as_nop - +else case e in #( + e) havessllib="no" break - + ;; +esac fi - + ;; +esac fi if test "$havesslinc" = "no"; then @@ -10536,12 +10866,13 @@ printf "%s\n" "yes" >&6; } if test "x$ac_cv_type___int64" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define __int64 long long" >>confdefs.h - + ;; +esac fi fi @@ -10555,11 +10886,12 @@ then : printf "%s\n" "#define egg_ASN1_string_data ASN1_STRING_get0_data" >>confdefs.h -else $as_nop - +else case e in #( + e) printf "%s\n" "#define egg_ASN1_string_data ASN1_STRING_data" >>confdefs.h - + ;; +esac fi ac_fn_c_check_func "$LINENO" "EVP_PKEY_get1_EC_KEY" "ac_cv_func_EVP_PKEY_get1_EC_KEY" @@ -10584,16 +10916,17 @@ then : for ac_func in MD5_Init MD5_Update MD5_Final do : - as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` + as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | sed "$as_sed_sh"` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes" then : cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `printf "%s\n" "HAVE_$ac_func" | sed "$as_sed_cpp"` 1 _ACEOF -else $as_nop - havesslmd5="no" +else case e in #( + e) havesslmd5="no" ;; +esac fi done @@ -10619,8 +10952,9 @@ printf "%s\n" "#define HAVE_OPENSSL_MD5 1" >>confdefs.h if test ${enable_tdns+y} then : enableval=$enable_tdns; tdns_enabled="$enableval" -else $as_nop - tdns_enabled="yes" +else case e in #( + e) tdns_enabled="yes" ;; +esac fi if test "x$ax_pthread_ok" = "xno"; then @@ -10695,10 +11029,11 @@ then : EGG_CROSS_COMPILING=yes -else $as_nop - +else case e in #( + e) EGG_CROSS_COMPILING=no - + ;; +esac fi @@ -10716,8 +11051,8 @@ cat >confcache <<\_ACEOF # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the +# 'ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF @@ -10747,14 +11082,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote + # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) - # `set' quotes correctly as required by POSIX, so do not add quotes. + # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | @@ -10845,7 +11180,6 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -10854,12 +11188,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop - case `(set -o) 2>/dev/null` in #( +else case e in #( + e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi @@ -10931,7 +11266,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as `sh COMMAND' +# We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -10960,7 +11295,6 @@ as_fn_error () } # as_fn_error - # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -11000,11 +11334,12 @@ then : { eval $1+=\$2 }' -else $as_nop - as_fn_append () +else case e in #( + e) as_fn_append () { eval $1=\$$1\$2 - } + } ;; +esac fi # as_fn_append # as_fn_arith ARG... @@ -11018,11 +11353,12 @@ then : { as_val=$(( $* )) }' -else $as_nop - as_fn_arith () +else case e in #( + e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } + } ;; +esac fi # as_fn_arith @@ -11105,9 +11441,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. + # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -11188,10 +11524,12 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 @@ -11207,7 +11545,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by Eggdrop $as_me 1.9.5, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -11239,7 +11577,7 @@ _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions +'$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. @@ -11276,10 +11614,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ Eggdrop config.status 1.9.5 -configured by $0, generated by GNU Autoconf 2.71, +configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -11340,8 +11678,8 @@ do ac_need_defaults=false;; --he | --h) # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; + as_fn_error $? "ambiguous option: '$1' +Try '$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ @@ -11349,8 +11687,8 @@ Try \`$0 --help' for more information.";; ac_cs_silent=: ;; # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; + -*) as_fn_error $? "unrecognized option: '$1' +Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; @@ -11397,7 +11735,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 PACKAGE="$PACKAGE" VERSION="$VERSION" ac_stdint_h="$ac_stdint_h" -_ac_stdint_h=`printf "%s\n" "_$PACKAGE-$ac_stdint_h" | $as_tr_cpp` +_ac_stdint_h=`printf "%s\n" "_$PACKAGE-$ac_stdint_h" | sed "$as_sed_cpp"` ac_cv_stdint_message="$ac_cv_stdint_message" ac_cv_header_stdint_t="$ac_cv_header_stdint_t" ac_cv_header_stdint_x="$ac_cv_header_stdint_x" @@ -11435,7 +11773,7 @@ do "src/md5/Makefile") CONFIG_FILES="$CONFIG_FILES src/md5/Makefile" ;; "src/mod/Makefile") CONFIG_FILES="$CONFIG_FILES src/mod/Makefile" ;; - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done @@ -11455,7 +11793,7 @@ fi # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. +# after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= @@ -11479,7 +11817,7 @@ ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. +# This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then @@ -11637,13 +11975,13 @@ fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. +# This happens for instance with './config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF -# Transform confdefs.h into an awk script `defines.awk', embedded as +# Transform confdefs.h into an awk script 'defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. @@ -11753,7 +12091,7 @@ do esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -11775,19 +12113,19 @@ do -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. + # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done - # Let's still pretend it is `configure' which instantiates (i.e., don't + # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` @@ -11915,7 +12253,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 esac _ACEOF -# Neutralize VPATH when `$srcdir' = `.'. +# Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 @@ -11945,9 +12283,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" diff --git a/configure.ac b/configure.ac index 78a7e70d5..1100e99d1 100644 --- a/configure.ac +++ b/configure.ac @@ -91,9 +91,8 @@ EGG_CHECK_OS # Checks for header files. EGG_HEADER_STDC AC_HEADER_DIRENT -AC_CHECK_HEADERS_ONCE([sys/time.h]) -AC_CHECK_HEADERS([arpa/inet.h fcntl.h limits.h locale.h netdb.h netinet/in.h stdio.h stdarg.h stddef.h sys/file.h sys/param.h sys/select.h sys/socket.h sys/time.h unistd.h wchar.h]) +AC_CHECK_HEADERS([arpa/inet.h fcntl.h limits.h locale.h netdb.h netinet/in.h stdio.h stdarg.h stddef.h sys/file.h sys/param.h sys/select.h sys/socket.h sys/time.h time.h unistd.h wchar.h]) # Checks for typedefs, structures, and compiler characteristics. diff --git a/src/eggdrop.h b/src/eggdrop.h index cca60c09a..c91ae91e2 100644 --- a/src/eggdrop.h +++ b/src/eggdrop.h @@ -183,12 +183,8 @@ #endif /* Almost every module needs some sort of time thingy, so... */ -#ifdef HAVE_SYS_TIME_H -# include -#else -# include -#endif - +#include /* gettimeofday() POSIX 2001 */ +#include /* POSIX 2001 */ /* Yikes...who would have thought finding a usable random() would be so much * trouble? diff --git a/src/main.c b/src/main.c index 17133c5b5..82ed9ef80 100644 --- a/src/main.c +++ b/src/main.c @@ -53,12 +53,6 @@ #include #include -#ifdef HAVE_SYS_TIME_H -# include -#else -# include -#endif - #ifdef STOP_UAC /* OSF/1 complains a lot */ # include # define UAC_NOPRINT 0x00000001 /* Don't report unaligned fixups */ diff --git a/src/mod/compress.mod/configure b/src/mod/compress.mod/configure index 2c3f4c0cc..ab13fc34a 100755 --- a/src/mod/compress.mod/configure +++ b/src/mod/compress.mod/configure @@ -1,12 +1,12 @@ #! /bin/sh -# From configure.ac 98f8972a. +# From configure.ac bc7bc2ee. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for Eggdrop Compress Module 1.9.5. +# Generated by GNU Autoconf 2.72 for Eggdrop Compress Module 1.9.5. # # Report bugs to . # # -# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, # Inc. # # @@ -20,7 +20,6 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -29,12 +28,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop - case `(set -o) 2>/dev/null` in #( +else case e in #( + e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi @@ -106,7 +106,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as `sh COMMAND' +# We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -136,15 +136,14 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. +# out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="as_nop=: -if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 + as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: @@ -152,12 +151,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else \$as_nop - case \`(set -o) 2>/dev/null\` in #( +else case e in #( + e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi " @@ -175,8 +175,9 @@ as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : -else \$as_nop - exitcode=1; echo positional parameters were not saved. +else case e in #( + e) exitcode=1; echo positional parameters were not saved. ;; +esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) @@ -189,14 +190,15 @@ test -x / || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes -else $as_nop - as_have_required=no +else case e in #( + e) as_have_required=no ;; +esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : -else $as_nop - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else case e in #( + e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do @@ -229,12 +231,13 @@ IFS=$as_save_IFS if $as_found then : -else $as_nop - if { test -f "$SHELL" || test -f "$SHELL.exe"; } && +else case e in #( + e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes -fi +fi ;; +esac fi @@ -256,7 +259,7 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. +# out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi @@ -276,7 +279,8 @@ $0: manually run the script under such a shell if you do $0: have one." fi exit 1 -fi +fi ;; +esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} @@ -315,14 +319,6 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -391,11 +387,12 @@ then : { eval $1+=\$2 }' -else $as_nop - as_fn_append () +else case e in #( + e) as_fn_append () { eval $1=\$$1\$2 - } + } ;; +esac fi # as_fn_append # as_fn_arith ARG... @@ -409,21 +406,14 @@ then : { as_val=$(( $* )) }' -else $as_nop - as_fn_arith () +else case e in #( + e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } + } ;; +esac fi # as_fn_arith -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -497,6 +487,8 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits /[$]LINENO/= ' <$as_myself | sed ' + t clear + :clear s/[$]LINENO.*/&-/ t lineno b @@ -545,7 +537,6 @@ esac as_echo='printf %s\n' as_echo_n='printf %s' - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -557,9 +548,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. + # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -584,10 +575,12 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed '$as_sed_sh'" # deprecated test -n "$DJDIR" || exec 7<&0 /dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -846,7 +839,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1059,7 +1052,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1075,7 +1068,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1105,8 +1098,8 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" + -*) as_fn_error $? "unrecognized option: '$ac_option' +Try '$0 --help' for more information" ;; *=*) @@ -1114,7 +1107,7 @@ Try \`$0 --help' for more information" # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; @@ -1164,7 +1157,7 @@ do as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done -# There might be people who depend on the old broken behavior: `$host' +# There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias @@ -1232,7 +1225,7 @@ if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` @@ -1260,7 +1253,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Eggdrop Compress Module 1.9.5 to adapt to many kinds of systems. +'configure' configures Eggdrop Compress Module 1.9.5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1274,11 +1267,11 @@ Configuration: --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages + -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' + -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] + --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @@ -1286,10 +1279,10 @@ Installation directories: --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. +By default, 'make install' will install all the files in +'$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify +an installation prefix other than '$ac_default_prefix' using '--prefix', +for instance '--prefix=\$HOME'. For better control, use the options below. @@ -1336,7 +1329,7 @@ Some influential environment variables: CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory -Use these variables to override the choices made by `configure' or to help +Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . @@ -1404,9 +1397,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Eggdrop Compress Module configure 1.9.5 -generated by GNU Autoconf 2.71 +generated by GNU Autoconf 2.72 -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. @@ -1447,11 +1440,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 } && test -s conftest.$ac_objext then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval @@ -1489,11 +1483,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 } then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would @@ -1517,8 +1512,8 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> @@ -1526,10 +1521,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1562,7 +1559,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Eggdrop Compress Module $as_me 1.9.5, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw @@ -1808,10 +1805,10 @@ esac printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } fi done @@ -1847,9 +1844,7 @@ struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; +static char *e (char **p, int i) { return p[i]; } @@ -1863,6 +1858,21 @@ static char *f (char * (*g) (char **, int), char **p, ...) return s; } +/* C89 style stringification. */ +#define noexpand_stringify(a) #a +const char *stringified = noexpand_stringify(arbitrary+token=sequence); + +/* C89 style token pasting. Exercises some of the corner cases that + e.g. old MSVC gets wrong, but not very hard. */ +#define noexpand_concat(a,b) a##b +#define expand_concat(a,b) noexpand_concat(a,b) +extern int vA; +extern int vbee; +#define aye A +#define bee B +int *pvA = &expand_concat(v,aye); +int *pvbee = &noexpand_concat(v,bee); + /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated @@ -1890,16 +1900,19 @@ ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' -// Does the compiler advertise C99 conformance? +/* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif +// See if C++-style comments work. + #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); +extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare @@ -1949,7 +1962,6 @@ typedef const char *ccp; static inline int test_restrict (ccp restrict text) { - // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) @@ -2015,6 +2027,8 @@ ac_c_conftest_c99_main=' ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; + // Work around memory leak warnings. + free (ia); // Check named initializers. struct named_init ni = { @@ -2036,7 +2050,7 @@ ac_c_conftest_c99_main=' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' -// Does the compiler advertise C11 conformance? +/* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif @@ -2159,12 +2173,12 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -2173,18 +2187,18 @@ printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. @@ -2200,11 +2214,11 @@ printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi done if $ac_cache_corrupted; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## @@ -2249,8 +2263,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2272,7 +2286,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -2298,8 +2313,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2321,7 +2336,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -2350,10 +2366,10 @@ esac fi -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 @@ -2425,8 +2441,8 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' + # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. +# So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. @@ -2446,7 +2462,7 @@ do ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' + # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. @@ -2457,8 +2473,9 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else $as_nop - ac_file='' +else case e in #( + e) ac_file='' ;; +esac fi if test -z "$ac_file" then : @@ -2467,13 +2484,14 @@ printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } +See 'config.log' for more details" "$LINENO" 5; } +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } @@ -2497,10 +2515,10 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. + # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) +# catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will +# work properly (i.e., refer to 'conftest.exe'), while it won't with +# 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in @@ -2510,11 +2528,12 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 @@ -2530,6 +2549,8 @@ int main (void) { FILE *f = fopen ("conftest.out", "w"); + if (!f) + return 1; return ferror (f) || fclose (f) != 0; ; @@ -2569,26 +2590,27 @@ printf "%s\n" "$ac_try_echo"; } >&5 if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } +If you meant to cross compile, use '--host'. +See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +rm -f conftest.$ac_ext conftest$ac_cv_exeext \ + conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2620,16 +2642,18 @@ then : break;; esac done -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext +rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } @@ -2640,8 +2664,8 @@ printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2658,12 +2682,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no +else case e in #( + e) ac_compiler_gnu=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } @@ -2681,8 +2707,8 @@ printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_save_c_werror_flag=$ac_c_werror_flag +else case e in #( + e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" @@ -2700,8 +2726,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes -else $as_nop - CFLAGS="" +else case e in #( + e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2716,8 +2742,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - ac_c_werror_flag=$ac_save_c_werror_flag +else case e in #( + e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2734,12 +2760,15 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag + ac_c_werror_flag=$ac_save_c_werror_flag ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } @@ -2766,8 +2795,8 @@ printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no +else case e in #( + e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2784,25 +2813,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" + CC="$CC $ac_cv_prog_cc_c11" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 + ac_prog_cc_stdc=c11 ;; +esac fi fi if test x$ac_prog_cc_stdc = xno @@ -2812,8 +2844,8 @@ printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no +else case e in #( + e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2830,25 +2862,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" + CC="$CC $ac_cv_prog_cc_c99" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 + ac_prog_cc_stdc=c99 ;; +esac fi fi if test x$ac_prog_cc_stdc = xno @@ -2858,8 +2893,8 @@ printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no +else case e in #( + e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2876,25 +2911,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" + CC="$CC $ac_cv_prog_cc_c89" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 + ac_prog_cc_stdc=c89 ;; +esac fi fi @@ -2912,16 +2950,22 @@ printf %s "checking for gzopen in -lz... " >&6; } if test ${ac_cv_lib_z_gzopen+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char gzopen (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char gzopen (void); int main (void) { @@ -2933,12 +2977,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_z_gzopen=yes -else $as_nop - ac_cv_lib_z_gzopen=no +else case e in #( + e) ac_cv_lib_z_gzopen=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzopen" >&5 printf "%s\n" "$ac_cv_lib_z_gzopen" >&6; } @@ -3024,8 +3070,8 @@ cat >confcache <<\_ACEOF # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the +# 'ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF @@ -3055,14 +3101,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote + # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) - # `set' quotes correctly as required by POSIX, so do not add quotes. + # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | @@ -3126,9 +3172,7 @@ s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g +s/[][ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\$/$$/g H :any @@ -3188,7 +3232,6 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -3197,12 +3240,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop - case `(set -o) 2>/dev/null` in #( +else case e in #( + e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi @@ -3274,7 +3318,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as `sh COMMAND' +# We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -3303,7 +3347,6 @@ as_fn_error () } # as_fn_error - # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -3343,11 +3386,12 @@ then : { eval $1+=\$2 }' -else $as_nop - as_fn_append () +else case e in #( + e) as_fn_append () { eval $1=\$$1\$2 - } + } ;; +esac fi # as_fn_append # as_fn_arith ARG... @@ -3361,11 +3405,12 @@ then : { as_val=$(( $* )) }' -else $as_nop - as_fn_arith () +else case e in #( + e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } + } ;; +esac fi # as_fn_arith @@ -3448,9 +3493,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. + # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -3531,10 +3576,12 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 @@ -3550,7 +3597,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by Eggdrop Compress Module $as_me 1.9.5, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -3577,7 +3624,7 @@ _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions +'$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. @@ -3605,10 +3652,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ Eggdrop Compress Module config.status 1.9.5 -configured by $0, generated by GNU Autoconf 2.71, +configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -3665,8 +3712,8 @@ do ac_cs_silent=: ;; # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; + -*) as_fn_error $? "unrecognized option: '$1' +Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; @@ -3716,7 +3763,7 @@ do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done @@ -3734,7 +3781,7 @@ fi # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. +# after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= @@ -3758,7 +3805,7 @@ ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. +# This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then @@ -3924,7 +3971,7 @@ do esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -3946,19 +3993,19 @@ do -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. + # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done - # Let's still pretend it is `configure' which instantiates (i.e., don't + # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` @@ -4082,7 +4129,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 esac _ACEOF -# Neutralize VPATH when `$srcdir' = `.'. +# Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 @@ -4111,9 +4158,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" diff --git a/src/mod/dns.mod/configure b/src/mod/dns.mod/configure index 07c7b3b57..283b1bb1b 100755 --- a/src/mod/dns.mod/configure +++ b/src/mod/dns.mod/configure @@ -1,12 +1,12 @@ #! /bin/sh -# From configure.ac 98f8972a. +# From configure.ac bc7bc2ee. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for Eggdrop DNS Module 1.9.5. +# Generated by GNU Autoconf 2.72 for Eggdrop DNS Module 1.9.5. # # Report bugs to . # # -# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, # Inc. # # @@ -20,7 +20,6 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -29,12 +28,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop - case `(set -o) 2>/dev/null` in #( +else case e in #( + e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi @@ -106,7 +106,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as `sh COMMAND' +# We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -136,15 +136,14 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. +# out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="as_nop=: -if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 + as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: @@ -152,12 +151,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else \$as_nop - case \`(set -o) 2>/dev/null\` in #( +else case e in #( + e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi " @@ -175,8 +175,9 @@ as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : -else \$as_nop - exitcode=1; echo positional parameters were not saved. +else case e in #( + e) exitcode=1; echo positional parameters were not saved. ;; +esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) @@ -189,14 +190,15 @@ test -x / || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes -else $as_nop - as_have_required=no +else case e in #( + e) as_have_required=no ;; +esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : -else $as_nop - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else case e in #( + e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do @@ -229,12 +231,13 @@ IFS=$as_save_IFS if $as_found then : -else $as_nop - if { test -f "$SHELL" || test -f "$SHELL.exe"; } && +else case e in #( + e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes -fi +fi ;; +esac fi @@ -256,7 +259,7 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. +# out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi @@ -276,7 +279,8 @@ $0: manually run the script under such a shell if you do $0: have one." fi exit 1 -fi +fi ;; +esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} @@ -315,14 +319,6 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -391,11 +387,12 @@ then : { eval $1+=\$2 }' -else $as_nop - as_fn_append () +else case e in #( + e) as_fn_append () { eval $1=\$$1\$2 - } + } ;; +esac fi # as_fn_append # as_fn_arith ARG... @@ -409,21 +406,14 @@ then : { as_val=$(( $* )) }' -else $as_nop - as_fn_arith () +else case e in #( + e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } + } ;; +esac fi # as_fn_arith -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -497,6 +487,8 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits /[$]LINENO/= ' <$as_myself | sed ' + t clear + :clear s/[$]LINENO.*/&-/ t lineno b @@ -545,7 +537,6 @@ esac as_echo='printf %s\n' as_echo_n='printf %s' - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -557,9 +548,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. + # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -584,10 +575,12 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed '$as_sed_sh'" # deprecated test -n "$DJDIR" || exec 7<&0 /dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -815,7 +808,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1028,7 +1021,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1044,7 +1037,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1074,8 +1067,8 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" + -*) as_fn_error $? "unrecognized option: '$ac_option' +Try '$0 --help' for more information" ;; *=*) @@ -1083,7 +1076,7 @@ Try \`$0 --help' for more information" # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; @@ -1133,7 +1126,7 @@ do as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done -# There might be people who depend on the old broken behavior: `$host' +# There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias @@ -1201,7 +1194,7 @@ if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` @@ -1229,7 +1222,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Eggdrop DNS Module 1.9.5 to adapt to many kinds of systems. +'configure' configures Eggdrop DNS Module 1.9.5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1243,11 +1236,11 @@ Configuration: --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages + -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' + -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] + --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @@ -1255,10 +1248,10 @@ Installation directories: --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. +By default, 'make install' will install all the files in +'$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify +an installation prefix other than '$ac_default_prefix' using '--prefix', +for instance '--prefix=\$HOME'. For better control, use the options below. @@ -1305,7 +1298,7 @@ Some influential environment variables: CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory -Use these variables to override the choices made by `configure' or to help +Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . @@ -1373,9 +1366,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Eggdrop DNS Module configure 1.9.5 -generated by GNU Autoconf 2.71 +generated by GNU Autoconf 2.72 -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. @@ -1416,11 +1409,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 } && test -s conftest.$ac_objext then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval @@ -1439,8 +1433,8 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> @@ -1448,10 +1442,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1491,11 +1487,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 } then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would @@ -1531,7 +1528,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Eggdrop DNS Module $as_me 1.9.5, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw @@ -1777,10 +1774,10 @@ esac printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } fi done @@ -1816,9 +1813,7 @@ struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; +static char *e (char **p, int i) { return p[i]; } @@ -1832,6 +1827,21 @@ static char *f (char * (*g) (char **, int), char **p, ...) return s; } +/* C89 style stringification. */ +#define noexpand_stringify(a) #a +const char *stringified = noexpand_stringify(arbitrary+token=sequence); + +/* C89 style token pasting. Exercises some of the corner cases that + e.g. old MSVC gets wrong, but not very hard. */ +#define noexpand_concat(a,b) a##b +#define expand_concat(a,b) noexpand_concat(a,b) +extern int vA; +extern int vbee; +#define aye A +#define bee B +int *pvA = &expand_concat(v,aye); +int *pvbee = &noexpand_concat(v,bee); + /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated @@ -1859,16 +1869,19 @@ ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' -// Does the compiler advertise C99 conformance? +/* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif +// See if C++-style comments work. + #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); +extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare @@ -1918,7 +1931,6 @@ typedef const char *ccp; static inline int test_restrict (ccp restrict text) { - // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) @@ -1984,6 +1996,8 @@ ac_c_conftest_c99_main=' ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; + // Work around memory leak warnings. + free (ia); // Check named initializers. struct named_init ni = { @@ -2005,7 +2019,7 @@ ac_c_conftest_c99_main=' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' -// Does the compiler advertise C11 conformance? +/* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif @@ -2119,12 +2133,12 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -2133,18 +2147,18 @@ printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. @@ -2160,11 +2174,11 @@ printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi done if $ac_cache_corrupted; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## @@ -2209,8 +2223,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2232,7 +2246,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -2258,8 +2273,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2281,7 +2296,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -2310,10 +2326,10 @@ esac fi -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 @@ -2385,8 +2401,8 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' + # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. +# So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. @@ -2406,7 +2422,7 @@ do ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' + # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. @@ -2417,8 +2433,9 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else $as_nop - ac_file='' +else case e in #( + e) ac_file='' ;; +esac fi if test -z "$ac_file" then : @@ -2427,13 +2444,14 @@ printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } +See 'config.log' for more details" "$LINENO" 5; } +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } @@ -2457,10 +2475,10 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. + # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) +# catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will +# work properly (i.e., refer to 'conftest.exe'), while it won't with +# 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in @@ -2470,11 +2488,12 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 @@ -2490,6 +2509,8 @@ int main (void) { FILE *f = fopen ("conftest.out", "w"); + if (!f) + return 1; return ferror (f) || fclose (f) != 0; ; @@ -2529,26 +2550,27 @@ printf "%s\n" "$ac_try_echo"; } >&5 if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } +If you meant to cross compile, use '--host'. +See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +rm -f conftest.$ac_ext conftest$ac_cv_exeext \ + conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2580,16 +2602,18 @@ then : break;; esac done -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext +rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } @@ -2600,8 +2624,8 @@ printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2618,12 +2642,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no +else case e in #( + e) ac_compiler_gnu=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } @@ -2641,8 +2667,8 @@ printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_save_c_werror_flag=$ac_c_werror_flag +else case e in #( + e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" @@ -2660,8 +2686,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes -else $as_nop - CFLAGS="" +else case e in #( + e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2676,8 +2702,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - ac_c_werror_flag=$ac_save_c_werror_flag +else case e in #( + e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2694,12 +2720,15 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag + ac_c_werror_flag=$ac_save_c_werror_flag ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } @@ -2726,8 +2755,8 @@ printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no +else case e in #( + e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2744,25 +2773,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" + CC="$CC $ac_cv_prog_cc_c11" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 + ac_prog_cc_stdc=c11 ;; +esac fi fi if test x$ac_prog_cc_stdc = xno @@ -2772,8 +2804,8 @@ printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no +else case e in #( + e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2790,25 +2822,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" + CC="$CC $ac_cv_prog_cc_c99" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 + ac_prog_cc_stdc=c99 ;; +esac fi fi if test x$ac_prog_cc_stdc = xno @@ -2818,8 +2853,8 @@ printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no +else case e in #( + e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2836,25 +2871,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" + CC="$CC $ac_cv_prog_cc_c89" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 + ac_prog_cc_stdc=c89 ;; +esac fi fi @@ -3062,8 +3100,8 @@ cat >confcache <<\_ACEOF # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the +# 'ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF @@ -3093,14 +3131,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote + # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) - # `set' quotes correctly as required by POSIX, so do not add quotes. + # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | @@ -3164,9 +3202,7 @@ s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g +s/[][ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\$/$$/g H :any @@ -3226,7 +3262,6 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -3235,12 +3270,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop - case `(set -o) 2>/dev/null` in #( +else case e in #( + e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi @@ -3312,7 +3348,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as `sh COMMAND' +# We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -3341,7 +3377,6 @@ as_fn_error () } # as_fn_error - # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -3381,11 +3416,12 @@ then : { eval $1+=\$2 }' -else $as_nop - as_fn_append () +else case e in #( + e) as_fn_append () { eval $1=\$$1\$2 - } + } ;; +esac fi # as_fn_append # as_fn_arith ARG... @@ -3399,11 +3435,12 @@ then : { as_val=$(( $* )) }' -else $as_nop - as_fn_arith () +else case e in #( + e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } + } ;; +esac fi # as_fn_arith @@ -3486,9 +3523,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. + # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -3569,10 +3606,12 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 @@ -3588,7 +3627,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by Eggdrop DNS Module $as_me 1.9.5, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -3615,7 +3654,7 @@ _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions +'$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. @@ -3643,10 +3682,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ Eggdrop DNS Module config.status 1.9.5 -configured by $0, generated by GNU Autoconf 2.71, +configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -3703,8 +3742,8 @@ do ac_cs_silent=: ;; # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; + -*) as_fn_error $? "unrecognized option: '$1' +Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; @@ -3754,7 +3793,7 @@ do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done @@ -3772,7 +3811,7 @@ fi # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. +# after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= @@ -3796,7 +3835,7 @@ ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. +# This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then @@ -3962,7 +4001,7 @@ do esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -3984,19 +4023,19 @@ do -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. + # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done - # Let's still pretend it is `configure' which instantiates (i.e., don't + # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` @@ -4120,7 +4159,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 esac _ACEOF -# Neutralize VPATH when `$srcdir' = `.'. +# Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 @@ -4149,9 +4188,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" diff --git a/src/mod/filesys.mod/filesys.c b/src/mod/filesys.mod/filesys.c index 1c12721ba..dcaafef76 100644 --- a/src/mod/filesys.mod/filesys.c +++ b/src/mod/filesys.mod/filesys.c @@ -48,12 +48,6 @@ # endif #endif -#ifdef HAVE_SYS_TIME_H -# include -#else -# include -#endif - #include "filedb3.h" #include "filesys.h" #include "src/tandem.h" diff --git a/src/mod/python.mod/configure b/src/mod/python.mod/configure index eadf4ed9c..34cf355ad 100755 --- a/src/mod/python.mod/configure +++ b/src/mod/python.mod/configure @@ -1,12 +1,12 @@ #! /bin/sh -# From configure.ac 98f8972a. +# From configure.ac bc7bc2ee. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for Eggdrop Python Module 1.10.0. +# Generated by GNU Autoconf 2.72 for Eggdrop Python Module 1.10.0. # # Report bugs to . # # -# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, # Inc. # # @@ -20,7 +20,6 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -29,12 +28,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop - case `(set -o) 2>/dev/null` in #( +else case e in #( + e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi @@ -106,7 +106,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as `sh COMMAND' +# We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -136,15 +136,14 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. +# out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="as_nop=: -if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 + as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: @@ -152,12 +151,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else \$as_nop - case \`(set -o) 2>/dev/null\` in #( +else case e in #( + e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi " @@ -175,8 +175,9 @@ as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : -else \$as_nop - exitcode=1; echo positional parameters were not saved. +else case e in #( + e) exitcode=1; echo positional parameters were not saved. ;; +esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) @@ -190,14 +191,15 @@ test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes -else $as_nop - as_have_required=no +else case e in #( + e) as_have_required=no ;; +esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : -else $as_nop - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else case e in #( + e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do @@ -230,12 +232,13 @@ IFS=$as_save_IFS if $as_found then : -else $as_nop - if { test -f "$SHELL" || test -f "$SHELL.exe"; } && +else case e in #( + e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes -fi +fi ;; +esac fi @@ -257,7 +260,7 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. +# out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi @@ -277,7 +280,8 @@ $0: manually run the script under such a shell if you do $0: have one." fi exit 1 -fi +fi ;; +esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} @@ -316,14 +320,6 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -392,11 +388,12 @@ then : { eval $1+=\$2 }' -else $as_nop - as_fn_append () +else case e in #( + e) as_fn_append () { eval $1=\$$1\$2 - } + } ;; +esac fi # as_fn_append # as_fn_arith ARG... @@ -410,21 +407,14 @@ then : { as_val=$(( $* )) }' -else $as_nop - as_fn_arith () +else case e in #( + e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } + } ;; +esac fi # as_fn_arith -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -498,6 +488,8 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits /[$]LINENO/= ' <$as_myself | sed ' + t clear + :clear s/[$]LINENO.*/&-/ t lineno b @@ -546,7 +538,6 @@ esac as_echo='printf %s\n' as_echo_n='printf %s' - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -558,9 +549,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. + # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -585,10 +576,12 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed '$as_sed_sh'" # deprecated test -n "$DJDIR" || exec 7<&0 /dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -814,7 +807,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1027,7 +1020,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1043,7 +1036,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1073,8 +1066,8 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" + -*) as_fn_error $? "unrecognized option: '$ac_option' +Try '$0 --help' for more information" ;; *=*) @@ -1082,7 +1075,7 @@ Try \`$0 --help' for more information" # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; @@ -1132,7 +1125,7 @@ do as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done -# There might be people who depend on the old broken behavior: `$host' +# There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias @@ -1200,7 +1193,7 @@ if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` @@ -1228,7 +1221,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Eggdrop Python Module 1.10.0 to adapt to many kinds of systems. +'configure' configures Eggdrop Python Module 1.10.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1242,11 +1235,11 @@ Configuration: --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages + -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' + -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] + --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @@ -1254,10 +1247,10 @@ Installation directories: --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. +By default, 'make install' will install all the files in +'$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify +an installation prefix other than '$ac_default_prefix' using '--prefix', +for instance '--prefix=\$HOME'. For better control, use the options below. @@ -1306,7 +1299,7 @@ Some influential environment variables: string will be appended to the Python interpreter canonical name. -Use these variables to override the choices made by `configure' or to help +Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . @@ -1374,9 +1367,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Eggdrop Python Module configure 1.10.0 -generated by GNU Autoconf 2.71 +generated by GNU Autoconf 2.72 -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. @@ -1413,7 +1406,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Eggdrop Python Module $as_me 1.10.0, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw @@ -1659,10 +1652,10 @@ esac printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } fi done @@ -1693,12 +1686,12 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -1707,18 +1700,18 @@ printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. @@ -1734,11 +1727,11 @@ printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi done if $ac_cache_corrupted; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## @@ -1764,8 +1757,8 @@ printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -z "$GREP"; then +else case e in #( + e) if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -1784,9 +1777,10 @@ do as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in +case `"$ac_path_GREP" --version 2>&1` in #( *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -1821,7 +1815,8 @@ IFS=$as_save_IFS else ac_cv_path_GREP=$GREP fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } @@ -1833,8 +1828,8 @@ printf %s "checking for fgrep... " >&6; } if test ${ac_cv_path_FGREP+y} then : printf %s "(cached) " >&6 -else $as_nop - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 +else case e in #( + e) if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then @@ -1856,9 +1851,10 @@ do as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in +case `"$ac_path_FGREP" --version 2>&1` in #( *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -1894,7 +1890,8 @@ else ac_cv_path_FGREP=$FGREP fi - fi + fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 printf "%s\n" "$ac_cv_path_FGREP" >&6; } @@ -1933,8 +1930,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_python_config_bin+y} then : printf %s "(cached) " >&6 -else $as_nop - case $python_config_bin in +else case e in #( + e) case $python_config_bin in [\\/]* | ?:[\\/]*) ac_cv_path_python_config_bin="$python_config_bin" # Let the user override the test with a path. ;; @@ -1959,6 +1956,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi python_config_bin=$ac_cv_path_python_config_bin @@ -1987,8 +1985,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_python_config_bin+y} then : printf %s "(cached) " >&6 -else $as_nop - case $python_config_bin in +else case e in #( + e) case $python_config_bin in [\\/]* | ?:[\\/]*) ac_cv_path_python_config_bin="$python_config_bin" # Let the user override the test with a path. ;; @@ -2013,6 +2011,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi python_config_bin=$ac_cv_path_python_config_bin @@ -2053,13 +2052,14 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -else $as_nop - +else case e in #( + e) PYTHON_CONFIG_ARGS="" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for python C flags" >&5 @@ -2088,8 +2088,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PYTHON+y} then : printf %s "(cached) " >&6 -else $as_nop - case $PYTHON in +else case e in #( + e) case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; @@ -2114,6 +2114,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi PYTHON=$ac_cv_path_PYTHON @@ -2148,8 +2149,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$AWK"; then +else case e in #( + e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2171,7 +2172,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then @@ -2263,8 +2265,8 @@ cat >confcache <<\_ACEOF # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the +# 'ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF @@ -2294,14 +2296,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote + # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) - # `set' quotes correctly as required by POSIX, so do not add quotes. + # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | @@ -2365,9 +2367,7 @@ s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g +s/[][ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\$/$$/g H :any @@ -2427,7 +2427,6 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -2436,12 +2435,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop - case `(set -o) 2>/dev/null` in #( +else case e in #( + e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi @@ -2513,7 +2513,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as `sh COMMAND' +# We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -2542,7 +2542,6 @@ as_fn_error () } # as_fn_error - # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -2582,11 +2581,12 @@ then : { eval $1+=\$2 }' -else $as_nop - as_fn_append () +else case e in #( + e) as_fn_append () { eval $1=\$$1\$2 - } + } ;; +esac fi # as_fn_append # as_fn_arith ARG... @@ -2600,11 +2600,12 @@ then : { as_val=$(( $* )) }' -else $as_nop - as_fn_arith () +else case e in #( + e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } + } ;; +esac fi # as_fn_arith @@ -2687,9 +2688,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. + # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -2770,10 +2771,12 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 @@ -2789,7 +2792,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by Eggdrop Python Module $as_me 1.10.0, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -2816,7 +2819,7 @@ _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions +'$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. @@ -2844,10 +2847,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ Eggdrop Python Module config.status 1.10.0 -configured by $0, generated by GNU Autoconf 2.71, +configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -2905,8 +2908,8 @@ do ac_cs_silent=: ;; # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; + -*) as_fn_error $? "unrecognized option: '$1' +Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; @@ -2956,7 +2959,7 @@ do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done @@ -2974,7 +2977,7 @@ fi # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. +# after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= @@ -2998,7 +3001,7 @@ ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. +# This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then @@ -3164,7 +3167,7 @@ do esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -3186,19 +3189,19 @@ do -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. + # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done - # Let's still pretend it is `configure' which instantiates (i.e., don't + # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` @@ -3322,7 +3325,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 esac _ACEOF -# Neutralize VPATH when `$srcdir' = `.'. +# Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 @@ -3351,9 +3354,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" diff --git a/src/mod/seen.mod/seen.c b/src/mod/seen.mod/seen.c index 5dbb095da..63ddd0593 100644 --- a/src/mod/seen.mod/seen.c +++ b/src/mod/seen.mod/seen.c @@ -73,12 +73,6 @@ #include "src/mod/module.h" -#ifdef HAVE_SYS_TIME_H -# include -#else -# include -#endif - #include "src/users.h" #include "src/chan.h" #include "channels.mod/channels.h" diff --git a/src/mod/server.mod/cmdsserv.c b/src/mod/server.mod/cmdsserv.c index ab580d208..ceb79e436 100644 --- a/src/mod/server.mod/cmdsserv.c +++ b/src/mod/server.mod/cmdsserv.c @@ -20,7 +20,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include static void cmd_servers(struct userrec *u, int idx, char *par) { diff --git a/src/tclmisc.c b/src/tclmisc.c index c5db7090c..bbfdb5299 100644 --- a/src/tclmisc.c +++ b/src/tclmisc.c @@ -25,13 +25,6 @@ #include "main.h" #include "modules.h" #include "md5/md5.h" - -#ifdef HAVE_SYS_TIME_H -# include -#else -# include -#endif - #include #include From 0ef635bdc8533d33c8bedddbd4a29447f4beb1b6 Mon Sep 17 00:00:00 2001 From: Thomas Sader Date: Sun, 16 Jun 2024 21:52:53 +0200 Subject: [PATCH 68/91] Run autotools --- config.h.in | 122 +- configure | 2209 ++++++++++++++------------------ src/mod/compress.mod/configure | 517 ++++---- src/mod/dns.mod/configure | 495 ++++--- src/mod/python.mod/configure | 301 +++-- 5 files changed, 1608 insertions(+), 2036 deletions(-) diff --git a/config.h.in b/config.h.in index 80466fec7..22e26d5c8 100644 --- a/config.h.in +++ b/config.h.in @@ -56,7 +56,7 @@ #undef EGG_VERSION /* Define to nothing if C supports flexible array members, and to 1 if it does - not. That way, with a declaration like 'struct s { int n; double + not. That way, with a declaration like `struct s { int n; double d[FLEXIBLE_ARRAY_MEMBER]; };', the struct hack can be used with pre-C99 compilers. When computing the size of such an object, don't use 'sizeof (struct s)' as it overestimates the size. Use 'offsetof (struct s, d)' @@ -64,7 +64,7 @@ MSVC and with C++ compilers. */ #undef FLEXIBLE_ARRAY_MEMBER -/* Define to 1 if you have the 'a2i_IPADDRESS' function. */ +/* Define to 1 if you have the `a2i_IPADDRESS' function. */ #undef HAVE_A2I_IPADDRESS /* Define to 1 if you have the header file. */ @@ -73,48 +73,48 @@ /* Define if b64_ntop exists. */ #undef HAVE_BASE64 -/* Define to 1 if you have the declaration of 'tzname', and to 0 if you don't. +/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't. */ #undef HAVE_DECL_TZNAME -/* Define to 1 if you have the header file, and it defines 'DIR'. +/* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H -/* Define to 1 if you have the 'dlopen' function. */ +/* Define to 1 if you have the `dlopen' function. */ #undef HAVE_DLOPEN /* Define to 1 if you have the header file. */ #undef HAVE_DL_H -/* Define to 1 if you have the 'dprintf' function. */ +/* Define to 1 if you have the `dprintf' function. */ #undef HAVE_DPRINTF -/* Define to 1 if you have the 'EVP_md5' function. */ +/* Define to 1 if you have the `EVP_md5' function. */ #undef HAVE_EVP_MD5 -/* Define to 1 if you have the 'EVP_PKEY_get1_EC_KEY' function. */ +/* Define to 1 if you have the `EVP_PKEY_get1_EC_KEY' function. */ #undef HAVE_EVP_PKEY_GET1_EC_KEY -/* Define to 1 if you have the 'EVP_sha1' function. */ +/* Define to 1 if you have the `EVP_sha1' function. */ #undef HAVE_EVP_SHA1 -/* Define to 1 if you have the 'explicit_bzero' function. */ +/* Define to 1 if you have the `explicit_bzero' function. */ #undef HAVE_EXPLICIT_BZERO -/* Define to 1 if you have the 'explicit_memset' function. */ +/* Define to 1 if you have the `explicit_memset' function. */ #undef HAVE_EXPLICIT_MEMSET /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H -/* Define to 1 if you have the 'getpagesize' function. */ +/* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE -/* Define to 1 if you have the 'getrandom' function. */ +/* Define to 1 if you have the `getrandom' function. */ #undef HAVE_GETRANDOM /* Define to 1 if you have the in6addr_any constant. */ @@ -123,31 +123,31 @@ /* Define to 1 if you have the in6addr_loopback constant. */ #undef HAVE_IN6ADDR_LOOPBACK -/* Define to 1 if you have the 'inet_aton' function. */ +/* Define to 1 if you have the `inet_aton' function. */ #undef HAVE_INET_ATON -/* Define to 1 if the system has the type 'intptr_t'. */ +/* Define to 1 if the system has the type `intptr_t'. */ #undef HAVE_INTPTR_T /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H -/* Define to 1 if you have the 'isascii' function. */ +/* Define to 1 if you have the `isascii' function. */ #undef HAVE_ISASCII -/* Define to 1 if you have the 'crypto' library (-lcrypto). */ +/* Define to 1 if you have the `crypto' library (-lcrypto). */ #undef HAVE_LIBCRYPTO -/* Define to 1 if you have the 'dld' library (-ldld). */ +/* Define to 1 if you have the `dld' library (-ldld). */ #undef HAVE_LIBDLD -/* Define to 1 if you have the 'ssl' library (-lssl). */ +/* Define to 1 if you have the `ssl' library (-lssl). */ #undef HAVE_LIBSSL /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H -/* Define to 1 if you have the 'load' function. */ +/* Define to 1 if you have the `load' function. */ #undef HAVE_LOAD /* Define to 1 if you have the header file. */ @@ -162,28 +162,28 @@ /* Define to 1 if you have the header file. */ #undef HAVE_MACH_O_RLD_H -/* Define to 1 if you have the 'MD5_Final' function. */ +/* Define to 1 if you have the `MD5_Final' function. */ #undef HAVE_MD5_FINAL -/* Define to 1 if you have the 'MD5_Init' function. */ +/* Define to 1 if you have the `MD5_Init' function. */ #undef HAVE_MD5_INIT -/* Define to 1 if you have the 'MD5_Update' function. */ +/* Define to 1 if you have the `MD5_Update' function. */ #undef HAVE_MD5_UPDATE -/* Define to 1 if you have the 'memset_explicit' function. */ +/* Define to 1 if you have the `memset_explicit' function. */ #undef HAVE_MEMSET_EXPLICIT -/* Define to 1 if you have the 'memset_s' function. */ +/* Define to 1 if you have the `memset_s' function. */ #undef HAVE_MEMSET_S /* Define to 1 if you have the header file. */ #undef HAVE_MINIX_CONFIG_H -/* Define to 1 if you have a working 'mmap' system call. */ +/* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP -/* Define to 1 if you have the header file, and it defines 'DIR'. */ +/* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the header file. */ @@ -195,7 +195,7 @@ /* Do we have ? */ #undef HAVE_NET_ERRNO_H -/* Define to 1 if you have the 'NSLinkModule' function. */ +/* Define to 1 if you have the `NSLinkModule' function. */ #undef HAVE_NSLINKMODULE /* Define this if your OpenSSL library has MD5 cipher support. */ @@ -216,13 +216,13 @@ /* Define to 1 if you have the header file. */ #undef HAVE_RLD_H -/* Define to 1 if you have the 'rld_load' function. */ +/* Define to 1 if you have the `rld_load' function. */ #undef HAVE_RLD_LOAD -/* Define to 1 if you have the 'shl_load' function. */ +/* Define to 1 if you have the `shl_load' function. */ #undef HAVE_SHL_LOAD -/* Define to 1 if you have the 'snprintf' function. */ +/* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define to 1 if you have the header file. */ @@ -246,26 +246,26 @@ /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H -/* Define to 1 if you have the 'strlcpy' function. */ +/* Define to 1 if you have the `strlcpy' function. */ #undef HAVE_STRLCPY -/* Define to 1 if the system has the type 'struct in6_addr'. */ +/* Define to 1 if the system has the type `struct in6_addr'. */ #undef HAVE_STRUCT_IN6_ADDR -/* Define to 1 if the system has the type 'struct sockaddr_in6'. */ +/* Define to 1 if the system has the type `struct sockaddr_in6'. */ #undef HAVE_STRUCT_SOCKADDR_IN6 -/* Define to 1 if 'tm_zone' is a member of 'struct tm'. */ +/* Define to 1 if `tm_zone' is a member of `struct tm'. */ #undef HAVE_STRUCT_TM_TM_ZONE -/* Define to 1 if you have the header file, and it defines 'DIR'. +/* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_FILE_H -/* Define to 1 if you have the header file, and it defines 'DIR'. +/* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H @@ -290,18 +290,18 @@ /* Define to 1 if you have the header file. */ #undef HAVE_TIME_H -/* Define to 1 if your 'struct tm' has 'tm_zone'. Deprecated, use - 'HAVE_STRUCT_TM_TM_ZONE' instead. */ +/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use + `HAVE_STRUCT_TM_TM_ZONE' instead. */ #undef HAVE_TM_ZONE -/* Define to 1 if you don't have 'tm_zone' but do have the external array - 'tzname'. */ +/* Define to 1 if you don't have `tm_zone' but do have the external array + `tzname'. */ #undef HAVE_TZNAME /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H -/* Define to 1 if you have the 'vsnprintf' function. */ +/* Define to 1 if you have the `vsnprintf' function. */ #undef HAVE_VSNPRINTF /* Define to 1 if you have the header file. */ @@ -360,31 +360,31 @@ /* Define if running under QNX. */ #undef QNX_HACKS -/* Define to the type of arg 1 for 'select'. */ +/* Define to the type of arg 1 for `select'. */ #undef SELECT_TYPE_ARG1 -/* Define to the type of args 2, 3 and 4 for 'select'. */ +/* Define to the type of args 2, 3 and 4 for `select'. */ #undef SELECT_TYPE_ARG234 -/* Define to the type of arg 5 for 'select'. */ +/* Define to the type of arg 5 for `select'. */ #undef SELECT_TYPE_ARG5 -/* The size of 'char', as computed by sizeof. */ +/* The size of `char', as computed by sizeof. */ #undef SIZEOF_CHAR -/* The size of 'int', as computed by sizeof. */ +/* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT -/* The size of 'long', as computed by sizeof. */ +/* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG -/* The size of 'short', as computed by sizeof. */ +/* The size of `short', as computed by sizeof. */ #undef SIZEOF_SHORT -/* The size of 'void*', as computed by sizeof. */ +/* The size of `void*', as computed by sizeof. */ #undef SIZEOF_VOIDP -/* Define to 1 if all of the C89 standard headers exist (not just the ones +/* Define to 1 if all of the C90 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #undef STDC_HEADERS @@ -395,10 +395,10 @@ /* Define this to enable SSL support. */ #undef TLS -/* Define to 1 if your declares 'struct tm'. */ +/* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME -/* Enable extensions on AIX, Interix, z/OS. */ +/* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif @@ -459,15 +459,11 @@ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif -/* Enable extensions specified by C23 Annex F. */ -#ifndef __STDC_WANT_IEC_60559_EXT__ -# undef __STDC_WANT_IEC_60559_EXT__ -#endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif -/* Enable extensions specified by C23 Annex H and ISO/IEC TS 18661-3:2015. */ +/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif @@ -505,14 +501,14 @@ /* Define this to a 64-bit type on Cygwin to satisfy OpenSSL dependencies. */ #undef __int64 -/* Define to empty if 'const' does not conform to ANSI C. */ +/* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define this to ASN1_STRING_get0_data when using OpenSSL 1.1.0+, ASN1_STRING_data otherwise. */ #undef egg_ASN1_string_data -/* Define to '__inline__' or '__inline' if that's what the C compiler +/* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline @@ -525,14 +521,14 @@ /* Define as a signed integer type capable of holding a process identifier. */ #undef pid_t -/* Define as 'unsigned int' if doesn't define. */ +/* Define to `unsigned int' if does not define. */ #undef size_t /* Substitute for socklen_t */ #undef socklen_t -/* Define to empty if the keyword 'volatile' does not work. Warning: valid - code using 'volatile' can become incorrect without. Disable with care. */ +/* Define to empty if the keyword `volatile' does not work. Warning: valid + code using `volatile' can become incorrect without. Disable with care. */ #undef volatile #endif /* !_EGG_CONFIG_H */ diff --git a/configure b/configure index 41fc0085f..4b2385d1d 100755 --- a/configure +++ b/configure @@ -1,12 +1,12 @@ #! /bin/sh -# From configure.ac bc7bc2ee. +# From configure.ac 95f630ee. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.72 for Eggdrop 1.9.5. +# Generated by GNU Autoconf 2.71 for Eggdrop 1.9.5. # # Report bugs to . # # -# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # @@ -20,6 +20,7 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh +as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -28,13 +29,12 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else case e in #( - e) case `(set -o) 2>/dev/null` in #( +else $as_nop + case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; -esac ;; esac fi @@ -106,7 +106,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as 'sh COMMAND' +# We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -136,14 +136,15 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed 'exec'. +# out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 + as_bourne_compatible="as_nop=: +if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: @@ -151,13 +152,12 @@ then : # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else case e in #( - e) case \`(set -o) 2>/dev/null\` in #( +else \$as_nop + case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; -esac ;; esac fi " @@ -175,9 +175,8 @@ as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : -else case e in #( - e) exitcode=1; echo positional parameters were not saved. ;; -esac +else \$as_nop + exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) @@ -191,15 +190,14 @@ test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes -else case e in #( - e) as_have_required=no ;; -esac +else $as_nop + as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : -else case e in #( - e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else $as_nop + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do @@ -232,13 +230,12 @@ IFS=$as_save_IFS if $as_found then : -else case e in #( - e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && +else $as_nop + if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes -fi ;; -esac +fi fi @@ -260,7 +257,7 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed 'exec'. +# out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi @@ -280,8 +277,7 @@ $0: manually run the script under such a shell if you do $0: have one." fi exit 1 -fi ;; -esac +fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} @@ -320,6 +316,14 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -388,12 +392,11 @@ then : { eval $1+=\$2 }' -else case e in #( - e) as_fn_append () +else $as_nop + as_fn_append () { eval $1=\$$1\$2 - } ;; -esac + } fi # as_fn_append # as_fn_arith ARG... @@ -407,14 +410,21 @@ then : { as_val=$(( $* )) }' -else case e in #( - e) as_fn_arith () +else $as_nop + as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } ;; -esac + } fi # as_fn_arith +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -488,8 +498,6 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits /[$]LINENO/= ' <$as_myself | sed ' - t clear - :clear s/[$]LINENO.*/&-/ t lineno b @@ -538,6 +546,7 @@ esac as_echo='printf %s\n' as_echo_n='printf %s' + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -549,9 +558,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. - # In both cases, we have to default to 'cp -pR'. + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -576,12 +585,10 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" -as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. -as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" -as_tr_sh="eval sed '$as_sed_sh'" # deprecated +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 /dev/null && - as_fn_error $? "invalid feature name: '$ac_useropt'" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -938,7 +947,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: '$ac_useropt'" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1151,7 +1160,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: '$ac_useropt'" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1167,7 +1176,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: '$ac_useropt'" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1197,8 +1206,8 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) as_fn_error $? "unrecognized option: '$ac_option' -Try '$0 --help' for more information" + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" ;; *=*) @@ -1206,7 +1215,7 @@ Try '$0 --help' for more information" # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: '$ac_envvar'" ;; + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; @@ -1256,7 +1265,7 @@ do as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done -# There might be people who depend on the old broken behavior: '$host' +# There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias @@ -1324,7 +1333,7 @@ if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi -ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` @@ -1352,7 +1361,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -'configure' configures Eggdrop 1.9.5 to adapt to many kinds of systems. +\`configure' configures Eggdrop 1.9.5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1366,11 +1375,11 @@ Configuration: --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print 'checking ...' messages + -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for '--cache-file=config.cache' + -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or '..'] + --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @@ -1378,10 +1387,10 @@ Installation directories: --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] -By default, 'make install' will install all the files in -'$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify -an installation prefix other than '$ac_default_prefix' using '--prefix', -for instance '--prefix=\$HOME'. +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. For better control, use the options below. @@ -1463,7 +1472,7 @@ Some influential environment variables: you have headers in a nonstandard directory CPP C preprocessor -Use these variables to override the choices made by 'configure' or to help +Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . @@ -1532,9 +1541,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Eggdrop configure 1.9.5 -generated by GNU Autoconf 2.72 +generated by GNU Autoconf 2.71 -Copyright (C) 2023 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. @@ -1575,12 +1584,11 @@ printf "%s\n" "$ac_try_echo"; } >&5 } && test -s conftest.$ac_objext then : ac_retval=0 -else case e in #( - e) printf "%s\n" "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 ;; -esac + ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval @@ -1599,8 +1607,8 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> @@ -1608,12 +1616,10 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" -else case e in #( - e) eval "$3=no" ;; -esac +else $as_nop + eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1653,12 +1659,11 @@ printf "%s\n" "$ac_try_echo"; } >&5 } then : ac_retval=0 -else case e in #( - e) printf "%s\n" "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 ;; -esac + ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would @@ -1697,12 +1702,11 @@ printf "%s\n" "$ac_try_echo"; } >&5 } then : ac_retval=0 -else case e in #( - e) printf "%s\n" "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 ;; -esac + ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval @@ -1720,15 +1724,15 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (void); below. */ + which can conflict with char $2 (); below. */ #include #undef $2 @@ -1739,7 +1743,7 @@ else case e in #( #ifdef __cplusplus extern "C" #endif -char $2 (void); +char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ @@ -1758,13 +1762,11 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" -else case e in #( - e) eval "$3=no" ;; -esac +else $as_nop + eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext ;; -esac + conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1803,13 +1805,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 test $ac_status = 0; }; } then : ac_retval=0 -else case e in #( - e) printf "%s\n" "$as_me: program exited with status $ac_status" >&5 +else $as_nop + printf "%s\n" "$as_me: program exited with status $ac_status" >&5 printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=$ac_status ;; -esac + ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno @@ -1829,8 +1830,8 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else case e in #( - e) eval "$3=no" +else $as_nop + eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @@ -1860,14 +1861,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else case e in #( - e) eval "$3=yes" ;; -esac +else $as_nop + eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1888,8 +1887,8 @@ printf %s "checking for $2.$3... " >&6; } if eval test \${$4+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int @@ -1905,8 +1904,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$4=yes" -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int @@ -1922,15 +1921,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$4=yes" -else case e in #( - e) eval "$4=no" ;; -esac +else $as_nop + eval "$4=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$4 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1952,8 +1948,8 @@ printf %s "checking whether $as_decl_name is declared... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else case e in #( - e) as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` +else $as_nop + as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` eval ac_save_FLAGS=\$$6 as_fn_append $6 " $5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -1977,14 +1973,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" -else case e in #( - e) eval "$3=no" ;; -esac +else $as_nop + eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval $6=\$ac_save_FLAGS - ;; -esac + fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -2038,19 +2032,18 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_hi=$ac_mid; break -else case e in #( - e) as_fn_arith $ac_mid + 1 && ac_lo=$as_val +else $as_nop + as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val ;; -esac + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int @@ -2085,23 +2078,20 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_lo=$ac_mid; break -else case e in #( - e) as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val +else $as_nop + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val ;; -esac + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else case e in #( - e) ac_lo= ac_hi= ;; -esac +else $as_nop + ac_lo= ac_hi= fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Binary search between lo and hi bounds. @@ -2124,9 +2114,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_hi=$ac_mid -else case e in #( - e) as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val ;; -esac +else $as_nop + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done @@ -2174,9 +2163,8 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : echo >>conftest.val; read $3 &6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file -See 'config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5; } fi done @@ -2497,7 +2485,9 @@ struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (char **p, int i) +static char *e (p, i) + char **p; + int i; { return p[i]; } @@ -2511,21 +2501,6 @@ static char *f (char * (*g) (char **, int), char **p, ...) return s; } -/* C89 style stringification. */ -#define noexpand_stringify(a) #a -const char *stringified = noexpand_stringify(arbitrary+token=sequence); - -/* C89 style token pasting. Exercises some of the corner cases that - e.g. old MSVC gets wrong, but not very hard. */ -#define noexpand_concat(a,b) a##b -#define expand_concat(a,b) noexpand_concat(a,b) -extern int vA; -extern int vbee; -#define aye A -#define bee B -int *pvA = &expand_concat(v,aye); -int *pvbee = &noexpand_concat(v,bee); - /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated @@ -2553,19 +2528,16 @@ ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' -/* Does the compiler advertise C99 conformance? */ +// Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif -// See if C++-style comments work. - #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); -extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare @@ -2615,6 +2587,7 @@ typedef const char *ccp; static inline int test_restrict (ccp restrict text) { + // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) @@ -2680,8 +2653,6 @@ ac_c_conftest_c99_main=' ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; - // Work around memory leak warnings. - free (ia); // Check named initializers. struct named_init ni = { @@ -2703,7 +2674,7 @@ ac_c_conftest_c99_main=' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' -/* Does the compiler advertise C11 conformance? */ +// Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif @@ -2901,9 +2872,8 @@ IFS=$as_save_IFS if $as_found then : -else case e in #( - e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; -esac +else $as_nop + as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi @@ -2931,12 +2901,12 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -2945,18 +2915,18 @@ printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 -printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. @@ -2972,11 +2942,11 @@ printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi done if $ac_cache_corrupted; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' + as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## @@ -3078,8 +3048,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$CC"; then +else $as_nop + if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3101,8 +3071,7 @@ done done IFS=$as_save_IFS -fi ;; -esac +fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -3128,8 +3097,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$ac_ct_CC"; then +else $as_nop + if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3151,8 +3120,7 @@ done done IFS=$as_save_IFS -fi ;; -esac +fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -3181,10 +3149,10 @@ esac fi -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH -See 'config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 @@ -3256,8 +3224,8 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. -# So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. @@ -3277,7 +3245,7 @@ do ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an '-o' + # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. @@ -3288,9 +3256,8 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else case e in #( - e) ac_file='' ;; -esac +else $as_nop + ac_file='' fi if test -z "$ac_file" then : @@ -3299,14 +3266,13 @@ printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables -See 'config.log' for more details" "$LINENO" 5; } -else case e in #( - e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } ;; -esac +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } @@ -3330,10 +3296,10 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) -# catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will -# work properly (i.e., refer to 'conftest.exe'), while it won't with -# 'rm'. + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in @@ -3343,12 +3309,11 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else case e in #( - e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See 'config.log' for more details" "$LINENO" 5; } ;; -esac +See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 @@ -3364,8 +3329,6 @@ int main (void) { FILE *f = fopen ("conftest.out", "w"); - if (!f) - return 1; return ferror (f) || fclose (f) != 0; ; @@ -3405,27 +3368,26 @@ printf "%s\n" "$ac_try_echo"; } >&5 if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. -If you meant to cross compile, use '--host'. -See 'config.log' for more details" "$LINENO" 5; } +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } -rm -f conftest.$ac_ext conftest$ac_cv_exeext \ - conftest.o conftest.obj conftest.out +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3457,18 +3419,16 @@ then : break;; esac done -else case e in #( - e) printf "%s\n" "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile -See 'config.log' for more details" "$LINENO" 5; } ;; -esac +See \`config.log' for more details" "$LINENO" 5; } fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; -esac +rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } @@ -3479,8 +3439,8 @@ printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3497,14 +3457,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes -else case e in #( - e) ac_compiler_gnu=no ;; -esac +else $as_nop + ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } @@ -3522,8 +3480,8 @@ printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_save_c_werror_flag=$ac_c_werror_flag +else $as_nop + ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" @@ -3541,8 +3499,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes -else case e in #( - e) CFLAGS="" +else $as_nop + CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -3557,8 +3515,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else case e in #( - e) ac_c_werror_flag=$ac_save_c_werror_flag +else $as_nop + ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -3575,15 +3533,12 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag ;; -esac + ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } @@ -3610,8 +3565,8 @@ printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_cv_prog_cc_c11=no +else $as_nop + ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -3628,28 +3583,25 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC ;; -esac +CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else case e in #( - e) if test "x$ac_cv_prog_cc_c11" = x +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else case e in #( - e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" ;; -esac + CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 ;; -esac + ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno @@ -3659,8 +3611,8 @@ printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_cv_prog_cc_c99=no +else $as_nop + ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -3677,28 +3629,25 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC ;; -esac +CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else case e in #( - e) if test "x$ac_cv_prog_cc_c99" = x +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else case e in #( - e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" ;; -esac + CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 ;; -esac + ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno @@ -3708,8 +3657,8 @@ printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_cv_prog_cc_c89=no +else $as_nop + ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -3726,28 +3675,25 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC ;; -esac +CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else case e in #( - e) if test "x$ac_cv_prog_cc_c89" = x +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else case e in #( - e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" ;; -esac + CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 ;; -esac + ac_prog_cc_stdc=c89 fi fi @@ -3824,8 +3770,8 @@ printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test ${ac_cv_safe_to_define___extensions__+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 @@ -3841,12 +3787,10 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_safe_to_define___extensions__=yes -else case e in #( - e) ac_cv_safe_to_define___extensions__=no ;; -esac +else $as_nop + ac_cv_safe_to_define___extensions__=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } @@ -3856,8 +3800,8 @@ printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } if test ${ac_cv_should_define__xopen_source+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_cv_should_define__xopen_source=no +else $as_nop + ac_cv_should_define__xopen_source=no if test $ac_cv_header_wchar_h = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -3876,8 +3820,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 @@ -3895,12 +3839,10 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_should_define__xopen_source=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi ;; -esac +fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } @@ -3925,8 +3867,6 @@ printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h - printf "%s\n" "#define __STDC_WANT_IEC_60559_EXT__ 1" >>confdefs.h - printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h @@ -3946,9 +3886,8 @@ then : printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h -else case e in #( - e) MINIX= ;; -esac +else $as_nop + MINIX= fi if test $ac_cv_safe_to_define___extensions__ = yes then : @@ -3966,21 +3905,15 @@ printf %s "checking for library containing strerror... " >&6; } if test ${ac_cv_search_strerror+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_func_search_save_LIBS=$LIBS +else $as_nop + ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. - The 'extern "C"' is for builds by C++ compilers; - although this is not generally supported in C code supporting it here - has little cost and some practical benefit (sr 110532). */ -#ifdef __cplusplus -extern "C" -#endif -char strerror (void); + builtin and then its argument prototype would still apply. */ +char strerror (); int main (void) { @@ -4011,13 +3944,11 @@ done if test ${ac_cv_search_strerror+y} then : -else case e in #( - e) ac_cv_search_strerror=no ;; -esac +else $as_nop + ac_cv_search_strerror=no fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS ;; -esac +LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 printf "%s\n" "$ac_cv_search_strerror" >&6; } @@ -4037,8 +3968,8 @@ printf %s "checking for icc... " >&6; } if test ${egg_cv_var_cc_icc+y} then : printf %s "(cached) " >&6 -else case e in #( - e) +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4052,15 +3983,13 @@ then : egg_cv_var_cc_icc="yes" -else case e in #( - e) +else $as_nop + egg_cv_var_cc_icc="no" - ;; -esac + fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $egg_cv_var_cc_icc" >&5 printf "%s\n" "$egg_cv_var_cc_icc" >&6; } @@ -4078,8 +4007,8 @@ printf %s "checking whether the compiler understands -pipe... " >&6; } if test ${egg_cv_var_ccpipe+y} then : printf %s "(cached) " >&6 -else case e in #( - e) +else $as_nop + ac_old_CC="$CC" CC="$CC -pipe" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -4098,16 +4027,14 @@ then : egg_cv_var_ccpipe="yes" -else case e in #( - e) +else $as_nop + egg_cv_var_ccpipe="no" - ;; -esac + fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CC="$ac_old_CC" - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $egg_cv_var_ccpipe" >&5 printf "%s\n" "$egg_cv_var_ccpipe" >&6; } @@ -4132,8 +4059,8 @@ printf %s "checking whether the compiler understands -Wall... " >&6; } if test ${egg_cv_var_ccwall+y} then : printf %s "(cached) " >&6 -else case e in #( - e) +else $as_nop + ac_old_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wall" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -4152,16 +4079,14 @@ then : egg_cv_var_ccwall="yes" -else case e in #( - e) +else $as_nop + egg_cv_var_ccwall="no" - ;; -esac + fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$ac_old_CFLAGS" - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $egg_cv_var_ccwall" >&5 printf "%s\n" "$egg_cv_var_ccwall" >&6; } @@ -4215,8 +4140,8 @@ if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 -else case e in #( - e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else $as_nop + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS @@ -4270,8 +4195,7 @@ esac IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir - ;; -esac + fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install @@ -4303,8 +4227,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_MAKE+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$MAKE"; then +else $as_nop + if test -n "$MAKE"; then ac_cv_prog_MAKE="$MAKE" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4326,8 +4250,7 @@ done done IFS=$as_save_IFS -fi ;; -esac +fi fi MAKE=$ac_cv_prog_MAKE if test -n "$MAKE"; then @@ -4349,8 +4272,8 @@ ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat >conftest.make <<\_ACEOF +else $as_nop + cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' @@ -4362,8 +4285,7 @@ case `${MAKE-make} -f conftest.make 2>/dev/null` in *) eval ac_cv_prog_make_${ac_make}_set=no;; esac -rm -f conftest.make ;; -esac +rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 @@ -4383,8 +4305,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$RANLIB"; then +else $as_nop + if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4406,8 +4328,7 @@ done done IFS=$as_save_IFS -fi ;; -esac +fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then @@ -4429,8 +4350,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$ac_ct_RANLIB"; then +else $as_nop + if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4452,8 +4373,7 @@ done done IFS=$as_save_IFS -fi ;; -esac +fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then @@ -4503,8 +4423,8 @@ printf %s "checking whether $ac_prog works... " >&6; } if test ${ac_cv_prog_HEAD_1+y} then : printf %s "(cached) " >&6 -else case e in #( - e) +else $as_nop + if test -n "$HEAD_1"; then # Let the user override the test. ac_cv_prog_HEAD_1="$HEAD_1" @@ -4513,8 +4433,7 @@ else case e in #( ac_cv_prog_HEAD_1="$ac_prog" fi fi - ;; -esac + fi if test -n "$ac_cv_prog_HEAD_1"; then @@ -4550,8 +4469,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$STRIP"; then +else $as_nop + if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4573,8 +4492,7 @@ done done IFS=$as_save_IFS -fi ;; -esac +fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then @@ -4600,8 +4518,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$AWK"; then +else $as_nop + if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4623,8 +4541,7 @@ done done IFS=$as_save_IFS -fi ;; -esac +fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then @@ -4658,8 +4575,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_BASENAME+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$BASENAME"; then +else $as_nop + if test -n "$BASENAME"; then ac_cv_prog_BASENAME="$BASENAME" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4681,8 +4598,7 @@ done done IFS=$as_save_IFS -fi ;; -esac +fi fi BASENAME=$ac_cv_prog_BASENAME if test -n "$BASENAME"; then @@ -4712,8 +4628,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UNAME+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$UNAME"; then +else $as_nop + if test -n "$UNAME"; then ac_cv_prog_UNAME="$UNAME" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4735,8 +4651,7 @@ done done IFS=$as_save_IFS -fi ;; -esac +fi fi UNAME=$ac_cv_prog_UNAME if test -n "$UNAME"; then @@ -4757,9 +4672,8 @@ fi if test ${enable_strip+y} then : enableval=$enable_strip; enable_strip="$enableval" -else case e in #( - e) enable_strip="no" ;; -esac +else $as_nop + enable_strip="no" fi @@ -4791,16 +4705,15 @@ printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_build_alias=$build_alias +else $as_nop + ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } @@ -4827,15 +4740,14 @@ printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test "x$host_alias" = x; then +else $as_nop + if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } @@ -4862,8 +4774,8 @@ printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ +else $as_nop + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done @@ -4888,10 +4800,9 @@ do as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in #( +case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -4926,8 +4837,7 @@ IFS=$as_save_IFS else ac_cv_path_SED=$SED fi - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } @@ -4949,8 +4859,8 @@ if test -z "$CPP"; then if test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 -else case e in #( - e) # Double quotes because $CC needs to be expanded +else $as_nop + # Double quotes because $CC needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false @@ -4968,10 +4878,9 @@ _ACEOF if ac_fn_c_try_cpp "$LINENO" then : -else case e in #( - e) # Broken: fails on valid input. -continue ;; -esac +else $as_nop + # Broken: fails on valid input. +continue fi rm -f conftest.err conftest.i conftest.$ac_ext @@ -4985,16 +4894,15 @@ if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue -else case e in #( - e) # Passes both tests. +else $as_nop + # Passes both tests. ac_preproc_ok=: -break ;; -esac +break fi rm -f conftest.err conftest.i conftest.$ac_ext done -# Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : @@ -5003,8 +4911,7 @@ fi done ac_cv_prog_CPP=$CPP - ;; -esac + fi CPP=$ac_cv_prog_CPP else @@ -5027,10 +4934,9 @@ _ACEOF if ac_fn_c_try_cpp "$LINENO" then : -else case e in #( - e) # Broken: fails on valid input. -continue ;; -esac +else $as_nop + # Broken: fails on valid input. +continue fi rm -f conftest.err conftest.i conftest.$ac_ext @@ -5044,26 +4950,24 @@ if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue -else case e in #( - e) # Passes both tests. +else $as_nop + # Passes both tests. ac_preproc_ok=: -break ;; -esac +break fi rm -f conftest.err conftest.i conftest.$ac_ext done -# Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : -else case e in #( - e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See 'config.log' for more details" "$LINENO" 5; } ;; -esac +See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c @@ -5073,14 +4977,14 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep -e" >&5 -printf %s "checking for egrep -e... " >&6; } -if test ${ac_cv_path_EGREP_TRADITIONAL+y} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +printf %s "checking for grep that handles long lines and -e... " >&6; } +if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -z "$EGREP_TRADITIONAL"; then - ac_path_EGREP_TRADITIONAL_found=false +else $as_nop + if test -z "$GREP"; then + ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin @@ -5094,14 +4998,13 @@ do for ac_prog in grep ggrep do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP_TRADITIONAL="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP_TRADITIONAL" || continue -# Check for GNU ac_path_EGREP_TRADITIONAL and select it if it is found. - # Check for GNU $ac_path_EGREP_TRADITIONAL -case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #( + ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in *GNU*) - ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_found=:;; -#( + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -5110,14 +5013,14 @@ case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #( cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - printf "%s\n" 'EGREP_TRADITIONAL' >> "conftest.nl" - "$ac_path_EGREP_TRADITIONAL" -E 'EGR(EP|AC)_TRADITIONAL$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + printf "%s\n" 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_TRADITIONAL_max-0}; then + if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" - ac_path_EGREP_TRADITIONAL_max=$ac_count + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break @@ -5125,24 +5028,35 @@ case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #( rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac - $ac_path_EGREP_TRADITIONAL_found && break 3 + $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP_TRADITIONAL"; then - : + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else - ac_cv_path_EGREP_TRADITIONAL=$EGREP_TRADITIONAL + ac_cv_path_GREP=$GREP +fi + fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +printf "%s\n" "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + - if test "$ac_cv_path_EGREP_TRADITIONAL" +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +printf %s "checking for egrep... " >&6; } +if test ${ac_cv_path_EGREP+y} then : - ac_cv_path_EGREP_TRADITIONAL="$ac_cv_path_EGREP_TRADITIONAL -E" -else case e in #( - e) if test -z "$EGREP_TRADITIONAL"; then - ac_path_EGREP_TRADITIONAL_found=false + printf %s "(cached) " >&6 +else $as_nop + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin @@ -5156,14 +5070,13 @@ do for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP_TRADITIONAL="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP_TRADITIONAL" || continue -# Check for GNU ac_path_EGREP_TRADITIONAL and select it if it is found. - # Check for GNU $ac_path_EGREP_TRADITIONAL -case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #( + ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in *GNU*) - ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_found=:;; -#( + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -5172,14 +5085,14 @@ case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #( cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - printf "%s\n" 'EGREP_TRADITIONAL' >> "conftest.nl" - "$ac_path_EGREP_TRADITIONAL" 'EGR(EP|AC)_TRADITIONAL$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + printf "%s\n" 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_TRADITIONAL_max-0}; then + if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" - ac_path_EGREP_TRADITIONAL_max=$ac_count + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break @@ -5187,25 +5100,24 @@ case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #( rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac - $ac_path_EGREP_TRADITIONAL_found && break 3 + $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP_TRADITIONAL"; then + if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else - ac_cv_path_EGREP_TRADITIONAL=$EGREP_TRADITIONAL + ac_cv_path_EGREP=$EGREP fi - ;; -esac -fi ;; -esac + + fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP_TRADITIONAL" >&5 -printf "%s\n" "$ac_cv_path_EGREP_TRADITIONAL" >&6; } - EGREP_TRADITIONAL=$ac_cv_path_EGREP_TRADITIONAL +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +printf "%s\n" "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + # FIXME: this needs to be fixed so that it works on IRIX @@ -5219,21 +5131,15 @@ printf %s "checking for library containing gethostbyname... " >&6; } if test ${ac_cv_search_gethostbyname+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_func_search_save_LIBS=$LIBS +else $as_nop + ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. - The 'extern "C"' is for builds by C++ compilers; - although this is not generally supported in C code supporting it here - has little cost and some practical benefit (sr 110532). */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyname (void); + builtin and then its argument prototype would still apply. */ +char gethostbyname (); int main (void) { @@ -5264,13 +5170,11 @@ done if test ${ac_cv_search_gethostbyname+y} then : -else case e in #( - e) ac_cv_search_gethostbyname=no ;; -esac +else $as_nop + ac_cv_search_gethostbyname=no fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS ;; -esac +LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5 printf "%s\n" "$ac_cv_search_gethostbyname" >&6; } @@ -5286,21 +5190,15 @@ printf %s "checking for library containing socket... " >&6; } if test ${ac_cv_search_socket+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_func_search_save_LIBS=$LIBS +else $as_nop + ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. - The 'extern "C"' is for builds by C++ compilers; - although this is not generally supported in C code supporting it here - has little cost and some practical benefit (sr 110532). */ -#ifdef __cplusplus -extern "C" -#endif -char socket (void); + builtin and then its argument prototype would still apply. */ +char socket (); int main (void) { @@ -5331,13 +5229,11 @@ done if test ${ac_cv_search_socket+y} then : -else case e in #( - e) ac_cv_search_socket=no ;; -esac +else $as_nop + ac_cv_search_socket=no fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS ;; -esac +LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 printf "%s\n" "$ac_cv_search_socket" >&6; } @@ -5346,29 +5242,23 @@ if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" -else case e in #( - e) +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5 printf %s "checking for socket in -lsocket... " >&6; } if test ${ac_cv_lib_socket_socket+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_check_lib_save_LIBS=$LIBS +else $as_nop + ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket -lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. - The 'extern "C"' is for builds by C++ compilers; - although this is not generally supported in C code supporting it here - has little cost and some practical benefit (sr 110532). */ -#ifdef __cplusplus -extern "C" -#endif -char socket (void); + builtin and then its argument prototype would still apply. */ +char socket (); int main (void) { @@ -5380,14 +5270,12 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_socket_socket=yes -else case e in #( - e) ac_cv_lib_socket_socket=no ;; -esac +else $as_nop + ac_cv_lib_socket_socket=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS ;; -esac +LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5 printf "%s\n" "$ac_cv_lib_socket_socket" >&6; } @@ -5395,8 +5283,7 @@ if test "x$ac_cv_lib_socket_socket" = xyes then : LIBS="-lsocket -lnsl $LIBS" fi - ;; -esac + fi @@ -5440,14 +5327,8 @@ printf %s "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. - The 'extern "C"' is for builds by C++ compilers; - although this is not generally supported in C code supporting it here - has little cost and some practical benefit (sr 110532). */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_join (void); + builtin and then its argument prototype would still apply. */ +char pthread_join (); int main (void) { @@ -5541,7 +5422,7 @@ case $host_os in _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP_TRADITIONAL "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1 + $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1 then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 printf "%s\n" "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} @@ -5571,8 +5452,8 @@ printf %s "checking whether $CC is Clang... " >&6; } if test ${ax_cv_PTHREAD_CLANG+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ax_cv_PTHREAD_CLANG=no +else $as_nop + ax_cv_PTHREAD_CLANG=no # Note that Autoconf sets GCC=yes for Clang as well as GCC if test "x$GCC" = "xyes"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -5584,15 +5465,14 @@ else case e in #( _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP_TRADITIONAL "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1 + $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1 then : ax_cv_PTHREAD_CLANG=yes fi rm -rf conftest* fi - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 printf "%s\n" "$ax_cv_PTHREAD_CLANG" >&6; } @@ -5642,9 +5522,8 @@ esac if test "x$ax_pthread_check_macro" = "x--" then : ax_pthread_check_cond=0 -else case e in #( - e) ax_pthread_check_cond="!defined($ax_pthread_check_macro)" ;; -esac +else $as_nop + ax_pthread_check_cond="!defined($ax_pthread_check_macro)" fi @@ -5678,8 +5557,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ax_pthread_config+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$ax_pthread_config"; then +else $as_nop + if test -n "$ax_pthread_config"; then ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5702,8 +5581,7 @@ done IFS=$as_save_IFS test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no" -fi ;; -esac +fi fi ax_pthread_config=$ac_cv_prog_ax_pthread_config if test -n "$ax_pthread_config"; then @@ -5836,8 +5714,8 @@ printf %s "checking whether Clang needs flag to prevent \"argument unused\" warn if test ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown +else $as_nop + ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown # Create an alternate version of $ac_link that compiles and # links in two steps (.c -> .o, .o -> exe) instead of one # (.c -> exe), because the warning occurs only in the second @@ -5883,8 +5761,7 @@ then : ax_pthread_try=no fi ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 printf "%s\n" "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } @@ -5911,8 +5788,8 @@ printf %s "checking for joinable pthread attribute... " >&6; } if test ${ax_cv_PTHREAD_JOINABLE_ATTR+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ax_cv_PTHREAD_JOINABLE_ATTR=unknown +else $as_nop + ax_cv_PTHREAD_JOINABLE_ATTR=unknown for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -5932,8 +5809,7 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 printf "%s\n" "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } @@ -5953,15 +5829,14 @@ printf %s "checking whether more special flags are required for pthreads... " >& if test ${ax_cv_PTHREAD_SPECIAL_FLAGS+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ax_cv_PTHREAD_SPECIAL_FLAGS=no +else $as_nop + ax_cv_PTHREAD_SPECIAL_FLAGS=no case $host_os in solaris*) ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS" ;; esac - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 printf "%s\n" "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } @@ -5977,8 +5852,8 @@ printf %s "checking for PTHREAD_PRIO_INHERIT... " >&6; } if test ${ax_cv_PTHREAD_PRIO_INHERIT+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -5993,14 +5868,12 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_PTHREAD_PRIO_INHERIT=yes -else case e in #( - e) ax_cv_PTHREAD_PRIO_INHERIT=no ;; -esac +else $as_nop + ax_cv_PTHREAD_PRIO_INHERIT=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 printf "%s\n" "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } @@ -6050,8 +5923,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PTHREAD_CC+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$PTHREAD_CC"; then +else $as_nop + if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6073,8 +5946,7 @@ done done IFS=$as_save_IFS -fi ;; -esac +fi fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then @@ -6101,8 +5973,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PTHREAD_CXX+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$PTHREAD_CXX"; then +else $as_nop + if test -n "$PTHREAD_CXX"; then ac_cv_prog_PTHREAD_CXX="$PTHREAD_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6124,8 +5996,7 @@ done done IFS=$as_save_IFS -fi ;; -esac +fi fi PTHREAD_CXX=$ac_cv_prog_PTHREAD_CXX if test -n "$PTHREAD_CXX"; then @@ -6182,21 +6053,15 @@ printf %s "checking for library containing dlopen... " >&6; } if test ${ac_cv_search_dlopen+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_func_search_save_LIBS=$LIBS +else $as_nop + ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. - The 'extern "C"' is for builds by C++ compilers; - although this is not generally supported in C code supporting it here - has little cost and some practical benefit (sr 110532). */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (void); + builtin and then its argument prototype would still apply. */ +char dlopen (); int main (void) { @@ -6227,13 +6092,11 @@ done if test ${ac_cv_search_dlopen+y} then : -else case e in #( - e) ac_cv_search_dlopen=no ;; -esac +else $as_nop + ac_cv_search_dlopen=no fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS ;; -esac +LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 printf "%s\n" "$ac_cv_search_dlopen" >&6; } @@ -6249,22 +6112,16 @@ printf %s "checking for tan in -lm... " >&6; } if test ${ac_cv_lib_m_tan+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_check_lib_save_LIBS=$LIBS +else $as_nop + ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. - The 'extern "C"' is for builds by C++ compilers; - although this is not generally supported in C code supporting it here - has little cost and some practical benefit (sr 110532). */ -#ifdef __cplusplus -extern "C" -#endif -char tan (void); + builtin and then its argument prototype would still apply. */ +char tan (); int main (void) { @@ -6276,14 +6133,12 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_m_tan=yes -else case e in #( - e) ac_cv_lib_m_tan=no ;; -esac +else $as_nop + ac_cv_lib_m_tan=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS ;; -esac +LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_tan" >&5 printf "%s\n" "$ac_cv_lib_m_tan" >&6; } @@ -6298,22 +6153,16 @@ printf %s "checking for shl_load in -ldld... " >&6; } if test ${ac_cv_lib_dld_shl_load+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_check_lib_save_LIBS=$LIBS +else $as_nop + ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. - The 'extern "C"' is for builds by C++ compilers; - although this is not generally supported in C code supporting it here - has little cost and some practical benefit (sr 110532). */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (void); + builtin and then its argument prototype would still apply. */ +char shl_load (); int main (void) { @@ -6325,14 +6174,12 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_shl_load=yes -else case e in #( - e) ac_cv_lib_dld_shl_load=no ;; -esac +else $as_nop + ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS ;; -esac +LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } @@ -6355,15 +6202,14 @@ printf %s "checking target system type... " >&6; } if test ${ac_cv_target+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test "x$target_alias" = x; then +else $as_nop + if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5 fi - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 printf "%s\n" "$ac_cv_target" >&6; } @@ -6397,9 +6243,8 @@ printf %s "checking system type... " >&6; } if test ${egg_cv_var_system_type+y} then : printf %s "(cached) " >&6 -else case e in #( - e) egg_cv_var_system_type=`$UNAME -s` ;; -esac +else $as_nop + egg_cv_var_system_type=`$UNAME -s` fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $egg_cv_var_system_type" >&5 printf "%s\n" "$egg_cv_var_system_type" >&6; } @@ -6408,9 +6253,8 @@ printf %s "checking system release... " >&6; } if test ${egg_cv_var_system_release+y} then : printf %s "(cached) " >&6 -else case e in #( - e) egg_cv_var_system_release=`$UNAME -r` ;; -esac +else $as_nop + egg_cv_var_system_release=`$UNAME -r` fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $egg_cv_var_system_release" >&5 printf "%s\n" "$egg_cv_var_system_release" >&6; } @@ -6844,14 +6688,14 @@ EOF ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | sed "$as_sed_sh"` + as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 printf %s "checking for $ac_hdr that defines DIR... " >&6; } if eval test \${$as_ac_Header+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> @@ -6868,12 +6712,10 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$as_ac_Header=yes" -else case e in #( - e) eval "$as_ac_Header=no" ;; -esac +else $as_nop + eval "$as_ac_Header=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -6881,7 +6723,7 @@ printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes" then : cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_hdr" | sed "$as_sed_cpp"` 1 +#define `printf "%s\n" "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break @@ -6895,21 +6737,15 @@ printf %s "checking for library containing opendir... " >&6; } if test ${ac_cv_search_opendir+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_func_search_save_LIBS=$LIBS +else $as_nop + ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. - The 'extern "C"' is for builds by C++ compilers; - although this is not generally supported in C code supporting it here - has little cost and some practical benefit (sr 110532). */ -#ifdef __cplusplus -extern "C" -#endif -char opendir (void); + builtin and then its argument prototype would still apply. */ +char opendir (); int main (void) { @@ -6940,13 +6776,11 @@ done if test ${ac_cv_search_opendir+y} then : -else case e in #( - e) ac_cv_search_opendir=no ;; -esac +else $as_nop + ac_cv_search_opendir=no fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS ;; -esac +LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 printf "%s\n" "$ac_cv_search_opendir" >&6; } @@ -6963,21 +6797,15 @@ printf %s "checking for library containing opendir... " >&6; } if test ${ac_cv_search_opendir+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_func_search_save_LIBS=$LIBS +else $as_nop + ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. - The 'extern "C"' is for builds by C++ compilers; - although this is not generally supported in C code supporting it here - has little cost and some practical benefit (sr 110532). */ -#ifdef __cplusplus -extern "C" -#endif -char opendir (void); + builtin and then its argument prototype would still apply. */ +char opendir (); int main (void) { @@ -7008,13 +6836,11 @@ done if test ${ac_cv_search_opendir+y} then : -else case e in #( - e) ac_cv_search_opendir=no ;; -esac +else $as_nop + ac_cv_search_opendir=no fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS ;; -esac +LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 printf "%s\n" "$ac_cv_search_opendir" >&6; } @@ -7139,8 +6965,8 @@ printf %s "checking for an ANSI C-conforming const... " >&6; } if test ${ac_cv_c_const+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -7204,12 +7030,10 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_const=yes -else case e in #( - e) ac_cv_c_const=no ;; -esac +else $as_nop + ac_cv_c_const=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 printf "%s\n" "$ac_cv_c_const" >&6; } @@ -7224,8 +7048,8 @@ printf %s "checking whether byte ordering is bigendian... " >&6; } if test ${ac_cv_c_bigendian+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_cv_c_bigendian=unknown +else $as_nop + ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7271,8 +7095,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext int main (void) { -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \\ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \\ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif @@ -7303,9 +7127,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_bigendian=yes -else case e in #( - e) ac_cv_c_bigendian=no ;; -esac +else $as_nop + ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi @@ -7349,9 +7172,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_bigendian=yes -else case e in #( - e) ac_cv_c_bigendian=no ;; -esac +else $as_nop + ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi @@ -7378,23 +7200,22 @@ unsigned short int ascii_mm[] = int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } - int - main (int argc, char **argv) - { - /* Intimidate the compiler so that it does not - optimize the arrays away. */ - char *p = argv[0]; - ascii_mm[1] = *p++; ebcdic_mm[1] = *p++; - ascii_ii[1] = *p++; ebcdic_ii[1] = *p++; - return use_ascii (argc) == use_ebcdic (*p); - } + extern int foo; + +int +main (void) +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} _ACEOF -if ac_fn_c_try_link "$LINENO" +if ac_fn_c_try_compile "$LINENO" then : - if grep BIGenDianSyS conftest$ac_exeext >/dev/null; then + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi - if grep LiTTleEnDian conftest$ac_exeext >/dev/null ; then + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else @@ -7403,10 +7224,9 @@ then : fi fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int @@ -7429,17 +7249,14 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_c_bigendian=no -else case e in #( - e) ac_cv_c_bigendian=yes ;; -esac +else $as_nop + ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac + conftest.$ac_objext conftest.beam conftest.$ac_ext fi - fi ;; -esac + fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 printf "%s\n" "$ac_cv_c_bigendian" >&6; } @@ -7464,8 +7281,8 @@ printf %s "checking for inline... " >&6; } if test ${ac_cv_c_inline+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_cv_c_inline=no +else $as_nop + ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7483,8 +7300,7 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$ac_cv_c_inline" != no && break done - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 printf "%s\n" "$ac_cv_c_inline" >&6; } @@ -7510,8 +7326,8 @@ printf %s "checking for flexible array members... " >&6; } if test ${ac_cv_c_flexmember+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -7524,9 +7340,7 @@ int m = getchar (); struct s *p = (struct s *) malloc (offsetof (struct s, d) + m * sizeof (double)); p->d[0] = 0.0; - m = p->d != (double *) NULL; - free (p); - return m; + return p->d != (double *) NULL; ; return 0; } @@ -7534,12 +7348,10 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_flexmember=yes -else case e in #( - e) ac_cv_c_flexmember=no ;; -esac +else $as_nop + ac_cv_c_flexmember=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_flexmember" >&5 printf "%s\n" "$ac_cv_c_flexmember" >&6; } @@ -7559,8 +7371,8 @@ then : printf "%s\n" "#define HAVE_INTPTR_T 1" >>confdefs.h -else case e in #( - e) for ac_type in 'int' 'long int' 'long long int'; do +else $as_nop + for ac_type in 'int' 'long int' 'long long int'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default @@ -7584,8 +7396,7 @@ printf "%s\n" "#define intptr_t $ac_type" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test -z "$ac_type" && break - done ;; -esac + done fi @@ -7595,8 +7406,8 @@ fi if test "x$ac_cv_type_pid_t" = xyes then : -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _WIN64 && !defined __CYGWIN__ @@ -7615,16 +7426,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_pid_type='int' -else case e in #( - e) ac_pid_type='__int64' ;; -esac +else $as_nop + ac_pid_type='__int64' fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h - ;; -esac + fi @@ -7632,11 +7441,10 @@ ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes then : -else case e in #( - e) +else $as_nop + printf "%s\n" "#define size_t unsigned int" >>confdefs.h - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 @@ -7644,8 +7452,8 @@ printf %s "checking whether struct tm is in sys/time.h or time.h... " >&6; } if test ${ac_cv_struct_tm+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -7663,12 +7471,10 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_struct_tm=time.h -else case e in #( - e) ac_cv_struct_tm=sys/time.h ;; -esac +else $as_nop + ac_cv_struct_tm=sys/time.h fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 printf "%s\n" "$ac_cv_struct_tm" >&6; } @@ -7683,8 +7489,8 @@ printf %s "checking for $CC options needed to detect all undeclared functions... if test ${ac_cv_c_undeclared_builtin_options+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_save_CFLAGS=$CFLAGS +else $as_nop + ac_save_CFLAGS=$CFLAGS ac_cv_c_undeclared_builtin_options='cannot detect' for ac_arg in '' -fno-builtin; do CFLAGS="$ac_save_CFLAGS $ac_arg" @@ -7703,8 +7509,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else case e in #( - e) # This test program should compile successfully. +else $as_nop + # This test program should compile successfully. # No library function is consistently available on # freestanding implementations, so test against a dummy # declaration. Include always-available headers on the @@ -7732,29 +7538,26 @@ then : if test x"$ac_arg" = x then : ac_cv_c_undeclared_builtin_options='none needed' -else case e in #( - e) ac_cv_c_undeclared_builtin_options=$ac_arg ;; -esac +else $as_nop + ac_cv_c_undeclared_builtin_options=$ac_arg fi break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done CFLAGS=$ac_save_CFLAGS - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } case $ac_cv_c_undeclared_builtin_options in #( 'cannot detect') : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot make $CC report undeclared builtins -See 'config.log' for more details" "$LINENO" 5; } ;; #( +See \`config.log' for more details" "$LINENO" 5; } ;; #( 'none needed') : ac_c_undeclared_builtin_options='' ;; #( *) : @@ -7783,9 +7586,8 @@ else if test "x$ac_cv_have_decl_tzname" = xyes then : ac_have_decl=1 -else case e in #( - e) ac_have_decl=0 ;; -esac +else $as_nop + ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_TZNAME $ac_have_decl" >>confdefs.h @@ -7794,8 +7596,8 @@ printf %s "checking for tzname... " >&6; } if test ${ac_cv_var_tzname+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if !HAVE_DECL_TZNAME @@ -7813,13 +7615,11 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_var_tzname=yes -else case e in #( - e) ac_cv_var_tzname=no ;; -esac +else $as_nop + ac_cv_var_tzname=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext ;; -esac + conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5 printf "%s\n" "$ac_cv_var_tzname" >&6; } @@ -7835,8 +7635,8 @@ printf %s "checking for working volatile... " >&6; } if test ${ac_cv_c_volatile+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -7853,12 +7653,10 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_volatile=yes -else case e in #( - e) ac_cv_c_volatile=no ;; -esac +else $as_nop + ac_cv_c_volatile=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5 printf "%s\n" "$ac_cv_c_volatile" >&6; } @@ -7873,8 +7671,8 @@ printf %s "checking for socklen_t... " >&6; } if test ${ac_cv_ax_type_socklen_t+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -7889,13 +7687,11 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_ax_type_socklen_t=yes -else case e in #( - e) ac_cv_ax_type_socklen_t=no ;; -esac +else $as_nop + ac_cv_ax_type_socklen_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_ax_type_socklen_t" >&5 printf "%s\n" "$ac_cv_ax_type_socklen_t" >&6; } @@ -7917,8 +7713,8 @@ ac_stdint_h=`echo eggint.h` if test ${ac_cv_header_stdint_t+y} then : printf %s "(cached) " >&6 -else case e in #( - e) +else $as_nop + old_CXXFLAGS="$CXXFLAGS" ; CXXFLAGS="" old_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS="" old_CFLAGS="$CFLAGS" ; CFLAGS="" @@ -7937,9 +7733,8 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_stdint_result="(assuming C99 compatible system)" ac_cv_header_stdint_t="stdint.h"; -else case e in #( - e) ac_cv_header_stdint_t="" ;; -esac +else $as_nop + ac_cv_header_stdint_t="" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "$GCC" = "yes" && test ".$ac_cv_header_stdint_t" = "."; then @@ -7964,8 +7759,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi CXXFLAGS="$old_CXXFLAGS" CPPFLAGS="$old_CPPFLAGS" -CFLAGS="$old_CFLAGS" ;; -esac +CFLAGS="$old_CFLAGS" fi @@ -7997,8 +7791,8 @@ printf %s "checking for stdint uintptr_t... " >&6; } if test ${ac_cv_header_stdint_x+y} then : printf %s "(cached) " >&6 -else case e in #( - e) +else $as_nop + ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: (..)" >&5 printf "%s\n" "(..)" >&6; } @@ -8011,9 +7805,8 @@ printf "%s\n" "(..)" >&6; } if test "x$ac_cv_type_uintptr_t" = xyes then : ac_cv_header_stdint_x=$i -else case e in #( - e) continue ;; -esac +else $as_nop + continue fi ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include<$i> @@ -8021,9 +7814,8 @@ fi if test "x$ac_cv_type_uint64_t" = xyes then : and64="/uint64_t" -else case e in #( - e) and64="" ;; -esac +else $as_nop + and64="" fi ac_cv_stdint_result="(seen uintptr_t$and64 in $i)" @@ -8031,8 +7823,7 @@ fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdint uintptr_t" >&5 printf %s "checking for stdint uintptr_t... " >&6; } - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_x" >&5 printf "%s\n" "$ac_cv_header_stdint_x" >&6; } @@ -8045,8 +7836,8 @@ printf %s "checking for stdint uint32_t... " >&6; } if test ${ac_cv_header_stdint_o+y} then : printf %s "(cached) " >&6 -else case e in #( - e) +else $as_nop + ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: (..)" >&5 printf "%s\n" "(..)" >&6; } @@ -8059,9 +7850,8 @@ printf "%s\n" "(..)" >&6; } if test "x$ac_cv_type_uint32_t" = xyes then : ac_cv_header_stdint_o=$i -else case e in #( - e) continue ;; -esac +else $as_nop + continue fi ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include<$i> @@ -8069,9 +7859,8 @@ fi if test "x$ac_cv_type_uint64_t" = xyes then : and64="/uint64_t" -else case e in #( - e) and64="" ;; -esac +else $as_nop + and64="" fi ac_cv_stdint_result="(seen uint32_t$and64 in $i)" @@ -8080,8 +7869,7 @@ fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdint uint32_t" >&5 printf %s "checking for stdint uint32_t... " >&6; } - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_o" >&5 printf "%s\n" "$ac_cv_header_stdint_o" >&6; } @@ -8096,8 +7884,8 @@ printf %s "checking for stdint u_int32_t... " >&6; } if test ${ac_cv_header_stdint_u+y} then : printf %s "(cached) " >&6 -else case e in #( - e) +else $as_nop + ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: (..)" >&5 printf "%s\n" "(..)" >&6; } @@ -8109,9 +7897,8 @@ printf "%s\n" "(..)" >&6; } if test "x$ac_cv_type_u_int32_t" = xyes then : ac_cv_header_stdint_u=$i -else case e in #( - e) continue ;; -esac +else $as_nop + continue fi ac_fn_c_check_type "$LINENO" "u_int64_t" "ac_cv_type_u_int64_t" "#include<$i> @@ -8119,9 +7906,8 @@ fi if test "x$ac_cv_type_u_int64_t" = xyes then : and64="/u_int64_t" -else case e in #( - e) and64="" ;; -esac +else $as_nop + and64="" fi ac_cv_stdint_result="(seen u_int32_t$and64 in $i)" @@ -8130,8 +7916,7 @@ fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdint u_int32_t" >&5 printf %s "checking for stdint u_int32_t... " >&6; } - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_u" >&5 printf "%s\n" "$ac_cv_header_stdint_u" >&6; } @@ -8146,30 +7931,28 @@ printf "%s\n" "(..)" >&6; } # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of char" >&5 printf %s "checking size of char... " >&6; } if test ${ac_cv_sizeof_char+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default" +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default" then : -else case e in #( - e) if test "$ac_cv_type_char" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +else $as_nop + if test "$ac_cv_type_char" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (char) -See 'config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_char=0 - fi ;; -esac + fi fi - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5 printf "%s\n" "$ac_cv_sizeof_char" >&6; } @@ -8181,30 +7964,28 @@ printf "%s\n" "#define SIZEOF_CHAR $ac_cv_sizeof_char" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 printf %s "checking size of short... " >&6; } if test ${ac_cv_sizeof_short+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default" +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default" then : -else case e in #( - e) if test "$ac_cv_type_short" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +else $as_nop + if test "$ac_cv_type_short" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (short) -See 'config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_short=0 - fi ;; -esac + fi fi - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 printf "%s\n" "$ac_cv_sizeof_short" >&6; } @@ -8216,30 +7997,28 @@ printf "%s\n" "#define SIZEOF_SHORT $ac_cv_sizeof_short" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 printf %s "checking size of int... " >&6; } if test ${ac_cv_sizeof_int+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default" +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default" then : -else case e in #( - e) if test "$ac_cv_type_int" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +else $as_nop + if test "$ac_cv_type_int" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) -See 'config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_int=0 - fi ;; -esac + fi fi - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 printf "%s\n" "$ac_cv_sizeof_int" >&6; } @@ -8251,30 +8030,28 @@ printf "%s\n" "#define SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 printf %s "checking size of long... " >&6; } if test ${ac_cv_sizeof_long+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default" +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default" then : -else case e in #( - e) if test "$ac_cv_type_long" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +else $as_nop + if test "$ac_cv_type_long" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) -See 'config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long=0 - fi ;; -esac + fi fi - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 printf "%s\n" "$ac_cv_sizeof_long" >&6; } @@ -8286,30 +8063,28 @@ printf "%s\n" "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void*" >&5 printf %s "checking size of void*... " >&6; } if test ${ac_cv_sizeof_voidp+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp" "$ac_includes_default" +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp" "$ac_includes_default" then : -else case e in #( - e) if test "$ac_cv_type_voidp" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +else $as_nop + if test "$ac_cv_type_voidp" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (void*) -See 'config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_voidp=0 - fi ;; -esac + fi fi - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_voidp" >&5 printf "%s\n" "$ac_cv_sizeof_voidp" >&6; } @@ -8483,8 +8258,8 @@ printf %s "checking types of arguments for select... " >&6; } if test ${ac_cv_func_select_args+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_cv_func_select_args='int,int *,struct timeval *' +else $as_nop + ac_cv_func_select_args='int,int *,struct timeval *' for ac_arg234 in 'fd_set *' 'int *' 'void *'; do for ac_arg1 in 'int' 'size_t' 'unsigned long int' 'unsigned int'; do for ac_arg5 in 'struct timeval *' 'const struct timeval *'; do @@ -8516,8 +8291,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done done done - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_select_args" >&5 printf "%s\n" "$ac_cv_func_select_args" >&6; } @@ -8544,12 +8318,12 @@ rm -rf conftest* printf %s "checking for b64_ntop... " >&6; } if test "$cross_compiling" = yes then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling -See 'config.log' for more details" "$LINENO" 5; } -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -8567,14 +8341,12 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : found_b64_ntop=yes -else case e in #( - e) found_b64_ntop=no - ;; -esac +else $as_nop + found_b64_ntop=no + fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac + conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "x$found_b64_ntop" = xno; then @@ -8587,12 +8359,12 @@ printf %s "checking for b64_ntop with -lresolv... " >&6; } LIBS="$LIBS -lresolv" if test "$cross_compiling" = yes then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling -See 'config.log' for more details" "$LINENO" 5; } -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -8610,14 +8382,12 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : found_b64_ntop=yes -else case e in #( - e) found_b64_ntop=no - ;; -esac +else $as_nop + found_b64_ntop=no + fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac + conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "x$found_b64_ntop" = xno; then @@ -8631,12 +8401,12 @@ printf %s "checking for b64_ntop with -lnetwork... " >&6; } LIBS="-lnetwork" if test "$cross_compiling" = yes then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling -See 'config.log' for more details" "$LINENO" 5; } -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -8654,14 +8424,12 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : found_b64_ntop=yes -else case e in #( - e) found_b64_ntop=no - ;; -esac +else $as_nop + found_b64_ntop=no + fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac + conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "x$found_b64_ntop" = xno; then @@ -8707,8 +8475,8 @@ printf %s "checking for working mmap... " >&6; } if test ${ac_cv_func_mmap_fixed_mapped+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test "$cross_compiling" = yes +else $as_nop + if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on platforms where we know the result. @@ -8716,8 +8484,8 @@ then : # If we don't know, assume the worst. *) ac_cv_func_mmap_fixed_mapped=no ;; esac -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ @@ -8738,21 +8506,21 @@ $ac_includes_default VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get - propagated back to all the places they're supposed to be. */ + propagated back to all the places they're supposed to be. + + Grep wants private fixed already mapped. + The main things grep needs to know about mmap are: + * does it exist and is it safe to write into the mmap'd area + * how to use it (BSD variants) */ #include #include -#ifndef getpagesize -/* Prefer sysconf to the legacy getpagesize function, as getpagesize has - been removed from POSIX and is limited to page sizes that fit in 'int'. */ +/* This mess was copied from the GNU getpagesize.h. */ +#ifndef HAVE_GETPAGESIZE # ifdef _SC_PAGESIZE -# define getpagesize() sysconf (_SC_PAGESIZE) -# elif defined _SC_PAGE_SIZE -# define getpagesize() sysconf (_SC_PAGE_SIZE) -# elif HAVE_GETPAGESIZE -int getpagesize (); -# else +# define getpagesize() sysconf(_SC_PAGESIZE) +# else /* no _SC_PAGESIZE */ # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE @@ -8776,15 +8544,16 @@ int getpagesize (); # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ -# endif -#endif +# endif /* no _SC_PAGESIZE */ + +#endif /* no HAVE_GETPAGESIZE */ int main (void) { char *data, *data2, *data3; const char *cdata2; - long i, pagesize; + int i, pagesize; int fd, fd2; pagesize = getpagesize (); @@ -8818,7 +8587,8 @@ main (void) if (*(data2 + i)) return 7; close (fd2); - /* 'return 8;' not currently used. */ + if (munmap (data2, pagesize)) + return 8; /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that @@ -8855,16 +8625,13 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_mmap_fixed_mapped=yes -else case e in #( - e) ac_cv_func_mmap_fixed_mapped=no ;; -esac +else $as_nop + ac_cv_func_mmap_fixed_mapped=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac + conftest.$ac_objext conftest.beam conftest.$ac_ext fi - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 printf "%s\n" "$ac_cv_func_mmap_fixed_mapped" >&6; } @@ -8896,8 +8663,8 @@ cat >confcache <<\_ACEOF # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # -# 'ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* 'ac_cv_foo' will be assigned the +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF @@ -8927,14 +8694,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # 'set' does not quote correctly, so add quotes: double-quote + # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) - # 'set' quotes correctly as required by POSIX, so do not add quotes. + # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | @@ -9128,8 +8895,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CYGPATH+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$CYGPATH"; then +else $as_nop + if test -n "$CYGPATH"; then ac_cv_prog_CYGPATH="$CYGPATH" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -9152,8 +8919,7 @@ done IFS=$as_save_IFS test -z "$ac_cv_prog_CYGPATH" && ac_cv_prog_CYGPATH="echo" -fi ;; -esac +fi fi CYGPATH=$ac_cv_prog_CYGPATH if test -n "$CYGPATH"; then @@ -9241,8 +9007,8 @@ printf %s "checking for Tcl configuration... " >&6; } if test ${ac_cv_c_tclconfig+y} then : printf %s "(cached) " >&6 -else case e in #( - e) +else $as_nop + # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then @@ -9354,8 +9120,7 @@ printf "%s\n" "$as_me: WARNING: --with-tcl argument should refer to directory co fi done fi - ;; -esac + fi @@ -9463,8 +9228,8 @@ then : TEA_PLATFORM="unix" CYGPATH=echo -else case e in #( - e) +else $as_nop + TEA_PLATFORM="windows" # Extract the first word of "cygpath", so it can be a program name with args. set dummy cygpath; ac_word=$2 @@ -9473,8 +9238,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CYGPATH+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$CYGPATH"; then +else $as_nop + if test -n "$CYGPATH"; then ac_cv_prog_CYGPATH="$CYGPATH" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -9497,8 +9262,7 @@ done IFS=$as_save_IFS test -z "$ac_cv_prog_CYGPATH" && ac_cv_prog_CYGPATH="echo" -fi ;; -esac +fi fi CYGPATH=$ac_cv_prog_CYGPATH if test -n "$CYGPATH"; then @@ -9510,8 +9274,7 @@ printf "%s\n" "no" >&6; } fi - ;; -esac + fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CC=$hold_cc @@ -9549,9 +9312,8 @@ printf "%s\n" "#define BUILD_${PACKAGE_NAME} /**/" >>confdefs.h if test "x$ac_cv_func_sin" = xyes then : MATH_LIBS="" -else case e in #( - e) MATH_LIBS="-lm" ;; -esac +else $as_nop + MATH_LIBS="-lm" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -lieee" >&5 @@ -9559,8 +9321,8 @@ printf %s "checking for main in -lieee... " >&6; } if test ${ac_cv_lib_ieee_main+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_check_lib_save_LIBS=$LIBS +else $as_nop + ac_check_lib_save_LIBS=$LIBS LIBS="-lieee $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -9577,14 +9339,12 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_ieee_main=yes -else case e in #( - e) ac_cv_lib_ieee_main=no ;; -esac +else $as_nop + ac_cv_lib_ieee_main=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS ;; -esac +LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ieee_main" >&5 printf "%s\n" "$ac_cv_lib_ieee_main" >&6; } @@ -9604,8 +9364,8 @@ printf %s "checking for main in -linet... " >&6; } if test ${ac_cv_lib_inet_main+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_check_lib_save_LIBS=$LIBS +else $as_nop + ac_check_lib_save_LIBS=$LIBS LIBS="-linet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -9622,14 +9382,12 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_inet_main=yes -else case e in #( - e) ac_cv_lib_inet_main=no ;; -esac +else $as_nop + ac_cv_lib_inet_main=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS ;; -esac +LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_main" >&5 printf "%s\n" "$ac_cv_lib_inet_main" >&6; } @@ -9671,9 +9429,8 @@ fi if test "x$ac_cv_func_connect" = xyes then : tcl_checkSocket=0 -else case e in #( - e) tcl_checkSocket=1 ;; -esac +else $as_nop + tcl_checkSocket=1 fi if test "$tcl_checkSocket" = 1; then @@ -9681,28 +9438,22 @@ fi if test "x$ac_cv_func_setsockopt" = xyes then : -else case e in #( - e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for setsockopt in -lsocket" >&5 +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for setsockopt in -lsocket" >&5 printf %s "checking for setsockopt in -lsocket... " >&6; } if test ${ac_cv_lib_socket_setsockopt+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_check_lib_save_LIBS=$LIBS +else $as_nop + ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. - The 'extern "C"' is for builds by C++ compilers; - although this is not generally supported in C code supporting it here - has little cost and some practical benefit (sr 110532). */ -#ifdef __cplusplus -extern "C" -#endif -char setsockopt (void); + builtin and then its argument prototype would still apply. */ +char setsockopt (); int main (void) { @@ -9714,26 +9465,22 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_socket_setsockopt=yes -else case e in #( - e) ac_cv_lib_socket_setsockopt=no ;; -esac +else $as_nop + ac_cv_lib_socket_setsockopt=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS ;; -esac +LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_setsockopt" >&5 printf "%s\n" "$ac_cv_lib_socket_setsockopt" >&6; } if test "x$ac_cv_lib_socket_setsockopt" = xyes then : LIBS="$LIBS -lsocket" -else case e in #( - e) tcl_checkBoth=1 ;; -esac +else $as_nop + tcl_checkBoth=1 fi - ;; -esac + fi fi @@ -9744,9 +9491,8 @@ fi if test "x$ac_cv_func_accept" = xyes then : tcl_checkNsl=0 -else case e in #( - e) LIBS=$tk_oldLibs ;; -esac +else $as_nop + LIBS=$tk_oldLibs fi fi @@ -9754,28 +9500,22 @@ fi if test "x$ac_cv_func_gethostbyname" = xyes then : -else case e in #( - e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 printf %s "checking for gethostbyname in -lnsl... " >&6; } if test ${ac_cv_lib_nsl_gethostbyname+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_check_lib_save_LIBS=$LIBS +else $as_nop + ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. - The 'extern "C"' is for builds by C++ compilers; - although this is not generally supported in C code supporting it here - has little cost and some practical benefit (sr 110532). */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyname (void); + builtin and then its argument prototype would still apply. */ +char gethostbyname (); int main (void) { @@ -9787,14 +9527,12 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_nsl_gethostbyname=yes -else case e in #( - e) ac_cv_lib_nsl_gethostbyname=no ;; -esac +else $as_nop + ac_cv_lib_nsl_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS ;; -esac +LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 printf "%s\n" "$ac_cv_lib_nsl_gethostbyname" >&6; } @@ -9802,8 +9540,7 @@ if test "x$ac_cv_lib_nsl_gethostbyname" = xyes then : LIBS="$LIBS -lnsl" fi - ;; -esac + fi @@ -9919,90 +9656,80 @@ EOF if test ${enable_debug+y} then : enableval=$enable_debug; enable_debug="$enableval" -else case e in #( - e) enable_debug="auto" ;; -esac +else $as_nop + enable_debug="auto" fi # Check whether --enable-debug was given. if test ${enable_debug+y} then : enableval=$enable_debug; enable_debug="$enableval" -else case e in #( - e) enable_debug="auto" ;; -esac +else $as_nop + enable_debug="auto" fi # Check whether --enable-debug-assert was given. if test ${enable_debug_assert+y} then : enableval=$enable_debug_assert; enable_debug_assert="$enableval" -else case e in #( - e) enable_debug_assert="auto" ;; -esac +else $as_nop + enable_debug_assert="auto" fi # Check whether --enable-debug-assert was given. if test ${enable_debug_assert+y} then : enableval=$enable_debug_assert; enable_debug_assert="$enableval" -else case e in #( - e) enable_debug_assert="auto" ;; -esac +else $as_nop + enable_debug_assert="auto" fi # Check whether --enable-debug-mem was given. if test ${enable_debug_mem+y} then : enableval=$enable_debug_mem; enable_debug_mem="$enableval" -else case e in #( - e) enable_debug_mem="auto" ;; -esac +else $as_nop + enable_debug_mem="auto" fi # Check whether --enable-debug-mem was given. if test ${enable_debug_mem+y} then : enableval=$enable_debug_mem; enable_debug_mem="$enableval" -else case e in #( - e) enable_debug_mem="auto" ;; -esac +else $as_nop + enable_debug_mem="auto" fi # Check whether --enable-debug-dns was given. if test ${enable_debug_dns+y} then : enableval=$enable_debug_dns; enable_debug_dns="$enableval" -else case e in #( - e) enable_debug_dns="auto" ;; -esac +else $as_nop + enable_debug_dns="auto" fi # Check whether --enable-debug-dns was given. if test ${enable_debug_dns+y} then : enableval=$enable_debug_dns; enable_debug_dns="$enableval" -else case e in #( - e) enable_debug_dns="auto" ;; -esac +else $as_nop + enable_debug_dns="auto" fi # Check whether --enable-debug-context was given. if test ${enable_debug_context+y} then : enableval=$enable_debug_context; enable_debug_context="$enableval" -else case e in #( - e) enable_debug_context="auto" ;; -esac +else $as_nop + enable_debug_context="auto" fi # Check whether --enable-debug-context was given. if test ${enable_debug_context+y} then : enableval=$enable_debug_context; enable_debug_context="$enableval" -else case e in #( - e) enable_debug_context="auto" ;; -esac +else $as_nop + enable_debug_context="auto" fi @@ -10189,8 +9916,8 @@ printf %s "checking for system IPv6 support... " >&6; } if test ${egg_cv_var_ipv6_supported+y} then : printf %s "(cached) " >&6 -else case e in #( - e) +else $as_nop + if test "$cross_compiling" = yes then : @@ -10221,16 +9948,15 @@ then : egg_cv_var_ipv6_supported="yes" -else case e in #( - e) +else $as_nop + egg_cv_var_ipv6_supported="no" - ;; -esac + fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -10257,19 +9983,16 @@ then : egg_cv_var_ipv6_supported="yes" -else case e in #( - e) +else $as_nop + egg_cv_var_ipv6_supported="no" - ;; -esac + fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac + conftest.$ac_objext conftest.beam conftest.$ac_ext fi - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $egg_cv_var_ipv6_supported" >&5 printf "%s\n" "$egg_cv_var_ipv6_supported" >&6; } @@ -10280,9 +10003,8 @@ printf "%s\n" "$egg_cv_var_ipv6_supported" >&6; } if test ${enable_ipv6+y} then : enableval=$enable_ipv6; enable_ipv6="$enableval" -else case e in #( - e) enable_ipv6="$egg_cv_var_ipv6_supported" ;; -esac +else $as_nop + enable_ipv6="$egg_cv_var_ipv6_supported" fi # Check whether --enable-ipv6 was given. @@ -10318,9 +10040,8 @@ then : printf "%s\n" "#define HAVE_STRUCT_IN6_ADDR 1" >>confdefs.h egg_cv_var_have_in6_addr="yes" -else case e in #( - e) egg_cv_var_have_in6_addr="no" ;; -esac +else $as_nop + egg_cv_var_have_in6_addr="no" fi if test "$egg_cv_var_have_in6_addr" = "yes"; then @@ -10330,8 +10051,8 @@ printf %s "checking for the in6addr_any constant... " >&6; } if test ${egg_cv_var_have_in6addr_any+y} then : printf %s "(cached) " >&6 -else case e in #( - e) +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -10349,13 +10070,11 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : egg_cv_var_have_in6addr_any="yes" -else case e in #( - e) egg_cv_var_have_in6addr_any="no" ;; -esac +else $as_nop + egg_cv_var_have_in6addr_any="no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $egg_cv_var_have_in6addr_any" >&5 printf "%s\n" "$egg_cv_var_have_in6addr_any" >&6; } @@ -10370,8 +10089,8 @@ printf %s "checking for the in6addr_loopback constant... " >&6; } if test ${egg_cv_var_have_in6addr_loopback+y} then : printf %s "(cached) " >&6 -else case e in #( - e) +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -10389,13 +10108,11 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : egg_cv_var_have_in6addr_loopback="yes" -else case e in #( - e) egg_cv_var_have_in6addr_loopback="no" ;; -esac +else $as_nop + egg_cv_var_have_in6addr_loopback="no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $egg_cv_var_have_in6addr_loopback" >&5 printf "%s\n" "$egg_cv_var_have_in6addr_loopback" >&6; } @@ -10433,9 +10150,8 @@ printf %s "checking whether to enable TLS support... " >&6; } if test ${enable_tls+y} then : enableval=$enable_tls; tls_enabled="$enableval" -else case e in #( - e) tls_enabled="yes" ;; -esac +else $as_nop + tls_enabled="yes" fi @@ -10457,7 +10173,7 @@ then : CPP="$CPP -I$withval" for ac_header in openssl/ssl.h openssl/x509v3.h do : - as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | sed "$as_sed_sh"` + as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" " #ifdef CYGWIN_HACKS # ifndef __int64 @@ -10469,16 +10185,15 @@ ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" " if eval test \"x\$"$as_ac_Header"\" = x"yes" then : cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_header" | sed "$as_sed_cpp"` 1 +#define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF sslinc="-I$withval" -else case e in #( - e) +else $as_nop + as_fn_error $? "Invalid path to OpenSSL headers. $withval/openssl/ doesn't contain the required files." "$LINENO" 5 sslinc="" break - ;; -esac + fi done @@ -10506,22 +10221,16 @@ printf %s "checking for X509_digest in -lcrypto... " >&6; } if test ${ac_cv_lib_crypto_X509_digest+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_check_lib_save_LIBS=$LIBS +else $as_nop + ac_check_lib_save_LIBS=$LIBS LIBS="-lcrypto -L$withval -lssl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. - The 'extern "C"' is for builds by C++ compilers; - although this is not generally supported in C code supporting it here - has little cost and some practical benefit (sr 110532). */ -#ifdef __cplusplus -extern "C" -#endif -char X509_digest (void); + builtin and then its argument prototype would still apply. */ +char X509_digest (); int main (void) { @@ -10533,14 +10242,12 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_crypto_X509_digest=yes -else case e in #( - e) ac_cv_lib_crypto_X509_digest=no ;; -esac +else $as_nop + ac_cv_lib_crypto_X509_digest=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS ;; -esac +LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_X509_digest" >&5 printf "%s\n" "$ac_cv_lib_crypto_X509_digest" >&6; } @@ -10550,9 +10257,8 @@ then : LIBS="-lcrypto $LIBS" -else case e in #( - e) havessllib="no" ;; -esac +else $as_nop + havessllib="no" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SSL_accept in -lssl" >&5 @@ -10560,22 +10266,16 @@ printf %s "checking for SSL_accept in -lssl... " >&6; } if test ${ac_cv_lib_ssl_SSL_accept+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_check_lib_save_LIBS=$LIBS +else $as_nop + ac_check_lib_save_LIBS=$LIBS LIBS="-lssl -L$withval -lcrypto $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. - The 'extern "C"' is for builds by C++ compilers; - although this is not generally supported in C code supporting it here - has little cost and some practical benefit (sr 110532). */ -#ifdef __cplusplus -extern "C" -#endif -char SSL_accept (void); + builtin and then its argument prototype would still apply. */ +char SSL_accept (); int main (void) { @@ -10587,14 +10287,12 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_ssl_SSL_accept=yes -else case e in #( - e) ac_cv_lib_ssl_SSL_accept=no ;; -esac +else $as_nop + ac_cv_lib_ssl_SSL_accept=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS ;; -esac +LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ssl_SSL_accept" >&5 printf "%s\n" "$ac_cv_lib_ssl_SSL_accept" >&6; } @@ -10604,9 +10302,8 @@ then : LIBS="-lssl $LIBS" -else case e in #( - e) havessllib="no" ;; -esac +else $as_nop + havessllib="no" fi if test "$havessllib" = "no"; then @@ -10629,7 +10326,7 @@ fi if test -z "$SSL_INCLUDES"; then for ac_header in openssl/ssl.h openssl/x509v3.h do : - as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | sed "$as_sed_sh"` + as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" " #ifdef CYGWIN_HACKS # ifndef __int64 @@ -10641,12 +10338,11 @@ ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" " if eval test \"x\$"$as_ac_Header"\" = x"yes" then : cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_header" | sed "$as_sed_cpp"` 1 +#define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF -else case e in #( - e) havesslinc="no" ;; -esac +else $as_nop + havesslinc="no" fi done @@ -10657,22 +10353,16 @@ printf %s "checking for X509_digest in -lcrypto... " >&6; } if test ${ac_cv_lib_crypto_X509_digest+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_check_lib_save_LIBS=$LIBS +else $as_nop + ac_check_lib_save_LIBS=$LIBS LIBS="-lcrypto -lssl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. - The 'extern "C"' is for builds by C++ compilers; - although this is not generally supported in C code supporting it here - has little cost and some practical benefit (sr 110532). */ -#ifdef __cplusplus -extern "C" -#endif -char X509_digest (void); + builtin and then its argument prototype would still apply. */ +char X509_digest (); int main (void) { @@ -10684,14 +10374,12 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_crypto_X509_digest=yes -else case e in #( - e) ac_cv_lib_crypto_X509_digest=no ;; -esac +else $as_nop + ac_cv_lib_crypto_X509_digest=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS ;; -esac +LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_X509_digest" >&5 printf "%s\n" "$ac_cv_lib_crypto_X509_digest" >&6; } @@ -10701,9 +10389,8 @@ then : LIBS="-lcrypto $LIBS" -else case e in #( - e) havessllib="no" ;; -esac +else $as_nop + havessllib="no" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SSL_accept in -lssl" >&5 @@ -10711,22 +10398,16 @@ printf %s "checking for SSL_accept in -lssl... " >&6; } if test ${ac_cv_lib_ssl_SSL_accept+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_check_lib_save_LIBS=$LIBS +else $as_nop + ac_check_lib_save_LIBS=$LIBS LIBS="-lssl -lcrypto $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. - The 'extern "C"' is for builds by C++ compilers; - although this is not generally supported in C code supporting it here - has little cost and some practical benefit (sr 110532). */ -#ifdef __cplusplus -extern "C" -#endif -char SSL_accept (void); + builtin and then its argument prototype would still apply. */ +char SSL_accept (); int main (void) { @@ -10738,14 +10419,12 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_ssl_SSL_accept=yes -else case e in #( - e) ac_cv_lib_ssl_SSL_accept=no ;; -esac +else $as_nop + ac_cv_lib_ssl_SSL_accept=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS ;; -esac +LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ssl_SSL_accept" >&5 printf "%s\n" "$ac_cv_lib_ssl_SSL_accept" >&6; } @@ -10755,28 +10434,26 @@ then : LIBS="-lssl $LIBS" -else case e in #( - e) havessllib="no" ;; -esac +else $as_nop + havessllib="no" fi for ac_func in EVP_sha1 a2i_IPADDRESS do : - as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | sed "$as_sed_sh"` + as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes" then : cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_func" | sed "$as_sed_cpp"` 1 +#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF -else case e in #( - e) +else $as_nop + havessllib="no" break - ;; -esac + fi done @@ -10792,48 +10469,44 @@ fi if test "x$ac_cv_func_OPENSSL_buf2hexstr" = xyes then : -else case e in #( - e) ac_fn_c_check_func "$LINENO" "hex_to_string" "ac_cv_func_hex_to_string" +else $as_nop + ac_fn_c_check_func "$LINENO" "hex_to_string" "ac_cv_func_hex_to_string" if test "x$ac_cv_func_hex_to_string" = xyes then : printf "%s\n" "#define OPENSSL_buf2hexstr hex_to_string" >>confdefs.h -else case e in #( - e) +else $as_nop + havessllib="no" break - ;; -esac + fi - ;; -esac + fi ac_fn_c_check_func "$LINENO" "OPENSSL_hexstr2buf" "ac_cv_func_OPENSSL_hexstr2buf" if test "x$ac_cv_func_OPENSSL_hexstr2buf" = xyes then : -else case e in #( - e) ac_fn_c_check_func "$LINENO" "string_to_hex" "ac_cv_func_string_to_hex" +else $as_nop + ac_fn_c_check_func "$LINENO" "string_to_hex" "ac_cv_func_string_to_hex" if test "x$ac_cv_func_string_to_hex" = xyes then : printf "%s\n" "#define OPENSSL_hexstr2buf string_to_hex" >>confdefs.h -else case e in #( - e) +else $as_nop + havessllib="no" break - ;; -esac + fi - ;; -esac + fi if test "$havesslinc" = "no"; then @@ -10866,13 +10539,12 @@ printf "%s\n" "yes" >&6; } if test "x$ac_cv_type___int64" = xyes then : -else case e in #( - e) +else $as_nop + printf "%s\n" "#define __int64 long long" >>confdefs.h - ;; -esac + fi fi @@ -10886,12 +10558,11 @@ then : printf "%s\n" "#define egg_ASN1_string_data ASN1_STRING_get0_data" >>confdefs.h -else case e in #( - e) +else $as_nop + printf "%s\n" "#define egg_ASN1_string_data ASN1_STRING_data" >>confdefs.h - ;; -esac + fi ac_fn_c_check_func "$LINENO" "EVP_PKEY_get1_EC_KEY" "ac_cv_func_EVP_PKEY_get1_EC_KEY" @@ -10916,17 +10587,16 @@ then : for ac_func in MD5_Init MD5_Update MD5_Final do : - as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | sed "$as_sed_sh"` + as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes" then : cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_func" | sed "$as_sed_cpp"` 1 +#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF -else case e in #( - e) havesslmd5="no" ;; -esac +else $as_nop + havesslmd5="no" fi done @@ -10952,9 +10622,8 @@ printf "%s\n" "#define HAVE_OPENSSL_MD5 1" >>confdefs.h if test ${enable_tdns+y} then : enableval=$enable_tdns; tdns_enabled="$enableval" -else case e in #( - e) tdns_enabled="yes" ;; -esac +else $as_nop + tdns_enabled="yes" fi if test "x$ax_pthread_ok" = "xno"; then @@ -11029,11 +10698,10 @@ then : EGG_CROSS_COMPILING=yes -else case e in #( - e) +else $as_nop + EGG_CROSS_COMPILING=no - ;; -esac + fi @@ -11051,8 +10719,8 @@ cat >confcache <<\_ACEOF # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # -# 'ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* 'ac_cv_foo' will be assigned the +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF @@ -11082,14 +10750,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # 'set' does not quote correctly, so add quotes: double-quote + # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) - # 'set' quotes correctly as required by POSIX, so do not add quotes. + # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | @@ -11180,6 +10848,7 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh +as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -11188,13 +10857,12 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else case e in #( - e) case `(set -o) 2>/dev/null` in #( +else $as_nop + case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; -esac ;; esac fi @@ -11266,7 +10934,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as 'sh COMMAND' +# We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -11295,6 +10963,7 @@ as_fn_error () } # as_fn_error + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -11334,12 +11003,11 @@ then : { eval $1+=\$2 }' -else case e in #( - e) as_fn_append () +else $as_nop + as_fn_append () { eval $1=\$$1\$2 - } ;; -esac + } fi # as_fn_append # as_fn_arith ARG... @@ -11353,12 +11021,11 @@ then : { as_val=$(( $* )) }' -else case e in #( - e) as_fn_arith () +else $as_nop + as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } ;; -esac + } fi # as_fn_arith @@ -11441,9 +11108,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. - # In both cases, we have to default to 'cp -pR'. + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -11524,12 +11191,10 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" -as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. -as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" -as_tr_sh="eval sed '$as_sed_sh'" # deprecated +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 @@ -11545,7 +11210,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by Eggdrop $as_me 1.9.5, which was -generated by GNU Autoconf 2.72. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -11577,7 +11242,7 @@ _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -'$as_me' instantiates files and other configuration actions +\`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. @@ -11614,10 +11279,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ Eggdrop config.status 1.9.5 -configured by $0, generated by GNU Autoconf 2.72, +configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" -Copyright (C) 2023 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -11678,8 +11343,8 @@ do ac_need_defaults=false;; --he | --h) # Conflict between --help and --header - as_fn_error $? "ambiguous option: '$1' -Try '$0 --help' for more information.";; + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ @@ -11687,8 +11352,8 @@ Try '$0 --help' for more information.";; ac_cs_silent=: ;; # This is an error. - -*) as_fn_error $? "unrecognized option: '$1' -Try '$0 --help' for more information." ;; + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; @@ -11735,7 +11400,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 PACKAGE="$PACKAGE" VERSION="$VERSION" ac_stdint_h="$ac_stdint_h" -_ac_stdint_h=`printf "%s\n" "_$PACKAGE-$ac_stdint_h" | sed "$as_sed_cpp"` +_ac_stdint_h=`printf "%s\n" "_$PACKAGE-$ac_stdint_h" | $as_tr_cpp` ac_cv_stdint_message="$ac_cv_stdint_message" ac_cv_header_stdint_t="$ac_cv_header_stdint_t" ac_cv_header_stdint_x="$ac_cv_header_stdint_x" @@ -11773,7 +11438,7 @@ do "src/md5/Makefile") CONFIG_FILES="$CONFIG_FILES src/md5/Makefile" ;; "src/mod/Makefile") CONFIG_FILES="$CONFIG_FILES src/mod/Makefile" ;; - *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done @@ -11793,7 +11458,7 @@ fi # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to '$tmp'. +# after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= @@ -11817,7 +11482,7 @@ ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. -# This happens for instance with './config.status config.h'. +# This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then @@ -11975,13 +11640,13 @@ fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with './config.status Makefile'. +# This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF -# Transform confdefs.h into an awk script 'defines.awk', embedded as +# Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. @@ -12091,7 +11756,7 @@ do esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -12113,19 +11778,19 @@ do -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain ':'. + # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done - # Let's still pretend it is 'configure' which instantiates (i.e., don't + # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` @@ -12253,7 +11918,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 esac _ACEOF -# Neutralize VPATH when '$srcdir' = '.'. +# Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 @@ -12283,9 +11948,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" diff --git a/src/mod/compress.mod/configure b/src/mod/compress.mod/configure index ab13fc34a..1c23a76d4 100755 --- a/src/mod/compress.mod/configure +++ b/src/mod/compress.mod/configure @@ -1,12 +1,12 @@ #! /bin/sh -# From configure.ac bc7bc2ee. +# From configure.ac 95f630ee. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.72 for Eggdrop Compress Module 1.9.5. +# Generated by GNU Autoconf 2.71 for Eggdrop Compress Module 1.9.5. # # Report bugs to . # # -# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # @@ -20,6 +20,7 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh +as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -28,13 +29,12 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else case e in #( - e) case `(set -o) 2>/dev/null` in #( +else $as_nop + case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; -esac ;; esac fi @@ -106,7 +106,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as 'sh COMMAND' +# We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -136,14 +136,15 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed 'exec'. +# out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 + as_bourne_compatible="as_nop=: +if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: @@ -151,13 +152,12 @@ then : # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else case e in #( - e) case \`(set -o) 2>/dev/null\` in #( +else \$as_nop + case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; -esac ;; esac fi " @@ -175,9 +175,8 @@ as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : -else case e in #( - e) exitcode=1; echo positional parameters were not saved. ;; -esac +else \$as_nop + exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) @@ -190,15 +189,14 @@ test -x / || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes -else case e in #( - e) as_have_required=no ;; -esac +else $as_nop + as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : -else case e in #( - e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else $as_nop + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do @@ -231,13 +229,12 @@ IFS=$as_save_IFS if $as_found then : -else case e in #( - e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && +else $as_nop + if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes -fi ;; -esac +fi fi @@ -259,7 +256,7 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed 'exec'. +# out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi @@ -279,8 +276,7 @@ $0: manually run the script under such a shell if you do $0: have one." fi exit 1 -fi ;; -esac +fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} @@ -319,6 +315,14 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -387,12 +391,11 @@ then : { eval $1+=\$2 }' -else case e in #( - e) as_fn_append () +else $as_nop + as_fn_append () { eval $1=\$$1\$2 - } ;; -esac + } fi # as_fn_append # as_fn_arith ARG... @@ -406,14 +409,21 @@ then : { as_val=$(( $* )) }' -else case e in #( - e) as_fn_arith () +else $as_nop + as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } ;; -esac + } fi # as_fn_arith +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -487,8 +497,6 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits /[$]LINENO/= ' <$as_myself | sed ' - t clear - :clear s/[$]LINENO.*/&-/ t lineno b @@ -537,6 +545,7 @@ esac as_echo='printf %s\n' as_echo_n='printf %s' + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -548,9 +557,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. - # In both cases, we have to default to 'cp -pR'. + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -575,12 +584,10 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" -as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. -as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" -as_tr_sh="eval sed '$as_sed_sh'" # deprecated +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 /dev/null && - as_fn_error $? "invalid feature name: '$ac_useropt'" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -839,7 +846,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: '$ac_useropt'" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1052,7 +1059,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: '$ac_useropt'" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1068,7 +1075,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: '$ac_useropt'" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1098,8 +1105,8 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) as_fn_error $? "unrecognized option: '$ac_option' -Try '$0 --help' for more information" + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" ;; *=*) @@ -1107,7 +1114,7 @@ Try '$0 --help' for more information" # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: '$ac_envvar'" ;; + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; @@ -1157,7 +1164,7 @@ do as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done -# There might be people who depend on the old broken behavior: '$host' +# There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias @@ -1225,7 +1232,7 @@ if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi -ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` @@ -1253,7 +1260,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -'configure' configures Eggdrop Compress Module 1.9.5 to adapt to many kinds of systems. +\`configure' configures Eggdrop Compress Module 1.9.5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1267,11 +1274,11 @@ Configuration: --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print 'checking ...' messages + -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for '--cache-file=config.cache' + -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or '..'] + --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @@ -1279,10 +1286,10 @@ Installation directories: --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] -By default, 'make install' will install all the files in -'$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify -an installation prefix other than '$ac_default_prefix' using '--prefix', -for instance '--prefix=\$HOME'. +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. For better control, use the options below. @@ -1329,7 +1336,7 @@ Some influential environment variables: CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory -Use these variables to override the choices made by 'configure' or to help +Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . @@ -1397,9 +1404,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Eggdrop Compress Module configure 1.9.5 -generated by GNU Autoconf 2.72 +generated by GNU Autoconf 2.71 -Copyright (C) 2023 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. @@ -1440,12 +1447,11 @@ printf "%s\n" "$ac_try_echo"; } >&5 } && test -s conftest.$ac_objext then : ac_retval=0 -else case e in #( - e) printf "%s\n" "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 ;; -esac + ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval @@ -1483,12 +1489,11 @@ printf "%s\n" "$ac_try_echo"; } >&5 } then : ac_retval=0 -else case e in #( - e) printf "%s\n" "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 ;; -esac + ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would @@ -1512,8 +1517,8 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> @@ -1521,12 +1526,10 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" -else case e in #( - e) eval "$3=no" ;; -esac +else $as_nop + eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1559,7 +1562,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Eggdrop Compress Module $as_me 1.9.5, which was -generated by GNU Autoconf 2.72. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -1805,10 +1808,10 @@ esac printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file -See 'config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5; } fi done @@ -1844,7 +1847,9 @@ struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (char **p, int i) +static char *e (p, i) + char **p; + int i; { return p[i]; } @@ -1858,21 +1863,6 @@ static char *f (char * (*g) (char **, int), char **p, ...) return s; } -/* C89 style stringification. */ -#define noexpand_stringify(a) #a -const char *stringified = noexpand_stringify(arbitrary+token=sequence); - -/* C89 style token pasting. Exercises some of the corner cases that - e.g. old MSVC gets wrong, but not very hard. */ -#define noexpand_concat(a,b) a##b -#define expand_concat(a,b) noexpand_concat(a,b) -extern int vA; -extern int vbee; -#define aye A -#define bee B -int *pvA = &expand_concat(v,aye); -int *pvbee = &noexpand_concat(v,bee); - /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated @@ -1900,19 +1890,16 @@ ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' -/* Does the compiler advertise C99 conformance? */ +// Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif -// See if C++-style comments work. - #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); -extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare @@ -1962,6 +1949,7 @@ typedef const char *ccp; static inline int test_restrict (ccp restrict text) { + // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) @@ -2027,8 +2015,6 @@ ac_c_conftest_c99_main=' ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; - // Work around memory leak warnings. - free (ia); // Check named initializers. struct named_init ni = { @@ -2050,7 +2036,7 @@ ac_c_conftest_c99_main=' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' -/* Does the compiler advertise C11 conformance? */ +// Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif @@ -2173,12 +2159,12 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -2187,18 +2173,18 @@ printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 -printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. @@ -2214,11 +2200,11 @@ printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi done if $ac_cache_corrupted; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' + as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## @@ -2263,8 +2249,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$CC"; then +else $as_nop + if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2286,8 +2272,7 @@ done done IFS=$as_save_IFS -fi ;; -esac +fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -2313,8 +2298,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$ac_ct_CC"; then +else $as_nop + if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2336,8 +2321,7 @@ done done IFS=$as_save_IFS -fi ;; -esac +fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -2366,10 +2350,10 @@ esac fi -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH -See 'config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 @@ -2441,8 +2425,8 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. -# So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. @@ -2462,7 +2446,7 @@ do ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an '-o' + # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. @@ -2473,9 +2457,8 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else case e in #( - e) ac_file='' ;; -esac +else $as_nop + ac_file='' fi if test -z "$ac_file" then : @@ -2484,14 +2467,13 @@ printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables -See 'config.log' for more details" "$LINENO" 5; } -else case e in #( - e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } ;; -esac +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } @@ -2515,10 +2497,10 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) -# catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will -# work properly (i.e., refer to 'conftest.exe'), while it won't with -# 'rm'. + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in @@ -2528,12 +2510,11 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else case e in #( - e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See 'config.log' for more details" "$LINENO" 5; } ;; -esac +See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 @@ -2549,8 +2530,6 @@ int main (void) { FILE *f = fopen ("conftest.out", "w"); - if (!f) - return 1; return ferror (f) || fclose (f) != 0; ; @@ -2590,27 +2569,26 @@ printf "%s\n" "$ac_try_echo"; } >&5 if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. -If you meant to cross compile, use '--host'. -See 'config.log' for more details" "$LINENO" 5; } +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } -rm -f conftest.$ac_ext conftest$ac_cv_exeext \ - conftest.o conftest.obj conftest.out +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2642,18 +2620,16 @@ then : break;; esac done -else case e in #( - e) printf "%s\n" "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile -See 'config.log' for more details" "$LINENO" 5; } ;; -esac +See \`config.log' for more details" "$LINENO" 5; } fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; -esac +rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } @@ -2664,8 +2640,8 @@ printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2682,14 +2658,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes -else case e in #( - e) ac_compiler_gnu=no ;; -esac +else $as_nop + ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } @@ -2707,8 +2681,8 @@ printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_save_c_werror_flag=$ac_c_werror_flag +else $as_nop + ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" @@ -2726,8 +2700,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes -else case e in #( - e) CFLAGS="" +else $as_nop + CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2742,8 +2716,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else case e in #( - e) ac_c_werror_flag=$ac_save_c_werror_flag +else $as_nop + ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2760,15 +2734,12 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag ;; -esac + ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } @@ -2795,8 +2766,8 @@ printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_cv_prog_cc_c11=no +else $as_nop + ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2813,28 +2784,25 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC ;; -esac +CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else case e in #( - e) if test "x$ac_cv_prog_cc_c11" = x +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else case e in #( - e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" ;; -esac + CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 ;; -esac + ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno @@ -2844,8 +2812,8 @@ printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_cv_prog_cc_c99=no +else $as_nop + ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2862,28 +2830,25 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC ;; -esac +CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else case e in #( - e) if test "x$ac_cv_prog_cc_c99" = x +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else case e in #( - e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" ;; -esac + CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 ;; -esac + ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno @@ -2893,8 +2858,8 @@ printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_cv_prog_cc_c89=no +else $as_nop + ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2911,28 +2876,25 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC ;; -esac +CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else case e in #( - e) if test "x$ac_cv_prog_cc_c89" = x +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else case e in #( - e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" ;; -esac + CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 ;; -esac + ac_prog_cc_stdc=c89 fi fi @@ -2950,22 +2912,16 @@ printf %s "checking for gzopen in -lz... " >&6; } if test ${ac_cv_lib_z_gzopen+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_check_lib_save_LIBS=$LIBS +else $as_nop + ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. - The 'extern "C"' is for builds by C++ compilers; - although this is not generally supported in C code supporting it here - has little cost and some practical benefit (sr 110532). */ -#ifdef __cplusplus -extern "C" -#endif -char gzopen (void); + builtin and then its argument prototype would still apply. */ +char gzopen (); int main (void) { @@ -2977,14 +2933,12 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_z_gzopen=yes -else case e in #( - e) ac_cv_lib_z_gzopen=no ;; -esac +else $as_nop + ac_cv_lib_z_gzopen=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS ;; -esac +LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzopen" >&5 printf "%s\n" "$ac_cv_lib_z_gzopen" >&6; } @@ -3070,8 +3024,8 @@ cat >confcache <<\_ACEOF # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # -# 'ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* 'ac_cv_foo' will be assigned the +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF @@ -3101,14 +3055,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # 'set' does not quote correctly, so add quotes: double-quote + # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) - # 'set' quotes correctly as required by POSIX, so do not add quotes. + # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | @@ -3172,7 +3126,9 @@ s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote -s/[][ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g s/\$/$$/g H :any @@ -3232,6 +3188,7 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh +as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -3240,13 +3197,12 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else case e in #( - e) case `(set -o) 2>/dev/null` in #( +else $as_nop + case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; -esac ;; esac fi @@ -3318,7 +3274,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as 'sh COMMAND' +# We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -3347,6 +3303,7 @@ as_fn_error () } # as_fn_error + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -3386,12 +3343,11 @@ then : { eval $1+=\$2 }' -else case e in #( - e) as_fn_append () +else $as_nop + as_fn_append () { eval $1=\$$1\$2 - } ;; -esac + } fi # as_fn_append # as_fn_arith ARG... @@ -3405,12 +3361,11 @@ then : { as_val=$(( $* )) }' -else case e in #( - e) as_fn_arith () +else $as_nop + as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } ;; -esac + } fi # as_fn_arith @@ -3493,9 +3448,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. - # In both cases, we have to default to 'cp -pR'. + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -3576,12 +3531,10 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" -as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. -as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" -as_tr_sh="eval sed '$as_sed_sh'" # deprecated +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 @@ -3597,7 +3550,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by Eggdrop Compress Module $as_me 1.9.5, which was -generated by GNU Autoconf 2.72. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -3624,7 +3577,7 @@ _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -'$as_me' instantiates files and other configuration actions +\`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. @@ -3652,10 +3605,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ Eggdrop Compress Module config.status 1.9.5 -configured by $0, generated by GNU Autoconf 2.72, +configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" -Copyright (C) 2023 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -3712,8 +3665,8 @@ do ac_cs_silent=: ;; # This is an error. - -*) as_fn_error $? "unrecognized option: '$1' -Try '$0 --help' for more information." ;; + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; @@ -3763,7 +3716,7 @@ do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done @@ -3781,7 +3734,7 @@ fi # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to '$tmp'. +# after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= @@ -3805,7 +3758,7 @@ ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. -# This happens for instance with './config.status config.h'. +# This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then @@ -3971,7 +3924,7 @@ do esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -3993,19 +3946,19 @@ do -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain ':'. + # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done - # Let's still pretend it is 'configure' which instantiates (i.e., don't + # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` @@ -4129,7 +4082,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 esac _ACEOF -# Neutralize VPATH when '$srcdir' = '.'. +# Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 @@ -4158,9 +4111,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" diff --git a/src/mod/dns.mod/configure b/src/mod/dns.mod/configure index 283b1bb1b..6f348a637 100755 --- a/src/mod/dns.mod/configure +++ b/src/mod/dns.mod/configure @@ -1,12 +1,12 @@ #! /bin/sh -# From configure.ac bc7bc2ee. +# From configure.ac 95f630ee. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.72 for Eggdrop DNS Module 1.9.5. +# Generated by GNU Autoconf 2.71 for Eggdrop DNS Module 1.9.5. # # Report bugs to . # # -# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # @@ -20,6 +20,7 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh +as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -28,13 +29,12 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else case e in #( - e) case `(set -o) 2>/dev/null` in #( +else $as_nop + case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; -esac ;; esac fi @@ -106,7 +106,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as 'sh COMMAND' +# We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -136,14 +136,15 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed 'exec'. +# out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 + as_bourne_compatible="as_nop=: +if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: @@ -151,13 +152,12 @@ then : # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else case e in #( - e) case \`(set -o) 2>/dev/null\` in #( +else \$as_nop + case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; -esac ;; esac fi " @@ -175,9 +175,8 @@ as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : -else case e in #( - e) exitcode=1; echo positional parameters were not saved. ;; -esac +else \$as_nop + exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) @@ -190,15 +189,14 @@ test -x / || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes -else case e in #( - e) as_have_required=no ;; -esac +else $as_nop + as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : -else case e in #( - e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else $as_nop + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do @@ -231,13 +229,12 @@ IFS=$as_save_IFS if $as_found then : -else case e in #( - e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && +else $as_nop + if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes -fi ;; -esac +fi fi @@ -259,7 +256,7 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed 'exec'. +# out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi @@ -279,8 +276,7 @@ $0: manually run the script under such a shell if you do $0: have one." fi exit 1 -fi ;; -esac +fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} @@ -319,6 +315,14 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -387,12 +391,11 @@ then : { eval $1+=\$2 }' -else case e in #( - e) as_fn_append () +else $as_nop + as_fn_append () { eval $1=\$$1\$2 - } ;; -esac + } fi # as_fn_append # as_fn_arith ARG... @@ -406,14 +409,21 @@ then : { as_val=$(( $* )) }' -else case e in #( - e) as_fn_arith () +else $as_nop + as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } ;; -esac + } fi # as_fn_arith +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -487,8 +497,6 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits /[$]LINENO/= ' <$as_myself | sed ' - t clear - :clear s/[$]LINENO.*/&-/ t lineno b @@ -537,6 +545,7 @@ esac as_echo='printf %s\n' as_echo_n='printf %s' + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -548,9 +557,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. - # In both cases, we have to default to 'cp -pR'. + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -575,12 +584,10 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" -as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. -as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" -as_tr_sh="eval sed '$as_sed_sh'" # deprecated +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 /dev/null && - as_fn_error $? "invalid feature name: '$ac_useropt'" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -808,7 +815,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: '$ac_useropt'" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1021,7 +1028,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: '$ac_useropt'" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1037,7 +1044,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: '$ac_useropt'" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1067,8 +1074,8 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) as_fn_error $? "unrecognized option: '$ac_option' -Try '$0 --help' for more information" + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" ;; *=*) @@ -1076,7 +1083,7 @@ Try '$0 --help' for more information" # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: '$ac_envvar'" ;; + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; @@ -1126,7 +1133,7 @@ do as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done -# There might be people who depend on the old broken behavior: '$host' +# There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias @@ -1194,7 +1201,7 @@ if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi -ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` @@ -1222,7 +1229,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -'configure' configures Eggdrop DNS Module 1.9.5 to adapt to many kinds of systems. +\`configure' configures Eggdrop DNS Module 1.9.5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1236,11 +1243,11 @@ Configuration: --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print 'checking ...' messages + -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for '--cache-file=config.cache' + -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or '..'] + --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @@ -1248,10 +1255,10 @@ Installation directories: --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] -By default, 'make install' will install all the files in -'$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify -an installation prefix other than '$ac_default_prefix' using '--prefix', -for instance '--prefix=\$HOME'. +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. For better control, use the options below. @@ -1298,7 +1305,7 @@ Some influential environment variables: CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory -Use these variables to override the choices made by 'configure' or to help +Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . @@ -1366,9 +1373,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Eggdrop DNS Module configure 1.9.5 -generated by GNU Autoconf 2.72 +generated by GNU Autoconf 2.71 -Copyright (C) 2023 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. @@ -1409,12 +1416,11 @@ printf "%s\n" "$ac_try_echo"; } >&5 } && test -s conftest.$ac_objext then : ac_retval=0 -else case e in #( - e) printf "%s\n" "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 ;; -esac + ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval @@ -1433,8 +1439,8 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> @@ -1442,12 +1448,10 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" -else case e in #( - e) eval "$3=no" ;; -esac +else $as_nop + eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1487,12 +1491,11 @@ printf "%s\n" "$ac_try_echo"; } >&5 } then : ac_retval=0 -else case e in #( - e) printf "%s\n" "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 ;; -esac + ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would @@ -1528,7 +1531,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Eggdrop DNS Module $as_me 1.9.5, which was -generated by GNU Autoconf 2.72. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -1774,10 +1777,10 @@ esac printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file -See 'config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5; } fi done @@ -1813,7 +1816,9 @@ struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (char **p, int i) +static char *e (p, i) + char **p; + int i; { return p[i]; } @@ -1827,21 +1832,6 @@ static char *f (char * (*g) (char **, int), char **p, ...) return s; } -/* C89 style stringification. */ -#define noexpand_stringify(a) #a -const char *stringified = noexpand_stringify(arbitrary+token=sequence); - -/* C89 style token pasting. Exercises some of the corner cases that - e.g. old MSVC gets wrong, but not very hard. */ -#define noexpand_concat(a,b) a##b -#define expand_concat(a,b) noexpand_concat(a,b) -extern int vA; -extern int vbee; -#define aye A -#define bee B -int *pvA = &expand_concat(v,aye); -int *pvbee = &noexpand_concat(v,bee); - /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated @@ -1869,19 +1859,16 @@ ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' -/* Does the compiler advertise C99 conformance? */ +// Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif -// See if C++-style comments work. - #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); -extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare @@ -1931,6 +1918,7 @@ typedef const char *ccp; static inline int test_restrict (ccp restrict text) { + // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) @@ -1996,8 +1984,6 @@ ac_c_conftest_c99_main=' ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; - // Work around memory leak warnings. - free (ia); // Check named initializers. struct named_init ni = { @@ -2019,7 +2005,7 @@ ac_c_conftest_c99_main=' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' -/* Does the compiler advertise C11 conformance? */ +// Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif @@ -2133,12 +2119,12 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -2147,18 +2133,18 @@ printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 -printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. @@ -2174,11 +2160,11 @@ printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi done if $ac_cache_corrupted; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' + as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## @@ -2223,8 +2209,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$CC"; then +else $as_nop + if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2246,8 +2232,7 @@ done done IFS=$as_save_IFS -fi ;; -esac +fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -2273,8 +2258,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$ac_ct_CC"; then +else $as_nop + if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2296,8 +2281,7 @@ done done IFS=$as_save_IFS -fi ;; -esac +fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -2326,10 +2310,10 @@ esac fi -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH -See 'config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 @@ -2401,8 +2385,8 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. -# So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. @@ -2422,7 +2406,7 @@ do ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an '-o' + # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. @@ -2433,9 +2417,8 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else case e in #( - e) ac_file='' ;; -esac +else $as_nop + ac_file='' fi if test -z "$ac_file" then : @@ -2444,14 +2427,13 @@ printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables -See 'config.log' for more details" "$LINENO" 5; } -else case e in #( - e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } ;; -esac +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } @@ -2475,10 +2457,10 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) -# catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will -# work properly (i.e., refer to 'conftest.exe'), while it won't with -# 'rm'. + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in @@ -2488,12 +2470,11 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else case e in #( - e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See 'config.log' for more details" "$LINENO" 5; } ;; -esac +See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 @@ -2509,8 +2490,6 @@ int main (void) { FILE *f = fopen ("conftest.out", "w"); - if (!f) - return 1; return ferror (f) || fclose (f) != 0; ; @@ -2550,27 +2529,26 @@ printf "%s\n" "$ac_try_echo"; } >&5 if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. -If you meant to cross compile, use '--host'. -See 'config.log' for more details" "$LINENO" 5; } +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } -rm -f conftest.$ac_ext conftest$ac_cv_exeext \ - conftest.o conftest.obj conftest.out +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2602,18 +2580,16 @@ then : break;; esac done -else case e in #( - e) printf "%s\n" "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile -See 'config.log' for more details" "$LINENO" 5; } ;; -esac +See \`config.log' for more details" "$LINENO" 5; } fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; -esac +rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } @@ -2624,8 +2600,8 @@ printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2642,14 +2618,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes -else case e in #( - e) ac_compiler_gnu=no ;; -esac +else $as_nop + ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } @@ -2667,8 +2641,8 @@ printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_save_c_werror_flag=$ac_c_werror_flag +else $as_nop + ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" @@ -2686,8 +2660,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes -else case e in #( - e) CFLAGS="" +else $as_nop + CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2702,8 +2676,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else case e in #( - e) ac_c_werror_flag=$ac_save_c_werror_flag +else $as_nop + ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2720,15 +2694,12 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag ;; -esac + ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } @@ -2755,8 +2726,8 @@ printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_cv_prog_cc_c11=no +else $as_nop + ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2773,28 +2744,25 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC ;; -esac +CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else case e in #( - e) if test "x$ac_cv_prog_cc_c11" = x +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else case e in #( - e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" ;; -esac + CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 ;; -esac + ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno @@ -2804,8 +2772,8 @@ printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_cv_prog_cc_c99=no +else $as_nop + ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2822,28 +2790,25 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC ;; -esac +CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else case e in #( - e) if test "x$ac_cv_prog_cc_c99" = x +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else case e in #( - e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" ;; -esac + CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 ;; -esac + ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno @@ -2853,8 +2818,8 @@ printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 -else case e in #( - e) ac_cv_prog_cc_c89=no +else $as_nop + ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2871,28 +2836,25 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC ;; -esac +CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else case e in #( - e) if test "x$ac_cv_prog_cc_c89" = x +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else case e in #( - e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" ;; -esac + CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 ;; -esac + ac_prog_cc_stdc=c89 fi fi @@ -3100,8 +3062,8 @@ cat >confcache <<\_ACEOF # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # -# 'ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* 'ac_cv_foo' will be assigned the +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF @@ -3131,14 +3093,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # 'set' does not quote correctly, so add quotes: double-quote + # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) - # 'set' quotes correctly as required by POSIX, so do not add quotes. + # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | @@ -3202,7 +3164,9 @@ s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote -s/[][ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g s/\$/$$/g H :any @@ -3262,6 +3226,7 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh +as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -3270,13 +3235,12 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else case e in #( - e) case `(set -o) 2>/dev/null` in #( +else $as_nop + case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; -esac ;; esac fi @@ -3348,7 +3312,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as 'sh COMMAND' +# We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -3377,6 +3341,7 @@ as_fn_error () } # as_fn_error + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -3416,12 +3381,11 @@ then : { eval $1+=\$2 }' -else case e in #( - e) as_fn_append () +else $as_nop + as_fn_append () { eval $1=\$$1\$2 - } ;; -esac + } fi # as_fn_append # as_fn_arith ARG... @@ -3435,12 +3399,11 @@ then : { as_val=$(( $* )) }' -else case e in #( - e) as_fn_arith () +else $as_nop + as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } ;; -esac + } fi # as_fn_arith @@ -3523,9 +3486,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. - # In both cases, we have to default to 'cp -pR'. + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -3606,12 +3569,10 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" -as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. -as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" -as_tr_sh="eval sed '$as_sed_sh'" # deprecated +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 @@ -3627,7 +3588,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by Eggdrop DNS Module $as_me 1.9.5, which was -generated by GNU Autoconf 2.72. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -3654,7 +3615,7 @@ _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -'$as_me' instantiates files and other configuration actions +\`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. @@ -3682,10 +3643,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ Eggdrop DNS Module config.status 1.9.5 -configured by $0, generated by GNU Autoconf 2.72, +configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" -Copyright (C) 2023 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -3742,8 +3703,8 @@ do ac_cs_silent=: ;; # This is an error. - -*) as_fn_error $? "unrecognized option: '$1' -Try '$0 --help' for more information." ;; + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; @@ -3793,7 +3754,7 @@ do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done @@ -3811,7 +3772,7 @@ fi # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to '$tmp'. +# after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= @@ -3835,7 +3796,7 @@ ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. -# This happens for instance with './config.status config.h'. +# This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then @@ -4001,7 +3962,7 @@ do esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -4023,19 +3984,19 @@ do -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain ':'. + # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done - # Let's still pretend it is 'configure' which instantiates (i.e., don't + # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` @@ -4159,7 +4120,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 esac _ACEOF -# Neutralize VPATH when '$srcdir' = '.'. +# Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 @@ -4188,9 +4149,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" diff --git a/src/mod/python.mod/configure b/src/mod/python.mod/configure index 34cf355ad..f5bb2e5c7 100755 --- a/src/mod/python.mod/configure +++ b/src/mod/python.mod/configure @@ -1,12 +1,12 @@ #! /bin/sh -# From configure.ac bc7bc2ee. +# From configure.ac 95f630ee. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.72 for Eggdrop Python Module 1.10.0. +# Generated by GNU Autoconf 2.71 for Eggdrop Python Module 1.10.0. # # Report bugs to . # # -# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # @@ -20,6 +20,7 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh +as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -28,13 +29,12 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else case e in #( - e) case `(set -o) 2>/dev/null` in #( +else $as_nop + case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; -esac ;; esac fi @@ -106,7 +106,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as 'sh COMMAND' +# We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -136,14 +136,15 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed 'exec'. +# out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 + as_bourne_compatible="as_nop=: +if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: @@ -151,13 +152,12 @@ then : # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else case e in #( - e) case \`(set -o) 2>/dev/null\` in #( +else \$as_nop + case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; -esac ;; esac fi " @@ -175,9 +175,8 @@ as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : -else case e in #( - e) exitcode=1; echo positional parameters were not saved. ;; -esac +else \$as_nop + exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) @@ -191,15 +190,14 @@ test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes -else case e in #( - e) as_have_required=no ;; -esac +else $as_nop + as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : -else case e in #( - e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else $as_nop + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do @@ -232,13 +230,12 @@ IFS=$as_save_IFS if $as_found then : -else case e in #( - e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && +else $as_nop + if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes -fi ;; -esac +fi fi @@ -260,7 +257,7 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed 'exec'. +# out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi @@ -280,8 +277,7 @@ $0: manually run the script under such a shell if you do $0: have one." fi exit 1 -fi ;; -esac +fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} @@ -320,6 +316,14 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -388,12 +392,11 @@ then : { eval $1+=\$2 }' -else case e in #( - e) as_fn_append () +else $as_nop + as_fn_append () { eval $1=\$$1\$2 - } ;; -esac + } fi # as_fn_append # as_fn_arith ARG... @@ -407,14 +410,21 @@ then : { as_val=$(( $* )) }' -else case e in #( - e) as_fn_arith () +else $as_nop + as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } ;; -esac + } fi # as_fn_arith +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -488,8 +498,6 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits /[$]LINENO/= ' <$as_myself | sed ' - t clear - :clear s/[$]LINENO.*/&-/ t lineno b @@ -538,6 +546,7 @@ esac as_echo='printf %s\n' as_echo_n='printf %s' + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -549,9 +558,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. - # In both cases, we have to default to 'cp -pR'. + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -576,12 +585,10 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" -as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. -as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" -as_tr_sh="eval sed '$as_sed_sh'" # deprecated +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 /dev/null && - as_fn_error $? "invalid feature name: '$ac_useropt'" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -807,7 +814,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: '$ac_useropt'" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1020,7 +1027,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: '$ac_useropt'" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1036,7 +1043,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: '$ac_useropt'" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1066,8 +1073,8 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) as_fn_error $? "unrecognized option: '$ac_option' -Try '$0 --help' for more information" + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" ;; *=*) @@ -1075,7 +1082,7 @@ Try '$0 --help' for more information" # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: '$ac_envvar'" ;; + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; @@ -1125,7 +1132,7 @@ do as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done -# There might be people who depend on the old broken behavior: '$host' +# There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias @@ -1193,7 +1200,7 @@ if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi -ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` @@ -1221,7 +1228,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -'configure' configures Eggdrop Python Module 1.10.0 to adapt to many kinds of systems. +\`configure' configures Eggdrop Python Module 1.10.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1235,11 +1242,11 @@ Configuration: --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print 'checking ...' messages + -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for '--cache-file=config.cache' + -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or '..'] + --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @@ -1247,10 +1254,10 @@ Installation directories: --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] -By default, 'make install' will install all the files in -'$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify -an installation prefix other than '$ac_default_prefix' using '--prefix', -for instance '--prefix=\$HOME'. +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. For better control, use the options below. @@ -1299,7 +1306,7 @@ Some influential environment variables: string will be appended to the Python interpreter canonical name. -Use these variables to override the choices made by 'configure' or to help +Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . @@ -1367,9 +1374,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Eggdrop Python Module configure 1.10.0 -generated by GNU Autoconf 2.72 +generated by GNU Autoconf 2.71 -Copyright (C) 2023 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. @@ -1406,7 +1413,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Eggdrop Python Module $as_me 1.10.0, which was -generated by GNU Autoconf 2.72. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -1652,10 +1659,10 @@ esac printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file -See 'config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5; } fi done @@ -1686,12 +1693,12 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -1700,18 +1707,18 @@ printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 -printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. @@ -1727,11 +1734,11 @@ printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi done if $ac_cache_corrupted; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' + as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## @@ -1757,8 +1764,8 @@ printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -z "$GREP"; then +else $as_nop + if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -1777,10 +1784,9 @@ do as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in #( +case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -1815,8 +1821,7 @@ IFS=$as_save_IFS else ac_cv_path_GREP=$GREP fi - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } @@ -1828,8 +1833,8 @@ printf %s "checking for fgrep... " >&6; } if test ${ac_cv_path_FGREP+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 +else $as_nop + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then @@ -1851,10 +1856,9 @@ do as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in #( +case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -1890,8 +1894,7 @@ else ac_cv_path_FGREP=$FGREP fi - fi ;; -esac + fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 printf "%s\n" "$ac_cv_path_FGREP" >&6; } @@ -1930,8 +1933,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_python_config_bin+y} then : printf %s "(cached) " >&6 -else case e in #( - e) case $python_config_bin in +else $as_nop + case $python_config_bin in [\\/]* | ?:[\\/]*) ac_cv_path_python_config_bin="$python_config_bin" # Let the user override the test with a path. ;; @@ -1956,7 +1959,6 @@ done IFS=$as_save_IFS ;; -esac ;; esac fi python_config_bin=$ac_cv_path_python_config_bin @@ -1985,8 +1987,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_python_config_bin+y} then : printf %s "(cached) " >&6 -else case e in #( - e) case $python_config_bin in +else $as_nop + case $python_config_bin in [\\/]* | ?:[\\/]*) ac_cv_path_python_config_bin="$python_config_bin" # Let the user override the test with a path. ;; @@ -2011,7 +2013,6 @@ done IFS=$as_save_IFS ;; -esac ;; esac fi python_config_bin=$ac_cv_path_python_config_bin @@ -2052,14 +2053,13 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -else case e in #( - e) +else $as_nop + PYTHON_CONFIG_ARGS="" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - ;; -esac + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for python C flags" >&5 @@ -2088,8 +2088,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PYTHON+y} then : printf %s "(cached) " >&6 -else case e in #( - e) case $PYTHON in +else $as_nop + case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; @@ -2114,7 +2114,6 @@ done IFS=$as_save_IFS ;; -esac ;; esac fi PYTHON=$ac_cv_path_PYTHON @@ -2149,8 +2148,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 -else case e in #( - e) if test -n "$AWK"; then +else $as_nop + if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2172,8 +2171,7 @@ done done IFS=$as_save_IFS -fi ;; -esac +fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then @@ -2265,8 +2263,8 @@ cat >confcache <<\_ACEOF # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # -# 'ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* 'ac_cv_foo' will be assigned the +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF @@ -2296,14 +2294,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # 'set' does not quote correctly, so add quotes: double-quote + # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) - # 'set' quotes correctly as required by POSIX, so do not add quotes. + # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | @@ -2367,7 +2365,9 @@ s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote -s/[][ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g s/\$/$$/g H :any @@ -2427,6 +2427,7 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh +as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -2435,13 +2436,12 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else case e in #( - e) case `(set -o) 2>/dev/null` in #( +else $as_nop + case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; -esac ;; esac fi @@ -2513,7 +2513,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as 'sh COMMAND' +# We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -2542,6 +2542,7 @@ as_fn_error () } # as_fn_error + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -2581,12 +2582,11 @@ then : { eval $1+=\$2 }' -else case e in #( - e) as_fn_append () +else $as_nop + as_fn_append () { eval $1=\$$1\$2 - } ;; -esac + } fi # as_fn_append # as_fn_arith ARG... @@ -2600,12 +2600,11 @@ then : { as_val=$(( $* )) }' -else case e in #( - e) as_fn_arith () +else $as_nop + as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } ;; -esac + } fi # as_fn_arith @@ -2688,9 +2687,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. - # In both cases, we have to default to 'cp -pR'. + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -2771,12 +2770,10 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" -as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. -as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" -as_tr_sh="eval sed '$as_sed_sh'" # deprecated +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 @@ -2792,7 +2789,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by Eggdrop Python Module $as_me 1.10.0, which was -generated by GNU Autoconf 2.72. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -2819,7 +2816,7 @@ _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -'$as_me' instantiates files and other configuration actions +\`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. @@ -2847,10 +2844,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ Eggdrop Python Module config.status 1.10.0 -configured by $0, generated by GNU Autoconf 2.72, +configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" -Copyright (C) 2023 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -2908,8 +2905,8 @@ do ac_cs_silent=: ;; # This is an error. - -*) as_fn_error $? "unrecognized option: '$1' -Try '$0 --help' for more information." ;; + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; @@ -2959,7 +2956,7 @@ do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done @@ -2977,7 +2974,7 @@ fi # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to '$tmp'. +# after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= @@ -3001,7 +2998,7 @@ ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. -# This happens for instance with './config.status config.h'. +# This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then @@ -3167,7 +3164,7 @@ do esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -3189,19 +3186,19 @@ do -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain ':'. + # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done - # Let's still pretend it is 'configure' which instantiates (i.e., don't + # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` @@ -3325,7 +3322,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 esac _ACEOF -# Neutralize VPATH when '$srcdir' = '.'. +# Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 @@ -3354,9 +3351,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" From 4c421166aac2ca4d35cc1942c55c34713433e55b Mon Sep 17 00:00:00 2001 From: Thomas Sader Date: Sun, 16 Jun 2024 21:56:18 +0200 Subject: [PATCH 69/91] CI: Dependency check cannot depend on other workflow --- .github/workflows/dependencies.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index ae9dfcfa1..d76a5e6c7 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -9,7 +9,6 @@ on: jobs: tcl-versions: name: Tcl Versions - needs: default-build strategy: matrix: tcl_version: [ '8.5.19', '8.6.14', '8.7a5', '9.0b2' ] @@ -30,7 +29,6 @@ jobs: run: ./configure --with-tcl=$HOME/tcl/lib && LD_LIBRARY_PATH=$HOME/tcl/lib make config eggdrop ssl-version-10: name: OpenSSL 1.0 - needs: default-build continue-on-error: true runs-on: ubuntu-latest steps: @@ -47,7 +45,6 @@ jobs: run: cd $GITHUB_WORKSPACE/eggdrop && ./configure --with-sslinc=$HOME/ssl/include --with-ssllib=$HOME/ssl/lib && LD_LIBRARY_PATH=$HOME/ssl/lib make config eggdrop ssl-version-11: name: OpenSSL 1.1 - needs: default-build continue-on-error: true runs-on: ubuntu-latest steps: @@ -68,7 +65,6 @@ jobs: run: cd $GITHUB_WORKSPACE/eggdrop && ./configure --with-sslinc=$HOME/ssl/include --with-ssllib=$HOME/ssl/lib && LD_LIBRARY_PATH=$HOME/ssl/lib make config eggdrop ssl-versions-3x: name: OpenSSL 3.x - needs: default-build strategy: matrix: ssl_version: [ '3.0', '3.1', '3.2', '3.3' ] From 2fa304210a86b69651d287260456f54181cd1eea Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 29 Jun 2024 11:54:55 -0400 Subject: [PATCH 70/91] add lookup_user_record() (#1618) Found by: Mystery-X Patch by: Geo, thommey It was discovered after the latest rewrite lookup up user records based on account that there are situations where m might not be known, and m being NULL can cause a crash if not properly checked. This creates a wrapper function to a) check which lookup to use based on the provided input, b) fallback to a different lookup in case something returns NULL. --- src/cmds.c | 5 ++-- src/mod/irc.mod/chan.c | 46 +++++++----------------------- src/mod/irc.mod/cmdsirc.c | 1 - src/mod/irc.mod/irc.c | 14 ++++++---- src/mod/irc.mod/mode.c | 4 +-- src/mod/irc.mod/msgcmds.c | 6 ++-- src/mod/module.h | 3 +- src/mod/server.mod/servmsg.c | 12 ++++---- src/modules.c | 3 +- src/userrec.c | 54 ++++++++++++++++++++++++++++++++++++ src/users.c | 2 -- src/users.h | 2 ++ 12 files changed, 93 insertions(+), 59 deletions(-) diff --git a/src/cmds.c b/src/cmds.c index e1730507a..507c69687 100644 --- a/src/cmds.c +++ b/src/cmds.c @@ -1908,11 +1908,11 @@ static int add_to_handle(struct userrec *u, int idx, char *handle, char *host, i } } if ( !type && !glob_botmast(fr) && !chan_master(fr) && get_user_by_host(host)) { - dprintf(idx, "You cannot add %s matching another user!\n", - type ? "an account" : "a host"); + dprintf(idx, "You cannot add a host matching another user!\n"); return 1; } if (type) { + // host-variable contains account u2 = get_user_by_account(host); if (u2) { dprintf(idx, "That account already exists for user %s\n", u2->handle); @@ -1920,6 +1920,7 @@ static int add_to_handle(struct userrec *u, int idx, char *handle, char *host, i } addaccount_by_handle(handle, host); } else { + // host for (q = get_user(&USERENTRY_HOSTS, u); q; q = q->next) { if (!strcasecmp(q->extra, host)) { dprintf(idx, "That %s is already there.\n", diff --git a/src/mod/irc.mod/chan.c b/src/mod/irc.mod/chan.c index f0cb827d7..9124d428c 100644 --- a/src/mod/irc.mod/chan.c +++ b/src/mod/irc.mod/chan.c @@ -240,15 +240,7 @@ static int detect_chan_flood(char *floodnick, char *floodhost, char *from, if (!m && (which != FLOOD_JOIN)) return 0; - if (m) { - u = get_user_from_member(m); - } else { - u = victim_or_account ? get_user_by_account(victim_or_account) : NULL; - if (!u) { - u = get_user_by_host(from); - } - } - + u = lookup_user_record(m, victim_or_account, from); get_user_flagrec(u, &fr, chan->dname); if (glob_bot(fr) || ((which == FLOOD_DEOP) && (glob_master(fr) || chan_master(fr)) && (glob_friend(fr) || chan_friend(fr))) || @@ -333,7 +325,6 @@ static int detect_chan_flood(char *floodnick, char *floodhost, char *from, chan->floodwho[which][0] = 0; if (which == FLOOD_DEOP) chan->deopd[0] = 0; - u = get_user_from_member(m); if (check_tcl_flud(floodnick, floodhost, u, ftype, chan->dname)) return 0; switch (which) { @@ -1843,7 +1834,7 @@ static int gottopic(char *from, char *msg) if (m != NULL) m->last = now; set_topic(chan, msg); - u = get_user_from_member(m); + u = lookup_user_record(m, NULL, from); // TODO: get account from msgtags check_tcl_topc(nick, from, u, chan->dname, msg); } return 0; @@ -2079,9 +2070,8 @@ static int gotjoin(char *from, char *channame) strlcpy(m->userhost, uhost, sizeof m->userhost); m->flags |= STOPWHO; - u = get_user_from_member(m); - if (extjoin) { + u = lookup_user_record(m, account, from); /* calls check_tcl_account which can delete the channel */ setaccount(nick, account); @@ -2089,6 +2079,8 @@ static int gotjoin(char *from, char *channame) /* The channel doesn't exist anymore, so get out of here. */ goto exit; } + } else { + u = lookup_user_record(find_member_from_nick(nick), NULL, from); // TODO: get account from msgtags } check_tcl_join(nick, uhost, u, chan->dname); @@ -2129,9 +2121,9 @@ static int gotjoin(char *from, char *channame) if (u) { struct laston_info *li = 0; - cr = get_chanrec(get_user_from_member(m), chan->dname); + cr = get_chanrec(u, chan->dname); if (!cr && no_chanrec_info) - li = get_user(&USERENTRY_LASTON, get_user_from_member(m)); + li = get_user(&USERENTRY_LASTON, u); if (channel_greet(chan) && use_info && ((cr && now - cr->laston > wait_info) || (no_chanrec_info && (!li || now - li->laston > wait_info)))) { @@ -2353,7 +2345,7 @@ static int gotkick(char *from, char *origmsg) return 0; m = ismember(chan, whodid); - u = get_user_from_member(m); + u = lookup_user_record(m, NULL, from); // TODO: get account from msgtags if (m) m->last = now; /* This _needs_ to use chan->dname */ @@ -2569,7 +2561,6 @@ static int gotmsg(char *from, char *msg) int ctcp_count = 0, ignoring; struct chanset_t *chan; struct userrec *u; - memberlist *m; /* Only handle if message is to a channel, or to @#channel. */ /* FIXME: Properly handle ovNotices (@+#channel), vNotices (+#channel), etc. */ @@ -2613,15 +2604,7 @@ static int gotmsg(char *from, char *msg) ctcp_count++; if (ctcp[0] != ' ') { code = newsplit(&ctcp); - u = NULL; - for (chan = chanset; chan; chan = chan->next) { - for (m = chan->channel.member; m && m->nick[0]; m = m->next) { - if (!rfc_casecmp(m->nick, nick)) { - u = get_user_from_member(m); - break; - } - } - } + u = lookup_user_record(find_member_from_nick(nick), NULL, from); // TODO: get account from msgtags if (!ignoring || trigger_on_ignore) { if (!check_tcl_ctcp(nick, uhost, u, to, code, ctcp)) { chan = findchan(realto); @@ -2700,7 +2683,6 @@ static int gotnotice(char *from, char *msg) char *ctcp, *code; struct userrec *u; struct chanset_t *chan; - memberlist *m; int ignoring; if (!strchr(CHANMETA "@", *msg)) @@ -2714,15 +2696,7 @@ static int gotnotice(char *from, char *msg) fixcolon(msg); strlcpy(uhost, from, sizeof buf); nick = splitnick(&uhost); - u = NULL; - for (chan = chanset; chan; chan = chan->next) { - for (m = chan->channel.member; m && m->nick[0]; m = m->next) { - if (!rfc_casecmp(m->nick, nick)) { - u = get_user_from_member(m); - break; - } - } - } + u = lookup_user_record(find_member_from_nick(nick), NULL, from); // TODO: get account from msgtags /* Check for CTCP: */ p = strchr(msg, 1); while (p && *p) { diff --git a/src/mod/irc.mod/cmdsirc.c b/src/mod/irc.mod/cmdsirc.c index 3b387c8f6..c9bf58ab1 100644 --- a/src/mod/irc.mod/cmdsirc.c +++ b/src/mod/irc.mod/cmdsirc.c @@ -751,7 +751,6 @@ static void cmd_channel(struct userrec *u, int idx, char *par) } else strlcpy(s, " --- ", sizeof s); egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); - u = get_user_from_member(m); if (u == NULL) strlcpy(handle, "*", sizeof handle); diff --git a/src/mod/irc.mod/irc.c b/src/mod/irc.mod/irc.c index dc03c7f24..bc3f578e4 100644 --- a/src/mod/irc.mod/irc.c +++ b/src/mod/irc.mod/irc.c @@ -224,7 +224,7 @@ static void punish_badguy(struct chanset_t *chan, char *whobad, static void maybe_revenge(struct chanset_t *chan, char *whobad, char *whovictim, int type) { - char *badnick, *victim; + char *badnick, *victim, buf[NICKLEN + UHOSTLEN]; int mevictim; struct userrec *u, *u2; memberlist *m; @@ -233,14 +233,16 @@ static void maybe_revenge(struct chanset_t *chan, char *whobad, return; /* Get info about offender */ + strlcpy(buf, whobad, sizeof buf); badnick = splitnick(&whobad); m = ismember(chan, badnick); - u = get_user_from_member(m); + u = lookup_user_record(m, NULL, buf); // TODO: get account from msgtags /* Get info about victim */ + strlcpy(buf, whovictim, sizeof buf); victim = splitnick(&whovictim); m = ismember(chan, victim); - u2 = get_user_from_member(m); + u2 = lookup_user_record(m, NULL, buf); // TODO: get account from msgtags mevictim = match_my_nick(victim); /* Do we want to revenge? */ @@ -908,7 +910,7 @@ static int check_tcl_pub(char *nick, char *from, char *chname, char *msg) int x; char buf[512], *args = buf, *cmd, host[161], *hand; struct chanset_t *chan; - struct userrec *u; + struct userrec *u = NULL; memberlist *m; strlcpy(buf, msg, sizeof buf); @@ -916,7 +918,7 @@ static int check_tcl_pub(char *nick, char *from, char *chname, char *msg) simple_sprintf(host, "%s!%s", nick, from); chan = findchan(chname); m = ismember(chan, nick); - u = get_user_from_member(m); + u = lookup_user_record(m ? m : find_member_from_nick(nick), NULL, from); // TODO: get account from msgtags hand = u ? u->handle : "*"; get_user_flagrec(u, &fr, chname); Tcl_SetVar(interp, "_pub1", nick, 0); @@ -946,7 +948,7 @@ static int check_tcl_pubm(char *nick, char *from, char *chname, char *msg) simple_sprintf(host, "%s!%s", nick, from); chan = findchan(chname); m = ismember(chan, nick); - u = get_user_from_member(m); + u = lookup_user_record(m ? m : find_member_from_nick(nick), NULL, from); // TODO: get account from msgtags get_user_flagrec(u, &fr, chname); Tcl_SetVar(interp, "_pubm1", nick, 0); Tcl_SetVar(interp, "_pubm2", from, 0); diff --git a/src/mod/irc.mod/mode.c b/src/mod/irc.mod/mode.c index 88814d3bf..5350fafd7 100644 --- a/src/mod/irc.mod/mode.c +++ b/src/mod/irc.mod/mode.c @@ -52,11 +52,11 @@ static struct chanset_t *modebind_refresh(char *chname, if (!chname || !(chan = findchan(chname))) return NULL; if (usrhost) { - u = get_user_by_host(usrhost); + u = lookup_user_record(NULL, NULL, usrhost); // TODO: get account from somewhere get_user_flagrec(u, usr, chan->dname); } if (vcrhost) { - u = get_user_by_host(vcrhost); + u = lookup_user_record(NULL, NULL, vcrhost); // TODO: get account from somewhere get_user_flagrec(u, vcr, chan->dname); } return chan; diff --git a/src/mod/irc.mod/msgcmds.c b/src/mod/irc.mod/msgcmds.c index 282687425..1c8a45f6b 100644 --- a/src/mod/irc.mod/msgcmds.c +++ b/src/mod/irc.mod/msgcmds.c @@ -383,6 +383,7 @@ static int msg_who(char *nick, char *host, struct userrec *u, char *par) struct userrec *u; egg_snprintf(s, sizeof s, "%s!%s", m->nick, m->userhost); + /* Don't use s for host here, b/c if we don't have m, we won't have s */ u = get_user_from_member(m); info = get_user(&USERENTRY_INFO, u); if (u && (u->flags & USER_BOT)) @@ -431,7 +432,7 @@ static int msg_who(char *nick, char *host, struct userrec *u, char *par) static int msg_whois(char *nick, char *host, struct userrec *u, char *par) { - char s1[143], *s2, stime[14]; + char s1[143], *s2, stime[14], uhost[NICKLEN + UHOSTLEN]; int ok; struct chanset_t *chan; memberlist *m; @@ -454,7 +455,8 @@ static int msg_whois(char *nick, char *host, struct userrec *u, char *par) } if (strlen(par) > NICKMAX) par[NICKMAX] = 0; - putlog(LOG_CMDS, "*", "(%s!%s) !%s! WHOIS %s", nick, host, u->handle, par); + egg_snprintf(uhost, sizeof uhost, "%s!%s", nick, host); + putlog(LOG_CMDS, "*", "(%s) !%s! WHOIS %s", uhost, u->handle, par); u2 = get_user_by_handle(userlist, par); if (!u2) { /* No such handle -- maybe it's a nickname of someone on a chan? */ diff --git a/src/mod/module.h b/src/mod/module.h index da1651c0a..488664322 100644 --- a/src/mod/module.h +++ b/src/mod/module.h @@ -524,8 +524,9 @@ typedef void (*chanout_butfunc)(int, int, const char *, ...) ATTRIBUTE_FORMAT(pr #define bind_bind_entry ((int(*)(tcl_bind_list_t *, const char *, const char *, const char *))global[320]) #define unbind_bind_entry ((int(*)(tcl_bind_list_t *, const char *, const char *, const char *))global[321]) #define argv0 ((char *)global[322]) -#define get_user_from_member ((struct userrec * (*)(memberlist *))global[323]) +#define lookup_user_record ((struct userrec * (*)(memberlist *, char *, char *))global[323]) /* 324 - 327 */ +#define find_member_from_nick ((memberlist * (*) (char *))global[324]) /* hostmasking */ diff --git a/src/mod/server.mod/servmsg.c b/src/mod/server.mod/servmsg.c index 952ff70bf..91a50e2e9 100644 --- a/src/mod/server.mod/servmsg.c +++ b/src/mod/server.mod/servmsg.c @@ -493,7 +493,7 @@ static int detect_flood(char *floodnick, char *floodhost, char *from, int which) if (!strcasecmp(floodhost, botuserhost)) return 0; - u = get_user_by_host(from); + u = lookup_user_record(NULL, NULL, from); // TODO: get account somehow atr = u ? u->flags : 0; if (atr & (USER_BOT | USER_FRIEND)) return 0; @@ -539,7 +539,7 @@ static int detect_flood(char *floodnick, char *floodhost, char *from, int which) lastmsgs[which] = 0; lastmsgtime[which] = 0; lastmsghost[which][0] = 0; - u = get_user_by_host(from); + u = lookup_user_record(NULL, NULL, from); // TODO: get account somehow if (check_tcl_flud(floodnick, floodhost, u, ftype, "*")) return 0; /* Private msg */ @@ -607,7 +607,7 @@ static int gotmsg(char *from, char *msg) putlog(LOG_PUBLIC, to, "CTCP %s: %s from %s (%s) to %s", code, ctcp, nick, uhost, to); } else { - u = get_user_by_host(from); + u = lookup_user_record(find_member_from_nick(nick), NULL, from); // TODO: get account from msgtags if (!ignoring || trigger_on_ignore) { if (!check_tcl_ctcp(nick, uhost, u, to, code, ctcp) && !ignoring) { if ((lowercase_ctcp && !strcasecmp(code, "DCC")) || @@ -670,7 +670,7 @@ static int gotmsg(char *from, char *msg) } detect_flood(nick, uhost, from, FLOOD_PRIVMSG); - u = get_user_by_host(from); + u = lookup_user_record(find_member_from_nick(nick), NULL, from); // TODO: get account from msgtags code = newsplit(&msg); rmspace(msg); @@ -730,7 +730,7 @@ static int gotnotice(char *from, char *msg) "CTCP reply %s: %s from %s (%s) to %s", code, ctcp, nick, uhost, to); } else { - u = get_user_by_host(from); + u = lookup_user_record(find_member_from_nick(nick), NULL, from); // TODO: get account from msgtags if (!ignoring || trigger_on_ignore) { check_tcl_ctcr(nick, uhost, u, to, code, ctcp); if (!ignoring) @@ -766,7 +766,7 @@ static int gotnotice(char *from, char *msg) } detect_flood(nick, uhost, from, FLOOD_NOTICE); - u = get_user_by_host(from); + u = lookup_user_record(find_member_from_nick(nick), NULL, from); // TODO: get account from msgtags if (!ignoring || trigger_on_ignore) if (check_tcl_notc(nick, uhost, u, botname, msg) == 2) diff --git a/src/modules.c b/src/modules.c index 61ae64716..b2ebf37ae 100644 --- a/src/modules.c +++ b/src/modules.c @@ -627,8 +627,9 @@ Function global_table[] = { (Function) bind_bind_entry, (Function) unbind_bind_entry, (Function) & argv0, - (Function) get_user_from_member + (Function) lookup_user_record, /* 324 - 327 */ + (Function) find_member_from_nick }; void init_modules(void) diff --git a/src/userrec.c b/src/userrec.c index 084dbcd64..66bb8f16c 100644 --- a/src/userrec.c +++ b/src/userrec.c @@ -171,6 +171,23 @@ static struct userrec *check_dcclist_hand(char *handle) return NULL; } +/* Search every channel record for the provided nickname. Used in cases where + * we are searching for a user record but don't have a memberlist to start from + */ +memberlist *find_member_from_nick(char *nick) { + struct chanset_t *chan; + memberlist *m = NULL; + + for (chan = chanset; chan; chan = chan->next) { + for (m = chan->channel.member; m && m->nick[0]; m = m->next) { + if (!rfc_casecmp(m->nick, nick)) { + return m; + } + } + } + return m; +} + /* Search userlist for a provided account name * Returns: userrecord for user containing the account */ @@ -255,6 +272,43 @@ struct userrec *get_user_from_member(memberlist *m) return NULL; } +/* Wrapper function to find an Eggdrop user record based on either a provided + * channel memberlist record, host, or account. This function will first check + * a provided memberlist and return the result. If no user record is found (or + * the memberlist itself was NULL), this function will try again based on a + * provided account, and then again on a provided host. + * + * When calling this function it is best to provide all available independent + * variables- ie, if you provide 'm' for the memberlist, don't provide + * 'm->account' for the account, use the independent source variable 'account' + * if available. This allows redundant checking in case of unexpected NULLs + */ +struct userrec *lookup_user_record(memberlist *m, char *host, char *account) +{ + struct userrec *u = NULL; + +/* First check for a user record tied to a memberlist */ + if (m) { + u = get_user_from_member(m); + if (u) { + return u; + } + } +/* Next check for a user record tied to an account */ + if (account && account[0]) { + u = get_user_by_account(account); + if (u) { + return u; + } + } +/* Last check for a user record tied to a hostmask */ + if (host && host[0]) { + u = get_user_by_host(host); + return u; + } + return NULL; +} + /* Fix capitalization, etc */ void correct_handle(char *handle) diff --git a/src/users.c b/src/users.c index d5c48f234..928f85ae9 100644 --- a/src/users.c +++ b/src/users.c @@ -523,8 +523,6 @@ void tell_user_ident(int idx, char *id) struct userrec *u; u = get_user_by_handle(userlist, id); - if (u == NULL) - u = get_user_by_host(id); if (u == NULL) { dprintf(idx, "%s.\n", USERF_NOMATCH); return; diff --git a/src/users.h b/src/users.h index a273ca95c..6bc27c1ce 100644 --- a/src/users.h +++ b/src/users.h @@ -185,7 +185,9 @@ struct userrec *get_user_by_host(char *); struct userrec *get_user_by_account(char *); struct userrec *get_user_by_nick(char *); struct userrec *get_user_from_member(memberlist *); +struct userrec *lookup_user_record(memberlist *, char *, char *); struct userrec *check_chanlist(const char *); +memberlist *find_member_from_nick(char *); /* All the default userentry stuff, for code re-use */ From 3302c4a70e653d3a6d9d59a1ab45f0808353ff69 Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 29 Jun 2024 12:06:14 -0400 Subject: [PATCH 71/91] Fix python configure Found by: Csibesz` Patch by: Geo Fixes: #1587 --- configure.ac | 1 - doc/sphinx_source/modules/mod/python.rst | 107 +-------------------- doc/sphinx_source/using/python.rst | 113 +++++++++++++++++++++++ eggdrop.conf | 23 ++--- src/mod/python.mod/scripts/urlTitle.py | 1 + 5 files changed, 128 insertions(+), 117 deletions(-) create mode 100644 doc/sphinx_source/using/python.rst diff --git a/configure.ac b/configure.ac index 1100e99d1..9a5e1b7c2 100644 --- a/configure.ac +++ b/configure.ac @@ -164,7 +164,6 @@ EGG_TLS_DETECT EGG_TDNS_ENABLE # Check for Python -EGG_PYTHON_ENABLE EGG_PYTHON_WITHCONFIG diff --git a/doc/sphinx_source/modules/mod/python.rst b/doc/sphinx_source/modules/mod/python.rst index 55307eb6f..5e06a45b2 100644 --- a/doc/sphinx_source/modules/mod/python.rst +++ b/doc/sphinx_source/modules/mod/python.rst @@ -8,6 +8,11 @@ Python Module This module adds a Python interpreter to Eggdrop, allowing you to run Python scripts. +------------------- +System Requirements +------------------- +This module requires Python version 3.8 or higher in order to run. Similar to Tcl requirements, Eggdrop requires both python and python development libraries to be installed on the host machine. On Debian/Ubuntu machines, this means the packages ``python``, ``python-dev`` AND ``python-is-python3`` to be installed. The python-is-python3 updates symlinks on the host system that allow Eggdrop to find it. + -------------- Loading Python -------------- @@ -50,105 +55,3 @@ pysource ^^^^^^^^^^^^^^^^^^^^^^^ The ``pysource`` command is analogous to the Tcl ``source`` command, except that it loads a Python script into Eggdrop instead of a Tcl script. - ------------------------ -Eggdrop Python Commands ------------------------ - -The Python module is built to use the existing core Tcl commands integrated into Eggdrop via the ``eggdrop.tcl`` module. To call an existing Tcl command from Python, you can either load the entire catalog by running ``import eggdrop.tcl``, or be more specific by ``from eggdrop.tcl import putserv, putlog, chanlist``, etc. - -Arguments to the Tcl functions are automatically converted as follows: - -* ``None`` is converted to an empty Tcl object (the empty string, ``""``) -* ``List`` and ``Tuple`` is converted to a ``Tcl list`` -* ``Dict`` is converted to a ``Tcl dictionary`` -* Everything else is converted to a string using the str() method - -Return values from Tcl functions must be manually converted: - -* ``""`` the empty string is automatically converted to None -* everything else is returned as string -* ``Tcl list`` as string can be converted to a Python ``List`` using ``parse_tcl_list`` -* ``Tcl dictionary`` as string can be converted to a Python ``Dict`` using ``parse_tcl_list`` - -Additionally, a few extra python commands have been created for use without these conversions: - -^^^^^^^^^^^^^^^^ -bind -^^^^^^^^^^^^^^^^ - -The python version of the bind command is used to create a bind that triggers a python function. The python bind takes the same arguments as the Tcl binds, but here each argument is passed individually. For example, a bind that would look like ``bind pub * !foo myproc`` in Tcl is written as ``bind("pub", "*", "!foo", myproc)``. For more information on Eggsrop bind argument syntax please see :ref:`bind_types`. The eggdrop.tcl.bind command should not be used as it will attempt to call a Tcl proc. - -^^^^^^^^^^^^^^^^^^^^^^^ -parse_tcl_list -^^^^^^^^^^^^^^^^^^^^^^^ - -When a python script calls a Tcl command that returns a list via the eggdrop.tcl module, the return value will be a Tcl-formatted list- also simply known as a string. The ``parse_tcl_list`` command will convert the Tcl-formatted list into a Python list, which can then freely be used within the Python script. - -^^^^^^^^^^^^^^^^^^^^^^^ -parse_tcl_dict -^^^^^^^^^^^^^^^^^^^^^^^ - -When a python script calls a Tcl command that returns a dict via the eggdrop.tcl module, the return value will be a Tcl-formatted dict- also simply known as a string. The ``parse_tcl_dict`` command will c -onvert the Tcl-formatted dict into a Python list, which can then freely be used within the Python script. - ----------------- -Config variables ----------------- - -There are also some variables you can set in your config file: - - set allow-resync 0 - When two bots get disconnected, this setting allows them to create a - resync buffer which saves all changes done to the userfile during - the disconnect. When they reconnect, they will not have to transfer - the complete user file, but, instead, just send the resync buffer. - --------------------------------- -Writing an Eggdrop Python script --------------------------------- - -This is how to write a python script for Eggdrop. - -You can view examples of Python scripts in the exampleScripts folder included with this module. - -.. glossary:: - - bestfriend.py - This example script demonstrates how to use the parse_tcl_list() python command to convert a list returned by a Tcl command into a list that is usable by Python. - - greet.py - This is a very basic script that demonstrates how a Python script with binds can be run by Eggdrop. - - imdb.py - This script shows how to use an existing third-party module to extend a Python script, in this case retrieving information from imdb.com. - - listtls.py - This script demonstrates how to use parse-tcl_list() and parse_tcl_dict() to convert a list of dicts provided by Tcl into something that is usable by Python. - - urltitle.py - This script shows how to use an existing third-party module to extend a Python script, in this case using an http parser to collect title information from a provided web page. - - -^^^^^^^^^^^^^^ -Header section -^^^^^^^^^^^^^^ - -An Eggdrop python script requires you to import X Y and Z, in this format. - -^^^^^^^^^^^^ -Code Section -^^^^^^^^^^^^ - -Normal python code works here. To run a command from the Eggdrop Tcl library, use this format. - -Use this format all over. - -------------------------------------- -Writing a module for use with Eggdrop -------------------------------------- - -This is how you import a module for use with an egg python script. - - -Copyright (C) 2000 - 2024 Eggheads Development Team diff --git a/doc/sphinx_source/using/python.rst b/doc/sphinx_source/using/python.rst new file mode 100644 index 000000000..520aa1810 --- /dev/null +++ b/doc/sphinx_source/using/python.rst @@ -0,0 +1,113 @@ +======================= +Using the Python Module +======================= + +In Eggdrop 1.10.0, Eggdrop was shipped with a Python module that, similar to the existing core Tcl capability, allows Eggdrop to run python scripts. + +------------------- +System Requirements +------------------- +Similar to Tcl requirements, Eggdrop requires both python and python development libraries to be installed on the host machine. On Debian/Ubuntu machines, this requires the packages python-dev AND python-is-python3 to be installed. The python-is-python3 updates symlinks on the host system that allow Eggdrop to find it. + +-------------- +Loading Python +-------------- + +Put this line into your Eggdrop configuration file to load the python module:: + + loadmodule python + +To load a python script from your config file, place the .py file in the scripts/ folder and add the following line to your config:: + + pysource scripts/myscript.py + +----------------------- +Eggdrop Python Commands +----------------------- + +The Python module is built to use the existing core Tcl commands integrated into Eggdrop via the ``eggdrop.tcl`` module. To call an existing Tcl command from Python, you can either load the entire catalog by running ``import eggdrop.tcl``, or be more specific by ``from eggdrop.tcl import putserv, putlog, chanlist``, etc. + +Arguments to the Tcl functions are automatically converted as follows: + +* ``None`` is converted to an empty Tcl object (the empty string, ``""``) +* ``List`` and ``Tuple`` is converted to a ``Tcl list`` +* ``Dict`` is converted to a ``Tcl dictionary`` +* Everything else is converted to a string using the str() method + +Return values from Tcl functions must be manually converted: + +* ``""`` the empty string is automatically converted to None +* everything else is returned as string +* ``Tcl list`` as string can be converted to a Python ``List`` using ``parse_tcl_list`` +* ``Tcl dictionary`` as string can be converted to a Python ``Dict`` using ``parse_tcl_list`` + +^^^^^^^^^^^^^^^^ +bind +^^^^^^^^^^^^^^^^ + +An important difference to note is that Eggdrop Python has its own ``bind`` command implemented. You will generally want to create binds using the Python ``bind`` command and not import bind from eggdrop.tcl because a Python bind will call a Python function, whereas using the Tcl bind will call a Tcl function (not one from the script you are writing). + +The python version of the bind command is used to create a bind that triggers a python function. The python bind takes the same arguments as the Tcl binds, but here each argument is passed individually. For example, a bind that would look like ``bind pub * !foo myproc`` in Tcl is written as ``bind("pub", "*", "!foo", myproc)``. For more information on Eggsrop bind argument syntax please see :ref:`bind_types`. The eggdrop.tcl.bind command should not be used as it will attempt to call a Tcl proc. + +^^^^^^^^^^^^^^^^^^^^^^^ +parse_tcl_list +^^^^^^^^^^^^^^^^^^^^^^^ + +When a python script calls a Tcl command that returns a list via the eggdrop.tcl module, the return value will be a Tcl-formatted list- also simply known as a string. The ``parse_tcl_list`` command will convert the Tcl-formatted list into a Python list, which can then freely be used within the Python script. + +^^^^^^^^^^^^^^^^^^^^^^^ +parse_tcl_dict +^^^^^^^^^^^^^^^^^^^^^^^ + +When a python script calls a Tcl command that returns a dict via the eggdrop.tcl module, the return value will be a Tcl-formatted dict- also simply known as a string. The ``parse_tcl_dict`` command will convert the Tcl-formatted dict into a Python list, which can then freely be used within the Python script. + +-------------------------------- +Writing an Eggdrop Python script +-------------------------------- + +Some example scripts, complete with documentation, are included with the Python module that ships with Eggdrop (src/mod/python.mod/scripts). These scripts are included to help demonstrate script formatting and usage. The scripts are: + + +.. glossary:: + + bestfriend.py + This example script demonstrates how to use the parse_tcl_list() python command to convert a list returned by a Tcl command into a list that is usable by Python. + + greet.py + This is a very basic script that demonstrates how a Python script with binds can be run by Eggdrop. + + imdb.py + This script shows how to use an existing third-party module to extend a Python script, in this case retrieving information from imdb.com. + + listtls.py + This script demonstrates how to use parse-tcl_list() and parse_tcl_dict() to convert a list of dicts provided by Tcl into something that is usable by Python. + + urltitle.py + This script shows how to use an existing third-party module to extend a Python script, in this case using an http parser to collect title information from a provided web page. + + +^^^^^^^^^^^^^^ +Header section +^^^^^^^^^^^^^^ + +Python is able to call any Tcl command by importing the ``eggdrop`` module. For example, to use the ``putlog`` command in a python script, you would import it as:: + + from eggdrop.tcl import putlog + +and then call it using:: + + putlog("This is a logged message") + + +An important difference to note is that Eggdrop Python has its own ``bind`` command implemented. You will generally want to create binds using the Python ``bind`` command and not import bind from eggdrop.tcl because a Python bind will call a Python function, whereas using the Tcl bind will call a Tcl function (not one from the script you are writing). + +Where does python print go? + +------------------------------------- +Writing a module for use with Eggdrop +------------------------------------- + +This is how you import a module for use with an egg python script. + +Copyright (C) 2000 - 2024 Eggheads Development Team + diff --git a/eggdrop.conf b/eggdrop.conf index 86ac99e64..520e8546d 100755 --- a/eggdrop.conf +++ b/eggdrop.conf @@ -656,6 +656,7 @@ loadmodule pbkdf2 # This setting is planned to be enabled by default in Eggdrop 2.0. #set remove-pass 0 + #### BLOWFISH MODULE #### # # This module is planned to be removed in Eggdrop 2.0 @@ -676,21 +677,14 @@ loadmodule blowfish set blowfish-use-mode cbc -#### DNS MODULE (Deprecated) #### - -## This module provided asynchronous dns support, but as of v1.9.2, this -## functionality was moved into the core code. If you are having issues with the -## new DNS functionality, or just want to continue using this module, compile -## Eggdrop with the --disable-tdns flag (./configure --disdable-tdns). -# -## You really probably don't want to uncomment this!!!! +#### PYTHON MODULE ##### # -#loadmodule dns -#set dns-servers "8.8.8.8 1.1.1.1 185.222.222.222" -#set dns-cache 86400 -#set dns-negcache 600 -#set dns-maxsends 4 -#set dns-retrydelay 3 +# This module gives Eggdrop the ability to run python scripts. if loaded, +# Python scripts can be loaded at the end of the config file using the pysouce +# command to tell Eggdrop where the file is loaded. The module requires Python +# version 3.8 or higher to run. To load the python module, uncomment it below. +#loadmodule python + #### CHANNELS MODULE #### @@ -1448,6 +1442,7 @@ set xfer-timeout 30 # be v1.9.0 or higher). #set sharefail-unlink 1 + #### SHARE MODULE #### # This module provides userfile sharing support between two directly diff --git a/src/mod/python.mod/scripts/urlTitle.py b/src/mod/python.mod/scripts/urlTitle.py index f8b498226..b2d35899a 100644 --- a/src/mod/python.mod/scripts/urlTitle.py +++ b/src/mod/python.mod/scripts/urlTitle.py @@ -17,6 +17,7 @@ def pubGetTitle(nick, host, handle, channel, text, **kwargs): try: reqs = requests.get(text) soup = BeautifulSoup(reqs.text, 'html.parser') + putlog("Found title for "+text) putmsg(channel, "The title of the webpage is: "+soup.find_all('title')[0].get_text()) except Exception as e: putmsg(channel, "Error: " + str(e)) From ee8b2d314720db7d4bd53e16fc1fd8c1994c5287 Mon Sep 17 00:00:00 2001 From: Thomas Sader Date: Sat, 29 Jun 2024 18:26:56 +0200 Subject: [PATCH 72/91] Allow python threads and async io Patch by: thommey Python threads were not given a chance to run in the background so far because we held onto the GIL. Now we release it around our select() which should give Python threads or asyncio runners (in a separate thread) enough room to work. The concern of having multithreaded code call into our Tcl interpreter against its will turns out to be unwarranted - the GIL takes care of this. --- configure | 3 +-- src/Makefile.in | 3 ++- src/main.c | 4 ++++ src/mod/compress.mod/configure | 2 +- src/mod/dns.mod/configure | 2 +- src/mod/modvals.h | 6 +++++- src/mod/python.mod/configure | 2 +- src/mod/python.mod/python.c | 16 ++++++++++++++++ src/net.c | 3 +++ 9 files changed, 34 insertions(+), 7 deletions(-) diff --git a/configure b/configure index 4b2385d1d..a59374034 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 95f630ee. +# From configure.ac 9068a673. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for Eggdrop 1.9.5. # @@ -10638,7 +10638,6 @@ printf "%s\n" "#define EGG_TDNS 1" >>confdefs.h # Check for Python -EGG_PYTHON_ENABLE # Check whether --with-python-config was given. diff --git a/src/Makefile.in b/src/Makefile.in index 4a3cc4d7e..21e359131 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -176,7 +176,8 @@ modules.o: modules.c main.h ../config.h ../eggint.h ../lush.h lang.h \ net.o: net.c main.h ../config.h ../eggint.h ../lush.h lang.h eggdrop.h \ compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h tclhash.h \ chan.h users.h compat/compat.h compat/base64.h compat/inet_aton.h \ - ../src/main.h compat/snprintf.h compat/explicit_bzero.h compat/strlcpy.h + ../src/main.h compat/snprintf.h compat/explicit_bzero.h compat/strlcpy.h \ + modules.h mod/modvals.h rfc1459.o: rfc1459.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ diff --git a/src/main.c b/src/main.c index 82ed9ef80..e78b18dd3 100644 --- a/src/main.c +++ b/src/main.c @@ -1023,6 +1023,10 @@ int main(int arg_c, char **arg_v) sigaction(SIGILL, &sv, NULL); sv.sa_handler = got_alarm; sigaction(SIGALRM, &sv, NULL); + // Added for python.mod because the _signal handler otherwise overwrites it + // see https://discuss.python.org/t/asyncio-skipping-signal-handling-setup-during-import-for-python-embedded-context/37054/6 + sv.sa_handler = got_term; + sigaction(SIGINT, &sv, NULL); /* Initialize variables and stuff */ now = time(NULL); diff --git a/src/mod/compress.mod/configure b/src/mod/compress.mod/configure index 1c23a76d4..2d3dc6c26 100755 --- a/src/mod/compress.mod/configure +++ b/src/mod/compress.mod/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 95f630ee. +# From configure.ac 9068a673. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for Eggdrop Compress Module 1.9.5. # diff --git a/src/mod/dns.mod/configure b/src/mod/dns.mod/configure index 6f348a637..7a99e8b4f 100755 --- a/src/mod/dns.mod/configure +++ b/src/mod/dns.mod/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 95f630ee. +# From configure.ac 9068a673. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for Eggdrop DNS Module 1.9.5. # diff --git a/src/mod/modvals.h b/src/mod/modvals.h index 6b955cad3..a840e09cf 100644 --- a/src/mod/modvals.h +++ b/src/mod/modvals.h @@ -39,7 +39,11 @@ #define HOOK_LOADED 13 #define HOOK_BACKUP 14 #define HOOK_DIE 15 -#define REAL_HOOKS 16 +#define HOOK_PRE_SELECT 16 +#define HOOK_POST_SELECT 17 + +#define REAL_HOOKS 18 + #define HOOK_SHAREOUT 105 #define HOOK_SHAREIN 106 #define HOOK_ENCRYPT_PASS 107 diff --git a/src/mod/python.mod/configure b/src/mod/python.mod/configure index f5bb2e5c7..6b0a130f5 100755 --- a/src/mod/python.mod/configure +++ b/src/mod/python.mod/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 95f630ee. +# From configure.ac 9068a673. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for Eggdrop Python Module 1.10.0. # diff --git a/src/mod/python.mod/python.c b/src/mod/python.mod/python.c index 7a4ed7fce..9ce10d673 100644 --- a/src/mod/python.mod/python.c +++ b/src/mod/python.mod/python.c @@ -43,6 +43,7 @@ static PyObject *pirp, *pglobals; #undef global static Function *global = NULL, *irc_funcs = NULL; +static PyThreadState *_pythreadsave; #include "src/mod/python.mod/pycmds.c" #include "src/mod/python.mod/tclpython.c" @@ -53,6 +54,16 @@ static int python_expmem() return 0; // TODO } +static int python_gil_unlock() { + _pythreadsave = PyEval_SaveThread(); + return 0; +} + +static int python_gil_lock() { + PyEval_RestoreThread(_pythreadsave); + return 0; +} + // TODO: Do we really have to exit eggdrop on module load failure? static void init_python() { PyObject *pmodule; @@ -119,6 +130,8 @@ static void python_report(int idx, int details) static char *python_close() { Context; + del_hook(HOOK_PRE_SELECT, (Function)python_gil_unlock); + del_hook(HOOK_POST_SELECT, (Function)python_gil_lock); kill_python(); rem_builtins(H_dcc, mydcc); rem_tcl_commands(my_tcl_cmds); @@ -160,5 +173,8 @@ char *python_start(Function *global_funcs) /* Add command table to bind list */ add_builtins(H_dcc, mydcc); add_tcl_commands(my_tcl_cmds); + add_hook(HOOK_PRE_SELECT, (Function)python_gil_unlock); + add_hook(HOOK_POST_SELECT, (Function)python_gil_lock); + return NULL; } diff --git a/src/net.c b/src/net.c index 3e23acb97..6ec1d5b3a 100644 --- a/src/net.c +++ b/src/net.c @@ -27,6 +27,7 @@ #include #include "main.h" +#include "modules.h" #include #include #include @@ -924,11 +925,13 @@ int sockread(char *s, int *len, sock_list *slist, int slistmax, int tclonly) t.tv_sec = td->blocktime.tv_sec; t.tv_usec = td->blocktime.tv_usec; + call_hook(HOOK_PRE_SELECT); x = select((SELECT_TYPE_ARG1) maxfd + 1, SELECT_TYPE_ARG234 (maxfd_r >= 0 ? &fdr : NULL), SELECT_TYPE_ARG234 (maxfd_w >= 0 ? &fdw : NULL), SELECT_TYPE_ARG234 (maxfd_e >= 0 ? &fde : NULL), SELECT_TYPE_ARG5 &t); + call_hook(HOOK_POST_SELECT); if (x == -1) return -2; /* socket error */ if (x == 0) From 5c34bd631d93f0cfd8efa3424b5e6369dcab250b Mon Sep 17 00:00:00 2001 From: Thomas Sader Date: Sun, 30 Jun 2024 18:48:53 +0200 Subject: [PATCH 73/91] Fix module export for get_user_from_member (#1633) Found by: Mystery-X Patch by: thommey Also enable RTLD_NOW linking so module loading fails as early as possible. --- src/mod/module.h | 1 + src/modules.c | 9 +++------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/mod/module.h b/src/mod/module.h index 488664322..9f84411ea 100644 --- a/src/mod/module.h +++ b/src/mod/module.h @@ -527,6 +527,7 @@ typedef void (*chanout_butfunc)(int, int, const char *, ...) ATTRIBUTE_FORMAT(pr #define lookup_user_record ((struct userrec * (*)(memberlist *, char *, char *))global[323]) /* 324 - 327 */ #define find_member_from_nick ((memberlist * (*) (char *))global[324]) +#define get_user_from_member ((struct userrec * (*) (memberlist *))global[325]) /* hostmasking */ diff --git a/src/modules.c b/src/modules.c index b2ebf37ae..e9e7a759f 100644 --- a/src/modules.c +++ b/src/modules.c @@ -60,11 +60,7 @@ # ifndef RTLD_NOW # define RTLD_NOW 1 # endif -# ifdef RTLD_LAZY -# define DLFLAGS RTLD_LAZY|RTLD_GLOBAL -# else -# define DLFLAGS RTLD_NOW|RTLD_GLOBAL -# endif +# define DLFLAGS RTLD_NOW|RTLD_GLOBAL # endif /* MOD_USE_DL */ #endif /* !STATIC */ @@ -629,7 +625,8 @@ Function global_table[] = { (Function) & argv0, (Function) lookup_user_record, /* 324 - 327 */ - (Function) find_member_from_nick + (Function) find_member_from_nick, + (Function) get_user_from_member, }; void init_modules(void) From ffb125c164d630be72c73b0dd75805a849802d05 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sat, 6 Jul 2024 16:36:15 +0200 Subject: [PATCH 74/91] Enhance ssl log --- src/net.c | 7 ++++++- src/tls.c | 36 ++++++++++++++++++++++++++++++------ 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/net.c b/src/net.c index 6ec1d5b3a..53d55546d 100644 --- a/src/net.c +++ b/src/net.c @@ -976,7 +976,12 @@ int sockread(char *s, int *len, sock_list *slist, int slistmax, int tclonly) { if (slist[i].ssl) { x = SSL_read(slist[i].ssl, s, grab); - if (x < 0) { + if (!x && (SSL_get_shutdown(slist[i].ssl) == SSL_RECEIVED_SHUTDOWN)) { + *len = slist[i].sock; + slist[i].flags &= ~SOCK_CONNECT; + debug1("net: SSL_read(): received shutdown sock %i", slist[i].sock); + return -1; + } else if (x < 0) { int err = SSL_get_error(slist[i].ssl, x); if (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE) errno = EAGAIN; diff --git a/src/tls.c b/src/tls.c index 180af6b37..d3af0c6ea 100644 --- a/src/tls.c +++ b/src/tls.c @@ -531,6 +531,12 @@ static char *ssl_printname(X509_NAME *name) /* X509_NAME_oneline() is easier and shorter, but is deprecated and the manual discourages it's usage, so let's not be lazy ;) */ + if (!bio) { + debug0("TLS: ssl_printname(): BIO_new(): error"); + buf = nmalloc(1); + *buf = 0; + return buf; + } if (X509_NAME_print_ex(bio, name, 0, XN_FLAG_ONELINE & ~XN_FLAG_SPC_EQ)) { len = BIO_get_mem_data(bio, &data); if (len > 0) { @@ -564,6 +570,12 @@ static char *ssl_printtime(ASN1_UTCTIME *t) char *data, *buf; BIO *bio = BIO_new(BIO_s_mem()); + if (!bio) { + debug0("TLS: ssl_printtime(): BIO_new(): error"); + buf = nmalloc(1); + *buf = 0; + return buf; + } ASN1_UTCTIME_print(bio, t); len = BIO_get_mem_data(bio, &data); if (len > 0) { @@ -591,6 +603,12 @@ static char *ssl_printnum(ASN1_INTEGER *i) char *data, *buf; BIO *bio = BIO_new(BIO_s_mem()); + if (!bio) { + debug0("TLS: ssl_printnum(): BIO_new(): error"); + buf = nmalloc(1); + *buf = 0; + return buf; + } i2a_ASN1_INTEGER(bio, i); len = BIO_get_mem_data(bio, &data); if (len > 0) { @@ -712,7 +730,7 @@ int ssl_verify(int ok, X509_STORE_CTX *ctx) !(data->verify & TLS_VERIFYFROM)) || ((err == X509_V_ERR_CERT_HAS_EXPIRED) && !(data->verify & TLS_VERIFYTO))) { - debug1("TLS: peer certificate warning: %s", + putlog(data->loglevel, "*", "TLS: peer certificate warning: %s", X509_verify_cert_error_string(err)); ok = 1; } @@ -799,7 +817,7 @@ static void ssl_info(const SSL *ssl, int where, int ret) SSL_alert_desc_string_long(ret)); } else { /* Ignore close notify warnings */ - debug1("Received close notify warning during %s", + debug1("TLS: Received close notify during %s", (where & SSL_CB_READ) ? "read" : "write"); } } else if (where & SSL_CB_EXIT) { @@ -819,10 +837,16 @@ static void ssl_info(const SSL *ssl, int where, int ret) SSL_state_string_long(ssl)); } } - } else { - /* Display the state of the engine for debugging purposes */ - debug1("TLS: state change: %s", SSL_state_string_long(ssl)); } + /* Display the state of the engine for debugging purposes */ + else if (where == SSL_CB_HANDSHAKE_START) + debug1("TLS: handshake start: %s", SSL_state_string_long(ssl)); + else if (where == SSL_CB_CONNECT_LOOP) + debug1("TLS: connect loop: %s", SSL_state_string_long(ssl)); + else if (where == SSL_CB_ACCEPT_LOOP) + debug1("TLS: accept loop: %s", SSL_state_string_long(ssl)); + else + debug1("TLS: state change: %s", SSL_state_string_long(ssl)); } /* Switch a socket to SSL communication @@ -902,9 +926,9 @@ int ssl_handshake(int sock, int flags, int verify, int loglevel, char *host, SSL_set_mode(td->socklist[i].ssl, SSL_MODE_ENABLE_PARTIAL_WRITE | SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER); if (data->flags & TLS_CONNECT) { - struct timespec req = { 0, 1000000L }; SSL_set_verify(td->socklist[i].ssl, SSL_VERIFY_PEER, ssl_verify); /* Introduce 1ms lag so an unpatched hub has time to setup the ssl handshake */ + const struct timespec req = { 0, 1000000L }; nanosleep(&req, NULL); #ifdef SSL_set_tlsext_host_name if (*data->host) From c635a8df73363551d60f7cb4940882f514750fac Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sat, 6 Jul 2024 16:43:37 +0200 Subject: [PATCH 75/91] Restore exported functions for module back-compat --- src/modules.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/modules.c b/src/modules.c index e9e7a759f..1fd1dfb97 100644 --- a/src/modules.c +++ b/src/modules.c @@ -297,7 +297,7 @@ Function global_table[] = { (Function) open_telnet, /* 88 - 91 */ (Function) check_tcl_event, - (Function) 0, /* was egg_memcpy -- use memcpy() instead */ + (Function) memcpy, /* was egg_memcpy -- use memcpy() instead */ (Function) my_atoul, (Function) my_strcpy, /* 92 - 95 */ @@ -520,10 +520,10 @@ Function global_table[] = { /* 252 - 255 */ (Function) egg_snprintf, (Function) egg_vsnprintf, - (Function) 0, /* was egg_memset -- use memset() or egg_bzero() instead */ - (Function) 0, /* was egg_strcasecmp -- use strcasecmp() instead */ + (Function) memset, /* was egg_memset -- use memset() or egg_bzero() instead */ + (Function) strcasecmp, /* was egg_strcasecmp -- use strcasecmp() instead */ /* 256 - 259 */ - (Function) 0, /* was egg_strncasecmp -- use strncasecmp() instead */ + (Function) strncasecmp, /* was egg_strncasecmp -- use strncasecmp() instead */ (Function) is_file, (Function) & must_be_owner, /* int */ (Function) & tandbot, /* tand_t * */ From e23f8b7efea9071952473962e9b0b45c8e4ac0ac Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sat, 6 Jul 2024 17:14:34 +0200 Subject: [PATCH 76/91] Remove runtime python version check artifact --- src/mod/python.mod/python.c | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/src/mod/python.mod/python.c b/src/mod/python.mod/python.c index 9ce10d673..b2521661e 100644 --- a/src/mod/python.mod/python.c +++ b/src/mod/python.mod/python.c @@ -31,7 +31,6 @@ #undef interp #define tclinterp (*(Tcl_Interp **)(global[128])) #undef days -#include #include #include #include "src/mod/irc.mod/irc.h" @@ -64,42 +63,33 @@ static int python_gil_lock() { return 0; } -// TODO: Do we really have to exit eggdrop on module load failure? -static void init_python() { +static char *init_python() { PyObject *pmodule; PyStatus status; PyConfig config; - if (PY_VERSION_HEX < 0x0308) { - putlog(LOG_MISC, "*", "Python: Python version %d is lower than 3.8, not loading Python module", PY_VERSION_HEX); - return; - } PyConfig_InitPythonConfig(&config); config.install_signal_handlers = 0; config.parse_argv = 0; status = PyConfig_SetBytesString(&config, &config.program_name, argv0); if (PyStatus_Exception(status)) { PyConfig_Clear(&config); - putlog(LOG_MISC, "*", "Python: Fatal error: Could not set program base path"); - Py_ExitStatusException(status); + return "Python: Fatal error: Could not set program base path"; } if (PyImport_AppendInittab("eggdrop", &PyInit_eggdrop) == -1) { - putlog(LOG_MISC, "*", "Python: Error: could not extend in-built modules table"); - exit(1); + PyConfig_Clear(&config); + return "Python: Error: could not extend in-built modules table"; } status = Py_InitializeFromConfig(&config); if (PyStatus_Exception(status)) { PyConfig_Clear(&config); - putlog(LOG_MISC, "*", "Python: Fatal error: Could not initialize config"); - fatal(1); + return "Python: Fatal error: Could not initialize config"; } PyConfig_Clear(&config); PyDateTime_IMPORT; pmodule = PyImport_ImportModule("eggdrop"); if (!pmodule) { - PyErr_Print(); - putlog(LOG_MISC, "*", "Error: could not import module 'eggdrop'"); - fatal(1); + return "Error: could not import module 'eggdrop'"; } pirp = PyImport_AddModule("__main__"); @@ -111,7 +101,7 @@ static void init_python() { PyRun_SimpleString("import eggdrop"); PyRun_SimpleString("sys.displayhook = eggdrop.__displayhook__"); - return; + return NULL; } static void kill_python() { @@ -148,6 +138,7 @@ static Function python_table[] = { char *python_start(Function *global_funcs) { + char *s; /* Assign the core function table. After this point you use all normal * functions defined in src/mod/modules.h */ @@ -168,7 +159,8 @@ char *python_start(Function *global_funcs) } // irc.mod depends on server.mod and channels.mod, so those were implicitely loaded - init_python(); + if ((s = init_python())) + return s; /* Add command table to bind list */ add_builtins(H_dcc, mydcc); From df66050905c366a35cbae74c1b180e51e838722a Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sat, 6 Jul 2024 17:22:10 +0200 Subject: [PATCH 77/91] Change strncpyz define to strlcpy --- src/mod/module.h | 10 +++++----- src/modules.c | 4 +--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/mod/module.h b/src/mod/module.h index 9f84411ea..efab4174f 100644 --- a/src/mod/module.h +++ b/src/mod/module.h @@ -202,7 +202,7 @@ typedef void (*chanout_butfunc)(int, int, const char *, ...) ATTRIBUTE_FORMAT(pr #define open_telnet ((int (*) (int, char *, int))global[87]) /* 88 - 91 */ #define check_tcl_event ((void (*) (const char *))global[88]) -/* was my_memcpy -- use memcpy() instead */ +/* was my_memcpy() -- use memcpy() instead */ #define my_atoul ((IP(*)(char *))global[90]) #define my_strcpy ((int (*)(char *, const char *))global[91]) /* 92 - 95 */ @@ -426,10 +426,10 @@ typedef void (*chanout_butfunc)(int, int, const char *, ...) ATTRIBUTE_FORMAT(pr /* 252 - 255 */ #define egg_snprintf (global[252]) #define egg_vsnprintf ((int (*)(char *, size_t, const char *, va_list))global[253]) -/* was egg_memset -- use memset() instead */ -/* was egg_strcasecmp -- use strcasecmp instead */ +/* was egg_memset() -- use memset() instead */ +/* was egg_strcasecmp() -- use strcasecmp() instead */ /* 256 - 259 */ -/* was egg_strncasecmp -- use strncasecmp instead */ +/* was egg_strncasecmp() -- use strncasecmp() instead */ #define is_file ((int (*)(const char *))global[257]) #define must_be_owner (*(int *)(global[258])) #define tandbot (*(tand_t **)(global[259])) @@ -497,7 +497,7 @@ typedef void (*chanout_butfunc)(int, int, const char *, ...) ATTRIBUTE_FORMAT(pr # define strlcpy ((size_t (*) (char *, const char *, size_t))global[303]) #endif /* 304 - 307 */ -#define strncpyz ((size_t (*) (char *, const char *, size_t))global[304]) +#define strncpyz strlcpy /* strncpyz() is deprecated, use strlcpy() instead */ #ifndef HAVE_BASE64 # define b64_ntop ((int (*) (uint8_t const *, size_t, char *, size_t))global[305]) # define b64_pton ((int (*) (const char *, uint8_t *, size_t))global[306]) diff --git a/src/modules.c b/src/modules.c index 1fd1dfb97..42b5953ee 100644 --- a/src/modules.c +++ b/src/modules.c @@ -64,8 +64,6 @@ # endif /* MOD_USE_DL */ #endif /* !STATIC */ -#define strncpyz strlcpy - extern struct dcc_t *dcc; extern struct userrec *userlist, *lastuser; extern struct chanset_t *chanset; @@ -591,7 +589,7 @@ Function global_table[] = { (Function) 0, #endif /* 304 - 307 */ - (Function) strncpyz, + (Function) strlcpy, /* was strncpyz() -- use strlcpy() instead */ #ifndef HAVE_BASE64 (Function) b64_ntop, (Function) b64_pton, From 085583e80f64314ef08360fd66531f23c84654b8 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sat, 6 Jul 2024 17:23:28 +0200 Subject: [PATCH 78/91] Only configure modules containing code --- misc/modconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/modconfig b/misc/modconfig index 0fd07b063..a8bb1610d 100755 --- a/misc/modconfig +++ b/misc/modconfig @@ -274,7 +274,7 @@ xdetect-modules) mc_new_mod_state=enabled fi fi - if test "${mc_new_mod_state}" = enabled; then + if test "${mc_new_mod_state}" = enabled && [[ -n $(find $mc_mod_bin_dir/${mc_mod}".mod" -name \*.c) ]]; then ${mc_self_call} -q add ${mc_mod} else ${mc_self_call} -q del ${mc_mod} From c960f05cd48f66f6b94efac9e352417d62463791 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sat, 6 Jul 2024 17:36:04 +0200 Subject: [PATCH 79/91] Add error reporting, increase path limits for module loads --- eggdrop-basic.conf | 5 ++--- eggdrop.conf | 5 ++--- src/modules.c | 13 +++++++++---- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/eggdrop-basic.conf b/eggdrop-basic.conf index d14753d0e..ab54423f7 100755 --- a/eggdrop-basic.conf +++ b/eggdrop-basic.conf @@ -300,9 +300,8 @@ set ssl-capath "/etc/ssl/" ## Eggdrop, things change. ## This path specifies the path were Eggdrop should look for its modules. -## If you run the bot from the compilation directory, you will want to set -## this to "". If you use 'make install' (like all good kiddies do ;), this -## is a fine default. Otherwise, use your head :) +## If you use 'make install' (like all good kiddies do ;), this is a fine +## default. Otherwise, use your head :) set mod-path "modules/" #### CHANNELS MODULE #### diff --git a/eggdrop.conf b/eggdrop.conf index 520e8546d..f41ec0c4b 100755 --- a/eggdrop.conf +++ b/eggdrop.conf @@ -605,9 +605,8 @@ die "Please make sure you edit your config file completely." # Eggdrop, things change. # This path specifies the path were Eggdrop should look for its modules. -# If you run the bot from the compilation directory, you will want to set -# this to "". If you use 'make install' (like all good kiddies do ;), this -# is a fine default. Otherwise, use your head :) +# If you use 'make install' (like all good kiddies do ;), this is a fine +# default. Otherwise, use your head :) set mod-path "modules/" diff --git a/src/modules.c b/src/modules.c index 42b5953ee..0fd005760 100644 --- a/src/modules.c +++ b/src/modules.c @@ -23,6 +23,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include #include #include "main.h" #include "modules.h" @@ -694,6 +695,7 @@ int module_register(char *name, Function *funcs, int major, int minor) const char *module_load(char *name) { + size_t len; module_entry *p; char *e; Function f; @@ -702,7 +704,7 @@ const char *module_load(char *name) #endif #ifndef STATIC - char workbuf[1024]; + char workbuf[PATH_MAX]; # ifdef MOD_USE_SHL shl_t hand; # endif @@ -728,11 +730,14 @@ const char *module_load(char *name) #ifndef STATIC if (moddir[0] != '/') { - if (getcwd(workbuf, 1024) == NULL) + if (getcwd(workbuf, sizeof workbuf) == NULL) { + debug1("modules: getcwd(): %s\n", strerror(errno)); return MOD_BADCWD; - sprintf(&(workbuf[strlen(workbuf)]), "/%s%s." EGG_MOD_EXT, moddir, name); + } + len = strlen(workbuf); + snprintf(workbuf + len, (sizeof workbuf) - len, "/%s%s." EGG_MOD_EXT, moddir, name); } else { - sprintf(workbuf, "%s%s." EGG_MOD_EXT, moddir, name); + snprintf(workbuf, sizeof workbuf, "%s%s." EGG_MOD_EXT, moddir, name); } # ifdef MOD_USE_SHL From 2bf13c3b0cf931105b171dd126ffafe42fc539e2 Mon Sep 17 00:00:00 2001 From: crazycatdevs <44431938+crazycatdevs@users.noreply.github.com> Date: Sat, 6 Jul 2024 17:42:35 +0200 Subject: [PATCH 80/91] Update switch logic Patch by: @crazycatdevs --- eggdrop-basic.conf | 5 +---- eggdrop.conf | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/eggdrop-basic.conf b/eggdrop-basic.conf index ab54423f7..849575610 100755 --- a/eggdrop-basic.conf +++ b/eggdrop-basic.conf @@ -415,10 +415,7 @@ if {[file exists aclocal.m4]} { die {You are attempting to run Eggdrop from the if {[info exists net-type]} { switch -- ${net-type} { - "EFnet" { - # EFnet - source scripts/quotepong.tcl - } + "EFnet" - "0" { # EFnet source scripts/quotepong.tcl diff --git a/eggdrop.conf b/eggdrop.conf index f41ec0c4b..852758286 100755 --- a/eggdrop.conf +++ b/eggdrop.conf @@ -1704,10 +1704,7 @@ loadhelp userinfo.help if {[info exists net-type]} { switch -- ${net-type} { - "EFnet" { - # EFnet - source scripts/quotepong.tcl - } + "EFnet" - "0" { # EFnet source scripts/quotepong.tcl From 31b360ed1b2fc25aa7fb58d22be2a3146668284f Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sat, 6 Jul 2024 17:45:02 +0200 Subject: [PATCH 81/91] Remove strcats --- src/net.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/net.c b/src/net.c index 53d55546d..5a63d5808 100644 --- a/src/net.c +++ b/src/net.c @@ -1224,9 +1224,10 @@ int sockgets(char *s, int *len) /* Might be necessary to prepend stored-up data! */ if (socklist[ret].handler.sock.inbuf != NULL) { p = socklist[ret].handler.sock.inbuf; - socklist[ret].handler.sock.inbuf = nmalloc(strlen(p) + strlen(xx) + 1); - strcpy(socklist[ret].handler.sock.inbuf, p); - strcat(socklist[ret].handler.sock.inbuf, xx); + len2 = strlen(p); + socklist[ret].handler.sock.inbuf = nmalloc(len2 + strlen(xx) + 1); + memcpy(socklist[ret].handler.sock.inbuf, p, len2); + strcpy(socklist[ret].handler.sock.inbuf + len2, xx); nfree(p); if (strlen(socklist[ret].handler.sock.inbuf) < READMAX + 2) { strcpy(xx, socklist[ret].handler.sock.inbuf); @@ -1277,10 +1278,11 @@ int sockgets(char *s, int *len) /* Prepend old data back */ if (socklist[ret].handler.sock.inbuf != NULL) { p = socklist[ret].handler.sock.inbuf; - socklist[ret].handler.sock.inbuflen = strlen(p) + strlen(xx); + len2 = strlen(xx); + socklist[ret].handler.sock.inbuflen = len2 + strlen(p); socklist[ret].handler.sock.inbuf = nmalloc(socklist[ret].handler.sock.inbuflen + 1); - strcpy(socklist[ret].handler.sock.inbuf, xx); - strcat(socklist[ret].handler.sock.inbuf, p); + memcpy(socklist[ret].handler.sock.inbuf, xx, len2); + strcpy(socklist[ret].handler.sock.inbuf + len2, p); nfree(p); } else { socklist[ret].handler.sock.inbuflen = strlen(xx); From e1f8bdcedb311e223ea7f187fa9519b29368c340 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sat, 6 Jul 2024 17:49:27 +0200 Subject: [PATCH 82/91] Fix copyrights Patch by: michaelortmann --- INSTALL | 2 +- README | 2 +- misc/updatecopyright | 4 ++-- src/main.c | 14 +++++++------- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/INSTALL b/INSTALL index 81e2a5184..1db949afb 100644 --- a/INSTALL +++ b/INSTALL @@ -158,5 +158,5 @@ the README file. If not, then READ IT!&@#%@! Have fun with Eggdrop! - Copyright (C) 1997 Robey Pointer Copyright (C) 1999 - 2023 Eggheads + Copyright (C) 1997 Robey Pointer Copyright (C) 1999 - 2024 Eggheads Development Team diff --git a/README b/README index 2d74900ca..468549297 100644 --- a/README +++ b/README @@ -216,5 +216,5 @@ OBTAINING HELP - Don't ask to ask- just state your question, along with any relevant details and error messages -Copyright (C) 1997 Robey Pointer Copyright (C) 1999 - 2023 Eggheads +Copyright (C) 1997 Robey Pointer Copyright (C) 1999 - 2024 Eggheads Development Team diff --git a/misc/updatecopyright b/misc/updatecopyright index a17b5edaf..a220e45d0 100755 --- a/misc/updatecopyright +++ b/misc/updatecopyright @@ -49,8 +49,8 @@ update_copyright() { mv ${i}_ $i fi # Cats and Dogs - sed -i '/Eggdrop v%s (C) 1997 Robey Pointer/c\ "Eggdrop v%s (C) 1997 Robey Pointer (C) 2010-'$YEAR' Eggheads",' src/main.c - sed -i '/Eggdrop v%s+%s (C) 1997 Robey Pointer/c\ "Eggdrop v%s+%s (C) 1997 Robey Pointer (C) 2010-'$YEAR' Eggheads",' src/main.c + sed -i '/Eggdrop v" EGG_STRINGVER " (C) 1997 Robey Pointer (C) 1999-/c\ "Eggdrop v" EGG_STRINGVER " (C) 1997 Robey Pointer (C) 1999-'$YEAR' Eggheads Development Team",' src/main.c + sed -i '/Eggdrop v" EGG_STRINGVER "+" EGG_PATCH " (C) 1997 Robey Pointer (C) 1999-/c\ "Eggdrop v" EGG_STRINGVER "+" EGG_PATCH " (C) 1997 Robey Pointer (C) 1999-'$YEAR' Eggheads Development Team",' src/main.c } diff --git a/src/main.c b/src/main.c index e78b18dd3..0b321d025 100644 --- a/src/main.c +++ b/src/main.c @@ -123,7 +123,7 @@ int make_userfile = 0; /* Using bot in userfile-creation mode? */ int save_users_at = 0; /* Minutes past the hour to save the userfile? */ int notify_users_at = 0; /* Minutes past the hour to notify users of notes? */ -char version[81]; /* Version info (long form) */ +char version[128]; /* Version info (long form) */ char ver[41]; /* Version info (short form) */ volatile sig_atomic_t do_restart = 0; /* .restart has been called, restart ASAP */ @@ -976,15 +976,15 @@ int main(int arg_c, char **arg_v) #ifdef EGG_PATCH egg_snprintf(egg_version, sizeof egg_version, "%s+%s %u", EGG_STRINGVER, EGG_PATCH, egg_numver); egg_snprintf(ver, sizeof ver, "eggdrop v%s+%s", EGG_STRINGVER, EGG_PATCH); - egg_snprintf(version, sizeof version, - "Eggdrop v%s+%s (C) 1997 Robey Pointer (C) 2010-2024 Eggheads", - EGG_STRINGVER, EGG_PATCH); + strlcpy(version, + "Eggdrop v" EGG_STRINGVER "+" EGG_PATCH " (C) 1997 Robey Pointer (C) 1999-2024 Eggheads Development Team", + sizeof version); #else egg_snprintf(egg_version, sizeof egg_version, "%s %u", EGG_STRINGVER, egg_numver); egg_snprintf(ver, sizeof ver, "eggdrop v%s", EGG_STRINGVER); - egg_snprintf(version, sizeof version, - "Eggdrop v%s (C) 1997 Robey Pointer (C) 2010-2024 Eggheads", - EGG_STRINGVER); + strlcpy(version, + "Eggdrop v" EGG_STRINGVER " (C) 1997 Robey Pointer (C) 1999-2024 Eggheads Development Team", + sizeof version); #endif /* For OSF/1 */ From 31d426fbba90b1432849caa8880db35cfd7e2e86 Mon Sep 17 00:00:00 2001 From: Thomas Sader Date: Sat, 6 Jul 2024 19:57:17 +0200 Subject: [PATCH 83/91] Fix for sh-compatibility in 085583e80f64314ef08360fd66531f23c84654b8 --- misc/modconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/modconfig b/misc/modconfig index a8bb1610d..a22acd9dd 100755 --- a/misc/modconfig +++ b/misc/modconfig @@ -274,7 +274,7 @@ xdetect-modules) mc_new_mod_state=enabled fi fi - if test "${mc_new_mod_state}" = enabled && [[ -n $(find $mc_mod_bin_dir/${mc_mod}".mod" -name \*.c) ]]; then + if test "${mc_new_mod_state}" = enabled && test -n "`find $mc_mod_bin_dir/${mc_mod}.mod -name \*.c`"; then ${mc_self_call} -q add ${mc_mod} else ${mc_self_call} -q del ${mc_mod} From da8746235f54a90e87cbfee985726efafce22dda Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 7 Jul 2024 03:36:49 +0200 Subject: [PATCH 84/91] Remove old Contexts --- src/mod/python.mod/python.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/mod/python.mod/python.c b/src/mod/python.mod/python.c index b2521661e..c4221efac 100644 --- a/src/mod/python.mod/python.c +++ b/src/mod/python.mod/python.c @@ -119,7 +119,6 @@ static void python_report(int idx, int details) static char *python_close() { - Context; del_hook(HOOK_PRE_SELECT, (Function)python_gil_unlock); del_hook(HOOK_POST_SELECT, (Function)python_gil_lock); kill_python(); @@ -144,7 +143,6 @@ char *python_start(Function *global_funcs) */ global = global_funcs; - Context; /* Register the module. */ module_register(MODULE_NAME, python_table, 0, 1); From 25683aba274a6a9d983302755266ec834cca9430 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 7 Jul 2024 15:47:50 +0200 Subject: [PATCH 85/91] Remove isacii from configure.ac --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 9a5e1b7c2..86756534d 100644 --- a/configure.ac +++ b/configure.ac @@ -112,7 +112,7 @@ AX_TYPE_SOCKLEN_T AX_CREATE_STDINT_H([eggint.h]) # Checks for functions and their arguments. -AC_CHECK_FUNCS([dprintf explicit_bzero memset_explicit explicit_memset getrandom inet_aton isascii memset_s snprintf strlcpy vsnprintf]) +AC_CHECK_FUNCS([dprintf explicit_bzero memset_explicit explicit_memset getrandom inet_aton memset_s snprintf strlcpy vsnprintf]) AC_FUNC_SELECT_ARGTYPES EGG_FUNC_B64_NTOP AC_FUNC_MMAP From c329e86e9a868455eeaac3e88ae257319bc9ed70 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 7 Jul 2024 21:33:56 +0200 Subject: [PATCH 86/91] Add python configure search paths Patch by: michaelortmann Fixes: #1605 --- src/mod/python.mod/configure.ac | 37 ++++++++++++--------------------- 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/src/mod/python.mod/configure.ac b/src/mod/python.mod/configure.ac index d91c6e503..ddb3f28d2 100644 --- a/src/mod/python.mod/configure.ac +++ b/src/mod/python.mod/configure.ac @@ -21,16 +21,15 @@ python_avail="false" if test "x$egg_enable_python" != "xno"; then if test "x$egg_with_python_config" = "x"; then - AC_PATH_PROGS([python_config_bin], [python3-config python-config python3.12-config python3.11-config python3.10-config python3.9-config python3.8-config]) + # based on serial 20 https://www.gnu.org/software/autoconf-archive/ax_python.html + AC_PATH_PROGS([python_config_bin], [python3-config python3.12-config python3.11-config python3.10-config python3.9-config python3.8-config python-config]) else if test -d "$egg_with_python_config"; then AC_MSG_NOTICE([Checking for python-config binaries in $egg_with_python_config]) - AC_PATH_PROGS([python_config_bin], [python3-config python-config], [], [$egg_with_python_config]) + AC_PATH_PROGS([python_config_bin], [python3-config python3.12-config python3.11-config python3.10-config python3.9-config python3.8-config python-config], [], [$egg_with_python_config]) else if test -x "$egg_with_python_config"; then python_config_bin="$egg_with_python_config" - else - AC_MSG_WARN([Specified --with-python-config=$egg_with_python_config does not exist.]) fi fi fi @@ -66,28 +65,18 @@ version to use, for example '2.3'. This string will be appended to the Python interpreter canonical name.]) -AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]]) - if test -z "$PYTHON"; then - AC_MSG_WARN([Cannot find python$PYTHON_VERSION in your system path]) - if ! $ax_python_devel_optional; then - AC_MSG_ERROR([Giving up, python development not available]) - fi - ax_python_devel_found=no - PYTHON_VERSION="" -fi +PYTHON_VERSION=`echo $PYTHON_LDFLAGS | sed 's/.*-lpython\(.*[[0-9]]\).*/\1/'` # Check for python version - python_ver=`$PYTHON -c "import sys; \ - print(sys.version.split ()[[0]])"` - AX_COMPARE_VERSION([$python_ver],[ge],[3.8.0], [ax_check_ver="yes"], [ax_check_ver="no"]) - AC_MSG_CHECKING([$PYTHON version is >= 3.8.0]) - if test "x$ax_check_ver" = x"no"; then - python_avail="false" - AC_MSG_RESULT([no ($python_ver)]) - AC_MSG_WARN([Eggdrop requires python version 3.8.0 or higher]) - else - AC_MSG_RESULT([yes ($python_ver)]) - fi +AX_COMPARE_VERSION([$PYTHON_VERSION],[ge],[3.8.0], [ax_check_ver="yes"], [ax_check_ver="no"]) +AC_MSG_CHECKING([python version is >= 3.8.0]) +if test "x$ax_check_ver" = x"no"; then + python_avail="false" + AC_MSG_RESULT([no ($PYTHON_VERSION)]) + AC_MSG_WARN([Eggdrop requires python version 3.8.0 or higher]) +else + AC_MSG_RESULT([yes ($PYTHON_VERSION)]) +fi # Disable the module if test "x$python_avail" = "xfalse"; then From 4af46aa3eea1e5eaec72c08a1cbe4afe8fb29b1a Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 6 Jul 2024 13:35:31 -0400 Subject: [PATCH 87/91] run autotools --- configure | 2 +- src/mod/compress.mod/configure | 2 +- src/mod/dns.mod/configure | 2 +- src/mod/python.mod/configure | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/configure b/configure index a59374034..d4e60c1f6 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 9068a673. +# From configure.ac e1f8bdce. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for Eggdrop 1.9.5. # diff --git a/src/mod/compress.mod/configure b/src/mod/compress.mod/configure index 2d3dc6c26..5ffba9dc5 100755 --- a/src/mod/compress.mod/configure +++ b/src/mod/compress.mod/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 9068a673. +# From configure.ac e1f8bdce. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for Eggdrop Compress Module 1.9.5. # diff --git a/src/mod/dns.mod/configure b/src/mod/dns.mod/configure index 7a99e8b4f..7b706fb9b 100755 --- a/src/mod/dns.mod/configure +++ b/src/mod/dns.mod/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 9068a673. +# From configure.ac e1f8bdce. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for Eggdrop DNS Module 1.9.5. # diff --git a/src/mod/python.mod/configure b/src/mod/python.mod/configure index 6b0a130f5..4f5e64077 100755 --- a/src/mod/python.mod/configure +++ b/src/mod/python.mod/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 9068a673. +# From configure.ac e1f8bdce. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for Eggdrop Python Module 1.10.0. # From 1e47285ce9c87781f3646cc154321527c35edb7f Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 7 Jul 2024 15:38:46 -0400 Subject: [PATCH 88/91] run autotools/makedepend --- config.h.in | 3 -- configure | 8 +-- src/mod/compress.mod/configure | 2 +- src/mod/dns.mod/configure | 2 +- src/mod/python.mod/configure | 94 +++++++--------------------------- 5 files changed, 21 insertions(+), 88 deletions(-) diff --git a/config.h.in b/config.h.in index 22e26d5c8..4ac55ced2 100644 --- a/config.h.in +++ b/config.h.in @@ -132,9 +132,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H -/* Define to 1 if you have the `isascii' function. */ -#undef HAVE_ISASCII - /* Define to 1 if you have the `crypto' library (-lcrypto). */ #undef HAVE_LIBCRYPTO diff --git a/configure b/configure index d4e60c1f6..9c1c4eeb9 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac e1f8bdce. +# From configure.ac 4af46aa3. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for Eggdrop 1.9.5. # @@ -8218,12 +8218,6 @@ if test "x$ac_cv_func_inet_aton" = xyes then : printf "%s\n" "#define HAVE_INET_ATON 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "isascii" "ac_cv_func_isascii" -if test "x$ac_cv_func_isascii" = xyes -then : - printf "%s\n" "#define HAVE_ISASCII 1" >>confdefs.h - fi ac_fn_c_check_func "$LINENO" "memset_s" "ac_cv_func_memset_s" if test "x$ac_cv_func_memset_s" = xyes diff --git a/src/mod/compress.mod/configure b/src/mod/compress.mod/configure index 5ffba9dc5..21927d124 100755 --- a/src/mod/compress.mod/configure +++ b/src/mod/compress.mod/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac e1f8bdce. +# From configure.ac 4af46aa3. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for Eggdrop Compress Module 1.9.5. # diff --git a/src/mod/dns.mod/configure b/src/mod/dns.mod/configure index 7b706fb9b..54e38bf94 100755 --- a/src/mod/dns.mod/configure +++ b/src/mod/dns.mod/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac e1f8bdce. +# From configure.ac 4af46aa3. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for Eggdrop DNS Module 1.9.5. # diff --git a/src/mod/python.mod/configure b/src/mod/python.mod/configure index 4f5e64077..def84c793 100755 --- a/src/mod/python.mod/configure +++ b/src/mod/python.mod/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac e1f8bdce. +# From configure.ac 4af46aa3. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for Eggdrop Python Module 1.10.0. # @@ -623,7 +623,6 @@ ac_unique_file="python.c" ac_subst_vars='LTLIBOBJS LIBOBJS AWK -PYTHON PYTHON_VERSION PYTHON_LDFLAGS PYTHON_CFLAGS @@ -1924,7 +1923,8 @@ python_avail="false" if test "x$egg_enable_python" != "xno"; then if test "x$egg_with_python_config" = "x"; then - for ac_prog in python3-config python-config python3.12-config python3.11-config python3.10-config python3.9-config python3.8-config + # based on serial 20 https://www.gnu.org/software/autoconf-archive/ax_python.html + for ac_prog in python3-config python3.12-config python3.11-config python3.10-config python3.9-config python3.8-config python-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -1978,7 +1978,7 @@ done if test -d "$egg_with_python_config"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Checking for python-config binaries in $egg_with_python_config" >&5 printf "%s\n" "$as_me: Checking for python-config binaries in $egg_with_python_config" >&6;} - for ac_prog in python3-config python-config + for ac_prog in python3-config python3.12-config python3.11-config python3.10-config python3.9-config python3.8-config python-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -2031,9 +2031,6 @@ done else if test -x "$egg_with_python_config"; then python_config_bin="$egg_with_python_config" - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Specified --with-python-config=$egg_with_python_config does not exist." >&5 -printf "%s\n" "$as_me: WARNING: Specified --with-python-config=$egg_with_python_config does not exist." >&2;} fi fi fi @@ -2081,65 +2078,10 @@ fi # Check python path -# Extract the first word of "python[$PYTHON_VERSION]", so it can be a program name with args. -set dummy python$PYTHON_VERSION; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_PYTHON+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $PYTHON in - [\\/]* | ?:[\\/]*) - ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PYTHON=$ac_cv_path_PYTHON -if test -n "$PYTHON"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -printf "%s\n" "$PYTHON" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - - if test -z "$PYTHON"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find python$PYTHON_VERSION in your system path" >&5 -printf "%s\n" "$as_me: WARNING: Cannot find python$PYTHON_VERSION in your system path" >&2;} - if ! $ax_python_devel_optional; then - as_fn_error $? "Giving up, python development not available" "$LINENO" 5 - fi - ax_python_devel_found=no - PYTHON_VERSION="" -fi +PYTHON_VERSION=`echo $PYTHON_LDFLAGS | sed 's/.*-lpython\(.*[0-9]\).*/\1/'` # Check for python version - python_ver=`$PYTHON -c "import sys; \ - print(sys.version.split ()[0])"` - for ac_prog in gawk mawk nawk awk +for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -2198,7 +2140,7 @@ done # 0001001200050617. In other words, each number is zero padded to four # digits, and non digits are removed. - ax_compare_version_A=`echo "$python_ver" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ + ax_compare_version_A=`echo "$PYTHON_VERSION" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ @@ -2222,18 +2164,18 @@ x$ax_compare_version_B" | sed 's/^ *//' | sort -r | sed "s/x${ax_compare_version else ax_check_ver="no" fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking $PYTHON version is >= 3.8.0" >&5 -printf %s "checking $PYTHON version is >= 3.8.0... " >&6; } - if test "x$ax_check_ver" = x"no"; then - python_avail="false" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no ($python_ver)" >&5 -printf "%s\n" "no ($python_ver)" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Eggdrop requires python version 3.8.0 or higher" >&5 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking python version is >= 3.8.0" >&5 +printf %s "checking python version is >= 3.8.0... " >&6; } +if test "x$ax_check_ver" = x"no"; then + python_avail="false" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no ($PYTHON_VERSION)" >&5 +printf "%s\n" "no ($PYTHON_VERSION)" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Eggdrop requires python version 3.8.0 or higher" >&5 printf "%s\n" "$as_me: WARNING: Eggdrop requires python version 3.8.0 or higher" >&2;} - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes ($python_ver)" >&5 -printf "%s\n" "yes ($python_ver)" >&6; } - fi +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes ($PYTHON_VERSION)" >&5 +printf "%s\n" "yes ($PYTHON_VERSION)" >&6; } +fi # Disable the module if test "x$python_avail" = "xfalse"; then From 6649e8dffcbff86fdb77c2ca4f160e6688966846 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 7 Jul 2024 22:28:49 +0200 Subject: [PATCH 89/91] Add tcl pbkdf2 function Patch by: michaelortmann Useful for tcl scripts that add SASL SCRAM mechanism which, when implemented in Tcl, are very slow. This PR will help with a fast replacement function exported by eggdrop. The new tcl function pbkdf2() returns as hexadecimal string by default and -bin by option, which is similar, to what tcllibs sha256() does (older tcllibs md5 had it the other way around), see https://core.tcl-lang.org/tcllib/doc/trunk/embedded/md/tcllib/files/modules/sha1/sha256.md --- doc/sphinx_source/using/tcl-commands.rst | 20 +++++++ src/mod/pbkdf2.mod/pbkdf2.c | 18 +----- src/mod/pbkdf2.mod/tclpbkdf2.c | 70 ++++++++++++++++++++++++ 3 files changed, 92 insertions(+), 16 deletions(-) create mode 100644 src/mod/pbkdf2.mod/tclpbkdf2.c diff --git a/doc/sphinx_source/using/tcl-commands.rst b/doc/sphinx_source/using/tcl-commands.rst index 6a662052c..339c728c3 100644 --- a/doc/sphinx_source/using/tcl-commands.rst +++ b/doc/sphinx_source/using/tcl-commands.rst @@ -2200,6 +2200,26 @@ setflags [ [channel]] Module: filesys +PBKDF2 Module +------------- + +^^^^^^^^^^^^^^^ +encpass2 +^^^^^^^^^^^^^^^ + + + Returns: a hash in the format of "$pbkdf2-$rounds=$$" where digest is the digest set in the config variable pbkdf2-method, rounds is the number of rounds set in the config variable pbkdf2-rounds, salt is the base64 salt used to generate the hash, and hash is the generated base64 hash. + + Module: pbkdf2 + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +pbkdf2 [-bin] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + Returns: a derived key from the provided "pass" string using "salt" and "rounds" count as specified in RFC 2898 as a hexadecimal string. Using the optional -bin flag will return the result as binary data. + + Module: pbkdf2 + Miscellaneous Commands ---------------------- diff --git a/src/mod/pbkdf2.mod/pbkdf2.c b/src/mod/pbkdf2.mod/pbkdf2.c index 169d92bc8..2eda85038 100644 --- a/src/mod/pbkdf2.mod/pbkdf2.c +++ b/src/mod/pbkdf2.mod/pbkdf2.c @@ -8,6 +8,7 @@ */ #include "src/mod/module.h" +#include "src/mod/pbkdf2.mod/tclpbkdf2.c" #if OPENSSL_VERSION_NUMBER >= 0x1000000fL /* 1.0.0 */ #define MODULE_NAME "encryption2" @@ -108,7 +109,7 @@ static char *pbkdf2_hash(const char *pass, const char *digest_name, digestlen, buf)) { explicit_bzero(buf, digestlen); explicit_bzero(out, outlen); - putlog(LOG_MISC, "*", "PBKDF2 error: PKCS5_PBKDF2_HMAC(): %s.", + putlog(LOG_MISC, "*", "PBKDF2 key derivation error: %s.", ERR_error_string(ERR_get_error(), NULL)); nfree(buf); return NULL; @@ -223,21 +224,6 @@ static char *pbkdf2_verify(const char *pass, const char *encrypted) return (char *) encrypted; } -static int tcl_encpass2 STDVAR -{ - BADARGS(2, 2, " string"); - if (strlen(argv[1]) > 0) - Tcl_AppendResult(irp, pbkdf2_encrypt(argv[1]), NULL); - else - Tcl_AppendResult(irp, "", NULL); - return TCL_OK; -} - -static tcl_cmds my_tcl_cmds[] = { - {"encpass2", tcl_encpass2}, - {NULL, NULL} -}; - static tcl_ints my_tcl_ints[] = { {"pbkdf2-re-encode", &pbkdf2_re_encode, 0}, {"pbkdf2-rounds", &pbkdf2_rounds, 0}, diff --git a/src/mod/pbkdf2.mod/tclpbkdf2.c b/src/mod/pbkdf2.mod/tclpbkdf2.c new file mode 100644 index 000000000..8fa7bf8dd --- /dev/null +++ b/src/mod/pbkdf2.mod/tclpbkdf2.c @@ -0,0 +1,70 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * tclpbkdf2.c -- tcl functions for pbkdf2.mod + * + * Written by thommey and Michael Ortmann + * + * Copyright (C) 2017 - 2024 Eggheads Development Team + */ + +#include +#include + +static char *pbkdf2_encrypt(const char *); + +static int tcl_encpass2 STDVAR +{ + BADARGS(2, 2, " string"); + Tcl_SetResult(irp, pbkdf2_encrypt(argv[1]), TCL_STATIC); + return TCL_OK; +} + +static int tcl_pbkdf2 STDVAR +{ + int hex, digestlen, i; + unsigned int rounds; + const EVP_MD *digest; + unsigned char buf[256]; + char buf_hex[256]; + Tcl_Obj *result = 0; + + BADARGS(5, 6, " ?-bin? pass salt rounds digest"); + if (argc == 6) { + if (!strcmp(argv[1], "-bin")) + hex = 0; + else { + Tcl_AppendResult(irp, "bad option ", argv[1], ": must be -bin", NULL); + return TCL_ERROR; + } + } + else + hex = 1; + rounds = atoi(argv[3 + !hex]); + digest = EVP_get_digestbyname(argv[4 + !hex]); + if (!digest) { + Tcl_AppendResult(irp, "PBKDF2 error: Unknown message digest '", argv[4 + !hex], "'.", NULL); + return TCL_ERROR; + } + digestlen = EVP_MD_size(digest); + if (!PKCS5_PBKDF2_HMAC(argv[1 + !hex], strlen(argv[1 + !hex]), (const unsigned char *) argv[2+ !hex], strlen(argv[2 + !hex]), rounds, digest, digestlen, buf)) { + Tcl_AppendResult(irp, "PBKDF2 key derivation error: ", ERR_error_string(ERR_get_error(), NULL), ".", NULL); + return TCL_ERROR; + } + if (hex) { + for (i = 0; i < digestlen; i++) + sprintf(buf_hex + (i * 2), "%.2X", buf[i]); + result = Tcl_NewByteArrayObj((unsigned char *) buf_hex, digestlen * 2); + explicit_bzero(buf_hex, digestlen * 2); + } + else + result = Tcl_NewByteArrayObj(buf, digestlen); + explicit_bzero(buf, digestlen); + Tcl_SetObjResult(irp, result); + return TCL_OK; +} + +static tcl_cmds my_tcl_cmds[] = { + {"encpass2", tcl_encpass2}, + {"pbkdf2", tcl_pbkdf2}, + {NULL, NULL} +}; From 2cb88646ca0e226f68b67339d178d81e6cd946f5 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Mon, 8 Jul 2024 00:04:02 +0200 Subject: [PATCH 90/91] Fix --disable-tls breakage from pbkdf2 tcl --- src/mod/pbkdf2.mod/Makefile | 3 ++- src/mod/pbkdf2.mod/pbkdf2.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/mod/pbkdf2.mod/Makefile b/src/mod/pbkdf2.mod/Makefile index 6cf40c584..38e70d0fe 100644 --- a/src/mod/pbkdf2.mod/Makefile +++ b/src/mod/pbkdf2.mod/Makefile @@ -36,4 +36,5 @@ distclean: clean ../../../src/compat/compat.h ../../../src/compat/base64.h \ ../../../src/compat/inet_aton.h ../../../src/compat/snprintf.h \ ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ - ../../../src/mod/modvals.h ../../../src/tandem.h + ../../../src/mod/modvals.h ../../../src/tandem.h \ + .././pbkdf2.mod/tclpbkdf2.c diff --git a/src/mod/pbkdf2.mod/pbkdf2.c b/src/mod/pbkdf2.mod/pbkdf2.c index 2eda85038..faf7313d2 100644 --- a/src/mod/pbkdf2.mod/pbkdf2.c +++ b/src/mod/pbkdf2.mod/pbkdf2.c @@ -8,9 +8,10 @@ */ #include "src/mod/module.h" -#include "src/mod/pbkdf2.mod/tclpbkdf2.c" #if OPENSSL_VERSION_NUMBER >= 0x1000000fL /* 1.0.0 */ +#include "tclpbkdf2.c" + #define MODULE_NAME "encryption2" #include /* base64 encode b64_ntop() and base64 decode b64_pton() */ From d2ffcea0ee46efa9967caca7d8896c846e60a3ae Mon Sep 17 00:00:00 2001 From: Thomas Sader Date: Tue, 9 Jul 2024 22:44:34 +0200 Subject: [PATCH 91/91] Github Actions: Test OpenSSL 0.9.8 (#1642) --- .github/workflows/dependencies.yml | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index d76a5e6c7..246f35043 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -27,6 +27,24 @@ jobs: make -j4 && make install - name: Build run: ./configure --with-tcl=$HOME/tcl/lib && LD_LIBRARY_PATH=$HOME/tcl/lib make config eggdrop + ssl-version-098: + name: OpenSSL 0.9.8 + continue-on-error: true + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + path: 'eggdrop' + - name: install dependencies + run: sudo apt-get install tcl tcl-dev + - name: Build OpenSSL + run: | + wget https://www.openssl.org/source/old/0.9.x/openssl-0.9.8zh.tar.gz && \ + sha256sum --status --check <(echo f1d9f3ed1b85a82ecf80d0e2d389e1fda3fca9a4dba0bf07adbf231e1a5e2fd6 openssl-0.9.8zh.tar.gz) && \ + tar xzf openssl-0.9.8zh.tar.gz && \ + cd openssl-0.9.8zh && ./config --prefix=$HOME/ssl -fPIC && make -j4 && make install_sw + - name: Build + run: cd $GITHUB_WORKSPACE/eggdrop && ./configure --with-sslinc=$HOME/ssl/include --with-ssllib=$HOME/ssl/lib && LD_LIBRARY_PATH=$HOME/ssl/lib make config eggdrop ssl-version-10: name: OpenSSL 1.0 continue-on-error: true @@ -39,7 +57,9 @@ jobs: run: sudo apt-get install tcl tcl-dev - name: Build OpenSSL run: | - wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2u.tar.gz && tar xzf openssl-1.0.2u.tar.gz && \ + wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2u.tar.gz && \ + sha256sum --status --check <(echo ecd0c6ffb493dd06707d38b14bb4d8c2288bb7033735606569d8f90f89669d16 openssl-1.0.2u.tar.gz) && \ + tar xzf openssl-1.0.2u.tar.gz && \ cd openssl-1.0.2u && ./config --prefix=$HOME/ssl -fPIC && make -j4 && make install_sw - name: Build run: cd $GITHUB_WORKSPACE/eggdrop && ./configure --with-sslinc=$HOME/ssl/include --with-ssllib=$HOME/ssl/lib && LD_LIBRARY_PATH=$HOME/ssl/lib make config eggdrop