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();
31 /* detects if we are running windows xp or higher (5.1) */
35 vi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
37 if(vi.dwMajorVersion >= 5)
43 int get_int_option(const char * text, int def)
45 static char buffer[500];
47 printf_c("%s\n[\033[1;32m%u\033[0m] -> ", text, def);
48 fgets(buffer, 500, stdin);
49 if(sscanf(buffer, "%u", &ret) != 1)
56 bool get_bool_option(const char * text, bool def)
58 static char buffer[500];
60 printf_c("%s [\033[1;32m%c\033[0m] -> ", text, def ? 'y' : 'n');
61 fgets(buffer, 500, stdin);
62 if(sscanf(buffer, "%s", ret) != 1)
63 strcpy(ret, def ? "y" : "n");
66 return !strncmp(ret, "y", 1);
69 void get_string_option(const char * text, char * def, char * buf)
71 static char buffer[500];
73 printf_c("%s\n[\033[1;32m%s\033[0m] -> ", text, def);
75 printf_c("%s\n[] -> ", text);
76 fgets(buffer, 500, stdin);
77 if(sscanf(buffer, "%s", buf) != 1)
83 // escapes a string for use in a c++ file
84 bool escape_string(char * str, size_t size)
86 size_t len = strlen(str);
87 char * d_str = (char*)malloc(len * 2);
118 /* gets the svn revision */
119 int get_svn_revision(char * buffer, size_t len)
121 /* again.. I am lazy :p cbf to pipe output of svn info to us, so i'll just read the file */
131 FILE * f = fopen("..\\.svn\\entries", "r");
134 for (int q = 0; q < 4; ++q)
138 sprintf(buffer, "%u", rev);
145 int __stdcall WinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPSTR lpCmdLine, IN int nShowCmd )
147 if (!strcmp(lpCmdLine, "/rebase"))
152 FILE * j = fopen("inspircd_config.h", "r");
155 if (MessageBox(0, "inspircd_config.h already exists. Remove it and build from clean?", "Configure program", MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2) != IDYES)
164 // pipe standard handles to this console
165 freopen("CONIN$", "r", stdin);
166 freopen("CONOUT$", "w", stdout);
167 freopen("CONOUT$", "w", stderr);
177 printf_c("\nWelcome to the \033[1mInspIRCd\033[0m Configuration program! (\033[1minteractive mode\033[0m)\n"
178 "\033[1mPackage maintainers: Type ./configure --help for non-interactive help\033[0m\n\n");
179 printf_c("*** If you are unsure of any of these values, leave it blank for ***\n"
180 "*** standard settings that will work, and your server will run ***\n"
181 "*** using them. Please consult your IRC network admin if in doubt. ***\n\n"
182 "Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter\n"
183 "a new value. Please note: You will \033[1mHAVE\033[0m to read the docs\n"
184 "dir, otherwise you won't have a config file!\n\n");
190 bool use_iocp = false;
191 bool support_ip6links = true;
192 bool use_openssl = false;
194 char mod_path[MAX_PATH];
195 char config_file[MAX_PATH];
196 char library_dir[MAX_PATH];
197 char base_path[MAX_PATH];
198 char bin_dir[MAX_PATH];
199 char revision_text[MAX_PATH];
200 char openssl_inc_path[MAX_PATH];
201 char openssl_lib_path[MAX_PATH];
205 int modechanges = 20;
212 int revision = get_svn_revision(revision_text, MAX_PATH);
216 FILE * fI = fopen("..\\src\\version.sh", "r");
219 fgets(version, 514, fI);
220 fgets(version, 514, fI);
233 strcpy(version, "InspIRCD-Unknown");
235 printf_c("Your operating system is: \033[1;32mwindows_x64 \033[0m\n");
237 printf_c("Your operating system is: \033[1;32mwindows_x32 \033[0m\n");
239 printf_c("InspIRCd revision ID: \033[1;32m%s \033[0m\n\n", revision ? revision_text : "(Non-SVN build)");
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 ipv6 = get_bool_option("Do you want to enable IPv6?", false);
254 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);
256 support_ip6links = true;
258 printf_c("\033[1mAll paths are relative to the binary directory.\033[0m\n");
259 get_string_option("In what directory do you wish to install the InspIRCd base?", "..", base_path);
260 get_string_option("In what directory are the configuration files?", "../conf", config_file);
261 get_string_option("In what directory are the modules to be compiled to?", "../modules", mod_path);
262 get_string_option("In what directory is the IRCd binary to be placed?", ".", bin_dir);
263 get_string_option("In what directory are the IRCd libraries to be placed?", "../lib", library_dir);
265 printf_c("The following questions will ask you for various figures relating\n"
266 "To your IRCd install. Please note that these should usually be left\n"
267 "as defaults unless you have a real reason to change them. If they\n"
268 "changed, then the values must be identical on all servers on your\n"
269 "network, or malfunctions and/or crashes may occur, with the exception\n"
270 "of the 'maximum number of clients' setting which may be different on\n"
271 "different servers on the network.\n\n");
273 nicklen = get_int_option("Please enter the maximum length of nicknames?", 31);
274 chanlen = get_int_option("Please enter the maximum length of channel names?", 64);
275 modechanges = get_int_option("Please enter the maximum number of mode changes in one line?", 20);
276 identlen = get_int_option("Please enter the maximum length of an ident (username)?", 12);
277 quitlen = get_int_option("Please enter the maximum length of a quit message?", 255);
278 topiclen = get_int_option("Please enter the maximum length of a channel topic?", 307);
279 kicklen = get_int_option("Please enter the maximum length of a kick message?", 255);
280 rllen = get_int_option("Please enter the maximum length of a GECOS (real name)?", 128);
281 awaylen = get_int_option("Please enter the maximum length of an away message?", 200);
283 // NOTE: this may seem hackish (generating a batch build script), but it assures the user knows
284 // what they're doing, and we don't have to mess with copying files and changing around modules.mak
285 // for the extra libraries. --fez
286 // in case it exists, remove old m_ssl_openssl.cpp
287 remove("..\\src\\modules\\m_ssl_openssl.cpp");
288 printf_c("You can compile InspIRCd modules that add OpenSSL or GnuTLS support for SSL functionality.\n"
289 "To do so you will need the appropriate link libraries and header files on your system.\n");
290 use_openssl = get_bool_option("Would you like to compile the IRCd with OpenSSL support?", false);
293 get_string_option("Please enter the full path to your OpenSSL include directory\n"
294 "(e.g., C:\\openssl\\include, but NOT the openssl subdirectory under include\\)\n"
295 "(also, path should not end in '\\')",
296 "C:\\openssl\\include", openssl_inc_path);
298 // NOTE: if inspircd ever changes so that it compiles with /MT instead of the /MTd switch, then
299 // the dependency on libeay32mtd.lib and ssleay32mtd.lib will change to just libeay32.lib and
300 // ssleay32.lib. --fez
302 get_string_option("Please enter the full path to your OpenSSL library directory\n"
303 "(e.g., C:\\openssl\\lib, which should contain libeay32mtd.lib and ssleay32mtd.lib)",
304 "C:\\openssl\\lib", openssl_lib_path);
307 FILE *fp = fopen("compile_openssl.bat", "w");
308 fprintf(fp, "@echo off\n");
309 fprintf(fp, "echo This batch script compiles m_ssl_openssl for InspIRCd.\n");
310 fprintf(fp, "echo NOTE: this batch file should be invoked from the Visual Studio Command Prompt (vsvars32.bat)\n");
311 fprintf(fp, "set OPENSSL_INC_PATH=\"%s\"\n", openssl_inc_path);
312 fprintf(fp, "set OPENSSL_LIB_PATH=\"%s\"\n", openssl_lib_path);
313 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");
314 fprintf(fp, "cd ..\\src\\modules\n");
315 fprintf(fp, "copy extra\\m_ssl_openssl.cpp .\n");
316 fprintf(fp, "echo \t%%COMPILE%%\n");
317 fprintf(fp, "%%COMPILE%%\n");
318 fprintf(fp, "cd ..\\..\\win\n");
319 fprintf(fp, "echo done... now check for errors.\n");
322 printf_c("\033[1;32m!!!NOTICE!!! The file 'compile_openssl.bat' has been written to your 'win' directory. Launch it\n"
323 "!!! from the Visual Studio Command Prompt !!! to compile the m_ssl_openssl module.\n"
324 "Wait until after compiling inspircd to run it.\n"
325 "Also, ssleay32.dll and libeay32.dll will be required for the IRCd to run.\033[0m\n");
328 printf_c("\n\033[1;32mPre-build configuration is complete!\n\n"); sc(TNORMAL);
330 // dump all the options back out
331 printf_c("\033[0mBase install path:\033[1;32m %s\n", base_path);
332 printf_c("\033[0mConfig path:\033[1;32m %s\n", config_file);
333 printf_c("\033[0mModule path:\033[1;32m %s\n", mod_path);
334 printf_c("\033[0mLibrary path:\033[1;32m %s\n", library_dir);
335 printf_c("\033[0mSocket Engine:\033[1;32m %s\n", use_iocp ? "iocp" : "select");
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 IPV6 1\n\n");
368 fprintf(f, "#define CONFIG_FILE \"%s/inspircd.conf\"\n", config_file);
369 fprintf(f, "#define MOD_PATH \"%s\"\n", mod_path);
370 fprintf(f, "#define SOMAXCONN_S \"128\"\n");
371 fprintf(f, "#define NICKMAX %u\n", nicklen+1);
372 fprintf(f, "#define CHANMAX %u\n", chanlen+1);
373 fprintf(f, "#define MAXMODES %u\n", modechanges);
374 fprintf(f, "#define IDENTMAX %u\n", identlen);
375 fprintf(f, "#define MAXQUIT %u\n", quitlen);
376 fprintf(f, "#define MAXTOPIC %u\n", topiclen);
377 fprintf(f, "#define MAXKICK %u\n", kicklen);
378 fprintf(f, "#define MAXGECOS %u\n", rllen);
379 fprintf(f, "#define MAXAWAY %u\n", awaylen);
380 fprintf(f, "#define LIBRARYDIR \"%s\"\n", library_dir);
381 fprintf(f, "#define VERSION \"%s\"\n", version);
382 fprintf(f, "#define REVISION \"%s\"\n", revision_text);
384 fprintf(f, "#define SUPPORT_IP6LINKS 1\n");
387 vi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
390 fprintf(f, "#define SYSTEM \"Windows_x64 %u.%u.%u %s\"\n", vi.dwMajorVersion, vi.dwMinorVersion, vi.dwBuildNumber, vi.szCSDVersion);
392 fprintf(f, "#define SYSTEM \"Windows_x32 %u.%u.%u %s\"\n", vi.dwMajorVersion, vi.dwMinorVersion, vi.dwBuildNumber, vi.szCSDVersion);
394 fprintf(f, "#define MAXBUF 514\n");
396 fprintf(f, "\n#include \"inspircd_win32wrapper.h\"\n\n");
397 fprintf(f, "#include \"threadengines/threadengine_win32.h\"\n\n");
398 fprintf(f, "#endif\n\n");
401 sc(TGREEN); printf(" done\n"); sc(TNORMAL);
402 printf("Writing inspircd_se_config.h...");
404 f = fopen("inspircd_se_config.h", "w");
405 fprintf(f, "/* Auto generated by configure, do not modify or commit to svn! */\n");
406 fprintf(f, "#ifndef __CONFIGURATION_SOCKETENGINE__\n");
407 fprintf(f, "#define __CONFIGURATION_SOCKETENGINE__\n\n");
408 fprintf(f, "#include \"socketengines/socketengine_%s.h\"\n\n", use_iocp ? "iocp" : "select");
409 fprintf(f, "#endif\n\n");
412 sc(TGREEN); printf(" done\n"); sc(TNORMAL);
413 printf("Writing command and module compilation scripts...");
414 WriteCompileCommands();
415 WriteCompileModules();
416 sc(TGREEN); printf(" done\n"); sc(TNORMAL);
418 printf("\nconfigure is done.. exiting!\n");
430 HANDLE fh = FindFirstFile("..\\bin\\debug\\lib\\*.so", &fd);
432 HANDLE fh = FindFirstFile("..\\bin\\release\\lib\\*.so", &fd);
434 if(fh == INVALID_HANDLE_VALUE)
440 strcat(dest, " ..\\bin\\debug\\lib\\");
442 strcat(dest, " ..\\bin\\release\\lib\\");
444 strcat(dest, fd.cFileName);
446 while (FindNextFile(fh, &fd));
450 sprintf(command, "rebase.exe -v -b 10000000 -c baseaddr_commands.txt %s", dest);
451 printf("%s\n", command);
455 fh = FindFirstFile("..\\bin\\debug\\modules\\*.so", &fd);
457 fh = FindFirstFile("..\\bin\\release\\modules\\*.so", &fd);
459 if(fh == INVALID_HANDLE_VALUE)
467 strcat(dest, " ..\\bin\\debug\\modules\\");
469 strcat(dest, " ..\\bin\\release\\modules\\");
471 strcat(dest, fd.cFileName);
473 while (FindNextFile(fh, &fd));
475 sprintf(command, "rebase.exe -v -b 11000000 -c baseaddr_modules.txt %s", dest);
476 printf("%s\n", command);
483 void WriteCompileCommands()
485 char commands[300][100];
486 int command_count = 0;
487 printf("\n Finding Command Sources...\n");
489 HANDLE fh = FindFirstFile("..\\src\\commands\\cmd_*.cpp", &fd);
490 if(fh == INVALID_HANDLE_VALUE)
491 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");
497 strcpy(commands[command_count], fd.cFileName);
498 commands[command_count][strlen(fd.cFileName) - 4] = 0;
499 printf(" %s\n", commands[command_count]);
501 } while(FindNextFile(fh, &fd));
505 // Write our spiffy new makefile :D
506 // I am such a lazy fucker :P
507 FILE * f = fopen("..\\src\\commands\\commands.mak", "w");
509 time_t t = time(NULL);
510 fprintf(f, "# Generated at %s\n", ctime(&t));
511 fprintf(f, "all: makedir ");
513 // dump modules.. first time :)
514 for(int i = 0; i < command_count; ++i)
515 fprintf(f, "%s.so ", commands[i]);
517 fprintf(f, "\n.cpp.obj:\n");
521 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 /MDd /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");
522 CreateDirectory("..\\src\\debug", NULL);
523 CreateDirectory("..\\bin\\debug\\bin", NULL);
524 CreateDirectory("..\\bin\\debug\\lib", NULL);
525 CreateDirectory("..\\bin\\debug\\modules", NULL);
527 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 /GL /MD /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");
528 CreateDirectory("..\\src\\release", NULL);
529 CreateDirectory("..\\bin\\release\\bin", NULL);
530 CreateDirectory("..\\bin\\release\\lib", NULL);
531 CreateDirectory("..\\bin\\release\\modules", NULL);
535 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 /MDd /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");
536 CreateDirectory("..\\src\\debug", NULL);
537 CreateDirectory("..\\bin\\debug\\bin", NULL);
538 CreateDirectory("..\\bin\\debug\\lib", NULL);
539 CreateDirectory("..\\bin\\debug\\modules", NULL);
541 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 /GL /MD /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");
542 CreateDirectory("..\\src\\release", NULL);
543 CreateDirectory("..\\bin\\release\\bin", NULL);
544 CreateDirectory("..\\bin\\release\\lib", NULL);
545 CreateDirectory("..\\bin\\release\\modules", NULL);
550 fprintf(f, "makedir:\n if not exist debug mkdir debug\n if not exist ..\\..\\bin\\debug\\lib mkdir ..\\..\\bin\\debug\\lib\n\n");
552 fprintf(f, "makedir:\n if not exist release mkdir release\n if not exist ..\\..\\bin\\release\\lib mkdir ..\\..\\bin\\release\\lib\n\n");
555 // dump modules.. again the second and last time :)
556 for(int i = 0; i < command_count; ++i)
557 fprintf(f, "%s.so : %s.obj\n", commands[i], commands[i]);
563 void WriteCompileModules()
565 char modules[300][100];
566 int module_count = 0;
568 printf("Finding Modules...\n");
570 HANDLE fh = FindFirstFile("..\\src\\modules\\m_*.cpp", &fd);
571 if(fh == INVALID_HANDLE_VALUE)
572 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");
578 strcpy(modules[module_count], fd.cFileName);
579 modules[module_count][strlen(fd.cFileName) - 4] = 0;
580 printf(" %s\n", modules[module_count]);
582 } while(FindNextFile(fh, &fd));
586 // Write our spiffy new makefile :D
587 // I am such a lazy fucker :P
588 FILE * f = fopen("..\\src\\modules\\modules.mak", "w");
590 time_t t = time(NULL);
591 fprintf(f, "# Generated at %s\n", ctime(&t));
592 fprintf(f, "all: makedir ");
594 // dump modules.. first time :)
595 for(int i = 0; i < module_count; ++i)
596 fprintf(f, "%s.so ", modules[i]);
598 fprintf(f, "\n.cpp.obj:\n");
602 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 /MDd /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");
603 CreateDirectory("..\\src\\modules\\debug_x64", NULL);
605 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 /GL /MD /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");
606 CreateDirectory("..\\src\\modules\\release_x64", NULL);
610 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 /MDd /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");
611 CreateDirectory("..\\src\\modules\\debug", NULL);
612 CreateDirectory("..\\src\\modules\\debug\\lib", NULL);
613 CreateDirectory("..\\src\\modules\\debug\\modules", NULL);
614 CreateDirectory("..\\src\\modules\\debug\\bin", NULL);
616 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 /GL /MD /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");
617 CreateDirectory("..\\src\\modules\\release", NULL);
618 CreateDirectory("..\\src\\modules\\release\\lib", NULL);
619 CreateDirectory("..\\src\\modules\\release\\modules", NULL);
620 CreateDirectory("..\\src\\modules\\release\\bin", NULL);
625 fprintf(f, "makedir:\n if not exist debug mkdir debug\n if not exist ..\\..\\bin\\debug\\modules mkdir ..\\..\\bin\\debug\\modules\n\n");
627 fprintf(f, "makedir:\n if not exist release mkdir release\n if not exist ..\\..\\bin\\release\\modules mkdir ..\\..\\bin\\release\\modules\n\n");
630 // dump modules.. again the second and last time :)
631 for(int i = 0; i < module_count; ++i)
632 fprintf(f, "%s.so : %s.obj\n", modules[i], modules[i]);