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 length of channel names?\n";
252 print "[\033[1;32m$config{CHAN_LENGT}\033[0m] -> ";
253 chomp($var = <STDIN>);
254 if ($var eq "") { $var = $config{CHAN_LENGT}; }
255 if ($var =~ /^\d+$/) {
256 # We don't care what the number is, set it and be on our way.
257 $config{CHAN_LENGT} = $var;
261 print "You must enter a number in this field. Please try again.\n\n";
267 print "What is the maximum number of channels a user may join at any one time?\n";
268 print "[\033[1;32m$config{MAX_CHANNE}\033[0m] -> ";
269 chomp($var = <STDIN>);
270 if ($var eq "") { $var = $config{MAX_CHANNE}; }
271 if ($var =~ /^\d+$/) {
272 # We don't care what the number is, set it and be on our way.
273 $config{MAX_CHANNE} = $var;
277 print "You must enter a number in this field. Please try again.\n\n";
284 print "What is the maximum number of mode changes in one line?\n";
285 print "[\033[1;32m$config{MAXI_MODES}\033[0m] -> ";
286 chomp($var = <STDIN>);
287 if ($var eq "") { $var = $config{MAXI_MODES}; }
288 if ($var =~ /^\d+$/) {
289 # We don't care what the number is, set it and be on our way.
290 $config{MAXI_MODES} = $var;
294 print "You must enter a number in this field. Please try again.\n\n";
299 print "Enter the Level Of Binary optimisation. This is a number between 0 and 3 (inclusive)
300 The InspIRCd Team will _NOT_ support any bug reports above 0.
301 Also note, the IRCd behaviour will be different depending on this value.
302 Please read the documentation for more information.
304 The Higher the number, the more optimised your binary will be. This value will default to 0
305 If you either a) Dont enter a number, or b) Enter a value outside the range.\n";
306 print "[\033[1;32m$config{OPTIMITEMP}\033[0m] -> ";
307 chomp($var = <STDIN>);
309 $var = $config{OPTIMITEMP};
313 $config{OPTIMITEMP} = 1;
314 $config{OPTIMISATI} = "-O";
315 } elsif ($var eq "2") {
316 $config{OPTIMITEMP} = 2;
317 $config{OPTIMISATI} = "-O2";
318 } elsif ($var eq "3") {
319 $config{OPTIMITEMP} = 3;
320 $config{OPTIMISATI} = "-O3";
322 $config{OPTIMITEMP} = 0;
323 $config{OPTIMISATI} = "-g";
326 print "\n\033[1;32mPre-build configuration is complete!\033[0m\n\n";
327 print "\033[0mConfig path:\033[1;32m\t\t\t$config{CONFIG_DIR}\n";
328 print "\033[0mModule path:\033[1;32m\t\t\t$config{MODULE_DIR}\n";
329 print "\033[0mMax connections:\033[1;32m\t\t$config{MAX_CLIENT}\n";
330 print "\033[0mMax User Channels\033[1;32m\t\t$config{MAX_CHANNE}\n";
331 print "\033[0mMax nickname length:\033[1;32m\t\t$config{NICK_LENGT}\n";
332 print "\033[0mMax channel length:\033[1;32m\t\t$config{CHAN_LENGT}\n";
333 print "\033[0mMax mode length:\033[1;32m\t\t$config{MAXI_MODES}\n";
334 print "\033[0mGCC Version Found:\033[1;32m\t\t$config{GCCVER}.$config{GCC34}\n";
335 print "\033[0mOptimatizaton Flag:\033[1;32m\t\t$config{OPTIMISATI}\033[0m\n";
336 print "\033[0mCompiler program:\033[1;32m\t\t$config{CC}\033[0m\n";
337 print "\033[0mStatic modules:\033[1;32m\t\t\t$config{STATIC_LINK}\033[0m\n\n";
343 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
344 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
345 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
346 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";
348 if ($config{OSNAME} =~ /CYGWIN/) {
350 \033[1;32mWARNING!\033[0m CYGWIN does not properly support shared modules,
351 so modules will be compiled statically into the core of the ircd. The modules
352 will act like they are being loaded from disk and being unloaded from RAM,
353 however they are in fact being enabled and disabled similar to features in
358 ################################################################################
360 ################################################################################
362 # Retrieves the .config.cache file, and loads values into the main config hash.
363 open(CACHE, ".config.cache") or return undef;
367 # Ignore Blank lines, and comments..
371 my ($key, $value) = split("=", $_);
372 $value =~ /^\"(.*)\"$/;
373 # Do something with data here!
381 # Dump the contents of %config
382 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
383 open(FILEHANDLE, ">.config.cache");
384 foreach $key (keys %config)
386 print FILEHANDLE "$key=\"$config{$key}\"\n";
392 my ($desc, $hash_key) = @_;
395 print "In what directory $desc?\n";
396 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
397 chomp($var = <STDIN>);
398 if ($var eq "") { $var = $config{$hash_key}; }
399 if ($var =~ /^\~\/(.+)$/) {
400 # Convert it to a full path..
401 $var = resolve_directory($ENV{HOME} . "/" . $1);
403 if (substr($var,0,1) ne "/")
405 # Assume relative Path was given.. fill in the rest.
406 $var = $this . "/$var";
408 $var = resolve_directory($var);
410 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
411 chomp($tmp = <STDIN>);
412 if (($tmp eq "") || ($tmp =~ /^y/i)) {
413 # Attempt to Create the Dir..
414 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
416 print "Unable to create directory. ($var)\n\n";
421 # They said they don't want to create, and we can't install there.
427 # Target exists, but is not a directory.
428 print "File $var exists, but is not a directory.\n\n";
432 # Either Dir Exists, or was created fine.
433 $config{$hash_key} = $var;
440 if ($config{OSNAME} =~ /BSD$/) {
441 $config{LDLIBS} = "-Ldl";
442 $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Woverloaded-virtual $config{OPTIMISATI}";
443 $config{MAKEPROG} = "gmake";
444 if ($config{OSNAME} eq "OpenBSD") {
445 chomp($foo = `eg++ -dumpversion | cut -c 1`);
446 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
447 # if theyre not running this, configure lets the build continue but they probably wont manage to
448 # compile as this standard version is 2.95.3!
450 $config{CC} = "eg++";
451 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change
452 chomp($config{GCC34} = `eg++ -dumpversion | cut -c 3`); # the compiler path
456 $config{LDLIBS} = "-ldl";
457 $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Woverloaded-virtual $config{OPTIMISATI}";
458 $config{MAKEPROG} = "make";
459 if ($config{OSNAME} =~ /CYGWIN/) {
460 $config{FLAGS} = "-frtti $OPTIMISATI -Woverloaded-virtual $config{OPTIMISATI}";
461 $config{LDLIBS} = "";
462 $config{MAKEPROG} = "/usr/bin/make";
463 $config{MAKEORDER} = "mods ircd config bininst";
464 $config{STATICLIBS} = "modules/mods.a";
465 $config{STATIC_LINK} = "yes";
468 if ($config{OSNAME} =~ /SunOS/) {
469 # solaris/sunos needs these
470 # socket = bsd sockets api
472 # rt = POSIX realtime extensions
473 # resolv = inet_aton only (why isnt this in nsl?!)
474 $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv";
492 opendir(DIRHANDLE, "src/modules");
493 foreach $name (sort readdir(DIRHANDLE)) {
494 if ($name =~ /^m_(.+)\.cpp$/)
497 if ($mod !~ /_static$/) {
498 $modlist[$i++] = $mod;
507 print "Writing \033[1;32minspircd_config.h\033[0m\n";
508 # First File.. inspircd_config.h
509 chomp(my $incos = `uname -n -s -r`);
510 chomp(my $version = `sh ./src/version.sh`);
511 open(FILEHANDLE, ">include/inspircd_config.h");
512 my $NL = $config{NICK_LENGT}+1;
513 my $CL = $config{CHAN_LENGT}+1;
514 print FILEHANDLE <<EOF;
515 /* Auto generated by configure, do not modify! */
516 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
517 #define MOD_PATH "$config{MODULE_DIR}"
518 #define VERSION "$version"
519 #define MAXCLIENTS $config{MAX_CLIENT}
522 #define MAXCHANS $config{MAX_CHANNE}
523 #define MAXMODES $config{MAXI_MODES}
524 #define OPTIMISATION $config{OPTIMITEMP}
525 #define SYSTEM "$incos"
529 if ($config{OSNAME} =~ /SunOS/) {
530 print FILEHANDLE "#define IS_SOLARIS\n";
532 if ($config{OSNAME} =~ /CYGWIN/) {
533 print FILEHANDLE "#define IS_CYGWIN\n";
535 if ($config{STATIC_LINK} eq "yes") {
536 print FILEHANDLE "#define STATIC_LINK\n";
538 if ($config{GCCVER} > 3) {
539 print FILEHANDLE "#define GCC3\n";
540 print FILEHANDLE "#define GCC34\n";
544 if ($config{GCCVER} == 3) {
545 print FILEHANDLE "#define GCC3\n";
546 if ($config{GCC34} > 3) {
547 print FILEHANDLE "#define GCC34\n";
551 if ($config{HAS_STRLCPY} eq "true") {
552 print FILEHANDLE "#define HAS_STRLCPY\n";
555 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
556 print FILEHANDLE "#define USE_KQUEUE\n";
559 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
560 print FILEHANDLE "#define USE_EPOLL\n";
563 # user didn't choose either epoll or select for their OS.
564 # default them to USE_SELECT (ewwy puke puke)
566 print FILEHANDLE "#define USE_SELECT\n";
570 # Create a Modules List..
572 foreach $i (@modlist)
574 if ($config{OSNAME} =~ /CYGWIN/) {
575 $modules .= "m_".$i.".o ";
578 $modules .= "m_".$i.".so ";
581 chomp($modules); # Remove Redundant whitespace..
584 # Write all .in files.
587 my $exe = "inspircd";
589 if ($config{OSNAME} =~ /CYGWIN/) {
590 $exe = "inspircd.exe";
593 opendir(DIRHANDLE, $this);
594 foreach $name (sort readdir(DIRHANDLE)) {
595 if ($name =~ /^\.(.+)\.inc$/)
598 # All .name.inc files need parsing!
600 open(FILEHANDLE, ".$file.inc");
601 while (<FILEHANDLE>) {
606 $tmp =~ s/\@CC\@/$config{CC}/;
607 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
608 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
609 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
610 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
611 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
612 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
613 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
614 $tmp =~ s/\@MODULES\@/$modules/;
615 $tmp =~ s/\@EXECUTABLE\@/$exe/;
616 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
617 $tmp =~ s/\@STATICLIBS\@/$config{STATICLIBS}/;
619 print "Writing \033[1;32m$file\033[0m\n";
620 open(FILEHANDLE, ">$file");
621 print FILEHANDLE $tmp;
626 # Make inspircd executable!
627 chmod 0744, 'inspircd';
629 if ($config{OSNAME} =~ /CYGWIN/) {
630 print "Writing static-build \033[1;32msrc/Makefile\033[0m\n";
631 write_static_makefile();
634 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
635 write_dynamic_makefile();
640 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
641 open(FILEHANDLE, ">src/modules/Makefile");
642 print FILEHANDLE <<EOF;
643 # (C) ChatSpike development team
644 # Makefile by <Craig\@ChatSpike.net>
645 # Many Thanks to Andrew Church <achurch\@achurch.org>
646 # for assisting with making this work right.
648 # Automatically Generated by ./configure to add a modules
649 # please run ./configure --update
655 # Create a Modules List..
658 if ($config{OSNAME} =~ /CYGWIN/) {
659 open(MODLIST,">include/modlist.h");
660 print MODLIST <<HEADER;
661 // Generated automatically by configure. DO NOT EDIT!
663 #ifndef __SYMBOLS__H_CONFIGURED__
664 #define __SYMBOLS__H_CONFIGURED__
667 foreach $i (@modlist) {
668 if ($i !~ /_static$/) {
669 print MODLIST "extern \"C\" void * $i\_init (void);\n";
672 print MODLIST "\nstruct {const char *name; initfunc *value; } modsyms[] = {\n";
674 foreach $i (@modlist)
676 if ($i !~ /_static$/) {
677 $flags = getcompilerflags("src/modules/m_".$i.".cpp");
678 if ($config{OSNAME} =~ /CYGWIN/) {
679 print FILEHANDLE <<EOCHEESE;
680 m_$i.o: m_$i\_static.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/servers.h ../../include/base.h
681 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c m_$i\_static.cpp
682 mv m_$i\_static.o ../m_$i.o
685 print "Configuring module [\033[1;32mm_$i.so\033[0m] for static linking... ";
686 open(MODULE,"<src/modules/m_".$i.".cpp") or die("Could not open m_".$i.".cpp");
687 open(MUNGED,">src/modules/m_".$i."_static.cpp") or die("Could not create m_".$i."_static.cpp");
688 while (chomp($a = <MODULE>)) {
689 $a =~ s/init_module/$i\_init/g;
690 $a =~ s/Srv/$i\Srv/g;
695 print MODLIST <<EOENT;
696 {"m_$i.so",\&$i\_init},
701 print FILEHANDLE <<EOCHEESE;
702 m_$i.so: m_$i.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/servers.h ../../include/base.h
703 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c m_$i.cpp
704 \$(CC) \$(FLAGS) -shared $flags -o m_$i.so m_$i.o
705 @-rm -f \$(MODPATH)/m_$i.so
706 cp m_$i.so \$(MODPATH)/
707 chmod 0700 \$(MODPATH)/m_$i.so
713 if ($config{OSNAME} =~ /CYGWIN/) {
714 print MODLIST "{0}};\n\n#endif\n";
719 sub getcompilerflags {
723 if ($_ =~ /^\/\* \$CompileFlags: (.+) \*\/$/) {
733 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";
734 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";
735 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";
736 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";
737 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";
738 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";
739 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";
740 print "\033[0m\033[0m....::..::::..:::......:::..:::::::::....::..:::::..:::......:::........:::\n\n";
743 sub resolve_directory {
745 return File::Spec->rel2abs($_[0]);
749 my ($flag,$prompt) = @_;
750 print "$prompt [\033[1;32m$config{$flag}\033[0m] -> ";
751 chomp($tmp = <STDIN>);
752 if ($tmp eq "") { $tmp = $config{$flag} }
754 if (($tmp eq "") || ($tmp =~ /^y/i)) {
755 $config{$flag} = "y";
757 $config{$flag} = "n";
763 sub write_static_makefile {
764 open(FH,">src/Makefile") or die("Could not write src/Makefile!");
768 # (C) ChatSpike development team
769 # Makefile by <Craig\@ChatSpike.net>
770 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
775 CXXFLAGS = -I../include \${FLAGS}
777 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
779 inspircd.exe: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h
780 \$(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)
782 hashcomp.o: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
783 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
785 helperfuncs.o: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
786 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
788 channels.o: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
789 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
791 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
792 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
794 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
795 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
797 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
798 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
800 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
801 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
803 base.o: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
804 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
806 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
807 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_util.cpp
809 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
810 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_io.cpp
812 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
813 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c connection.cpp
815 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
816 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
818 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
819 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
821 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
822 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dnsqueue.cpp
824 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
825 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
827 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
828 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
830 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
831 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
833 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
834 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
836 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
837 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c servers.cpp
844 sub write_dynamic_makefile {
845 open(FH,">src/Makefile") or die("Could not write src/Makefile");
849 # (C) ChatSpike development team
850 # Makefile by <Craig\@ChatSpike.net>
851 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
856 CXXFLAGS = -I../include \${FLAGS}
858 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
860 inspircd: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h
861 \$(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
863 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
864 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
865 \$(CC) -shared -o libIRCDhash.so hashcomp.o
867 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
868 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
869 \$(CC) -shared -o libIRCDhelper.so helperfuncs.o
871 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
872 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
873 \$(CC) -shared -o libIRCDchannels.so channels.o
875 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
876 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
877 \$(CC) -shared -o libIRCDmode.so mode.o
879 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
880 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
881 \$(CC) -shared -o libIRCDxline.so xline.o
883 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
884 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
885 \$(CC) -shared -o libIRCDstring.so inspstring.o
887 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
888 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
889 \$(CC) -shared -o libIRCDasyncdns.so dns.o
891 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
892 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
893 \$(CC) -shared -o libIRCDbase.so base.o
895 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
896 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_util.cpp
897 \$(CC) -shared -o libIRCDutil.so inspircd_util.o
899 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
900 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_io.cpp
901 \$(CC) -shared -o libIRCDio.so inspircd_io.o
903 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
904 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c connection.cpp
905 \$(CC) -shared -o libIRCDconnection.so connection.o
907 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
908 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
909 \$(CC) -shared -o libIRCDmessage.so message.o
911 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
912 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
913 \$(CC) -shared -o libIRCDcommands.so commands.o
915 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
916 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dnsqueue.cpp
917 \$(CC) -shared -o libIRCDdnsqueue.so dnsqueue.o
919 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
920 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
921 \$(CC) -shared -o libIRCDdynamic.so dynamic.o
923 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
924 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
925 \$(CC) -shared -o libIRCDusers.so users.o
927 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
928 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
929 \$(CC) -shared -o libIRCDmodules.so modules.o
931 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
932 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
933 \$(CC) -shared -o libIRCDwildcard.so wildcard.o
935 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
936 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c servers.cpp
937 \$(CC) -shared -o libIRCDservers.so servers.o