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";
75 print "Checking for cache from previous configure...\n";
77 print "Checking operating system version...\n";
80 if (!$config{MAX_CLIENT}) {
81 # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this
82 # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go
83 # higher than the found value" :))
84 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
87 printf "Checking if strlcpy exists... ";
88 # Perform the strlcpy() test..
89 $config{HAS_STRLCPY} = "false";
91 open(STRLCPY, "</usr/include/string.h") or $fail = 1;
94 while (chomp($line = <STRLCPY>))
96 # try and find the delcaration of:
98 if ($line =~ /size_t(\0x9|\s)+strlcpy/)
100 $config{HAS_STRLCPY} = "true";
105 print "yes\n" if $config{HAS_STRLCPY} eq "true";
106 print "no\n" if $config{HAS_STRLCPY} eq "false";
108 printf "Checking if kqueue exists... ";
111 open(KQUEUE, "</usr/include/sys/event.h") or $fail = 1;
114 while (chomp($line = <KQUEUE>))
116 # try and find the delcaration of:
118 if ($line =~ /int(\0x9|\s)+kqueue/)
125 print "yes\n" if $has_kqueue == 1;
126 print "no\n" if $has_kqueue == 0;
128 printf "Checking if epoll exists... ";
131 open(EPOLL, "</usr/include/sys/epoll.h") or $fail = 1;
134 while (chomp($line = <EPOLL>))
136 # try and find the declaration of:
137 # extern int epoll_create (int __size) __THROW;
138 if (($line =~ /int(\0x9|\s)+epoll_create(\0x9|\s)+\(/) || ($line =~ /int(\0x9|\s)+epoll_create\(/))
145 print "yes\n" if $has_epoll == 1;
146 print "no\n" if $has_epoll == 0;
148 if ($config{OSNAME} =~ /CYGWIN/) {
149 $config{HAS_STRLCPY} = "true";
152 ################################################################################
153 # BEGIN INTERACTIVE PART #
154 ################################################################################
158 # Display Splash Logo..
160 chomp($wholeos = `uname -mnr`);
162 # Display Introduction Message..
164 Welcome to the InspIRCd Configuration program!
166 *** If you are unsure of any of these values, leave it blank for ***
167 *** standard settings that will work, and your server will run ***
168 *** using them. If you are running this server as part of a ***
169 *** larger network, you must consult with your network admins ***
170 *** for the proper values to use, or server links will be unstable! ***
172 Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter
173 a new value. Please note: You will \033[1mHAVE\033[0m to read the docs
174 dir, otherwise you won't have a config file!
176 Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos), fdmax: $config{MAX_CLIENT_T}\n\n";
178 # Directory Settings..
179 dir_check("are the configuration files", "CONFIG_DIR");
180 dir_check("are the modules to be compiled to", "MODULE_DIR");
181 dir_check("is the IRCd binary to be placed", "BINARY_DIR");
182 dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
185 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?");
188 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?");
190 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y"));
193 print "No high-performance socket engines are available, or you chose\n";
194 print "not to enable one. Defaulting to select() engine.\n\n";
197 # File Descriptor Settings..
200 print "Maximum number of clients at any one time ($config{MAX_CLIENT_T})\n";
201 print "[\033[1;32m$config{MAX_CLIENT}\033[0m] -> ";
202 chomp($var = <STDIN>);
203 if ($var eq "") { $var = $config{MAX_CLIENT}; }
204 if ($var =~ /^\d+$/) {
205 if (($var > $config{MAX_CLIENT_T}) && ($fd_scan_failed ne true)) {
206 # Client has entered a larger number than the 'discovered' value
208 print "WARNING: Our scans have indicated that you are attempting
209 to use more sockets than there are avaliable. Are you sure
210 you wish to do this? It may cause the IRCd to malfunction [y/n]
211 [\033[1;32mn\033[0m] -> $c";
212 chomp($tmp = <STDIN>);
214 print "Please enter the correct value.\n\n";
219 print "You must enter a number in this field. Please try again.\n\n";
222 # If we get here, we should be good to go.
223 $config{MAX_CLIENT} = $var;
230 print "What is the Maximum length of nicknames?\n";
231 print "[\033[1;32m$config{NICK_LENGT}\033[0m] -> ";
232 chomp($var = <STDIN>);
233 if ($var eq "") { $var = $config{NICK_LENGT}; }
234 if ($var =~ /^\d+$/) {
235 # We don't care what the number is, set it and be on our way.
236 $config{NICK_LENGT} = $var;
240 print "You must enter a number in this field. Please try again.\n\n";
244 # Because of the terminating null char we must increment this by one
245 $config{NICK_LENGT}++;
249 print "What is the Maximum number of mode changes in one line?\n";
250 print "[\033[1;32m$config{MAXI_MODES}\033[0m] -> ";
251 chomp($var = <STDIN>);
252 if ($var eq "") { $var = $config{MAXI_MODES}; }
253 if ($var =~ /^\d+$/) {
254 # We don't care what the number is, set it and be on our way.
255 $config{MAXI_MODES} = $var;
259 print "You must enter a number in this field. Please try again.\n\n";
264 print "Enter the Level Of Binary optimisation. This is a number between 0 and 3 (inclusive)
265 The InspIRCd Team will _NOT_ support any bug reports above 0.
266 Also note, the IRCd behaviour will be different depending on this value.
267 Please read the documentation for more information.
269 The Higher the number, the more optimised your binary will be. This value will default to 0
270 If you either a) Dont enter a number, or b) Enter a value outside the range.\n";
271 print "[\033[1;32m$config{OPTIMITEMP}\033[0m] -> ";
272 chomp($var = <STDIN>);
274 $var = $config{OPTIMITEMP};
278 $config{OPTIMITEMP} = 1;
279 $config{OPTIMISATI} = "-O";
280 } elsif ($var eq "2") {
281 $config{OPTIMITEMP} = 2;
282 $config{OPTIMISATI} = "-O2";
283 } elsif ($var eq "3") {
284 $config{OPTIMITEMP} = 3;
285 $config{OPTIMISATI} = "-O3";
287 $config{OPTIMITEMP} = 0;
288 $config{OPTIMISATI} = "-g";
291 print "\n\033[1;32mPre-build configuration is complete!\033[0m\n\n";
292 print "\033[0mConfig path:\033[1;32m\t\t\t$config{CONFIG_DIR}\n";
293 print "\033[0mModule path:\033[1;32m\t\t\t$config{MODULE_DIR}\n";
294 print "\033[0mMax connections:\033[1;32m\t\t$config{MAX_CLIENT}\n";
295 print "\033[0mMax User Channels\033[1;32m\t\t$config{MAX_CHANNE}\n";
296 print "\033[0mMax nickname length:\033[1;32m\t\t$config{NICK_LENGT}\n";
297 print "\033[0mMax channel length:\033[1;32m\t\t$config{CHAN_LENGT}\n";
298 print "\033[0mMax mode length:\033[1;32m\t\t$config{MAXI_MODES}\n";
299 print "\033[0mGCC Version Found:\033[1;32m\t\t$config{GCCVER}.$config{GCC34}\n";
300 print "\033[0mOptimatizaton Flag:\033[1;32m\t\t$config{OPTIMISATI}\033[0m\n";
301 print "\033[0mCompiler program:\033[1;32m\t\t$config{CC}\033[0m\n";
302 print "\033[0mStatic modules:\033[1;32m\t\t\t$config{STATIC_LINK}\033[0m\n\n";
308 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
309 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
310 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
311 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";
313 if ($config{OSNAME} =~ /CYGWIN/) {
315 \033[1;32mWARNING!\033[0m CYGWIN does not properly support shared modules,
316 so modules will be compiled statically into the core of the ircd. The modules
317 will act like they are being loaded from disk and being unloaded from RAM,
318 however they are in fact being enabled and disabled similar to features in
323 ################################################################################
325 ################################################################################
327 # Retrieves the .config.cache file, and loads values into the main config hash.
328 open(CACHE, ".config.cache") or return undef;
332 # Ignore Blank lines, and comments..
336 my ($key, $value) = split("=", $_);
337 $value =~ /^\"(.*)\"$/;
338 # Do something with data here!
346 # Dump the contents of %config
347 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
348 open(FILEHANDLE, ">.config.cache");
349 foreach $key (keys %config)
351 print FILEHANDLE "$key=\"$config{$key}\"\n";
357 my ($desc, $hash_key) = @_;
360 print "In what directory $desc?\n";
361 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
362 chomp($var = <STDIN>);
363 if ($var eq "") { $var = $config{$hash_key}; }
364 if ($var =~ /^\~\/(.+)$/) {
365 # Convert it to a full path..
366 $var = resolve_directory($ENV{HOME} . "/" . $1);
368 if (substr($var,0,1) ne "/")
370 # Assume relative Path was given.. fill in the rest.
371 $var = $this . "/$var";
373 $var = resolve_directory($var);
375 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
376 chomp($tmp = <STDIN>);
377 if (($tmp eq "") || ($tmp =~ /^y/i)) {
378 # Attempt to Create the Dir..
379 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
381 print "Unable to create directory. ($var)\n\n";
386 # They said they don't want to create, and we can't install there.
392 # Target exists, but is not a directory.
393 print "File $var exists, but is not a directory.\n\n";
397 # Either Dir Exists, or was created fine.
398 $config{$hash_key} = $var;
405 if ($config{OSNAME} =~ /BSD$/) {
406 $config{LDLIBS} = "-Ldl";
407 $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Woverloaded-virtual $config{OPTIMISATI}";
408 $config{MAKEPROG} = "gmake";
409 if ($config{OSNAME} eq "OpenBSD") {
410 chomp($foo = `eg++ -dumpversion | cut -c 1`);
411 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
412 # if theyre not running this, configure lets the build continue but they probably wont manage to
413 # compile as this standard version is 2.95.3!
415 $config{CC} = "eg++";
416 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change
417 chomp($config{GCC34} = `eg++ -dumpversion | cut -c 3`); # the compiler path
421 $config{LDLIBS} = "-ldl";
422 $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Woverloaded-virtual $config{OPTIMISATI}";
423 $config{MAKEPROG} = "make";
424 if ($config{OSNAME} =~ /CYGWIN/) {
425 $config{FLAGS} = "-frtti $OPTIMISATI -Woverloaded-virtual $config{OPTIMISATI}";
426 $config{LDLIBS} = "";
427 $config{MAKEPROG} = "/usr/bin/make";
428 $config{MAKEORDER} = "mods ircd config bininst";
429 $config{STATICLIBS} = "modules/mods.a";
430 $config{STATIC_LINK} = "yes";
433 if ($config{OSNAME} =~ /SunOS/) {
434 # solaris/sunos needs these
435 # socket = bsd sockets api
437 # rt = POSIX realtime extensions
438 # resolv = inet_aton only (why isnt this in nsl?!)
439 $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv";
457 opendir(DIRHANDLE, "src/modules");
458 foreach $name (sort readdir(DIRHANDLE)) {
459 if ($name =~ /^m_(.+)\.cpp$/)
462 if ($mod !~ /_static$/) {
463 $modlist[$i++] = $mod;
472 print "Writing \033[1;32minspircd_config.h\033[0m\n";
473 # First File.. inspircd_config.h
474 chomp(my $incos = `uname -n -s -r`);
475 chomp(my $version = `sh ./src/version.sh`);
476 open(FILEHANDLE, ">include/inspircd_config.h");
477 print FILEHANDLE <<EOF;
478 /* Auto generated by configure, do not modify! */
479 #define SYSLOG_FACILITY LOG_DAEMON
480 #define SYSLOG_LEVEL LOG_NOTICE
481 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
482 #define MOD_PATH "$config{MODULE_DIR}"
483 #define VERSION "$version"
484 #define MAXCLIENTS $config{MAX_CLIENT}
485 #define NICKMAX $config{NICK_LENGT}
486 #define CHANMAX $config{CHAN_LENGT}
487 #define MAXCHANS $config{MAX_CHANNE}
488 #define MAXMODES $config{MAXI_MODES}
489 #define OPTIMISATION $config{OPTIMITEMP}
490 #define SYSTEM "$incos"
494 if ($config{OSNAME} =~ /SunOS/) {
495 print FILEHANDLE "#define IS_SOLARIS\n";
497 if ($config{OSNAME} =~ /CYGWIN/) {
498 print FILEHANDLE "#define IS_CYGWIN\n";
500 if ($config{STATIC_LINK} eq "yes") {
501 print FILEHANDLE "#define STATIC_LINK\n";
503 if ($config{GCCVER} > 3) {
504 print FILEHANDLE "#define GCC3\n";
505 print FILEHANDLE "#define GCC34\n";
509 if ($config{GCCVER} == 3) {
510 print FILEHANDLE "#define GCC3\n";
511 if ($config{GCC34} > 3) {
512 print FILEHANDLE "#define GCC34\n";
516 if ($config{HAS_STRLCPY} eq "true") {
517 print FILEHANDLE "#define HAS_STRLCPY\n";
520 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
521 print FILEHANDLE "#define USE_KQUEUE\n";
524 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
525 print FILEHANDLE "#define USE_EPOLL\n";
528 # user didn't choose either epoll or select for their OS.
529 # default them to USE_SELECT (ewwy puke puke)
531 print FILEHANDLE "#define USE_SELECT\n";
535 # Create a Modules List..
537 foreach $i (@modlist)
539 if ($config{OSNAME} =~ /CYGWIN/) {
540 $modules .= "m_".$i.".o ";
543 $modules .= "m_".$i.".so ";
546 chomp($modules); # Remove Redundant whitespace..
549 # Write all .in files.
552 my $exe = "inspircd";
554 if ($config{OSNAME} =~ /CYGWIN/) {
555 $exe = "inspircd.exe";
558 opendir(DIRHANDLE, $this);
559 foreach $name (sort readdir(DIRHANDLE)) {
560 if ($name =~ /^\.(.+)\.inc$/)
563 # All .name.inc files need parsing!
565 open(FILEHANDLE, ".$file.inc");
566 while (<FILEHANDLE>) {
571 $tmp =~ s/\@CC\@/$config{CC}/;
572 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
573 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
574 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
575 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
576 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
577 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
578 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
579 $tmp =~ s/\@MODULES\@/$modules/;
580 $tmp =~ s/\@EXECUTABLE\@/$exe/;
581 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
582 $tmp =~ s/\@STATICLIBS\@/$config{STATICLIBS}/;
584 print "Writing \033[1;32m$file\033[0m\n";
585 open(FILEHANDLE, ">$file");
586 print FILEHANDLE $tmp;
591 # Make inspircd executable!
592 chmod 0744, 'inspircd';
594 if ($config{OSNAME} =~ /CYGWIN/) {
595 print "Writing static-build \033[1;32msrc/Makefile\033[0m\n";
596 write_static_makefile();
599 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
600 write_dynamic_makefile();
605 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
606 open(FILEHANDLE, ">src/modules/Makefile");
607 print FILEHANDLE <<EOF;
608 # (C) ChatSpike development team
609 # Makefile by <Craig\@ChatSpike.net>
610 # Many Thanks to Andrew Church <achurch\@achurch.org>
611 # for assisting with making this work right.
613 # Automatically Generated by ./configure to add a modules
614 # please run ./configure --update
620 # Create a Modules List..
623 if ($config{OSNAME} =~ /CYGWIN/) {
624 open(MODLIST,">include/modlist.h");
625 print MODLIST <<HEADER;
626 // Generated automatically by configure. DO NOT EDIT!
628 #ifndef __SYMBOLS__H_CONFIGURED__
629 #define __SYMBOLS__H_CONFIGURED__
632 foreach $i (@modlist) {
633 if ($i !~ /_static$/) {
634 print MODLIST "extern \"C\" void * $i\_init (void);\n";
637 print MODLIST "\nstruct {const char *name; initfunc *value; } modsyms[] = {\n";
639 foreach $i (@modlist)
641 if ($i !~ /_static$/) {
642 $flags = getcompilerflags("src/modules/m_".$i.".cpp");
643 if ($config{OSNAME} =~ /CYGWIN/) {
644 print FILEHANDLE <<EOCHEESE;
645 m_$i.o: m_$i\_static.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/servers.h ../../include/base.h
646 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c m_$i\_static.cpp
647 mv m_$i\_static.o ../m_$i.o
650 print "Configuring module [\033[1;32mm_$i.so\033[0m] for static linking... ";
651 open(MODULE,"<src/modules/m_".$i.".cpp") or die("Could not open m_".$i.".cpp");
652 open(MUNGED,">src/modules/m_".$i."_static.cpp") or die("Could not create m_".$i."_static.cpp");
653 while (chomp($a = <MODULE>)) {
654 $a =~ s/init_module/$i\_init/g;
655 $a =~ s/Srv/$i\Srv/g;
660 print MODLIST <<EOENT;
661 {"m_$i.so",\&$i\_init},
666 print FILEHANDLE <<EOCHEESE;
667 m_$i.so: m_$i.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/servers.h ../../include/base.h
668 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c m_$i.cpp
669 \$(CC) \$(FLAGS) -shared $flags -o m_$i.so m_$i.o
670 @-rm -f \$(MODPATH)/m_$i.so
671 cp m_$i.so \$(MODPATH)/
672 chmod 0700 \$(MODPATH)/m_$i.so
678 if ($config{OSNAME} =~ /CYGWIN/) {
679 print MODLIST "{0}};\n\n#endif\n";
684 sub getcompilerflags {
688 if ($_ =~ /^\/\* \$CompileFlags: (.+) \*\/$/) {
698 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";
699 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";
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: \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:\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:\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: \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::\n";
705 print "\033[0m\033[0m....::..::::..:::......:::..:::::::::....::..:::::..:::......:::........:::\n\n";
708 sub resolve_directory {
710 return File::Spec->rel2abs($_[0]);
714 my ($flag,$prompt) = @_;
715 print "$prompt [\033[1;32m$config{$flag}\033[0m] -> ";
716 chomp($tmp = <STDIN>);
717 if ($tmp eq "") { $tmp = $config{$flag} }
719 if (($tmp eq "") || ($tmp =~ /^y/i)) {
720 $config{$flag} = "y";
722 $config{$flag} = "n";
728 sub write_static_makefile {
729 open(FH,">src/Makefile") or die("Could not write src/Makefile!");
733 # (C) ChatSpike development team
734 # Makefile by <Craig\@ChatSpike.net>
735 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
740 CXXFLAGS = -I../include \${FLAGS}
742 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
744 inspircd.exe: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h
745 \$(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)
747 hashcomp.o: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
748 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
750 helperfuncs.o: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
751 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
753 channels.o: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
754 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
756 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
757 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
759 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
760 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
762 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
763 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
765 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
766 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
768 base.o: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
769 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
771 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
772 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_util.cpp
774 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
775 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_io.cpp
777 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
778 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c connection.cpp
780 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
781 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
783 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
784 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
786 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
787 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dnsqueue.cpp
789 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
790 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
792 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
793 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
795 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
796 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
798 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
799 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
801 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
802 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c servers.cpp
809 sub write_dynamic_makefile {
810 open(FH,">src/Makefile") or die("Could not write src/Makefile");
814 # (C) ChatSpike development team
815 # Makefile by <Craig\@ChatSpike.net>
816 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
821 CXXFLAGS = -I../include \${FLAGS}
823 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
825 inspircd: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h
826 \$(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
828 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
829 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
830 \$(CC) -shared -o libIRCDhash.so hashcomp.o
832 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
833 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
834 \$(CC) -shared -o libIRCDhelper.so helperfuncs.o
836 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
837 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
838 \$(CC) -shared -o libIRCDchannels.so channels.o
840 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
841 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
842 \$(CC) -shared -o libIRCDmode.so mode.o
844 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
845 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
846 \$(CC) -shared -o libIRCDxline.so xline.o
848 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
849 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
850 \$(CC) -shared -o libIRCDstring.so inspstring.o
852 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
853 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
854 \$(CC) -shared -o libIRCDasyncdns.so dns.o
856 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
857 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
858 \$(CC) -shared -o libIRCDbase.so base.o
860 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
861 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_util.cpp
862 \$(CC) -shared -o libIRCDutil.so inspircd_util.o
864 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
865 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_io.cpp
866 \$(CC) -shared -o libIRCDio.so inspircd_io.o
868 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
869 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c connection.cpp
870 \$(CC) -shared -o libIRCDconnection.so connection.o
872 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
873 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
874 \$(CC) -shared -o libIRCDmessage.so message.o
876 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
877 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
878 \$(CC) -shared -o libIRCDcommands.so commands.o
880 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
881 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dnsqueue.cpp
882 \$(CC) -shared -o libIRCDdnsqueue.so dnsqueue.o
884 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
885 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
886 \$(CC) -shared -o libIRCDdynamic.so dynamic.o
888 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
889 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
890 \$(CC) -shared -o libIRCDusers.so users.o
892 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
893 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
894 \$(CC) -shared -o libIRCDmodules.so modules.o
896 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
897 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
898 \$(CC) -shared -o libIRCDwildcard.so wildcard.o
900 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
901 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c servers.cpp
902 \$(CC) -shared -o libIRCDservers.so servers.o