2008-04-13 14:32:09 +00:00
/* +------------------------------------+
* | Inspire Internet Relay Chat Daemon |
* + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
2007-07-16 17:30:04 +00:00
*
2011-06-18 17:25:35 -04:00
* InspIRCd : ( C ) 2002 - 2011 InspIRCd Development Team
2009-03-15 12:42:35 +00:00
* See : http : //wiki.inspircd.org/Credits
2007-07-16 17:30:04 +00:00
*
* This program is free but copyrighted software ; see
2008-04-13 14:32:09 +00:00
* the file COPYING for details .
2007-07-16 17:30:04 +00:00
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
# define _CRT_SECURE_NO_DEPRECATE
2008-08-24 19:19:57 +00:00
# define CONFIGURE_BUILD
2007-07-23 00:37:03 +00:00
# define WIN32_LEAN_AND_MEAN
2007-07-16 17:30:04 +00:00
# include <windows.h>
# include <stdio.h>
2009-10-10 14:06:35 +00:00
# include <process.h>
2011-06-18 17:25:35 -04:00
# include <iostream>
2007-07-16 17:30:04 +00:00
# include <string>
2011-06-18 17:25:35 -04:00
# include <vector>
2007-07-16 17:30:04 +00:00
# include <time.h>
2007-07-23 00:37:03 +00:00
# include "inspircd_win32wrapper.h"
2007-07-16 17:30:04 +00:00
# include "colours.h"
using namespace std ;
void Run ( ) ;
void Banner ( ) ;
2011-06-18 17:25:35 -04:00
void WriteCompileModules ( const vector < string > & , const vector < string > & ) ;
2007-07-16 17:30:04 +00:00
void WriteCompileCommands ( ) ;
2008-04-16 21:31:24 +00:00
void Rebase ( ) ;
2008-09-06 20:42:36 +00:00
void CopyExtras ( ) ;
2007-07-16 17:30:04 +00:00
/* detects if we are running windows xp or higher (5.1) */
bool iswinxp ( )
{
OSVERSIONINFO vi ;
vi . dwOSVersionInfoSize = sizeof ( OSVERSIONINFO ) ;
GetVersionEx ( & vi ) ;
if ( vi . dwMajorVersion > = 5 )
return true ;
return false ;
}
int get_int_option ( const char * text , int def )
{
static char buffer [ 500 ] ;
int ret ;
printf_c ( " %s \n [ \033 [1;32m%u \033 [0m] -> " , text , def ) ;
fgets ( buffer , 500 , stdin ) ;
if ( sscanf ( buffer , " %u " , & ret ) ! = 1 )
ret = def ;
printf ( " \n " ) ;
return ret ;
}
bool get_bool_option ( const char * text , bool def )
{
static char buffer [ 500 ] ;
char ret [ 100 ] ;
printf_c ( " %s [ \033 [1;32m%c \033 [0m] -> " , text , def ? ' y ' : ' n ' ) ;
fgets ( buffer , 500 , stdin ) ;
if ( sscanf ( buffer , " %s " , ret ) ! = 1 )
strcpy ( ret , def ? " y " : " n " ) ;
printf ( " \n " ) ;
return ! strncmp ( ret , " y " , 1 ) ;
}
2011-06-18 17:25:35 -04:00
string get_string_option ( const char * text , char * def )
2007-07-16 17:30:04 +00:00
{
2011-06-18 17:25:35 -04:00
if ( def & & * def )
2008-02-01 00:57:29 +00:00
printf_c ( " %s \n [ \033 [1;32m%s \033 [0m] -> " , text , def ) ;
else
printf_c ( " %s \n [] -> " , text ) ;
2011-06-18 17:25:35 -04:00
char buffer [ 1000 ] , buf [ 1000 ] ;
fgets ( buffer , sizeof ( buffer ) , stdin ) ;
if ( sscanf ( buffer , " %s " , buf ) ! = 1 )
2007-07-16 17:30:04 +00:00
strcpy ( buf , def ) ;
2011-06-18 17:25:35 -04:00
2007-07-16 17:30:04 +00:00
printf ( " \n " ) ;
2011-06-18 17:25:35 -04:00
return buf ;
2007-07-16 17:30:04 +00:00
}
// escapes a string for use in a c++ file
2011-06-18 17:25:35 -04:00
void escape_string ( string & str )
2007-07-16 17:30:04 +00:00
{
2011-06-18 17:25:35 -04:00
string copy = str ;
str . clear ( ) ;
2008-04-13 14:32:09 +00:00
2011-06-18 17:25:35 -04:00
for ( unsigned i = 0 ; i < copy . size ( ) ; + + i )
2007-07-16 17:30:04 +00:00
{
2011-06-18 17:25:35 -04:00
str + = copy [ i ] ;
if ( copy [ i ] = = ' \\ ' )
str + = ' \\ ' ;
2007-07-16 17:30:04 +00:00
}
}
2011-06-08 20:40:29 -04:00
string get_git_commit ( )
2007-07-16 17:30:04 +00:00
{
2011-06-08 20:40:29 -04:00
char buf [ 128 ] ;
char * ref = NULL , * commit = NULL ;
FILE * f = fopen ( " ../.git/HEAD " , " r " ) ;
2008-04-13 14:34:12 +00:00
if ( f )
{
2011-06-08 20:40:29 -04:00
if ( fgets ( buf , sizeof ( buf ) , f ) )
{
while ( isspace ( buf [ strlen ( buf ) - 1 ] ) )
buf [ strlen ( buf ) - 1 ] = 0 ;
char * p = strchr ( buf , ' ' ) ;
if ( p )
ref = + + p ;
}
2008-04-13 14:34:12 +00:00
fclose ( f ) ;
}
2011-06-08 20:40:29 -04:00
if ( ref = = NULL )
return " " ;
string ref_file = string ( " ../.git/ " ) + string ( ref ) ;
f = fopen ( ref_file . c_str ( ) , " r " ) ;
if ( f )
{
if ( fgets ( buf , sizeof ( buf ) , f ) )
{
while ( isspace ( buf [ strlen ( buf ) - 1 ] ) )
buf [ strlen ( buf ) - 1 ] = 0 ;
commit = buf ;
}
fclose ( f ) ;
}
return commit ! = NULL ? commit : " " ;
2007-07-16 17:30:04 +00:00
}
2009-10-10 14:06:35 +00:00
void get_machine_info ( char * buffer , size_t len )
{
char buf [ 500 ] ;
char buf2 [ 500 ] ;
DWORD dwSize = sizeof ( buf ) ;
if ( ! GetComputerNameEx ( ( COMPUTER_NAME_FORMAT ) ComputerNameDnsFullyQualified , buf , & dwSize ) )
sprintf ( buf , " %s " , " unknown " ) ;
FILE * f = fopen ( " ver.txt.tmp " , " r " ) ;
if ( f )
{
while ( fgets ( buf2 , 500 , f ) ) { }
fclose ( f ) ;
2009-10-11 22:07:24 +00:00
unlink ( " ver.txt.tmp " ) ;
2009-10-10 14:06:35 +00:00
}
else
sprintf ( buf2 , " %s " , " unknown " ) ;
sprintf ( buffer , " %s " , buf ) ;
//strip newlines
char * b = buffer + strlen ( buf ) + 1 ;
char * b2 = buf2 ;
while ( * b2 )
{
if ( * b2 ! = 10 & & * b2 ! = 13 )
{
* b = * b2 ;
b + + ;
}
* b2 + + ;
}
* b = 0 ;
}
2011-06-18 17:25:35 -04:00
vector < string > get_dir_list ( const string & path_list )
{
char * paths = strdup ( path_list . c_str ( ) ) ;
char * paths_save = paths ;
char * p = paths ;
vector < string > paths_return ;
while ( ( p = strchr ( paths , ' ; ' ) ) )
{
* p + + = 0 ;
paths_return . push_back ( paths ) ;
paths = p ;
}
if ( paths ! = NULL )
paths_return . push_back ( paths ) ;
free ( paths_save ) ;
return paths_return ;
}
2007-07-16 17:30:04 +00:00
int __stdcall WinMain ( IN HINSTANCE hInstance , IN HINSTANCE hPrevInstance , IN LPSTR lpCmdLine , IN int nShowCmd )
{
2008-04-16 21:31:24 +00:00
if ( ! strcmp ( lpCmdLine , " /rebase " ) )
{
Rebase ( ) ;
return 0 ;
}
2009-10-10 14:06:35 +00:00
2007-07-16 17:30:04 +00:00
FILE * j = fopen ( " inspircd_config.h " , " r " ) ;
if ( j )
{
if ( MessageBox ( 0 , " inspircd_config.h already exists. Remove it and build from clean? " , " Configure program " , MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2 ) ! = IDYES )
{
fclose ( j ) ;
exit ( 0 ) ;
}
}
2009-10-10 14:06:35 +00:00
// call before we hook console handles
system ( " ver > ver.txt.tmp " ) ;
2007-07-16 17:30:04 +00:00
AllocConsole ( ) ;
// pipe standard handles to this console
freopen ( " CONIN$ " , " r " , stdin ) ;
freopen ( " CONOUT$ " , " w " , stdout ) ;
freopen ( " CONOUT$ " , " w " , stderr ) ;
Banner ( ) ;
Run ( ) ;
FreeConsole ( ) ;
return 0 ;
}
void Banner ( )
{
printf_c ( " \n Welcome to the \033 [1mInspIRCd \033 [0m Configuration program! ( \033 [1minteractive mode \033 [0m) \n "
" \033 [1mPackage maintainers: Type ./configure --help for non-interactive help \033 [0m \n \n " ) ;
2008-04-13 14:32:09 +00:00
printf_c ( " *** If you are unsure of any of these values, leave it blank for *** \n "
" *** standard settings that will work, and your server will run *** \n "
2007-07-16 17:30:04 +00:00
" *** using them. Please consult your IRC network admin if in doubt. *** \n \n "
" Press \033 [1m<RETURN> \033 [0m to accept the default for any option, or enter \n "
" a new value. Please note: You will \033 [1mHAVE \033 [0m to read the docs \n "
" dir, otherwise you won't have a config file! \n \n " ) ;
}
void Run ( )
{
2011-06-18 17:25:35 -04:00
vector < string > extra_include_paths , extra_lib_paths ;
2011-06-08 20:40:29 -04:00
string revision = get_git_commit ( ) ;
2007-07-16 17:30:04 +00:00
char version [ 514 ] ;
2009-10-10 14:06:35 +00:00
char machine_text [ MAX_PATH ] ;
get_machine_info ( machine_text , MAX_PATH ) ;
2007-07-16 17:30:04 +00:00
// grab version
FILE * fI = fopen ( " .. \\ src \\ version.sh " , " r " ) ;
if ( fI )
{
fgets ( version , 514 , fI ) ;
fgets ( version , 514 , fI ) ;
char * p2 = version ;
while ( * p2 ! = ' \" ' )
+ + p2 ;
+ + p2 ;
strcpy ( version , p2 ) ;
p2 = version ;
while ( * p2 ! = ' \" ' )
+ + p2 ;
* p2 = 0 ;
fclose ( fI ) ;
}
else
strcpy ( version , " InspIRCD-Unknown " ) ;
# ifdef WIN64
printf_c ( " Your operating system is: \033 [1;32mwindows_x64 \033 [0m \n " ) ;
# else
printf_c ( " Your operating system is: \033 [1;32mwindows_x32 \033 [0m \n " ) ;
# endif
2011-06-08 20:40:29 -04:00
printf_c ( " InspIRCd revision ID: \033 [1;32m%s \033 [0m \n \n " , ! revision . empty ( ) ? revision . c_str ( ) : " (Non-GIT build) " ) ;
2011-06-18 17:25:35 -04:00
printf_c ( " \033 [1mExtra modules. \033 [0m \n " ) ;
if ( get_bool_option ( " Do you want to compile any extra non-core modules? " , false ) )
2008-02-01 00:57:29 +00:00
{
2011-06-18 17:25:35 -04:00
string extra_i_path = get_string_option ( " Extra include search paths separate by \" ; \" " , " . " ) ;
string extra_l_path = get_string_option ( " Extra library search paths, separate by \" ; \" " , " . " ) ;
extra_include_paths = get_dir_list ( extra_i_path ) ;
extra_lib_paths = get_dir_list ( extra_l_path ) ;
2008-02-01 00:57:29 +00:00
}
2011-06-18 17:25:35 -04:00
printf_c ( " \033 [1mAll paths are relative to the binary directory. \033 [0m \n " ) ;
string base_path = get_string_option ( " In what directory do you wish to install the InspIRCd base? " , " .. " ) ;
string config_file = get_string_option ( " In what directory are the configuration files? " , " conf " ) ;
string mod_path = get_string_option ( " In what directory are the modules to be compiled to? " , " modules " ) ;
string bin_dir = get_string_option ( " In what directory is the IRCd binary to be placed? " , " . " ) ;
2007-07-16 17:30:04 +00:00
printf_c ( " \n \033 [1;32mPre-build configuration is complete! \n \n " ) ; sc ( TNORMAL ) ;
2008-09-06 20:42:36 +00:00
CopyExtras ( ) ;
2007-07-16 17:30:04 +00:00
// dump all the options back out
2011-06-18 17:25:35 -04:00
printf_c ( " \033 [0mBase install path: \033 [1;32m %s \n " , base_path . c_str ( ) ) ;
printf_c ( " \033 [0mConfig path: \033 [1;32m %s \n " , config_file . c_str ( ) ) ;
printf_c ( " \033 [0mModule path: \033 [1;32m %s \n " , mod_path . c_str ( ) ) ;
2009-10-24 20:04:24 +00:00
printf_c ( " \033 [0mSocket Engine: \033 [1;32m %s \n " , " select " ) ;
2008-05-25 17:32:57 +00:00
2007-07-16 17:30:04 +00:00
printf ( " \n " ) ; sc ( TNORMAL ) ;
if ( get_bool_option ( " Are these settings correct? " , true ) = = false )
{
Run ( ) ;
return ;
}
printf ( " \n " ) ;
// escape the pathes
2011-06-18 17:25:35 -04:00
escape_string ( config_file ) ;
escape_string ( mod_path ) ;
2007-07-16 17:30:04 +00:00
printf ( " \n Writing inspircd_config.h... " ) ;
FILE * f = fopen ( " inspircd_config.h " , " w " ) ;
fprintf ( f , " /* Auto generated by configure, do not modify! */ \n " ) ;
fprintf ( f , " #ifndef __CONFIGURATION_AUTO__ \n " ) ;
fprintf ( f , " #define __CONFIGURATION_AUTO__ \n \n " ) ;
2011-06-18 17:25:35 -04:00
fprintf ( f , " #define MOD_PATH \" %s \" \n " , mod_path . c_str ( ) ) ;
2007-07-16 17:30:04 +00:00
fprintf ( f , " #define SOMAXCONN_S \" 128 \" \n " ) ;
fprintf ( f , " #define MAXBUF 514 \n " ) ;
2008-06-15 16:21:09 +00:00
fprintf ( f , " \n #include \" inspircd_win32wrapper.h \" " ) ;
fprintf ( f , " \n #include \" inspircd_namedpipe.h \" " ) ;
fprintf ( f , " \n #include \" threadengines/threadengine_win32.h \" \n \n " ) ;
2007-07-16 17:30:04 +00:00
fprintf ( f , " #endif \n \n " ) ;
fclose ( f ) ;
sc ( TGREEN ) ; printf ( " done \n " ) ; sc ( TNORMAL ) ;
printf ( " Writing inspircd_se_config.h... " ) ;
f = fopen ( " inspircd_se_config.h " , " w " ) ;
fprintf ( f , " /* Auto generated by configure, do not modify or commit to svn! */ \n " ) ;
fprintf ( f , " #ifndef __CONFIGURATION_SOCKETENGINE__ \n " ) ;
fprintf ( f , " #define __CONFIGURATION_SOCKETENGINE__ \n \n " ) ;
2009-10-24 20:04:24 +00:00
fprintf ( f , " #include \" socketengines/socketengine_%s.h \" \n \n " , " select " ) ;
2007-07-16 17:30:04 +00:00
fprintf ( f , " #endif \n \n " ) ;
fclose ( f ) ;
2009-10-10 14:06:35 +00:00
sc ( TGREEN ) ; printf ( " done \n " ) ; sc ( TNORMAL ) ;
printf ( " Writing inspircd_version.h... " ) ;
f = fopen ( " inspircd_version.h " , " w " ) ;
fprintf ( f , " #define VERSION \" %s \" \n " , version ) ;
2011-06-08 20:40:29 -04:00
fprintf ( f , " #define REVISION \" %s \" \n " , revision . c_str ( ) ) ;
2009-10-10 14:06:35 +00:00
fprintf ( f , " #define SYSTEM \" %s \" \n " , machine_text ) ;
fclose ( f ) ;
2007-07-16 17:30:04 +00:00
sc ( TGREEN ) ; printf ( " done \n " ) ; sc ( TNORMAL ) ;
printf ( " Writing command and module compilation scripts... " ) ;
WriteCompileCommands ( ) ;
2011-06-18 17:25:35 -04:00
WriteCompileModules ( extra_include_paths , extra_lib_paths ) ;
2007-07-16 17:30:04 +00:00
sc ( TGREEN ) ; printf ( " done \n " ) ; sc ( TNORMAL ) ;
printf ( " \n configure is done.. exiting! \n " ) ;
}
2008-09-06 20:42:36 +00:00
/* Keeps files from modules/extra up to date if theyre copied into modules/ */
void CopyExtras ( )
{
char dest [ 65535 ] ;
char src [ 65535 ] ;
printf ( " \n Updating extra modules in src/modules... \n " ) ;
WIN32_FIND_DATA fd ;
HANDLE fh = FindFirstFile ( " .. \\ src \\ modules \\ extra \\ *.* " , & fd ) ;
if ( fh = = INVALID_HANDLE_VALUE )
return ;
do
{
strcpy ( dest , " .. \\ src \\ modules \\ " ) ;
strcat ( dest , fd . cFileName ) ;
strcpy ( src , " .. \\ src \\ modules \\ extra \\ " ) ;
strcat ( src , fd . cFileName ) ;
FILE * x = fopen ( dest , " r " ) ;
if ( x )
{
fclose ( x ) ;
CopyFile ( src , dest , false ) ;
sc ( TGREEN ) ; printf ( " %s " , fd . cFileName ) ; sc ( TNORMAL ) ;
printf ( " ... \n " ) ;
}
}
while ( FindNextFile ( fh , & fd ) ) ;
FindClose ( fh ) ;
printf ( " \n \n " ) ;
}
2008-04-16 21:31:24 +00:00
void Rebase ( )
{
char dest [ 65535 ] ;
char command [ 65535 ] ;
WIN32_FIND_DATA fd ;
2008-04-18 18:25:56 +00:00
# ifdef _DEBUG
2011-06-08 20:40:29 -04:00
HANDLE fh = FindFirstFile ( " .. \\ bin \\ debug \\ modules \\ *.so " , & fd ) ;
2008-04-18 18:25:56 +00:00
# else
2011-06-08 20:40:29 -04:00
HANDLE fh = FindFirstFile ( " .. \\ bin \\ release \\ modules \\ *.so " , & fd ) ;
2008-04-18 18:25:56 +00:00
# endif
2008-04-16 21:31:24 +00:00
if ( fh = = INVALID_HANDLE_VALUE )
return ;
* dest = 0 ;
do
{
2008-04-18 18:25:56 +00:00
# ifdef _DEBUG
strcat ( dest , " .. \\ bin \\ debug \\ modules \\ " ) ;
# else
2008-04-16 21:31:24 +00:00
strcat ( dest , " .. \\ bin \\ release \\ modules \\ " ) ;
2008-04-18 18:25:56 +00:00
# endif
2008-04-16 21:31:24 +00:00
strcat ( dest , fd . cFileName ) ;
}
while ( FindNextFile ( fh , & fd ) ) ;
2008-04-16 21:35:37 +00:00
sprintf ( command , " rebase.exe -v -b 11000000 -c baseaddr_modules.txt %s " , dest ) ;
2008-04-16 21:31:24 +00:00
printf ( " %s \n " , command ) ;
system ( command ) ;
FindClose ( fh ) ;
}
2007-07-16 17:30:04 +00:00
void WriteCompileCommands ( )
{
char commands [ 300 ] [ 100 ] ;
int command_count = 0 ;
printf ( " \n Finding Command Sources... \n " ) ;
WIN32_FIND_DATA fd ;
2007-10-22 15:54:47 +00:00
HANDLE fh = FindFirstFile ( " .. \\ src \\ commands \\ cmd_*.cpp " , & fd ) ;
2007-07-16 17:30:04 +00:00
if ( fh = = INVALID_HANDLE_VALUE )
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 " ) ;
else
{
sc ( TGREEN ) ;
do
{
strcpy ( commands [ command_count ] , fd . cFileName ) ;
commands [ command_count ] [ strlen ( fd . cFileName ) - 4 ] = 0 ;
2008-04-13 14:32:09 +00:00
printf ( " %s \n " , commands [ command_count ] ) ;
2007-07-16 17:30:04 +00:00
+ + command_count ;
} while ( FindNextFile ( fh , & fd ) ) ;
sc ( TNORMAL ) ;
}
2008-04-13 14:32:09 +00:00
2007-07-16 17:30:04 +00:00
// Write our spiffy new makefile :D
// I am such a lazy fucker :P
2007-10-22 15:54:47 +00:00
FILE * f = fopen ( " .. \\ src \\ commands \\ commands.mak " , " w " ) ;
2007-07-16 17:30:04 +00:00
time_t t = time ( NULL ) ;
fprintf ( f , " # Generated at %s \n " , ctime ( & t ) ) ;
fprintf ( f , " all: makedir " ) ;
// dump modules.. first time :)
for ( int i = 0 ; i < command_count ; + + i )
fprintf ( f , " %s.so " , commands [ i ] ) ;
fprintf ( f , " \n .cpp.obj: \n " ) ;
# ifdef WIN64
// /MACHINE:X64
# ifdef _DEBUG
2011-06-18 17:25:35 -04:00
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 /RTC1 /MDd /Fo \" Debug/ \" /Fd \" Debug/vc90.pdb \" /W2 /Zi /TP $*.cpp .. \\ .. \\ win \\ inspircd_memory_functions.cpp /link .. \\ .. \\ bin \\ debug_x64 \\ inspircd.lib /OUT: \" .. \\ .. \\ bin \\ debug_x64 \\ modules \\ $*.so \" /PDB: \" .. \\ .. \\ bin \\ debug_x64 \\ modules \\ $*.pdb \" /MACHINE:X64 /IMPLIB: \" .. \\ .. \\ bin \\ debug_x64 \\ modules \\ $*.lib \" \n \n " ) ;
CreateDirectory ( " .. \\ src \\ commands \\ debug " , NULL ) ;
2007-07-16 17:30:04 +00:00
CreateDirectory ( " .. \\ bin \\ debug \\ modules " , NULL ) ;
# else
2011-06-18 17:25:35 -04:00
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 \" /Gm /EHsc /GL /MD /Fo \" Release/ \" /Fd \" Release/vc90.pdb \" /W2 /Zi /TP $*.cpp .. \\ .. \\ win \\ inspircd_memory_functions.cpp /link .. \\ .. \\ bin \\ release_x64 \\ inspircd.lib /OUT: \" .. \\ .. \\ bin \\ release_x64 \\ modules \\ $*.so \" /PDB: \" .. \\ .. \\ bin \\ release_x64 \\ modules \\ $*.pdb \" /MACHINE:X64 /IMPLIB: \" .. \\ .. \\ bin \\ release_x64 \\ modules \\ $*.lib \" \n \n " ) ;
CreateDirectory ( " .. \\ src \\ commands \\ release " , NULL ) ;
2007-07-16 17:30:04 +00:00
CreateDirectory ( " .. \\ bin \\ release \\ modules " , NULL ) ;
# endif
# else
# ifdef _DEBUG
2011-06-18 17:25:35 -04:00
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 /RTC1 /MDd /Fo \" Debug/ \" /Fd \" Debug/vc90.pdb \" /W2 /Zi /TP $*.cpp .. \\ .. \\ win \\ inspircd_memory_functions.cpp /link .. \\ .. \\ bin \\ debug \\ inspircd.lib /OUT: \" .. \\ .. \\ bin \\ debug \\ modules \\ $*.so \" /PDB: \" .. \\ .. \\ bin \\ debug \\ modules \\ $*.pdb \" /IMPLIB: \" .. \\ .. \\ bin \\ debug \\ modules \\ $*.lib \" \n \n " ) ;
CreateDirectory ( " .. \\ src \\ commands \\ debug " , NULL ) ;
2007-07-16 17:30:04 +00:00
CreateDirectory ( " .. \\ bin \\ debug \\ modules " , NULL ) ;
# else
2011-06-18 17:25:35 -04:00
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 \" /Gm /EHsc /GL /MD /Fo \" Release/ \" /Fd \" Release/vc90.pdb \" /W2 /Zi /TP $*.cpp .. \\ .. \\ win \\ inspircd_memory_functions.cpp /link .. \\ .. \\ bin \\ release \\ inspircd.lib /OUT: \" .. \\ .. \\ bin \\ release \\ modules \\ $*.so \" /PDB: \" .. \\ .. \\ bin \\ release \\ modules \\ $*.pdb \" /IMPLIB: \" .. \\ .. \\ bin \\ release \\ modules \\ $*.lib \" \n \n " ) ;
CreateDirectory ( " .. \\ src \\ commands \\ release " , NULL ) ;
2007-07-16 17:30:04 +00:00
CreateDirectory ( " .. \\ bin \\ release \\ modules " , NULL ) ;
# endif
# endif
2011-06-08 20:40:29 -04:00
fprintf ( f , " makedir: \n " ) ;
2008-04-21 16:59:23 +00:00
# ifdef _DEBUG
2011-06-08 20:40:29 -04:00
fprintf ( f , " if not exist .. \\ .. \\ bin \\ debug mkdir .. \\ .. \\ bin \\ debug \n " ) ;
fprintf ( f , " if not exist .. \\ .. \\ bin \\ debug \\ modules mkdir .. \\ .. \\ bin \\ debug \\ modules \n " ) ;
2011-06-18 17:25:35 -04:00
fprintf ( f , " if not exist .. \\ .. \\ bin \\ debug \\ data mkdir .. \\ .. \\ bin \\ debug \\ data \n " ) ;
fprintf ( f , " if not exist .. \\ .. \\ bin \\ debug \\ logs mkdir .. \\ .. \\ bin \\ debug \\ logs \n " ) ;
2008-04-21 16:59:23 +00:00
# else
2011-06-08 20:40:29 -04:00
fprintf ( f , " if not exist .. \\ .. \\ bin \\ release mkdir .. \\ .. \\ bin \\ release \n " ) ;
fprintf ( f , " if not exist .. \\ .. \\ bin \\ release \\ modules mkdir .. \\ .. \\ bin \\ release \\ modules \n " ) ;
2011-06-18 17:25:35 -04:00
fprintf ( f , " if not exist .. \\ .. \\ bin \\ release \\ data mkdir .. \\ .. \\ bin \\ release \\ data \n " ) ;
fprintf ( f , " if not exist .. \\ .. \\ bin \\ release \\ logs mkdir .. \\ .. \\ bin \\ release \\ logs \n " ) ;
2008-04-21 16:59:23 +00:00
# endif
2007-07-16 17:30:04 +00:00
// dump modules.. again the second and last time :)
for ( int i = 0 ; i < command_count ; + + i )
fprintf ( f , " %s.so : %s.obj \n " , commands [ i ] , commands [ i ] ) ;
fprintf ( f , " \n " ) ;
fclose ( f ) ;
}
2011-06-18 17:25:35 -04:00
void WriteCompileModules ( const vector < string > & includes , const vector < string > & libs )
2007-07-16 17:30:04 +00:00
{
char modules [ 300 ] [ 100 ] ;
int module_count = 0 ;
printf ( " Finding Modules... \n " ) ;
WIN32_FIND_DATA fd ;
HANDLE fh = FindFirstFile ( " .. \\ src \\ modules \\ m_*.cpp " , & fd ) ;
if ( fh = = INVALID_HANDLE_VALUE )
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 " ) ;
else
{
sc ( TGREEN ) ;
do
{
strcpy ( modules [ module_count ] , fd . cFileName ) ;
modules [ module_count ] [ strlen ( fd . cFileName ) - 4 ] = 0 ;
printf ( " %s \n " , modules [ module_count ] ) ;
+ + module_count ;
} while ( FindNextFile ( fh , & fd ) ) ;
sc ( TNORMAL ) ;
}
2011-06-18 17:25:35 -04:00
string extra_include , extra_lib ;
for ( unsigned i = 0 ; i < includes . size ( ) ; + + i )
extra_include + = " /I \" " + includes [ i ] + " \" " ;
for ( unsigned i = 0 ; i < libs . size ( ) ; + + i )
extra_lib + = " /LIBPATH: \" " + libs [ i ] + " \" " ;
2007-07-16 17:30:04 +00:00
// Write our spiffy new makefile :D
// I am such a lazy fucker :P
FILE * f = fopen ( " .. \\ src \\ modules \\ modules.mak " , " w " ) ;
time_t t = time ( NULL ) ;
fprintf ( f , " # Generated at %s \n " , ctime ( & t ) ) ;
fprintf ( f , " all: makedir " ) ;
// dump modules.. first time :)
for ( int i = 0 ; i < module_count ; + + i )
fprintf ( f , " %s.so " , modules [ i ] ) ;
fprintf ( f , " \n .cpp.obj: \n " ) ;
# ifdef WIN64
// /MACHINE:X64
# ifdef _DEBUG
2011-06-18 17:25:35 -04:00
fprintf ( f , " cl /nologo /LD /Od /I \" . \" /I \" ../../include \" /I \" ../../include/modes \" /I \" ../../include/modules \" /I \" ../../win \" %s /D \" WIN32 \" /D \" _DEBUG \" /D \" _CONSOLE \" /D \" _MBCS \" /D \" DLL_BUILD \" /Gm /EHsc /RTC1 /MDd /Fo \" Debug/ \" /Fd \" Debug/vc90.pdb \" /W2 /Zi /TP $*.cpp .. \\ .. \\ win \\ inspircd_memory_functions.cpp /link %s .. \\ .. \\ bin \\ debug_x64 \\ 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 " , extra_include . c_str ( ) , extra_lib . c_str ( ) ) ;
2007-07-16 17:30:04 +00:00
CreateDirectory ( " .. \\ src \\ modules \\ debug_x64 " , NULL ) ;
# else
2011-06-18 17:25:35 -04:00
fprintf ( f , " cl /nologo /LD /Od /I \" . \" /I \" ../../include \" /I \" ../../include/modes \" /I \" ../../include/modules \" /I \" ../../win \" %s /D \" WIN32 \" /D \" _CONSOLE \" /D \" _MBCS \" /D \" DLL_BUILD \" /Gm /EHsc /GL /MD /Fo \" Release/ \" /Fd \" Release/vc90.pdb \" /W2 /Zi /TP $*.cpp .. \\ .. \\ win \\ inspircd_memory_functions.cpp /link %s .. \\ .. \\ bin \\ release_x64 \\ 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 " , extra_include . c_str ( ) , extra_lib . c_str ( ) ) ;
2007-07-16 17:30:04 +00:00
CreateDirectory ( " .. \\ src \\ modules \\ release_x64 " , NULL ) ;
# endif
# else
# ifdef _DEBUG
2011-06-18 17:25:35 -04:00
fprintf ( f , " cl /nologo /LD /Od /I \" . \" /I \" ../../include \" /I \" ../../include/modes \" /I \" ../../include/modules \" /I \" ../../win \" %s /D \" WIN32 \" /D \" _DEBUG \" /D \" _CONSOLE \" /D \" _MBCS \" /D \" DLL_BUILD \" /Gm /EHsc /RTC1 /MDd /Fo \" Debug/ \" /Fd \" Debug/vc90.pdb \" /W2 /Zi /TP $*.cpp .. \\ .. \\ win \\ inspircd_memory_functions.cpp /link %s .. \\ .. \\ bin \\ debug \\ inspircd.lib ws2_32.lib /OUT: \" .. \\ .. \\ bin \\ debug \\ modules \\ $*.so \" /PDB: \" .. \\ .. \\ bin \\ debug \\ modules \\ $*.pdb \" /IMPLIB: \" .. \\ .. \\ bin \\ debug \\ modules \\ $*.lib \" \n \n " , extra_include . c_str ( ) , extra_lib . c_str ( ) ) ;
2007-07-16 17:30:04 +00:00
CreateDirectory ( " .. \\ src \\ modules \\ debug " , NULL ) ;
# else
2011-06-18 17:25:35 -04:00
fprintf ( f , " cl /nologo /LD /Od /I \" . \" /I \" ../../include \" /I \" ../../include/modes \" /I \" ../../include/modules \" /I \" ../../win \" %s /D \" WIN32 \" /D \" _CONSOLE \" /D \" _MBCS \" /D \" DLL_BUILD \" /Gm /EHsc /GL /MD /Fo \" Release/ \" /Fd \" Release/vc90.pdb \" /W2 /Zi /TP $*.cpp .. \\ .. \\ win \\ inspircd_memory_functions.cpp /link %s .. \\ .. \\ bin \\ release \\ inspircd.lib ws2_32.lib /OUT: \" .. \\ .. \\ bin \\ release \\ modules \\ $*.so \" /PDB: \" .. \\ .. \\ bin \\ release \\ modules \\ $*.pdb \" /IMPLIB: \" .. \\ .. \\ bin \\ release \\ modules \\ $*.lib \" \n \n " , extra_include . c_str ( ) , extra_lib . c_str ( ) ) ;
2007-07-16 17:30:04 +00:00
CreateDirectory ( " .. \\ src \\ modules \\ release " , NULL ) ;
# endif
# endif
2008-04-21 16:59:23 +00:00
# ifdef _DEBUG
2011-06-18 17:25:35 -04:00
fprintf ( f , " makedir: \n if not exist debug mkdir debug \n \n " ) ;
2008-04-21 16:59:23 +00:00
# else
2011-06-18 17:25:35 -04:00
fprintf ( f , " makedir: \n if not exist release mkdir release \n \n " ) ;
2008-04-21 16:59:23 +00:00
# endif
2007-07-16 17:30:04 +00:00
// dump modules.. again the second and last time :)
for ( int i = 0 ; i < module_count ; + + i )
fprintf ( f , " %s.so : %s.obj \n " , modules [ i ] , modules [ i ] ) ;
fprintf ( f , " \n " ) ;
fclose ( f ) ;
}