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 // NOTE: this may seem hackish (generating a batch build script), but it assures the user knows
256 // what they're doing, and we don't have to mess with copying files and changing around modules.mak
257 // for the extra libraries. --fez
258 // in case it exists, remove old m_ssl_openssl.cpp
259 remove("..\\src\\modules\\m_ssl_openssl.cpp");
260 printf_c("You can compile InspIRCd modules that add OpenSSL or GnuTLS support for SSL functionality.\n"
261 "To do so you will need the appropriate link libraries and header files on your system.\n");
262 use_openssl = get_bool_option("Would you like to compile the IRCd with OpenSSL support?", false);
265 get_string_option("Please enter the full path to your OpenSSL include directory\n"
266 "(e.g., C:\\openssl\\include, but NOT the openssl subdirectory under include\\)\n"
267 "(also, path should not end in '\\')",
268 "C:\\openssl\\include", openssl_inc_path);
270 // NOTE: if inspircd ever changes so that it compiles with /MT instead of the /MTd switch, then
271 // the dependency on libeay32mtd.lib and ssleay32mtd.lib will change to just libeay32.lib and
272 // ssleay32.lib. --fez
274 get_string_option("Please enter the full path to your OpenSSL library directory\n"
275 "(e.g., C:\\openssl\\lib, which should contain libeay32mtd.lib and ssleay32mtd.lib)",
276 "C:\\openssl\\lib", openssl_lib_path);
279 FILE *fp = fopen("compile_openssl.bat", "w");
280 fprintf(fp, "@echo off\n");
281 fprintf(fp, "echo This batch script compiles m_ssl_openssl for InspIRCd.\n");
282 fprintf(fp, "echo NOTE: this batch file should be invoked from the Visual Studio Command Prompt (vsvars32.bat)\n");
283 fprintf(fp, "set OPENSSL_INC_PATH=\"%s\"\n", openssl_inc_path);
284 fprintf(fp, "set OPENSSL_LIB_PATH=\"%s\"\n", openssl_lib_path);
285 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");
286 fprintf(fp, "cd ..\\src\\modules\n");
287 fprintf(fp, "copy extra\\m_ssl_openssl.cpp .\n");
288 fprintf(fp, "echo \t%%COMPILE%%\n");
289 fprintf(fp, "%%COMPILE%%\n");
290 fprintf(fp, "cd ..\\..\\win\n");
291 fprintf(fp, "echo done... now check for errors.\n");
294 printf_c("\033[1;32m!!!NOTICE!!! The file 'compile_openssl.bat' has been written to your 'win' directory. Launch it\n"
295 "!!! from the Visual Studio Command Prompt !!! to compile the m_ssl_openssl module.\n"
296 "Wait until after compiling inspircd to run it.\n"
297 "Also, ssleay32.dll and libeay32.dll will be required for the IRCd to run.\033[0m\n");
300 printf_c("\n\033[1;32mPre-build configuration is complete!\n\n"); sc(TNORMAL);
302 // dump all the options back out
303 printf_c("\033[0mBase install path:\033[1;32m %s\n", base_path);
304 printf_c("\033[0mConfig path:\033[1;32m %s\n", config_file);
305 printf_c("\033[0mModule path:\033[1;32m %s\n", mod_path);
306 printf_c("\033[0mLibrary path:\033[1;32m %s\n", library_dir);
307 printf_c("\033[0mSocket Engine:\033[1;32m %s\n", use_iocp ? "iocp" : "select");
309 printf("\n"); sc(TNORMAL);
310 if(get_bool_option("Are these settings correct?", true) == false)
318 escape_string(config_file, MAX_PATH);
319 escape_string(mod_path, MAX_PATH);
320 escape_string(library_dir, MAX_PATH);
322 printf("\nWriting inspircd_config.h...");
323 FILE * f = fopen("inspircd_config.h", "w");
324 fprintf(f, "/* Auto generated by configure, do not modify! */\n");
325 fprintf(f, "#ifndef __CONFIGURATION_AUTO__\n");
326 fprintf(f, "#define __CONFIGURATION_AUTO__\n\n");
328 fprintf(f, "#define CONFIG_USE_IOCP 1\n\n");
330 fprintf(f, "#define IPV6 1\n\n");
332 fprintf(f, "#define CONFIG_FILE \"%s/inspircd.conf\"\n", config_file);
333 fprintf(f, "#define MOD_PATH \"%s\"\n", mod_path);
334 fprintf(f, "#define SOMAXCONN_S \"128\"\n");
335 fprintf(f, "#define LIBRARYDIR \"%s\"\n", library_dir);
336 fprintf(f, "#define VERSION \"%s\"\n", version);
337 fprintf(f, "#define REVISION \"%s\"\n", revision_text);
339 fprintf(f, "#define SUPPORT_IP6LINKS 1\n");
342 vi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
345 fprintf(f, "#define SYSTEM \"Windows_x64 %u.%u.%u %s\"\n", vi.dwMajorVersion, vi.dwMinorVersion, vi.dwBuildNumber, vi.szCSDVersion);
347 fprintf(f, "#define SYSTEM \"Windows_x32 %u.%u.%u %s\"\n", vi.dwMajorVersion, vi.dwMinorVersion, vi.dwBuildNumber, vi.szCSDVersion);
349 fprintf(f, "#define MAXBUF 514\n");
351 fprintf(f, "\n#include \"inspircd_win32wrapper.h\"");
352 fprintf(f, "\n#include \"inspircd_namedpipe.h\"");
353 fprintf(f, "\n#include \"threadengines/threadengine_win32.h\"\n\n");
354 fprintf(f, "#endif\n\n");
357 sc(TGREEN); printf(" done\n"); sc(TNORMAL);
358 printf("Writing inspircd_se_config.h...");
360 f = fopen("inspircd_se_config.h", "w");
361 fprintf(f, "/* Auto generated by configure, do not modify or commit to svn! */\n");
362 fprintf(f, "#ifndef __CONFIGURATION_SOCKETENGINE__\n");
363 fprintf(f, "#define __CONFIGURATION_SOCKETENGINE__\n\n");
364 fprintf(f, "#include \"socketengines/socketengine_%s.h\"\n\n", use_iocp ? "iocp" : "select");
365 fprintf(f, "#endif\n\n");
368 sc(TGREEN); printf(" done\n"); sc(TNORMAL);
369 printf("Writing command and module compilation scripts...");
370 WriteCompileCommands();
371 WriteCompileModules();
372 sc(TGREEN); printf(" done\n"); sc(TNORMAL);
374 printf("\nconfigure is done.. exiting!\n");
386 HANDLE fh = FindFirstFile("..\\bin\\debug\\lib\\*.so", &fd);
388 HANDLE fh = FindFirstFile("..\\bin\\release\\lib\\*.so", &fd);
390 if(fh == INVALID_HANDLE_VALUE)
396 strcat(dest, " ..\\bin\\debug\\lib\\");
398 strcat(dest, " ..\\bin\\release\\lib\\");
400 strcat(dest, fd.cFileName);
402 while (FindNextFile(fh, &fd));
406 sprintf(command, "rebase.exe -v -b 10000000 -c baseaddr_commands.txt %s", dest);
407 printf("%s\n", command);
411 fh = FindFirstFile("..\\bin\\debug\\modules\\*.so", &fd);
413 fh = FindFirstFile("..\\bin\\release\\modules\\*.so", &fd);
415 if(fh == INVALID_HANDLE_VALUE)
423 strcat(dest, " ..\\bin\\debug\\modules\\");
425 strcat(dest, " ..\\bin\\release\\modules\\");
427 strcat(dest, fd.cFileName);
429 while (FindNextFile(fh, &fd));
431 sprintf(command, "rebase.exe -v -b 11000000 -c baseaddr_modules.txt %s", dest);
432 printf("%s\n", command);
439 void WriteCompileCommands()
441 char commands[300][100];
442 int command_count = 0;
443 printf("\n Finding Command Sources...\n");
445 HANDLE fh = FindFirstFile("..\\src\\commands\\cmd_*.cpp", &fd);
446 if(fh == INVALID_HANDLE_VALUE)
447 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");
453 strcpy(commands[command_count], fd.cFileName);
454 commands[command_count][strlen(fd.cFileName) - 4] = 0;
455 printf(" %s\n", commands[command_count]);
457 } while(FindNextFile(fh, &fd));
461 // Write our spiffy new makefile :D
462 // I am such a lazy fucker :P
463 FILE * f = fopen("..\\src\\commands\\commands.mak", "w");
465 time_t t = time(NULL);
466 fprintf(f, "# Generated at %s\n", ctime(&t));
467 fprintf(f, "all: makedir ");
469 // dump modules.. first time :)
470 for(int i = 0; i < command_count; ++i)
471 fprintf(f, "%s.so ", commands[i]);
473 fprintf(f, "\n.cpp.obj:\n");
477 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");
478 CreateDirectory("..\\src\\debug", NULL);
479 CreateDirectory("..\\bin\\debug\\bin", NULL);
480 CreateDirectory("..\\bin\\debug\\lib", NULL);
481 CreateDirectory("..\\bin\\debug\\modules", NULL);
483 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");
484 CreateDirectory("..\\src\\release", NULL);
485 CreateDirectory("..\\bin\\release\\bin", NULL);
486 CreateDirectory("..\\bin\\release\\lib", NULL);
487 CreateDirectory("..\\bin\\release\\modules", NULL);
491 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");
492 CreateDirectory("..\\src\\debug", NULL);
493 CreateDirectory("..\\bin\\debug\\bin", NULL);
494 CreateDirectory("..\\bin\\debug\\lib", NULL);
495 CreateDirectory("..\\bin\\debug\\modules", NULL);
497 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");
498 CreateDirectory("..\\src\\release", NULL);
499 CreateDirectory("..\\bin\\release\\bin", NULL);
500 CreateDirectory("..\\bin\\release\\lib", NULL);
501 CreateDirectory("..\\bin\\release\\modules", NULL);
506 fprintf(f, "makedir:\n if not exist debug mkdir debug\n if not exist ..\\..\\bin\\debug\\lib mkdir ..\\..\\bin\\debug\\lib\n\n");
508 fprintf(f, "makedir:\n if not exist release mkdir release\n if not exist ..\\..\\bin\\release\\lib mkdir ..\\..\\bin\\release\\lib\n\n");
511 // dump modules.. again the second and last time :)
512 for(int i = 0; i < command_count; ++i)
513 fprintf(f, "%s.so : %s.obj\n", commands[i], commands[i]);
519 void WriteCompileModules()
521 char modules[300][100];
522 int module_count = 0;
524 printf("Finding Modules...\n");
526 HANDLE fh = FindFirstFile("..\\src\\modules\\m_*.cpp", &fd);
527 if(fh == INVALID_HANDLE_VALUE)
528 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");
534 strcpy(modules[module_count], fd.cFileName);
535 modules[module_count][strlen(fd.cFileName) - 4] = 0;
536 printf(" %s\n", modules[module_count]);
538 } while(FindNextFile(fh, &fd));
542 // Write our spiffy new makefile :D
543 // I am such a lazy fucker :P
544 FILE * f = fopen("..\\src\\modules\\modules.mak", "w");
546 time_t t = time(NULL);
547 fprintf(f, "# Generated at %s\n", ctime(&t));
548 fprintf(f, "all: makedir ");
550 // dump modules.. first time :)
551 for(int i = 0; i < module_count; ++i)
552 fprintf(f, "%s.so ", modules[i]);
554 fprintf(f, "\n.cpp.obj:\n");
558 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");
559 CreateDirectory("..\\src\\modules\\debug_x64", NULL);
561 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");
562 CreateDirectory("..\\src\\modules\\release_x64", NULL);
566 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");
567 CreateDirectory("..\\src\\modules\\debug", NULL);
568 CreateDirectory("..\\src\\modules\\debug\\lib", NULL);
569 CreateDirectory("..\\src\\modules\\debug\\modules", NULL);
570 CreateDirectory("..\\src\\modules\\debug\\bin", NULL);
572 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");
573 CreateDirectory("..\\src\\modules\\release", NULL);
574 CreateDirectory("..\\src\\modules\\release\\lib", NULL);
575 CreateDirectory("..\\src\\modules\\release\\modules", NULL);
576 CreateDirectory("..\\src\\modules\\release\\bin", NULL);
581 fprintf(f, "makedir:\n if not exist debug mkdir debug\n if not exist ..\\..\\bin\\debug\\modules mkdir ..\\..\\bin\\debug\\modules\n\n");
583 fprintf(f, "makedir:\n if not exist release mkdir release\n if not exist ..\\..\\bin\\release\\modules mkdir ..\\..\\bin\\release\\modules\n\n");
586 // dump modules.. again the second and last time :)
587 for(int i = 0; i < module_count; ++i)
588 fprintf(f, "%s.so : %s.obj\n", modules[i], modules[i]);