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];
202 int revision = get_svn_revision(revision_text, MAX_PATH);
206 FILE * fI = fopen("..\\src\\version.sh", "r");
209 fgets(version, 514, fI);
210 fgets(version, 514, fI);
223 strcpy(version, "InspIRCD-Unknown");
225 printf_c("Your operating system is: \033[1;32mwindows_x64 \033[0m\n");
227 printf_c("Your operating system is: \033[1;32mwindows_x32 \033[0m\n");
229 printf_c("InspIRCd revision ID: \033[1;32m%s \033[0m\n\n", revision ? revision_text : "(Non-SVN build)");
234 printf_c("You are running Windows 2000 or above, and IOCP support is most likely available.\n"
235 "Thisis much more efficent but is currently EXPERIMENTAL and UNSUPPORTED.\n"
236 "If you are unsure, answer no.\n\n");
238 use_iocp = get_bool_option("Do you want to use the IOCP implementation?", false);
241 ipv6 = get_bool_option("Do you want to enable IPv6?", false);
244 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);
246 support_ip6links = true;
248 printf_c("\033[1mAll paths are relative to the binary directory.\033[0m\n");
249 get_string_option("In what directory do you wish to install the InspIRCd base?", "..", base_path);
250 get_string_option("In what directory are the configuration files?", "../conf", config_file);
251 get_string_option("In what directory are the modules to be compiled to?", "../modules", mod_path);
252 get_string_option("In what directory is the IRCd binary to be placed?", ".", bin_dir);
253 get_string_option("In what directory are the IRCd libraries to be placed?", "../lib", library_dir);
255 printf_c("The following questions will ask you for various figures relating\n"
256 "To your IRCd install. Please note that these should usually be left\n"
257 "as defaults unless you have a real reason to change them. If they\n"
258 "changed, then the values must be identical on all servers on your\n"
259 "network, or malfunctions and/or crashes may occur, with the exception\n"
260 "of the 'maximum number of clients' setting which may be different on\n"
261 "different servers on the network.\n\n");
263 // NOTE: this may seem hackish (generating a batch build script), but it assures the user knows
264 // what they're doing, and we don't have to mess with copying files and changing around modules.mak
265 // for the extra libraries. --fez
266 // in case it exists, remove old m_ssl_openssl.cpp
267 remove("..\\src\\modules\\m_ssl_openssl.cpp");
268 printf_c("You can compile InspIRCd modules that add OpenSSL or GnuTLS support for SSL functionality.\n"
269 "To do so you will need the appropriate link libraries and header files on your system.\n");
270 use_openssl = get_bool_option("Would you like to compile the IRCd with OpenSSL support?", false);
273 get_string_option("Please enter the full path to your OpenSSL include directory\n"
274 "(e.g., C:\\openssl\\include, but NOT the openssl subdirectory under include\\)\n"
275 "(also, path should not end in '\\')",
276 "C:\\openssl\\include", openssl_inc_path);
278 // NOTE: if inspircd ever changes so that it compiles with /MT instead of the /MTd switch, then
279 // the dependency on libeay32mtd.lib and ssleay32mtd.lib will change to just libeay32.lib and
280 // ssleay32.lib. --fez
282 get_string_option("Please enter the full path to your OpenSSL library directory\n"
283 "(e.g., C:\\openssl\\lib, which should contain libeay32mtd.lib and ssleay32mtd.lib)",
284 "C:\\openssl\\lib", openssl_lib_path);
287 FILE *fp = fopen("compile_openssl.bat", "w");
288 fprintf(fp, "@echo off\n");
289 fprintf(fp, "echo This batch script compiles m_ssl_openssl for InspIRCd.\n");
290 fprintf(fp, "echo NOTE: this batch file should be invoked from the Visual Studio Command Prompt (vsvars32.bat)\n");
291 fprintf(fp, "set OPENSSL_INC_PATH=\"%s\"\n", openssl_inc_path);
292 fprintf(fp, "set OPENSSL_LIB_PATH=\"%s\"\n", openssl_lib_path);
293 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");
294 fprintf(fp, "cd ..\\src\\modules\n");
295 fprintf(fp, "copy extra\\m_ssl_openssl.cpp .\n");
296 fprintf(fp, "echo \t%%COMPILE%%\n");
297 fprintf(fp, "%%COMPILE%%\n");
298 fprintf(fp, "cd ..\\..\\win\n");
299 fprintf(fp, "echo done... now check for errors.\n");
302 printf_c("\033[1;32m!!!NOTICE!!! The file 'compile_openssl.bat' has been written to your 'win' directory. Launch it\n"
303 "!!! from the Visual Studio Command Prompt !!! to compile the m_ssl_openssl module.\n"
304 "Wait until after compiling inspircd to run it.\n"
305 "Also, ssleay32.dll and libeay32.dll will be required for the IRCd to run.\033[0m\n");
308 printf_c("\n\033[1;32mPre-build configuration is complete!\n\n"); sc(TNORMAL);
310 // dump all the options back out
311 printf_c("\033[0mBase install path:\033[1;32m %s\n", base_path);
312 printf_c("\033[0mConfig path:\033[1;32m %s\n", config_file);
313 printf_c("\033[0mModule path:\033[1;32m %s\n", mod_path);
314 printf_c("\033[0mLibrary path:\033[1;32m %s\n", library_dir);
315 printf_c("\033[0mSocket Engine:\033[1;32m %s\n", use_iocp ? "iocp" : "select");
317 printf("\n"); sc(TNORMAL);
318 if(get_bool_option("Are these settings correct?", true) == false)
326 escape_string(config_file, MAX_PATH);
327 escape_string(mod_path, MAX_PATH);
328 escape_string(library_dir, MAX_PATH);
330 printf("\nWriting inspircd_config.h...");
331 FILE * f = fopen("inspircd_config.h", "w");
332 fprintf(f, "/* Auto generated by configure, do not modify! */\n");
333 fprintf(f, "#ifndef __CONFIGURATION_AUTO__\n");
334 fprintf(f, "#define __CONFIGURATION_AUTO__\n\n");
336 fprintf(f, "#define CONFIG_USE_IOCP 1\n\n");
338 fprintf(f, "#define IPV6 1\n\n");
340 fprintf(f, "#define CONFIG_FILE \"%s/inspircd.conf\"\n", config_file);
341 fprintf(f, "#define MOD_PATH \"%s\"\n", mod_path);
342 fprintf(f, "#define SOMAXCONN_S \"128\"\n");
343 fprintf(f, "#define LIBRARYDIR \"%s\"\n", library_dir);
344 fprintf(f, "#define VERSION \"%s\"\n", version);
345 fprintf(f, "#define REVISION \"%s\"\n", revision_text);
347 fprintf(f, "#define SUPPORT_IP6LINKS 1\n");
350 vi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
353 fprintf(f, "#define SYSTEM \"Windows_x64 %u.%u.%u %s\"\n", vi.dwMajorVersion, vi.dwMinorVersion, vi.dwBuildNumber, vi.szCSDVersion);
355 fprintf(f, "#define SYSTEM \"Windows_x32 %u.%u.%u %s\"\n", vi.dwMajorVersion, vi.dwMinorVersion, vi.dwBuildNumber, vi.szCSDVersion);
357 fprintf(f, "#define MAXBUF 514\n");
359 fprintf(f, "\n#include \"inspircd_win32wrapper.h\"\n\n");
360 fprintf(f, "#include \"threadengines/threadengine_win32.h\"\n\n");
361 fprintf(f, "#endif\n\n");
364 sc(TGREEN); printf(" done\n"); sc(TNORMAL);
365 printf("Writing inspircd_se_config.h...");
367 f = fopen("inspircd_se_config.h", "w");
368 fprintf(f, "/* Auto generated by configure, do not modify or commit to svn! */\n");
369 fprintf(f, "#ifndef __CONFIGURATION_SOCKETENGINE__\n");
370 fprintf(f, "#define __CONFIGURATION_SOCKETENGINE__\n\n");
371 fprintf(f, "#include \"socketengines/socketengine_%s.h\"\n\n", use_iocp ? "iocp" : "select");
372 fprintf(f, "#endif\n\n");
375 sc(TGREEN); printf(" done\n"); sc(TNORMAL);
376 printf("Writing command and module compilation scripts...");
377 WriteCompileCommands();
378 WriteCompileModules();
379 sc(TGREEN); printf(" done\n"); sc(TNORMAL);
381 printf("\nconfigure is done.. exiting!\n");
393 HANDLE fh = FindFirstFile("..\\bin\\debug\\lib\\*.so", &fd);
395 HANDLE fh = FindFirstFile("..\\bin\\release\\lib\\*.so", &fd);
397 if(fh == INVALID_HANDLE_VALUE)
403 strcat(dest, " ..\\bin\\debug\\lib\\");
405 strcat(dest, " ..\\bin\\release\\lib\\");
407 strcat(dest, fd.cFileName);
409 while (FindNextFile(fh, &fd));
413 sprintf(command, "rebase.exe -v -b 10000000 -c baseaddr_commands.txt %s", dest);
414 printf("%s\n", command);
418 fh = FindFirstFile("..\\bin\\debug\\modules\\*.so", &fd);
420 fh = FindFirstFile("..\\bin\\release\\modules\\*.so", &fd);
422 if(fh == INVALID_HANDLE_VALUE)
430 strcat(dest, " ..\\bin\\debug\\modules\\");
432 strcat(dest, " ..\\bin\\release\\modules\\");
434 strcat(dest, fd.cFileName);
436 while (FindNextFile(fh, &fd));
438 sprintf(command, "rebase.exe -v -b 11000000 -c baseaddr_modules.txt %s", dest);
439 printf("%s\n", command);
446 void WriteCompileCommands()
448 char commands[300][100];
449 int command_count = 0;
450 printf("\n Finding Command Sources...\n");
452 HANDLE fh = FindFirstFile("..\\src\\commands\\cmd_*.cpp", &fd);
453 if(fh == INVALID_HANDLE_VALUE)
454 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");
460 strcpy(commands[command_count], fd.cFileName);
461 commands[command_count][strlen(fd.cFileName) - 4] = 0;
462 printf(" %s\n", commands[command_count]);
464 } while(FindNextFile(fh, &fd));
468 // Write our spiffy new makefile :D
469 // I am such a lazy fucker :P
470 FILE * f = fopen("..\\src\\commands\\commands.mak", "w");
472 time_t t = time(NULL);
473 fprintf(f, "# Generated at %s\n", ctime(&t));
474 fprintf(f, "all: makedir ");
476 // dump modules.. first time :)
477 for(int i = 0; i < command_count; ++i)
478 fprintf(f, "%s.so ", commands[i]);
480 fprintf(f, "\n.cpp.obj:\n");
484 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");
485 CreateDirectory("..\\src\\debug", NULL);
486 CreateDirectory("..\\bin\\debug\\bin", NULL);
487 CreateDirectory("..\\bin\\debug\\lib", NULL);
488 CreateDirectory("..\\bin\\debug\\modules", NULL);
490 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");
491 CreateDirectory("..\\src\\release", NULL);
492 CreateDirectory("..\\bin\\release\\bin", NULL);
493 CreateDirectory("..\\bin\\release\\lib", NULL);
494 CreateDirectory("..\\bin\\release\\modules", NULL);
498 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");
499 CreateDirectory("..\\src\\debug", NULL);
500 CreateDirectory("..\\bin\\debug\\bin", NULL);
501 CreateDirectory("..\\bin\\debug\\lib", NULL);
502 CreateDirectory("..\\bin\\debug\\modules", NULL);
504 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");
505 CreateDirectory("..\\src\\release", NULL);
506 CreateDirectory("..\\bin\\release\\bin", NULL);
507 CreateDirectory("..\\bin\\release\\lib", NULL);
508 CreateDirectory("..\\bin\\release\\modules", NULL);
513 fprintf(f, "makedir:\n if not exist debug mkdir debug\n if not exist ..\\..\\bin\\debug\\lib mkdir ..\\..\\bin\\debug\\lib\n\n");
515 fprintf(f, "makedir:\n if not exist release mkdir release\n if not exist ..\\..\\bin\\release\\lib mkdir ..\\..\\bin\\release\\lib\n\n");
518 // dump modules.. again the second and last time :)
519 for(int i = 0; i < command_count; ++i)
520 fprintf(f, "%s.so : %s.obj\n", commands[i], commands[i]);
526 void WriteCompileModules()
528 char modules[300][100];
529 int module_count = 0;
531 printf("Finding Modules...\n");
533 HANDLE fh = FindFirstFile("..\\src\\modules\\m_*.cpp", &fd);
534 if(fh == INVALID_HANDLE_VALUE)
535 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");
541 strcpy(modules[module_count], fd.cFileName);
542 modules[module_count][strlen(fd.cFileName) - 4] = 0;
543 printf(" %s\n", modules[module_count]);
545 } while(FindNextFile(fh, &fd));
549 // Write our spiffy new makefile :D
550 // I am such a lazy fucker :P
551 FILE * f = fopen("..\\src\\modules\\modules.mak", "w");
553 time_t t = time(NULL);
554 fprintf(f, "# Generated at %s\n", ctime(&t));
555 fprintf(f, "all: makedir ");
557 // dump modules.. first time :)
558 for(int i = 0; i < module_count; ++i)
559 fprintf(f, "%s.so ", modules[i]);
561 fprintf(f, "\n.cpp.obj:\n");
565 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");
566 CreateDirectory("..\\src\\modules\\debug_x64", NULL);
568 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");
569 CreateDirectory("..\\src\\modules\\release_x64", NULL);
573 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");
574 CreateDirectory("..\\src\\modules\\debug", NULL);
575 CreateDirectory("..\\src\\modules\\debug\\lib", NULL);
576 CreateDirectory("..\\src\\modules\\debug\\modules", NULL);
577 CreateDirectory("..\\src\\modules\\debug\\bin", NULL);
579 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");
580 CreateDirectory("..\\src\\modules\\release", NULL);
581 CreateDirectory("..\\src\\modules\\release\\lib", NULL);
582 CreateDirectory("..\\src\\modules\\release\\modules", NULL);
583 CreateDirectory("..\\src\\modules\\release\\bin", NULL);
588 fprintf(f, "makedir:\n if not exist debug mkdir debug\n if not exist ..\\..\\bin\\debug\\modules mkdir ..\\..\\bin\\debug\\modules\n\n");
590 fprintf(f, "makedir:\n if not exist release mkdir release\n if not exist ..\\..\\bin\\release\\modules mkdir ..\\..\\bin\\release\\modules\n\n");
593 // dump modules.. again the second and last time :)
594 for(int i = 0; i < module_count; ++i)
595 fprintf(f, "%s.so : %s.obj\n", modules[i], modules[i]);