X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=win%2Fconfigure.cpp;h=e443127244c10bd6b81d2d3fae1a89ce0175dec9;hb=597ecea91e69f96869127ba1023c3d689c4c216c;hp=6d5893a7d4dbde572958ce67bd0687bd96094253;hpb=308314fc31845394b452133a5d685e5a9a6df807;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/win/configure.cpp b/win/configure.cpp index 6d5893a7d..e44312724 100644 --- a/win/configure.cpp +++ b/win/configure.cpp @@ -2,7 +2,7 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2007 InspIRCd Development Team + * InspIRCd: (C) 2002-2008 InspIRCd Development Team * See: http://www.inspircd.org/wiki/index.php/Credits * * This program is free but copyrighted software; see @@ -68,7 +68,10 @@ bool get_bool_option(const char * text, bool def) void get_string_option(const char * text, char * def, char * buf) { static char buffer[500]; - printf_c("%s\n[\033[1;32m%s\033[0m] -> ", text, def); + if (*def) + printf_c("%s\n[\033[1;32m%s\033[0m] -> ", text, def); + else + printf_c("%s\n[] -> ", text); fgets(buffer, 500, stdin); if(sscanf(buffer, "%s", buf) != 1) strcpy(buf, def); @@ -162,8 +165,6 @@ int __stdcall WinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPS Banner(); Run(); - WriteCompileCommands(); - WriteCompileModules(); FreeConsole(); return 0; } @@ -183,17 +184,19 @@ void Banner() void Run() { - int max_fd = 1024; bool use_iocp = false; - bool support_ip6links = false; + bool support_ip6links = true; + bool use_openssl = false; + bool ipv6 = true; char mod_path[MAX_PATH]; char config_file[MAX_PATH]; char library_dir[MAX_PATH]; char base_path[MAX_PATH]; char bin_dir[MAX_PATH]; char revision_text[MAX_PATH]; + char openssl_inc_path[MAX_PATH]; + char openssl_lib_path[MAX_PATH]; - int max_clients = 1024; int nicklen = 31; int chanlen = 64; int modechanges = 20; @@ -232,20 +235,22 @@ void Run() #endif printf_c("InspIRCd revision ID: \033[1;32m%s \033[0m\n\n", revision ? revision_text : "(Non-SVN build)"); - max_fd = get_int_option("What is the maximum file descriptor count you would like to allow?", 1024); - // detect windows if(iswinxp()) { printf_c("You are running Windows 2000 or above, and IOCP support is most likely available.\n" - "This removes the socket number limitation of select and is much more efficent.\n" - "If you are unsure, answer yes.\n\n"); + "Thisis much more efficent but is currently EXPERIMENTAL and UNSUPPORTED.\n" + "If you are unsure, answer no.\n\n"); - use_iocp = get_bool_option("Do you want to use the IOCP implementation?", true); + use_iocp = get_bool_option("Do you want to use the IOCP implementation?", false); } - support_ip6links = get_bool_option("\nYou have chosen to build an \033[1;32mIPV4-only\033[0m server.\nWould you like to enable support for linking to IPV6-enabled InspIRCd servers?\nIf you are using a recent operating system and are unsure, answer yes.\nIf you answer 'no' here, your InspIRCd server will be unable\nto parse IPV6 addresses (e.g. for CIDR bans)", - true); + ipv6 = get_bool_option("Do you want to enable IPv6?", false); + + if (!ipv6) + support_ip6links = get_bool_option("\nYou have chosen to build an \033[1;32mIPV4-only\033[0m server.\nWould you like to enable support for linking to IPV6-enabled InspIRCd servers?\nIf you are using a recent operating system and are unsure, answer yes.\nIf you answer 'no' here, your InspIRCd server will be unable\nto parse IPV6 addresses (e.g. for CIDR bans)", true); + else + support_ip6links = true; printf_c("\033[1mAll paths are relative to the binary directory.\033[0m\n"); get_string_option("In what directory do you wish to install the InspIRCd base?", "..", base_path); @@ -262,8 +267,6 @@ void Run() "of the 'maximum number of clients' setting which may be different on\n" "different servers on the network.\n\n"); - - max_clients = get_int_option("Please enter the maximum number of clients at any one time?", 1024); nicklen = get_int_option("Please enter the maximum length of nicknames?", 31); chanlen = get_int_option("Please enter the maximum length of channel names?", 64); modechanges = get_int_option("Please enter the maximum number of mode changes in one line?", 20); @@ -274,6 +277,51 @@ void Run() rllen = get_int_option("Please enter the maximum length of a GECOS (real name)?", 128); awaylen = get_int_option("Please enter the maximum length of an away message?", 200); + // NOTE: this may seem hackish (generating a batch build script), but it assures the user knows + // what they're doing, and we don't have to mess with copying files and changing around modules.mak + // for the extra libraries. --fez + // in case it exists, remove old m_ssl_openssl.cpp + remove("..\\src\\modules\\m_ssl_openssl.cpp"); + printf_c("You can compile InspIRCd modules that add OpenSSL or GnuTLS support for SSL functionality.\n" + "To do so you will need the appropriate link libraries and header files on your system.\n"); + use_openssl = get_bool_option("Would you like to compile the IRCd with OpenSSL support?", false); + if (use_openssl) + { + get_string_option("Please enter the full path to your OpenSSL include directory\n" + "(e.g., C:\\openssl\\include, but NOT the openssl subdirectory under include\\)\n" + "(also, path should not end in '\\')", + "C:\\openssl\\include", openssl_inc_path); + + // NOTE: if inspircd ever changes so that it compiles with /MT instead of the /MTd switch, then + // the dependency on libeay32mtd.lib and ssleay32mtd.lib will change to just libeay32.lib and + // ssleay32.lib. --fez + + get_string_option("Please enter the full path to your OpenSSL library directory\n" + "(e.g., C:\\openssl\\lib, which should contain libeay32mtd.lib and ssleay32mtd.lib)", + "C:\\openssl\\lib", openssl_lib_path); + + // write batch file + FILE *fp = fopen("compile_openssl.bat", "w"); + fprintf(fp, "@echo off\n"); + fprintf(fp, "echo This batch script compiles m_ssl_openssl for InspIRCd.\n"); + fprintf(fp, "echo NOTE: this batch file should be invoked from the Visual Studio Command Prompt (vsvars32.bat)\n"); + fprintf(fp, "set OPENSSL_INC_PATH=\"%s\"\n", openssl_inc_path); + fprintf(fp, "set OPENSSL_LIB_PATH=\"%s\"\n", openssl_lib_path); + fprintf(fp, "set COMPILE=cl /nologo -Dssize_t=long /LD /Od /I \".\" /I \"../../include\" /I \"../../include/modes\" /I \"../../include/modules\" /I \"../../win\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"DLL_BUILD\" /EHsc /Gm /MT /Fo\"Release/\" /Fd\"Release/vc70.pdb\" /W2 /Wp64 /Zi /TP /I %%OPENSSL_INC_PATH%% m_ssl_openssl.cpp ..\\..\\win\\inspircd_memory_functions.cpp %%OPENSSL_INC_PATH%%\\openssl\\applink.c /link /LIBPATH:%%OPENSSL_LIB_PATH%% ..\\..\\bin\\release\\bin\\inspircd.lib ws2_32.lib /OUT:\"..\\..\\bin\\release\\modules\\m_ssl_openssl.so\" /PDB:\"..\\..\\bin\\release\\modules\\m_ssl_openssl.pdb\" /IMPLIB:\"..\\..\\bin\\release\\modules\\m_ssl_openssl.lib\"\n"); + fprintf(fp, "cd ..\\src\\modules\n"); + fprintf(fp, "copy extra\\m_ssl_openssl.cpp .\n"); + fprintf(fp, "echo \t%%COMPILE%%\n"); + fprintf(fp, "%%COMPILE%%\n"); + fprintf(fp, "cd ..\\..\\win\n"); + fprintf(fp, "echo done... now check for errors.\n"); + fclose(fp); + + printf_c("\033[1;32m!!!NOTICE!!! The file 'compile_openssl.bat' has been written to your 'win' directory. Launch it\n" + "!!! from the Visual Studio Command Prompt !!! to compile the m_ssl_openssl module.\n" + "Wait until after compiling inspircd to run it.\n" + "Also, ssleay32.dll and libeay32.dll will be required for the IRCd to run.\033[0m\n"); + } + printf_c("\n\033[1;32mPre-build configuration is complete!\n\n"); sc(TNORMAL); // dump all the options back out @@ -282,8 +330,6 @@ void Run() printf_c("\033[0mModule path:\033[1;32m %s\n", mod_path); printf_c("\033[0mLibrary path:\033[1;32m %s\n", library_dir); printf_c("\033[0mSocket Engine:\033[1;32m %s\n", use_iocp ? "iocp" : "select"); - printf_c("\033[0mMax file descriptors:\033[1;32m %u\n", max_fd); - printf_c("\033[0mMax connections:\033[1;32m %u\n", max_clients); printf_c("\033[0mMax nickname length:\033[1;32m %u\n", nicklen); printf_c("\033[0mMax channel length:\033[1;32m %u\n", chanlen); printf_c("\033[0mMax mode length:\033[1;32m %u\n", modechanges); @@ -313,12 +359,11 @@ void Run() fprintf(f, "#define __CONFIGURATION_AUTO__\n\n"); if(use_iocp) fprintf(f, "#define CONFIG_USE_IOCP 1\n\n"); + if (ipv6) + fprintf(f, "#define IPV6 1\n\n"); fprintf(f, "#define CONFIG_FILE \"%s/inspircd.conf\"\n", config_file); fprintf(f, "#define MOD_PATH \"%s\"\n", mod_path); - fprintf(f, "#define MAX_DESCRIPTORS %u\n", max_fd); - fprintf(f, "#define MAXCLIENTS %u\n", max_clients); - fprintf(f, "#define MAXCLIENTS_S \"%u\"\n", max_clients); fprintf(f, "#define SOMAXCONN_S \"128\"\n"); fprintf(f, "#define NICKMAX %u\n", nicklen+1); fprintf(f, "#define CHANMAX %u\n", chanlen+1); @@ -346,6 +391,7 @@ void Run() fprintf(f, "#define MAXBUF 514\n"); fprintf(f, "\n#include \"inspircd_win32wrapper.h\"\n\n"); + fprintf(f, "#include \"threadengines/threadengine_win32.h\"\n\n"); fprintf(f, "#endif\n\n"); fclose(f);