]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - win/configure.cpp
Add support for OnNamesListItem, discussed with w00t a few days ago. This makes NAMES...
[user/henk/code/inspircd.git] / win / configure.cpp
index 6d362a7b48affe5a36f2503581366652ac2acb75..647295965586a4cb57910d9cd9e6b2874c38fbcc 100644 (file)
@@ -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);
@@ -181,17 +184,21 @@ void Banner()
 
 void Run()
 {
-       int max_fd = 1024;
+       int max_fd = 10200;
        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 max_clients = 10200;
        int nicklen = 31;
        int chanlen = 64;
        int modechanges = 20;
@@ -230,20 +237,24 @@ 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);
+       max_fd = get_int_option("What is the maximum file descriptor count you would like to allow?", 10200);
 
        // 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);
@@ -261,7 +272,7 @@ void Run()
                "different servers on the network.\n\n");
 
     
-       max_clients = get_int_option("Please enter the maximum number of clients at any one time?", 1024);
+       max_clients = get_int_option("Please enter the maximum number of clients at any one time?", 10200);
        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);
@@ -272,6 +283,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
@@ -311,6 +367,8 @@ 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);
@@ -344,6 +402,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);