2 # InspIRCd Configuration Script
4 # Copyright 2003 The ChatSpike Development Team
5 # <brain@chatspike.net>
6 # <Craig@chatspike.net>
8 # [14:21] Brain: <matrix impression> i know perl-fu!
12 ########################################
14 chomp($topdir = `pwd`);
15 $this = resolve_directory($topdir); # PWD, Regardless.
16 @modlist = (); # Declare for Module List..
17 %config = (); # Initiate Configuration Hash..
18 $config{ME} = resolve_directory($topdir); # Present Working Directory
19 $config{CONFIG_DIR} = resolve_directory($config{ME}."/conf"); # Configuration Directory
20 $config{MODULE_DIR} = resolve_directory($config{ME}."/modules"); # Modules Directory
21 $config{BINARY_DIR} = resolve_directory($config{ME}."/bin"); # Binary Directory
22 $config{LIBRARY_DIR} = resolve_directory($config{ME}."/lib"); # Library Directory
23 $config{OPTIMITEMP} = "0"; # Default Optimisation Value
24 $config{OPTIMISATI} = "-g"; # Optimisation Flag
25 $config{NICK_LENGT} = "31"; # Default Nick Length
26 $config{CHAN_LENGT} = "64"; # Default Channel Name Length
27 $config{MAX_CHANNE} = "20"; # Default Max. Channels per user..
28 $config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once.
29 $config{HAS_STRLCPY} = "false"; # strlcpy Check.
30 $config{USE_KQUEUE} = "y"; # kqueue enabled
31 $config{USE_EPOLL} = "y"; # epoll enabled
32 $config{STATIC_LINK} = "no"; # are doing static modules?
33 chomp($config{MAX_CLIENT_T} = `sh -c \"ulimit -n\"`); # FD Limit
34 chomp($config{GCCVER} = `gcc -dumpversion | cut -c 1`); # Major GCC Version
35 chomp($config{GCC34} = `gcc -dumpversion | cut -c 3`); # Minor GCC Version
36 chomp($config{OSNAME} = `/bin/uname`); # Operating System Name
37 $config{CC} = "g++"; # C++ compiler
38 $config{MAKEORDER} = "ircd mods config bininst"; # build order
39 $config{STATICLIBS} = ""; # library archive path
41 if ((!$config{OSNAME}) || ($config{OSNAME} eq "")) {
42 chomp($config{OSNAME} = `/usr/bin/uname`);
43 if ((!$config{OSNAME}) || ($config{OSNAME} eq "")){
44 $config{OSNAME} = "Unknown";
48 if (!$config{MAX_CLIENT_T}) {
49 $config{MAX_CLIENT_T} = 1024; # Set a reasonable 'Default'
50 $fd_scan_fail = "true"; # Used Later
53 # Get and Set some important vars..
56 my $arg = $ARGV[0]; # Do Some Argument Checks..
57 if ($arg eq "-clean") { `rm -rf .config.cache`; } # Remove the config.cache file.
59 if ($arg eq "-update") {
60 # Does the cache file exist?
62 # No, No it doesn't.. *BASH*
63 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
66 # We've Loaded the cache file and all our variables..
67 print "Updating Files..\n";
69 $has_epoll = $config{HAS_EPOLL};
70 $has_kqueue = $config{HAS_KQUEUE};
77 print "Checking for cache from previous configure...\n";
79 print "Checking operating system version...\n";
82 if (!$config{MAX_CLIENT}) {
83 # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this
84 # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go
85 # higher than the found value" :))
86 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
89 printf "Checking if strlcpy exists... ";
90 # Perform the strlcpy() test..
91 $config{HAS_STRLCPY} = "false";
93 open(STRLCPY, "</usr/include/string.h") or $fail = 1;
96 while (chomp($line = <STRLCPY>))
98 # try and find the delcaration of:
100 if ($line =~ /size_t(\0x9|\s)+strlcpy/)
102 $config{HAS_STRLCPY} = "true";
107 print "yes\n" if $config{HAS_STRLCPY} eq "true";
108 print "no\n" if $config{HAS_STRLCPY} eq "false";
110 printf "Checking if kqueue exists... ";
113 open(KQUEUE, "</usr/include/sys/event.h") or $fail = 1;
116 while (chomp($line = <KQUEUE>))
118 # try and find the delcaration of:
120 if ($line =~ /int(\0x9|\s)+kqueue/)
127 print "yes\n" if $has_kqueue == 1;
128 print "no\n" if $has_kqueue == 0;
130 printf "Checking if epoll exists... ";
133 open(EPOLL, "</usr/include/sys/epoll.h") or $fail = 1;
136 while (chomp($line = <EPOLL>))
138 # try and find the declaration of:
139 # extern int epoll_create (int __size) __THROW;
140 if (($line =~ /int(\0x9|\s)+epoll_create(\0x9|\s)+\(/) || ($line =~ /int(\0x9|\s)+epoll_create\(/))
147 print "yes\n" if $has_epoll == 1;
148 print "no\n" if $has_epoll == 0;
150 if ($config{OSNAME} =~ /CYGWIN/) {
151 $config{HAS_STRLCPY} = "true";
154 $config{HAS_EPOLL} = $has_epoll;
155 $config{HAS_KQUEUE} = $has_kqueue;
157 ################################################################################
158 # BEGIN INTERACTIVE PART #
159 ################################################################################
163 # Display Splash Logo..
165 chomp($wholeos = `uname -mnr`);
167 # Display Introduction Message..
169 Welcome to the InspIRCd Configuration program!
171 *** If you are unsure of any of these values, leave it blank for ***
172 *** standard settings that will work, and your server will run ***
173 *** using them. If you are running this server as part of a ***
174 *** larger network, you must consult with your network admins ***
175 *** for the proper values to use, or server links will be unstable! ***
177 Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter
178 a new value. Please note: You will \033[1mHAVE\033[0m to read the docs
179 dir, otherwise you won't have a config file!
181 Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos), fdmax: $config{MAX_CLIENT_T}\n\n";
183 # Directory Settings..
184 dir_check("are the configuration files", "CONFIG_DIR");
185 dir_check("are the modules to be compiled to", "MODULE_DIR");
186 dir_check("is the IRCd binary to be placed", "BINARY_DIR");
187 dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
190 yesno(USE_KQUEUE,"You are running a BSD operating system, and kqueue\nwas detected. Would you like to enable kqueue support?\nThis is likely to increase performance.\nIf you are unsure, answer yes.\n\nEnable kqueue?");
193 yesno(USE_EPOLL,"You are running a Linux 2.6+ operating system, and epoll\nwas detected. Would you like to enable epoll support?\nThis is likely to increase performance.\nIf you are unsure, answer yes.\n\nEnable epoll?");
195 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y"));
198 print "No high-performance socket engines are available, or you chose\n";
199 print "not to enable one. Defaulting to select() engine.\n\n";
202 # File Descriptor Settings..
205 print "Maximum number of clients at any one time ($config{MAX_CLIENT_T})\n";
206 print "[\033[1;32m$config{MAX_CLIENT}\033[0m] -> ";
207 chomp($var = <STDIN>);
208 if ($var eq "") { $var = $config{MAX_CLIENT}; }
209 if ($var =~ /^\d+$/) {
210 if (($var > $config{MAX_CLIENT_T}) && ($fd_scan_failed ne true)) {
211 # Client has entered a larger number than the 'discovered' value
213 print "WARNING: Our scans have indicated that you are attempting
214 to use more sockets than there are avaliable. Are you sure
215 you wish to do this? It may cause the IRCd to malfunction [y/n]
216 [\033[1;32mn\033[0m] -> $c";
217 chomp($tmp = <STDIN>);
219 print "Please enter the correct value.\n\n";
224 print "You must enter a number in this field. Please try again.\n\n";
227 # If we get here, we should be good to go.
228 $config{MAX_CLIENT} = $var;
235 print "What is the Maximum length of nicknames?\n";
236 print "[\033[1;32m$config{NICK_LENGT}\033[0m] -> ";
237 chomp($var = <STDIN>);
238 if ($var eq "") { $var = $config{NICK_LENGT}; }
239 if ($var =~ /^\d+$/) {
240 # We don't care what the number is, set it and be on our way.
241 $config{NICK_LENGT} = $var;
245 print "You must enter a number in this field. Please try again.\n\n";
251 print "What is the Maximum number of mode changes in one line?\n";
252 print "[\033[1;32m$config{MAXI_MODES}\033[0m] -> ";
253 chomp($var = <STDIN>);
254 if ($var eq "") { $var = $config{MAXI_MODES}; }
255 if ($var =~ /^\d+$/) {
256 # We don't care what the number is, set it and be on our way.
257 $config{MAXI_MODES} = $var;
261 print "You must enter a number in this field. Please try again.\n\n";
266 print "Enter the Level Of Binary optimisation. This is a number between 0 and 3 (inclusive)
267 The InspIRCd Team will _NOT_ support any bug reports above 0.
268 Also note, the IRCd behaviour will be different depending on this value.
269 Please read the documentation for more information.
271 The Higher the number, the more optimised your binary will be. This value will default to 0
272 If you either a) Dont enter a number, or b) Enter a value outside the range.\n";
273 print "[\033[1;32m$config{OPTIMITEMP}\033[0m] -> ";
274 chomp($var = <STDIN>);
276 $var = $config{OPTIMITEMP};
280 $config{OPTIMITEMP} = 1;
281 $config{OPTIMISATI} = "-O";
282 } elsif ($var eq "2") {
283 $config{OPTIMITEMP} = 2;
284 $config{OPTIMISATI} = "-O2";
285 } elsif ($var eq "3") {
286 $config{OPTIMITEMP} = 3;
287 $config{OPTIMISATI} = "-O3";
289 $config{OPTIMITEMP} = 0;
290 $config{OPTIMISATI} = "-g";
293 print "\n\033[1;32mPre-build configuration is complete!\033[0m\n\n";
294 print "\033[0mConfig path:\033[1;32m\t\t\t$config{CONFIG_DIR}\n";
295 print "\033[0mModule path:\033[1;32m\t\t\t$config{MODULE_DIR}\n";
296 print "\033[0mMax connections:\033[1;32m\t\t$config{MAX_CLIENT}\n";
297 print "\033[0mMax User Channels\033[1;32m\t\t$config{MAX_CHANNE}\n";
298 print "\033[0mMax nickname length:\033[1;32m\t\t$config{NICK_LENGT}\n";
299 print "\033[0mMax channel length:\033[1;32m\t\t$config{CHAN_LENGT}\n";
300 print "\033[0mMax mode length:\033[1;32m\t\t$config{MAXI_MODES}\n";
301 print "\033[0mGCC Version Found:\033[1;32m\t\t$config{GCCVER}.$config{GCC34}\n";
302 print "\033[0mOptimatizaton Flag:\033[1;32m\t\t$config{OPTIMISATI}\033[0m\n";
303 print "\033[0mCompiler program:\033[1;32m\t\t$config{CC}\033[0m\n";
304 print "\033[0mStatic modules:\033[1;32m\t\t\t$config{STATIC_LINK}\033[0m\n\n";
310 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
311 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
312 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
313 print "\033[1;32mWARNING!\033[0m You are running OpenBSD but you are using the base gcc package\nrather than eg++. This compile will most likely fail, but i'm letting you\ngo ahead with it anyway, just in case i'm wrong :-)\n";
315 if ($config{OSNAME} =~ /CYGWIN/) {
317 \033[1;32mWARNING!\033[0m CYGWIN does not properly support shared modules,
318 so modules will be compiled statically into the core of the ircd. The modules
319 will act like they are being loaded from disk and being unloaded from RAM,
320 however they are in fact being enabled and disabled similar to features in
325 ################################################################################
327 ################################################################################
329 # Retrieves the .config.cache file, and loads values into the main config hash.
330 open(CACHE, ".config.cache") or return undef;
334 # Ignore Blank lines, and comments..
338 my ($key, $value) = split("=", $_);
339 $value =~ /^\"(.*)\"$/;
340 # Do something with data here!
348 # Dump the contents of %config
349 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
350 open(FILEHANDLE, ">.config.cache");
351 foreach $key (keys %config)
353 print FILEHANDLE "$key=\"$config{$key}\"\n";
359 my ($desc, $hash_key) = @_;
362 print "In what directory $desc?\n";
363 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
364 chomp($var = <STDIN>);
365 if ($var eq "") { $var = $config{$hash_key}; }
366 if ($var =~ /^\~\/(.+)$/) {
367 # Convert it to a full path..
368 $var = resolve_directory($ENV{HOME} . "/" . $1);
370 if (substr($var,0,1) ne "/")
372 # Assume relative Path was given.. fill in the rest.
373 $var = $this . "/$var";
375 $var = resolve_directory($var);
377 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
378 chomp($tmp = <STDIN>);
379 if (($tmp eq "") || ($tmp =~ /^y/i)) {
380 # Attempt to Create the Dir..
381 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
383 print "Unable to create directory. ($var)\n\n";
388 # They said they don't want to create, and we can't install there.
394 # Target exists, but is not a directory.
395 print "File $var exists, but is not a directory.\n\n";
399 # Either Dir Exists, or was created fine.
400 $config{$hash_key} = $var;
407 if ($config{OSNAME} =~ /BSD$/) {
408 $config{LDLIBS} = "-Ldl";
409 $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Woverloaded-virtual $config{OPTIMISATI}";
410 $config{MAKEPROG} = "gmake";
411 if ($config{OSNAME} eq "OpenBSD") {
412 chomp($foo = `eg++ -dumpversion | cut -c 1`);
413 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
414 # if theyre not running this, configure lets the build continue but they probably wont manage to
415 # compile as this standard version is 2.95.3!
417 $config{CC} = "eg++";
418 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change
419 chomp($config{GCC34} = `eg++ -dumpversion | cut -c 3`); # the compiler path
423 $config{LDLIBS} = "-ldl";
424 $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Woverloaded-virtual $config{OPTIMISATI}";
425 $config{MAKEPROG} = "make";
426 if ($config{OSNAME} =~ /CYGWIN/) {
427 $config{FLAGS} = "-frtti $OPTIMISATI -Woverloaded-virtual $config{OPTIMISATI}";
428 $config{LDLIBS} = "";
429 $config{MAKEPROG} = "/usr/bin/make";
430 $config{MAKEORDER} = "mods ircd config bininst";
431 $config{STATICLIBS} = "modules/mods.a";
432 $config{STATIC_LINK} = "yes";
435 if ($config{OSNAME} =~ /SunOS/) {
436 # solaris/sunos needs these
437 # socket = bsd sockets api
439 # rt = POSIX realtime extensions
440 # resolv = inet_aton only (why isnt this in nsl?!)
441 $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv";
459 opendir(DIRHANDLE, "src/modules");
460 foreach $name (sort readdir(DIRHANDLE)) {
461 if ($name =~ /^m_(.+)\.cpp$/)
464 if ($mod !~ /_static$/) {
465 $modlist[$i++] = $mod;
474 print "Writing \033[1;32minspircd_config.h\033[0m\n";
475 # First File.. inspircd_config.h
476 chomp(my $incos = `uname -n -s -r`);
477 chomp(my $version = `sh ./src/version.sh`);
478 open(FILEHANDLE, ">include/inspircd_config.h");
479 print FILEHANDLE <<EOF;
480 /* Auto generated by configure, do not modify! */
481 #define SYSLOG_FACILITY LOG_DAEMON
482 #define SYSLOG_LEVEL LOG_NOTICE
483 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
484 #define MOD_PATH "$config{MODULE_DIR}"
485 #define VERSION "$version"
486 #define MAXCLIENTS $config{MAX_CLIENT}
487 #define NICKMAX $config{NICK_LENGT}
488 #define CHANMAX $config{CHAN_LENGT}
489 #define MAXCHANS $config{MAX_CHANNE}
490 #define MAXMODES $config{MAXI_MODES}
491 #define OPTIMISATION $config{OPTIMITEMP}
492 #define SYSTEM "$incos"
496 if ($config{OSNAME} =~ /SunOS/) {
497 print FILEHANDLE "#define IS_SOLARIS\n";
499 if ($config{OSNAME} =~ /CYGWIN/) {
500 print FILEHANDLE "#define IS_CYGWIN\n";
502 if ($config{STATIC_LINK} eq "yes") {
503 print FILEHANDLE "#define STATIC_LINK\n";
505 if ($config{GCCVER} > 3) {
506 print FILEHANDLE "#define GCC3\n";
507 print FILEHANDLE "#define GCC34\n";
511 if ($config{GCCVER} == 3) {
512 print FILEHANDLE "#define GCC3\n";
513 if ($config{GCC34} > 3) {
514 print FILEHANDLE "#define GCC34\n";
518 if ($config{HAS_STRLCPY} eq "true") {
519 print FILEHANDLE "#define HAS_STRLCPY\n";
522 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
523 print FILEHANDLE "#define USE_KQUEUE\n";
526 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
527 print FILEHANDLE "#define USE_EPOLL\n";
530 # user didn't choose either epoll or select for their OS.
531 # default them to USE_SELECT (ewwy puke puke)
533 print FILEHANDLE "#define USE_SELECT\n";
537 # Create a Modules List..
539 foreach $i (@modlist)
541 if ($config{OSNAME} =~ /CYGWIN/) {
542 $modules .= "m_".$i.".o ";
545 $modules .= "m_".$i.".so ";
548 chomp($modules); # Remove Redundant whitespace..
551 # Write all .in files.
554 my $exe = "inspircd";
556 if ($config{OSNAME} =~ /CYGWIN/) {
557 $exe = "inspircd.exe";
560 opendir(DIRHANDLE, $this);
561 foreach $name (sort readdir(DIRHANDLE)) {
562 if ($name =~ /^\.(.+)\.inc$/)
565 # All .name.inc files need parsing!
567 open(FILEHANDLE, ".$file.inc");
568 while (<FILEHANDLE>) {
573 $tmp =~ s/\@CC\@/$config{CC}/;
574 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
575 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
576 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
577 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
578 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
579 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
580 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
581 $tmp =~ s/\@MODULES\@/$modules/;
582 $tmp =~ s/\@EXECUTABLE\@/$exe/;
583 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
584 $tmp =~ s/\@STATICLIBS\@/$config{STATICLIBS}/;
586 print "Writing \033[1;32m$file\033[0m\n";
587 open(FILEHANDLE, ">$file");
588 print FILEHANDLE $tmp;
593 # Make inspircd executable!
594 chmod 0744, 'inspircd';
596 if ($config{OSNAME} =~ /CYGWIN/) {
597 print "Writing static-build \033[1;32msrc/Makefile\033[0m\n";
598 write_static_makefile();
601 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
602 write_dynamic_makefile();
607 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
608 open(FILEHANDLE, ">src/modules/Makefile");
609 print FILEHANDLE <<EOF;
610 # (C) ChatSpike development team
611 # Makefile by <Craig\@ChatSpike.net>
612 # Many Thanks to Andrew Church <achurch\@achurch.org>
613 # for assisting with making this work right.
615 # Automatically Generated by ./configure to add a modules
616 # please run ./configure --update
622 # Create a Modules List..
625 if ($config{OSNAME} =~ /CYGWIN/) {
626 open(MODLIST,">include/modlist.h");
627 print MODLIST <<HEADER;
628 // Generated automatically by configure. DO NOT EDIT!
630 #ifndef __SYMBOLS__H_CONFIGURED__
631 #define __SYMBOLS__H_CONFIGURED__
634 foreach $i (@modlist) {
635 if ($i !~ /_static$/) {
636 print MODLIST "extern \"C\" void * $i\_init (void);\n";
639 print MODLIST "\nstruct {const char *name; initfunc *value; } modsyms[] = {\n";
641 foreach $i (@modlist)
643 if ($i !~ /_static$/) {
644 $flags = getcompilerflags("src/modules/m_".$i.".cpp");
645 if ($config{OSNAME} =~ /CYGWIN/) {
646 print FILEHANDLE <<EOCHEESE;
647 m_$i.o: m_$i\_static.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/servers.h ../../include/base.h
648 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c m_$i\_static.cpp
649 mv m_$i\_static.o ../m_$i.o
652 print "Configuring module [\033[1;32mm_$i.so\033[0m] for static linking... ";
653 open(MODULE,"<src/modules/m_".$i.".cpp") or die("Could not open m_".$i.".cpp");
654 open(MUNGED,">src/modules/m_".$i."_static.cpp") or die("Could not create m_".$i."_static.cpp");
655 while (chomp($a = <MODULE>)) {
656 $a =~ s/init_module/$i\_init/g;
657 $a =~ s/Srv/$i\Srv/g;
662 print MODLIST <<EOENT;
663 {"m_$i.so",\&$i\_init},
668 print FILEHANDLE <<EOCHEESE;
669 m_$i.so: m_$i.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/servers.h ../../include/base.h
670 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c m_$i.cpp
671 \$(CC) \$(FLAGS) -shared $flags -o m_$i.so m_$i.o
672 @-rm -f \$(MODPATH)/m_$i.so
673 cp m_$i.so \$(MODPATH)/
674 chmod 0700 \$(MODPATH)/m_$i.so
680 if ($config{OSNAME} =~ /CYGWIN/) {
681 print MODLIST "{0}};\n\n#endif\n";
686 sub getcompilerflags {
690 if ($_ =~ /^\/\* \$CompileFlags: (.+) \*\/$/) {
700 print "'\033[1;33m####\033[0m:'\033[1;33m##\033[0m::: \033[1;33m##\033[0m::'\033[1;33m######\033[0m::'\033[1;33m########\033[0m::'\033[1;33m####\033[0m:'\033[1;33m########\033[0m:::'\033[1;33m######\033[0m::'\033[1;33m########\033[0m::\n";
701 print ". \033[1;33m##\033[0m:: \033[1;33m###\033[0m:: \033[1;33m##\033[0m:'\033[1;33m##\033[0m... \033[1;33m##\033[0m: \033[1;33m##\033[0m.... \033[1;33m##\033[0m:. \033[1;33m##\033[0m:: \033[1;33m##\033[0m.... \033[1;33m##\033[0m:'\033[1;33m##\033[0m... \033[1;33m##\033[0m: \033[1;33m##\033[0m.... \033[1;33m##\033[0m:\n";
702 print ": \033[1;33m##\033[0m:: \033[1;33m####\033[0m: \033[1;33m##\033[0m: \033[1;33m##\033[0m:::..:: \033[1;33m##\033[0m:::: \033[1;33m##\033[0m:: \033[1;33m##\033[0m:: \033[1;33m##\033[0m:::: \033[1;33m##\033[0m: \033[1;33m##\033[0m:::..:: \033[1;33m##\033[0m:::: \033[1;33m##\033[0m:\n";
703 print ": \033[1;33m##\033[0m:: \033[1;33m##\033[0m \033[1;33m##\033[0m \033[1;33m##\033[0m:. \033[1;33m######\033[0m:: \033[1;33m########\033[0m::: \033[1;33m##\033[0m:: \033[1;33m########\033[0m:: \033[1;33m##\033[0m::::::: \033[1;33m##\033[0m:::: \033[1;33m##\033[0m:\n";
704 print ": \033[1;33m##\033[0m:: \033[1;33m##\033[0m. \033[1;33m####\033[0m::..... \033[1;33m##\033[0m: \033[1;33m##\033[0m.....:::: \033[1;33m##\033[0m:: \033[1;33m##\033[0m.. \033[1;33m##\033[0m::: \033[1;33m##\033[0m::::::: \033[1;33m##\033[0m:::: \033[1;33m##\033[0m:\n";
705 print ": \033[1;33m##\033[0m:: \033[1;33m##\033[0m:. \033[1;33m###\033[0m:'\033[1;33m##\033[0m::: \033[1;33m##\033[0m: \033[1;33m##\033[0m::::::::: \033[1;33m##\033[0m:: \033[1;33m##\033[0m::. \033[1;33m##\033[0m:: \033[1;33m##\033[0m::: \033[1;33m##\033[0m: \033[1;33m##\033[0m:::: \033[1;33m##\033[0m:\n";
706 print "'\033[1;33m####\033[0m: \033[1;33m##\033[0m::. \033[1;33m##\033[0m:. \033[1;33m######\033[0m:: \033[1;33m##\033[0m::::::::'\033[1;33m####\033[0m: \033[1;33m##\033[0m:::. \033[1;33m##\033[0m:. \033[1;33m######\033[0m:: \033[1;33m########\033[0m::\n";
707 print "\033[0m\033[0m....::..::::..:::......:::..:::::::::....::..:::::..:::......:::........:::\n\n";
710 sub resolve_directory {
712 return File::Spec->rel2abs($_[0]);
716 my ($flag,$prompt) = @_;
717 print "$prompt [\033[1;32m$config{$flag}\033[0m] -> ";
718 chomp($tmp = <STDIN>);
719 if ($tmp eq "") { $tmp = $config{$flag} }
721 if (($tmp eq "") || ($tmp =~ /^y/i)) {
722 $config{$flag} = "y";
724 $config{$flag} = "n";
730 sub write_static_makefile {
731 open(FH,">src/Makefile") or die("Could not write src/Makefile!");
735 # (C) ChatSpike development team
736 # Makefile by <Craig\@ChatSpike.net>
737 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
742 CXXFLAGS = -I../include \${FLAGS}
744 all: hashcomp.o channels.o mode.o xline.o inspstring.o dns.o base.o inspircd_util.o inspircd_io.o connection.o message.o commands.o dnsqueue.o dynamic.o users.o modules.o wildcard.o servers.o helperfuncs.o \$(MODULES) inspircd.exe
746 inspircd.exe: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h
747 \$(CC) -I../include \$(FLAGS) inspircd.cpp -o inspircd.exe \$(LDLIBS) channels.o mode.o xline.o inspstring.o dns.o base.o inspircd_util.o inspircd_io.o connection.o message.o commands.o dnsqueue.o dynamic.o users.o modules.o wildcard.o servers.o helperfuncs.o hashcomp.o \$(MODULES)
749 hashcomp.o: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
750 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
752 helperfuncs.o: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
753 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
755 channels.o: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
756 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
758 mode.o: mode.cpp ../include/base.h ../include/mode.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
759 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
761 xline.o: xline.cpp ../include/base.h ../include/xline.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
762 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
764 inspstring.o: inspstring.cpp ../include/base.h ../include/inspstring.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
765 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
767 dns.o: dns.cpp ../include/base.h ../include/dns.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
768 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
770 base.o: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
771 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
773 inspircd_util.o: inspircd_util.cpp ../include/base.h ../include/inspircd_util.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
774 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_util.cpp
776 inspircd_io.o: inspircd_io.cpp ../include/base.h ../include/inspircd_io.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
777 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_io.cpp
779 connection.o: connection.cpp ../include/base.h ../include/connection.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
780 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c connection.cpp
782 message.o: message.cpp ../include/base.h ../include/message.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
783 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
785 commands.o: commands.cpp ../include/base.h ../include/commands.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
786 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
788 dnsqueue.o: dnsqueue.cpp ../include/base.h ../include/dnsqueue.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
789 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dnsqueue.cpp
791 dynamic.o: dynamic.cpp ../include/base.h ../include/dynamic.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
792 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
794 users.o: users.cpp ../include/base.h ../include/users.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/connection.h
795 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
797 modules.o: modules.cpp ../include/base.h ../include/modules.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
798 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
800 wildcard.o: wildcard.cpp ../include/base.h ../include/wildcard.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
801 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
803 servers.o: servers.cpp ../include/base.h ../include/servers.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/connection.h
804 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c servers.cpp
811 sub write_dynamic_makefile {
812 open(FH,">src/Makefile") or die("Could not write src/Makefile");
816 # (C) ChatSpike development team
817 # Makefile by <Craig\@ChatSpike.net>
818 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
823 CXXFLAGS = -I../include \${FLAGS}
825 all: libIRCDhash.so libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDutil.so libIRCDio.so libIRCDconnection.so libIRCDmessage.so libIRCDcommands.so libIRCDdnsqueue.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDservers.so libIRCDhelper.so inspircd
827 inspircd: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h
828 \$(CC) -I../include \$(FLAGS) -rdynamic -L. inspircd.cpp -o inspircd \$(LDLIBS) libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDutil.so libIRCDio.so libIRCDconnection.so libIRCDmessage.so libIRCDcommands.so libIRCDdnsqueue.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDservers.so libIRCDhelper.so libIRCDhash.so
830 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
831 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
832 \$(CC) -shared -o libIRCDhash.so hashcomp.o
834 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
835 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
836 \$(CC) -shared -o libIRCDhelper.so helperfuncs.o
838 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
839 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
840 \$(CC) -shared -o libIRCDchannels.so channels.o
842 libIRCDmode.so: mode.cpp ../include/base.h ../include/mode.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
843 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
844 \$(CC) -shared -o libIRCDmode.so mode.o
846 libIRCDxline.so: xline.cpp ../include/base.h ../include/xline.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
847 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
848 \$(CC) -shared -o libIRCDxline.so xline.o
850 libIRCDstring.so: inspstring.cpp ../include/base.h ../include/inspstring.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
851 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
852 \$(CC) -shared -o libIRCDstring.so inspstring.o
854 libIRCDasyncdns.so: dns.cpp ../include/base.h ../include/dns.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
855 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
856 \$(CC) -shared -o libIRCDasyncdns.so dns.o
858 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
859 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
860 \$(CC) -shared -o libIRCDbase.so base.o
862 libIRCDutil.so: inspircd_util.cpp ../include/base.h ../include/inspircd_util.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
863 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_util.cpp
864 \$(CC) -shared -o libIRCDutil.so inspircd_util.o
866 libIRCDio.so: inspircd_io.cpp ../include/base.h ../include/inspircd_io.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
867 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_io.cpp
868 \$(CC) -shared -o libIRCDio.so inspircd_io.o
870 libIRCDconnection.so: connection.cpp ../include/base.h ../include/connection.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
871 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c connection.cpp
872 \$(CC) -shared -o libIRCDconnection.so connection.o
874 libIRCDmessage.so: message.cpp ../include/base.h ../include/message.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
875 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
876 \$(CC) -shared -o libIRCDmessage.so message.o
878 libIRCDcommands.so: commands.cpp ../include/base.h ../include/commands.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
879 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
880 \$(CC) -shared -o libIRCDcommands.so commands.o
882 libIRCDdnsqueue.so: dnsqueue.cpp ../include/base.h ../include/dnsqueue.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
883 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dnsqueue.cpp
884 \$(CC) -shared -o libIRCDdnsqueue.so dnsqueue.o
886 libIRCDdynamic.so: dynamic.cpp ../include/base.h ../include/dynamic.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
887 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
888 \$(CC) -shared -o libIRCDdynamic.so dynamic.o
890 libIRCDusers.so: users.cpp ../include/base.h ../include/users.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/connection.h
891 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
892 \$(CC) -shared -o libIRCDusers.so users.o
894 libIRCDmodules.so: modules.cpp ../include/base.h ../include/modules.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
895 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
896 \$(CC) -shared -o libIRCDmodules.so modules.o
898 libIRCDwildcard.so: wildcard.cpp ../include/base.h ../include/wildcard.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
899 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
900 \$(CC) -shared -o libIRCDwildcard.so wildcard.o
902 libIRCDservers.so: servers.cpp ../include/base.h ../include/servers.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/connection.h
903 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c servers.cpp
904 \$(CC) -shared -o libIRCDservers.so servers.o