1 /* +------------------------------------+
2 * | Inspire Internet Relay Chat Daemon |
3 * +------------------------------------+
5 * InspIRCd: (C) 2002-2008 InspIRCd Development Team
6 * See: http://www.inspircd.org/wiki/index.php/Credits
8 * This program is free but copyrighted software; see
9 * the file COPYING for details.
11 * ---------------------------------------------------
14 #define _CRT_SECURE_NO_DEPRECATE
16 #define WIN32_LEAN_AND_MEAN
21 #include "inspircd_win32wrapper.h"
27 void WriteCompileModules();
28 void WriteCompileCommands();
30 /* detects if we are running windows xp or higher (5.1) */
34 vi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
36 if(vi.dwMajorVersion >= 5)
42 int get_int_option(const char * text, int def)
44 static char buffer[500];
46 printf_c("%s\n[\033[1;32m%u\033[0m] -> ", text, def);
47 fgets(buffer, 500, stdin);
48 if(sscanf(buffer, "%u", &ret) != 1)
55 bool get_bool_option(const char * text, bool def)
57 static char buffer[500];
59 printf_c("%s [\033[1;32m%c\033[0m] -> ", text, def ? 'y' : 'n');
60 fgets(buffer, 500, stdin);
61 if(sscanf(buffer, "%s", ret) != 1)
62 strcpy(ret, def ? "y" : "n");
65 return !strncmp(ret, "y", 1);
68 void get_string_option(const char * text, char * def, char * buf)
70 static char buffer[500];
72 printf_c("%s\n[\033[1;32m%s\033[0m] -> ", text, def);
74 printf_c("%s\n[] -> ", text);
75 fgets(buffer, 500, stdin);
76 if(sscanf(buffer, "%s", buf) != 1)
82 // escapes a string for use in a c++ file
83 bool escape_string(char * str, size_t size)
85 size_t len = strlen(str);
86 char * d_str = (char*)malloc(len * 2);
117 /* gets the svn revision */
118 int get_svn_revision(char * buffer, size_t len)
120 /* again.. I am lazy :p cbf to pipe output of svn info to us, so i'll just read the file */
128 FILE * f = fopen("..\\.svn\\entries", "r");
131 if(!fgets(buf, 1000, f)) goto bad_rev;
132 if(!fgets(buf, 1000, f)) goto bad_rev;
133 if(!fgets(buf, 1000, f)) goto bad_rev;
134 if(!fgets(buf, 1000, f)) goto bad_rev;
136 if(rev == 0) goto bad_rev;
137 sprintf(buffer, "%u", rev);
142 strcpy(buffer, "non-svn");
147 int __stdcall WinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPSTR lpCmdLine, IN int nShowCmd )
149 FILE * j = fopen("inspircd_config.h", "r");
152 if (MessageBox(0, "inspircd_config.h already exists. Remove it and build from clean?", "Configure program", MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2) != IDYES)
161 // pipe standard handles to this console
162 freopen("CONIN$", "r", stdin);
163 freopen("CONOUT$", "w", stdout);
164 freopen("CONOUT$", "w", stderr);
174 printf_c("\nWelcome to the \033[1mInspIRCd\033[0m Configuration program! (\033[1minteractive mode\033[0m)\n"
175 "\033[1mPackage maintainers: Type ./configure --help for non-interactive help\033[0m\n\n");
176 printf_c("*** If you are unsure of any of these values, leave it blank for ***\n"
177 "*** standard settings that will work, and your server will run ***\n"
178 "*** using them. Please consult your IRC network admin if in doubt. ***\n\n"
179 "Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter\n"
180 "a new value. Please note: You will \033[1mHAVE\033[0m to read the docs\n"
181 "dir, otherwise you won't have a config file!\n\n");
188 bool use_iocp = false;
189 bool support_ip6links = false;
190 bool use_openssl = false;
191 char mod_path[MAX_PATH];
192 char config_file[MAX_PATH];
193 char library_dir[MAX_PATH];
194 char base_path[MAX_PATH];
195 char bin_dir[MAX_PATH];
196 char revision_text[MAX_PATH];
197 char openssl_inc_path[MAX_PATH];
198 char openssl_lib_path[MAX_PATH];
200 int max_clients = 10200;
203 int modechanges = 20;
210 int revision = get_svn_revision(revision_text, MAX_PATH);
214 FILE * fI = fopen("..\\src\\version.sh", "r");
217 fgets(version, 514, fI);
218 fgets(version, 514, fI);
231 strcpy(version, "InspIRCD-Unknown");
233 printf_c("Your operating system is: \033[1;32mwindows_x64 \033[0m\n");
235 printf_c("Your operating system is: \033[1;32mwindows_x32 \033[0m\n");
237 printf_c("InspIRCd revision ID: \033[1;32m%s \033[0m\n\n", revision ? revision_text : "(Non-SVN build)");
239 max_fd = get_int_option("What is the maximum file descriptor count you would like to allow?", 10200);
244 printf_c("You are running Windows 2000 or above, and IOCP support is most likely available.\n"
245 "Thisis much more efficent but is currently EXPERIMENTAL and UNSUPPORTED.\n"
246 "If you are unsure, answer no.\n\n");
248 use_iocp = get_bool_option("Do you want to use the IOCP implementation?", false);
251 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)",
254 printf_c("\033[1mAll paths are relative to the binary directory.\033[0m\n");
255 get_string_option("In what directory do you wish to install the InspIRCd base?", "..", base_path);
256 get_string_option("In what directory are the configuration files?", "../conf", config_file);
257 get_string_option("In what directory are the modules to be compiled to?", "../modules", mod_path);
258 get_string_option("In what directory is the IRCd binary to be placed?", ".", bin_dir);
259 get_string_option("In what directory are the IRCd libraries to be placed?", "../lib", library_dir);
261 printf_c("The following questions will ask you for various figures relating\n"
262 "To your IRCd install. Please note that these should usually be left\n"
263 "as defaults unless you have a real reason to change them. If they\n"
264 "changed, then the values must be identical on all servers on your\n"
265 "network, or malfunctions and/or crashes may occur, with the exception\n"
266 "of the 'maximum number of clients' setting which may be different on\n"
267 "different servers on the network.\n\n");
270 max_clients = get_int_option("Please enter the maximum number of clients at any one time?", 10200);
271 nicklen = get_int_option("Please enter the maximum length of nicknames?", 31);
272 chanlen = get_int_option("Please enter the maximum length of channel names?", 64);
273 modechanges = get_int_option("Please enter the maximum number of mode changes in one line?", 20);
274 identlen = get_int_option("Please enter the maximum length of an ident (username)?", 12);
275 quitlen = get_int_option("Please enter the maximum length of a quit message?", 255);
276 topiclen = get_int_option("Please enter the maximum length of a channel topic?", 307);
277 kicklen = get_int_option("Please enter the maximum length of a kick message?", 255);
278 rllen = get_int_option("Please enter the maximum length of a GECOS (real name)?", 128);
279 awaylen = get_int_option("Please enter the maximum length of an away message?", 200);
281 // NOTE: this may seem hackish (generating a batch build script), but it assures the user knows
282 // what they're doing, and we don't have to mess with copying files and changing around modules.mak
283 // for the extra libraries. --fez
284 // in case it exists, remove old m_ssl_openssl.cpp
285 remove("..\\src\\modules\\m_ssl_openssl.cpp");
286 printf_c("You can compile InspIRCd modules that add OpenSSL or GnuTLS support for SSL functionality.\n"
287 "To do so you will need the appropriate link libraries and header files on your system.\n");
288 use_openssl = get_bool_option("Would you like to compile the IRCd with OpenSSL support?", false);
291 get_string_option("Please enter the full path to your OpenSSL include directory\n"
292 "(e.g., C:\\openssl\\include, but NOT the openssl subdirectory under include\\)\n"
293 "(also, path should not end in '\\')",
294 "C:\\openssl\\include", openssl_inc_path);
296 // NOTE: if inspircd ever changes so that it compiles with /MT instead of the /MTd switch, then
297 // the dependency on libeay32mtd.lib and ssleay32mtd.lib will change to just libeay32.lib and
298 // ssleay32.lib. --fez
300 get_string_option("Please enter the full path to your OpenSSL library directory\n"
301 "(e.g., C:\\openssl\\lib, which should contain libeay32mtd.lib and ssleay32mtd.lib)",
302 "C:\\openssl\\lib", openssl_lib_path);
305 FILE *fp = fopen("compile_openssl.bat", "w");
306 fprintf(fp, "@echo off\n");
307 fprintf(fp, "echo This batch script compiles m_ssl_openssl for InspIRCd.\n");
308 fprintf(fp, "echo NOTE: this batch file should be invoked from the Visual Studio Command Prompt (vsvars32.bat)\n");
309 fprintf(fp, "set OPENSSL_INC_PATH=\"%s\"\n", openssl_inc_path);
310 fprintf(fp, "set OPENSSL_LIB_PATH=\"%s\"\n", openssl_lib_path);
311 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");
312 fprintf(fp, "cd ..\\src\\modules\n");
313 fprintf(fp, "copy extra\\m_ssl_openssl.cpp .\n");
314 fprintf(fp, "echo \t%%COMPILE%%\n");
315 fprintf(fp, "%%COMPILE%%\n");
316 fprintf(fp, "cd ..\\..\\win\n");
317 fprintf(fp, "echo done... now check for errors.\n");
320 printf_c("\033[1;32m!!!NOTICE!!! The file 'compile_openssl.bat' has been written to your 'win' directory. Launch it\n"
321 "!!! from the Visual Studio Command Prompt !!! to compile the m_ssl_openssl module.\n"
322 "Wait until after compiling inspircd to run it.\n"
323 "Also, ssleay32.dll and libeay32.dll will be required for the IRCd to run.\033[0m\n");
326 printf_c("\n\033[1;32mPre-build configuration is complete!\n\n"); sc(TNORMAL);
328 // dump all the options back out
329 printf_c("\033[0mBase install path:\033[1;32m %s\n", base_path);
330 printf_c("\033[0mConfig path:\033[1;32m %s\n", config_file);
331 printf_c("\033[0mModule path:\033[1;32m %s\n", mod_path);
332 printf_c("\033[0mLibrary path:\033[1;32m %s\n", library_dir);
333 printf_c("\033[0mSocket Engine:\033[1;32m %s\n", use_iocp ? "iocp" : "select");
334 printf_c("\033[0mMax file descriptors:\033[1;32m %u\n", max_fd);
335 printf_c("\033[0mMax connections:\033[1;32m %u\n", max_clients);
336 printf_c("\033[0mMax nickname length:\033[1;32m %u\n", nicklen);
337 printf_c("\033[0mMax channel length:\033[1;32m %u\n", chanlen);
338 printf_c("\033[0mMax mode length:\033[1;32m %u\n", modechanges);
339 printf_c("\033[0mMax ident length:\033[1;32m %u\n", identlen);
340 printf_c("\033[0mMax quit length:\033[1;32m %u\n", quitlen);
341 printf_c("\033[0mMax topic length:\033[1;32m %u\n", topiclen);
342 printf_c("\033[0mMax kick length:\033[1;32m %u\n", kicklen);
343 printf_c("\033[0mMax name length:\033[1;32m %u\n", rllen);
344 printf_c("\033[0mMax away length:\033[1;32m %u\n", awaylen);
345 printf("\n"); sc(TNORMAL);
346 if(get_bool_option("Are these settings correct?", true) == false)
354 escape_string(config_file, MAX_PATH);
355 escape_string(mod_path, MAX_PATH);
356 escape_string(library_dir, MAX_PATH);
358 printf("\nWriting inspircd_config.h...");
359 FILE * f = fopen("inspircd_config.h", "w");
360 fprintf(f, "/* Auto generated by configure, do not modify! */\n");
361 fprintf(f, "#ifndef __CONFIGURATION_AUTO__\n");
362 fprintf(f, "#define __CONFIGURATION_AUTO__\n\n");
364 fprintf(f, "#define CONFIG_USE_IOCP 1\n\n");
366 fprintf(f, "#define CONFIG_FILE \"%s/inspircd.conf\"\n", config_file);
367 fprintf(f, "#define MOD_PATH \"%s\"\n", mod_path);
368 fprintf(f, "#define MAX_DESCRIPTORS %u\n", max_fd);
369 fprintf(f, "#define MAXCLIENTS %u\n", max_clients);
370 fprintf(f, "#define MAXCLIENTS_S \"%u\"\n", max_clients);
371 fprintf(f, "#define SOMAXCONN_S \"128\"\n");
372 fprintf(f, "#define NICKMAX %u\n", nicklen+1);
373 fprintf(f, "#define CHANMAX %u\n", chanlen+1);
374 fprintf(f, "#define MAXMODES %u\n", modechanges);
375 fprintf(f, "#define IDENTMAX %u\n", identlen);
376 fprintf(f, "#define MAXQUIT %u\n", quitlen);
377 fprintf(f, "#define MAXTOPIC %u\n", topiclen);
378 fprintf(f, "#define MAXKICK %u\n", kicklen);
379 fprintf(f, "#define MAXGECOS %u\n", rllen);
380 fprintf(f, "#define MAXAWAY %u\n", awaylen);
381 fprintf(f, "#define LIBRARYDIR \"%s\"\n", library_dir);
382 fprintf(f, "#define VERSION \"%s\"\n", version);
383 fprintf(f, "#define REVISION \"%s\"\n", revision_text);
385 fprintf(f, "#define SUPPORT_IP6LINKS 1\n");
388 vi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
391 fprintf(f, "#define SYSTEM \"Windows_x64 %u.%u.%u %s\"\n", vi.dwMajorVersion, vi.dwMinorVersion, vi.dwBuildNumber, vi.szCSDVersion);
393 fprintf(f, "#define SYSTEM \"Windows_x32 %u.%u.%u %s\"\n", vi.dwMajorVersion, vi.dwMinorVersion, vi.dwBuildNumber, vi.szCSDVersion);
395 fprintf(f, "#define MAXBUF 514\n");
397 fprintf(f, "\n#include \"inspircd_win32wrapper.h\"\n\n");
398 fprintf(f, "#include \"threadengines/threadengine_win32.h\"\n\n");
399 fprintf(f, "#endif\n\n");
402 sc(TGREEN); printf(" done\n"); sc(TNORMAL);
403 printf("Writing inspircd_se_config.h...");
405 f = fopen("inspircd_se_config.h", "w");
406 fprintf(f, "/* Auto generated by configure, do not modify or commit to svn! */\n");
407 fprintf(f, "#ifndef __CONFIGURATION_SOCKETENGINE__\n");
408 fprintf(f, "#define __CONFIGURATION_SOCKETENGINE__\n\n");
409 fprintf(f, "#include \"socketengines/socketengine_%s.h\"\n\n", use_iocp ? "iocp" : "select");
410 fprintf(f, "#endif\n\n");
413 sc(TGREEN); printf(" done\n"); sc(TNORMAL);
414 printf("Writing command and module compilation scripts...");
415 WriteCompileCommands();
416 WriteCompileModules();
417 sc(TGREEN); printf(" done\n"); sc(TNORMAL);
419 printf("\nconfigure is done.. exiting!\n");
422 void WriteCompileCommands()
424 char commands[300][100];
425 int command_count = 0;
426 printf("\n Finding Command Sources...\n");
428 HANDLE fh = FindFirstFile("..\\src\\commands\\cmd_*.cpp", &fd);
429 if(fh == INVALID_HANDLE_VALUE)
430 printf_c("\033[1;32m No command sources could be found! This \033[1m*could*\033[1;32m be a bad thing.. :P\033[0m");
436 strcpy(commands[command_count], fd.cFileName);
437 commands[command_count][strlen(fd.cFileName) - 4] = 0;
438 printf(" %s\n", commands[command_count]);
440 } while(FindNextFile(fh, &fd));
444 // Write our spiffy new makefile :D
445 // I am such a lazy fucker :P
446 FILE * f = fopen("..\\src\\commands\\commands.mak", "w");
448 time_t t = time(NULL);
449 fprintf(f, "# Generated at %s\n", ctime(&t));
450 fprintf(f, "all: makedir ");
452 // dump modules.. first time :)
453 for(int i = 0; i < command_count; ++i)
454 fprintf(f, "%s.so ", commands[i]);
456 fprintf(f, "\n.cpp.obj:\n");
460 fprintf(f, " cl /nologo /LD /Od /I \".\" /I \"../../include\" /I \"../../include/modes\" /I \"../../include/commands\" /I \"../../win\" /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"DLL_BUILD\" /Gm /EHsc /Gm /RTC1 /MTd /Fo\"Debug/\" /Fd\"Debug/vc70.pdb\" /W2 /Wp64 /Zi /TP $*.cpp ..\\..\\win\\inspircd_memory_functions.cpp /link ..\\..\\bin\\debug_x64\\bin\\inspircd.lib /OUT:\"..\\..\\bin\\debug_x64\\lib\\$*.so\" /PDB:\"..\\..\\bin\\debug_x64\\lib\\$*.pdb\" /MACHINE:X64 /IMPLIB:\"..\\..\\bin\\debug_x64\\lib\\$*.lib\"\n\n");
461 CreateDirectory("..\\src\\debug", NULL);
462 CreateDirectory("..\\bin\\debug\\bin", NULL);
463 CreateDirectory("..\\bin\\debug\\lib", NULL);
464 CreateDirectory("..\\bin\\debug\\modules", NULL);
466 fprintf(f, " cl /nologo /LD /Od /I \".\" /I \"../../include\" /I \"../../include/modes\" /I \"../../include/commands\" /I \"../../win\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"DLL_BUILD\" /EHsc /Gm /MT /Fo\"Release/\" /Fd\"Release/vc70.pdb\" /W2 /Wp64 /Zi /TP $*.cpp ..\\..\\win\\inspircd_memory_functions.cpp /link ..\\..\\bin\\release_x64\\bin\\inspircd.lib /OUT:\"..\\..\\bin\\release_x64\\lib\\$*.so\" /PDB:\"..\\..\\bin\\release_x64\\lib\\$*.pdb\" /MACHINE:X64 /IMPLIB:\"..\\..\\bin\\release_x64\\lib\\$*.lib\"\n\n");
467 CreateDirectory("..\\src\\release", NULL);
468 CreateDirectory("..\\bin\\release\\bin", NULL);
469 CreateDirectory("..\\bin\\release\\lib", NULL);
470 CreateDirectory("..\\bin\\release\\modules", NULL);
474 fprintf(f, " cl /nologo /LD /Od /I \".\" /I \"../../include\" /I \"../../include/modes\" /I \"../../include/commands\" /I \"../../win\" /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"DLL_BUILD\" /Gm /EHsc /Gm /RTC1 /MTd /Fo\"Debug/\" /Fd\"Debug/vc70.pdb\" /W2 /Wp64 /Zi /TP $*.cpp ..\\..\\win\\inspircd_memory_functions.cpp /link ..\\..\\bin\\debug\\bin\\inspircd.lib /OUT:\"..\\..\\bin\\debug\\lib\\$*.so\" /PDB:\"..\\..\\bin\\debug\\lib\\$*.pdb\" /IMPLIB:\"..\\..\\bin\\debug\\lib\\$*.lib\"\n\n");
475 CreateDirectory("..\\src\\debug", NULL);
476 CreateDirectory("..\\bin\\debug\\bin", NULL);
477 CreateDirectory("..\\bin\\debug\\lib", NULL);
478 CreateDirectory("..\\bin\\debug\\modules", NULL);
480 fprintf(f, " cl /nologo /LD /Od /I \".\" /I \"../../include\" /I \"../../include/modes\" /I \"../../include/commands\" /I \"../../win\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"DLL_BUILD\" /EHsc /Gm /MT /Fo\"Release/\" /Fd\"Release/vc70.pdb\" /W2 /Wp64 /Zi /TP $*.cpp ..\\..\\win\\inspircd_memory_functions.cpp /link ..\\..\\bin\\release\\bin\\inspircd.lib /OUT:\"..\\..\\bin\\release\\lib\\$*.so\" /PDB:\"..\\..\\bin\\release\\lib\\$*.pdb\" /IMPLIB:\"..\\..\\bin\\release\\lib\\$*.lib\"\n\n");
481 CreateDirectory("..\\src\\release", NULL);
482 CreateDirectory("..\\bin\\release\\bin", NULL);
483 CreateDirectory("..\\bin\\release\\lib", NULL);
484 CreateDirectory("..\\bin\\release\\modules", NULL);
488 fprintf(f, "makedir:\n if not exist debug mkdir debug\n if not exist release mkdir release\n\n");
490 // dump modules.. again the second and last time :)
491 for(int i = 0; i < command_count; ++i)
492 fprintf(f, "%s.so : %s.obj\n", commands[i], commands[i]);
498 void WriteCompileModules()
500 char modules[300][100];
501 int module_count = 0;
503 printf("Finding Modules...\n");
505 HANDLE fh = FindFirstFile("..\\src\\modules\\m_*.cpp", &fd);
506 if(fh == INVALID_HANDLE_VALUE)
507 printf_c("\033[1;32m No module sources could be found! This \033[1m*could*\033[1;32m be a bad thing.. :P\033[0m");
513 strcpy(modules[module_count], fd.cFileName);
514 modules[module_count][strlen(fd.cFileName) - 4] = 0;
515 printf(" %s\n", modules[module_count]);
517 } while(FindNextFile(fh, &fd));
521 // Write our spiffy new makefile :D
522 // I am such a lazy fucker :P
523 FILE * f = fopen("..\\src\\modules\\modules.mak", "w");
525 time_t t = time(NULL);
526 fprintf(f, "# Generated at %s\n", ctime(&t));
527 fprintf(f, "all: makedir ");
529 // dump modules.. first time :)
530 for(int i = 0; i < module_count; ++i)
531 fprintf(f, "%s.so ", modules[i]);
533 fprintf(f, "\n.cpp.obj:\n");
537 fprintf(f, " cl /nologo /LD /Od /I \".\" /I \"../../include\" /I \"../../include/modes\" /I \"../../include/modules\" /I \"../../win\" /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"DLL_BUILD\" /Gm /EHsc /Gm /RTC1 /MTd /Fo\"Debug/\" /Fd\"Debug/vc70.pdb\" /W2 /Wp64 /Zi /TP $*.cpp ..\\..\\win\\inspircd_memory_functions.cpp /link ..\\..\\bin\\debug_x64\\bin\\inspircd.lib ws2_32.lib /OUT:\"..\\..\\bin\\debug_x64\\modules\\$*.so\" /PDB:\"..\\..\\bin\\debug_x64\\modules\\$*.pdb\" /MACHINE:X64 /IMPLIB:\"..\\..\\bin\\debug_x64\\modules\\$*.lib\"\n\n");
538 CreateDirectory("..\\src\\modules\\debug_x64", NULL);
540 fprintf(f, " cl /nologo /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 $*.cpp ..\\..\\win\\inspircd_memory_functions.cpp /link ..\\..\\bin\\release_x64\\bin\\inspircd.lib ws2_32.lib /OUT:\"..\\..\\bin\\release_x64\\modules\\$*.so\" /PDB:\"..\\..\\bin\\release_x64\\modules\\$*.pdb\" /MACHINE:X64 /IMPLIB:\"..\\..\\bin\\release_x64\\modules\\$*.lib\"\n\n");
541 CreateDirectory("..\\src\\modules\\release_x64", NULL);
545 fprintf(f, " cl /nologo -Dssize_t=long /LD /Od /I \".\" /I \"../../include\" /I \"../../include/modes\" /I \"../../include/modules\" /I \"../../win\" /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"DLL_BUILD\" /Gm /EHsc /Gm /RTC1 /MTd /Fo\"Debug/\" /Fd\"Debug/vc70.pdb\" /W2 /Wp64 /Zi /TP $*.cpp ..\\..\\win\\inspircd_memory_functions.cpp /link ..\\..\\bin\\debug\\bin\\inspircd.lib ws2_32.lib /OUT:\"..\\..\\bin\\debug\\modules\\$*.so\" /PDB:\"..\\..\\bin\\debug\\modules\\$*.pdb\" /IMPLIB:\"..\\..\\bin\\debug\\modules\\$*.lib\"\n\n");
546 CreateDirectory("..\\src\\modules\\debug", NULL);
547 CreateDirectory("..\\src\\modules\\debug\\lib", NULL);
548 CreateDirectory("..\\src\\modules\\debug\\modules", NULL);
549 CreateDirectory("..\\src\\modules\\debug\\bin", NULL);
551 fprintf(f, " 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 $*.cpp ..\\..\\win\\inspircd_memory_functions.cpp /link ..\\..\\bin\\release\\bin\\inspircd.lib ws2_32.lib /OUT:\"..\\..\\bin\\release\\modules\\$*.so\" /PDB:\"..\\..\\bin\\release\\modules\\$*.pdb\" /IMPLIB:\"..\\..\\bin\\release\\modules\\$*.lib\"\n\n");
552 CreateDirectory("..\\src\\modules\\release", NULL);
553 CreateDirectory("..\\src\\modules\\release\\lib", NULL);
554 CreateDirectory("..\\src\\modules\\release\\modules", NULL);
555 CreateDirectory("..\\src\\modules\\release\\bin", NULL);
559 fprintf(f, "makedir:\n if not exist debug mkdir debug\n if not exist release mkdir release\n\n");
561 // dump modules.. again the second and last time :)
562 for(int i = 0; i < module_count; ++i)
563 fprintf(f, "%s.so : %s.obj\n", modules[i], modules[i]);