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?");
194 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?");
197 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y"));
200 print "No high-performance socket engines are available, or you chose\n";
201 print "not to enable one. Defaulting to select() engine.\n\n";
204 # File Descriptor Settings..
207 print "Maximum number of clients at any one time ($config{MAX_CLIENT_T})\n";
208 print "[\033[1;32m$config{MAX_CLIENT}\033[0m] -> ";
209 chomp($var = <STDIN>);
210 if ($var eq "") { $var = $config{MAX_CLIENT}; }
211 if ($var =~ /^\d+$/) {
212 if (($var > $config{MAX_CLIENT_T}) && ($fd_scan_failed ne true)) {
213 # Client has entered a larger number than the 'discovered' value
215 print "WARNING: Our scans have indicated that you are attempting
216 to use more sockets than there are avaliable. Are you sure
217 you wish to do this? It may cause the IRCd to malfunction [y/n]
218 [\033[1;32mn\033[0m] -> $c";
219 chomp($tmp = <STDIN>);
221 print "Please enter the correct value.\n\n";
226 print "You must enter a number in this field. Please try again.\n\n";
229 # If we get here, we should be good to go.
230 $config{MAX_CLIENT} = $var;
237 print "What is the maximum length of nicknames?\n";
238 print "[\033[1;32m$config{NICK_LENGT}\033[0m] -> ";
239 chomp($var = <STDIN>);
240 if ($var eq "") { $var = $config{NICK_LENGT}; }
241 if ($var =~ /^\d+$/) {
242 # We don't care what the number is, set it and be on our way.
243 $config{NICK_LENGT} = $var;
247 print "You must enter a number in this field. Please try again.\n\n";
253 print "What is the maximum length of channel names?\n";
254 print "[\033[1;32m$config{CHAN_LENGT}\033[0m] -> ";
255 chomp($var = <STDIN>);
256 if ($var eq "") { $var = $config{CHAN_LENGT}; }
257 if ($var =~ /^\d+$/) {
258 # We don't care what the number is, set it and be on our way.
259 $config{CHAN_LENGT} = $var;
263 print "You must enter a number in this field. Please try again.\n\n";
269 print "What is the maximum number of channels a user may join at any one time?\n";
270 print "[\033[1;32m$config{MAX_CHANNE}\033[0m] -> ";
271 chomp($var = <STDIN>);
272 if ($var eq "") { $var = $config{MAX_CHANNE}; }
273 if ($var =~ /^\d+$/) {
274 # We don't care what the number is, set it and be on our way.
275 $config{MAX_CHANNE} = $var;
279 print "You must enter a number in this field. Please try again.\n\n";
286 print "What is the maximum number of mode changes in one line?\n";
287 print "[\033[1;32m$config{MAXI_MODES}\033[0m] -> ";
288 chomp($var = <STDIN>);
289 if ($var eq "") { $var = $config{MAXI_MODES}; }
290 if ($var =~ /^\d+$/) {
291 # We don't care what the number is, set it and be on our way.
292 $config{MAXI_MODES} = $var;
296 print "You must enter a number in this field. Please try again.\n\n";
301 print "Enter the Level Of Binary optimisation. This is a number between 0 and 3 (inclusive)
302 The InspIRCd Team will _NOT_ support any bug reports above 0.
303 Also note, the IRCd behaviour will be different depending on this value.
304 Please read the documentation for more information.
306 The Higher the number, the more optimised your binary will be. This value will default to 0
307 If you either a) Dont enter a number, or b) Enter a value outside the range.\n";
308 print "[\033[1;32m$config{OPTIMITEMP}\033[0m] -> ";
309 chomp($var = <STDIN>);
311 $var = $config{OPTIMITEMP};
315 $config{OPTIMITEMP} = 1;
316 $config{OPTIMISATI} = "-O";
317 } elsif ($var eq "2") {
318 $config{OPTIMITEMP} = 2;
319 $config{OPTIMISATI} = "-O2";
320 } elsif ($var eq "3") {
321 $config{OPTIMITEMP} = 3;
322 $config{OPTIMISATI} = "-O3";
324 $config{OPTIMITEMP} = 0;
325 $config{OPTIMISATI} = "-g";
328 print "\n\033[1;32mPre-build configuration is complete!\033[0m\n\n";
329 print "\033[0mConfig path:\033[1;32m\t\t\t$config{CONFIG_DIR}\n";
330 print "\033[0mModule path:\033[1;32m\t\t\t$config{MODULE_DIR}\n";
331 print "\033[0mMax connections:\033[1;32m\t\t$config{MAX_CLIENT}\n";
332 print "\033[0mMax User Channels\033[1;32m\t\t$config{MAX_CHANNE}\n";
333 print "\033[0mMax nickname length:\033[1;32m\t\t$config{NICK_LENGT}\n";
334 print "\033[0mMax channel length:\033[1;32m\t\t$config{CHAN_LENGT}\n";
335 print "\033[0mMax mode length:\033[1;32m\t\t$config{MAXI_MODES}\n";
336 print "\033[0mGCC Version Found:\033[1;32m\t\t$config{GCCVER}.$config{GCC34}\n";
337 print "\033[0mOptimatizaton Flag:\033[1;32m\t\t$config{OPTIMISATI}\033[0m\n";
338 print "\033[0mCompiler program:\033[1;32m\t\t$config{CC}\033[0m\n";
339 print "\033[0mStatic modules:\033[1;32m\t\t\t$config{STATIC_LINK}\033[0m\n\n";
345 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
346 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
347 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
348 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";
350 if ($config{OSNAME} =~ /CYGWIN/) {
352 \033[1;32mWARNING!\033[0m CYGWIN does not properly support shared modules,
353 so modules will be compiled statically into the core of the ircd. The modules
354 will act like they are being loaded from disk and being unloaded from RAM,
355 however they are in fact being enabled and disabled similar to features in
360 ################################################################################
362 ################################################################################
364 # Retrieves the .config.cache file, and loads values into the main config hash.
365 open(CACHE, ".config.cache") or return undef;
369 # Ignore Blank lines, and comments..
373 my ($key, $value) = split("=", $_);
374 $value =~ /^\"(.*)\"$/;
375 # Do something with data here!
383 # Dump the contents of %config
384 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
385 open(FILEHANDLE, ">.config.cache");
386 foreach $key (keys %config)
388 print FILEHANDLE "$key=\"$config{$key}\"\n";
394 my ($desc, $hash_key) = @_;
397 print "In what directory $desc?\n";
398 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
399 chomp($var = <STDIN>);
400 if ($var eq "") { $var = $config{$hash_key}; }
401 if ($var =~ /^\~\/(.+)$/) {
402 # Convert it to a full path..
403 $var = resolve_directory($ENV{HOME} . "/" . $1);
405 if (substr($var,0,1) ne "/")
407 # Assume relative Path was given.. fill in the rest.
408 $var = $this . "/$var";
410 $var = resolve_directory($var);
412 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
413 chomp($tmp = <STDIN>);
414 if (($tmp eq "") || ($tmp =~ /^y/i)) {
415 # Attempt to Create the Dir..
416 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
418 print "Unable to create directory. ($var)\n\n";
423 # They said they don't want to create, and we can't install there.
429 # Target exists, but is not a directory.
430 print "File $var exists, but is not a directory.\n\n";
434 # Either Dir Exists, or was created fine.
435 $config{$hash_key} = $var;
442 if ($config{OSNAME} =~ /BSD$/) {
443 $config{LDLIBS} = "-Ldl";
444 $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Woverloaded-virtual $config{OPTIMISATI}";
445 $config{MAKEPROG} = "gmake";
446 if ($config{OSNAME} eq "OpenBSD") {
447 chomp($foo = `eg++ -dumpversion | cut -c 1`);
448 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
449 # if theyre not running this, configure lets the build continue but they probably wont manage to
450 # compile as this standard version is 2.95.3!
452 $config{CC} = "eg++";
453 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change
454 chomp($config{GCC34} = `eg++ -dumpversion | cut -c 3`); # the compiler path
458 $config{LDLIBS} = "-ldl";
459 $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Woverloaded-virtual $config{OPTIMISATI}";
460 $config{MAKEPROG} = "make";
461 if ($config{OSNAME} =~ /CYGWIN/) {
462 $config{FLAGS} = "-frtti $OPTIMISATI -Woverloaded-virtual $config{OPTIMISATI}";
463 $config{LDLIBS} = "";
464 $config{MAKEPROG} = "/usr/bin/make";
465 $config{MAKEORDER} = "mods ircd config bininst";
466 $config{STATICLIBS} = "modules/mods.a";
467 $config{STATIC_LINK} = "yes";
470 if ($config{OSNAME} =~ /SunOS/) {
471 # solaris/sunos needs these
472 # socket = bsd sockets api
474 # rt = POSIX realtime extensions
475 # resolv = inet_aton only (why isnt this in nsl?!)
476 $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv";
494 opendir(DIRHANDLE, "src/modules");
495 foreach $name (sort readdir(DIRHANDLE)) {
496 if ($name =~ /^m_(.+)\.cpp$/)
499 if ($mod !~ /_static$/) {
500 $modlist[$i++] = $mod;
509 print "Writing \033[1;32minspircd_config.h\033[0m\n";
510 # First File.. inspircd_config.h
511 chomp(my $incos = `uname -n -s -r`);
512 chomp(my $version = `sh ./src/version.sh`);
513 open(FILEHANDLE, ">include/inspircd_config.h");
514 my $NL = $config{NICK_LENGT}+1;
515 my $CL = $config{CHAN_LENGT}+1;
516 print FILEHANDLE <<EOF;
517 /* Auto generated by configure, do not modify! */
518 #ifndef __CONFIGURATION_AUTO__
519 #define __CONFIGURATION_AUTO__
521 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
522 #define MOD_PATH "$config{MODULE_DIR}"
523 #define VERSION "$version"
524 #define MAXCLIENTS $config{MAX_CLIENT}
527 #define MAXCHANS $config{MAX_CHANNE}
528 #define MAXMODES $config{MAXI_MODES}
529 #define OPTIMISATION $config{OPTIMITEMP}
530 #define SYSTEM "$incos"
534 if ($config{OSNAME} =~ /SunOS/) {
535 print FILEHANDLE "#define IS_SOLARIS\n";
537 if ($config{OSNAME} =~ /CYGWIN/) {
538 print FILEHANDLE "#define IS_CYGWIN\n";
539 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
541 if ($config{STATIC_LINK} eq "yes") {
542 print FILEHANDLE "#define STATIC_LINK\n";
544 if ($config{GCCVER} > 3) {
545 print FILEHANDLE "#define GCC3\n";
546 print FILEHANDLE "#define GCC34\n";
550 if ($config{GCCVER} == 3) {
551 print FILEHANDLE "#define GCC3\n";
552 if ($config{GCC34} > 3) {
553 print FILEHANDLE "#define GCC34\n";
557 if ($config{HAS_STRLCPY} eq "true") {
558 print FILEHANDLE "#define HAS_STRLCPY\n";
561 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
562 print FILEHANDLE "#define USE_KQUEUE\n";
565 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
566 print FILEHANDLE "#define USE_EPOLL\n";
569 # user didn't choose either epoll or select for their OS.
570 # default them to USE_SELECT (ewwy puke puke)
572 print FILEHANDLE "#define USE_SELECT\n";
574 print FILEHANDLE "\n#endif\n";
577 # Create a Modules List..
579 foreach $i (@modlist)
581 if ($config{OSNAME} =~ /CYGWIN/) {
582 $modules .= "m_".$i.".o ";
585 $modules .= "m_".$i.".so ";
588 chomp($modules); # Remove Redundant whitespace..
591 # Write all .in files.
594 my $exe = "inspircd";
596 if ($config{OSNAME} =~ /CYGWIN/) {
597 $exe = "inspircd.exe";
600 opendir(DIRHANDLE, $this);
601 foreach $name (sort readdir(DIRHANDLE)) {
602 if ($name =~ /^\.(.+)\.inc$/)
605 # All .name.inc files need parsing!
607 open(FILEHANDLE, ".$file.inc");
608 while (<FILEHANDLE>) {
613 $tmp =~ s/\@CC\@/$config{CC}/;
614 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
615 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
616 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
617 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
618 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
619 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
620 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
621 $tmp =~ s/\@MODULES\@/$modules/;
622 $tmp =~ s/\@EXECUTABLE\@/$exe/;
623 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
624 $tmp =~ s/\@STATICLIBS\@/$config{STATICLIBS}/;
626 print "Writing \033[1;32m$file\033[0m\n";
627 open(FILEHANDLE, ">$file");
628 print FILEHANDLE $tmp;
633 # Make inspircd executable!
634 chmod 0744, 'inspircd';
636 if ($config{OSNAME} =~ /CYGWIN/) {
637 print "Writing static-build \033[1;32msrc/Makefile\033[0m\n";
638 write_static_makefile();
641 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
642 write_dynamic_makefile();
647 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
648 open(FILEHANDLE, ">src/modules/Makefile");
649 print FILEHANDLE <<EOF;
650 # (C) ChatSpike development team
651 # Makefile by <Craig\@ChatSpike.net>
652 # Many Thanks to Andrew Church <achurch\@achurch.org>
653 # for assisting with making this work right.
655 # Automatically Generated by ./configure to add a modules
656 # please run ./configure --update
662 # Create a Modules List..
665 if ($config{OSNAME} =~ /CYGWIN/) {
666 open(MODLIST,">include/modlist.h");
667 print MODLIST <<HEADER;
668 // Generated automatically by configure. DO NOT EDIT!
670 #ifndef __SYMBOLS__H_CONFIGURED__
671 #define __SYMBOLS__H_CONFIGURED__
674 foreach $i (@modlist) {
675 if ($i !~ /_static$/) {
676 print MODLIST "extern \"C\" void * $i\_init (void);\n";
679 print MODLIST "\nstruct {const char *name; initfunc *value; } modsyms[] = {\n";
681 foreach $i (@modlist)
683 if ($i !~ /_static$/) {
684 $flags = getcompilerflags("src/modules/m_".$i.".cpp");
685 if ($config{OSNAME} =~ /CYGWIN/) {
686 print FILEHANDLE <<EOCHEESE;
687 m_$i.o: m_$i\_static.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/servers.h ../../include/base.h
688 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c m_$i\_static.cpp
689 mv m_$i\_static.o ../m_$i.o
692 print "Configuring module [\033[1;32mm_$i.so\033[0m] for static linking... ";
693 open(MODULE,"<src/modules/m_".$i.".cpp") or die("Could not open m_".$i.".cpp");
694 open(MUNGED,">src/modules/m_".$i."_static.cpp") or die("Could not create m_".$i."_static.cpp");
695 while (chomp($a = <MODULE>)) {
696 $a =~ s/init_module/$i\_init/g;
697 $a =~ s/Srv/$i\Srv/g;
702 print MODLIST <<EOENT;
703 {"m_$i.so",\&$i\_init},
708 print FILEHANDLE <<EOCHEESE;
709 m_$i.so: m_$i.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/servers.h ../../include/base.h
710 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c m_$i.cpp
711 \$(CC) \$(FLAGS) -shared $flags -o m_$i.so m_$i.o
712 @-rm -f \$(MODPATH)/m_$i.so
713 cp m_$i.so \$(MODPATH)/
714 chmod 0700 \$(MODPATH)/m_$i.so
720 if ($config{OSNAME} =~ /CYGWIN/) {
721 print MODLIST "{0}};\n\n#endif\n";
726 sub getcompilerflags {
730 if ($_ =~ /^\/\* \$CompileFlags: (.+) \*\/$/) {
740 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";
741 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";
742 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";
743 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";
744 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";
745 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";
746 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";
747 print "\033[0m\033[0m....::..::::..:::......:::..:::::::::....::..:::::..:::......:::........:::\n\n";
750 sub resolve_directory {
752 return File::Spec->rel2abs($_[0]);
756 my ($flag,$prompt) = @_;
757 print "$prompt [\033[1;32m$config{$flag}\033[0m] -> ";
758 chomp($tmp = <STDIN>);
759 if ($tmp eq "") { $tmp = $config{$flag} }
761 if (($tmp eq "") || ($tmp =~ /^y/i)) {
762 $config{$flag} = "y";
764 $config{$flag} = "n";
770 sub write_static_makefile {
771 open(FH,">src/Makefile") or die("Could not write src/Makefile!");
775 # (C) ChatSpike development team
776 # Makefile by <Craig\@ChatSpike.net>
777 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
782 CXXFLAGS = -I../include \${FLAGS}
784 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
786 inspircd.exe: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h
787 \$(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)
789 hashcomp.o: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
790 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
792 helperfuncs.o: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
793 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
795 channels.o: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
796 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
798 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
799 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
801 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
802 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
804 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
805 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
807 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
808 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
810 base.o: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
811 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
813 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
814 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_util.cpp
816 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
817 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_io.cpp
819 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
820 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c connection.cpp
822 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
823 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
825 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
826 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
828 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
829 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dnsqueue.cpp
831 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
832 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
834 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
835 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
837 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
838 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
840 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
841 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
843 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
844 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c servers.cpp
851 sub write_dynamic_makefile {
852 open(FH,">src/Makefile") or die("Could not write src/Makefile");
856 # (C) ChatSpike development team
857 # Makefile by <Craig\@ChatSpike.net>
858 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
863 CXXFLAGS = -I../include \${FLAGS}
865 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
867 inspircd: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h
868 \$(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
870 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
871 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
872 \$(CC) -shared -o libIRCDhash.so hashcomp.o
874 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
875 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
876 \$(CC) -shared -o libIRCDhelper.so helperfuncs.o
878 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
879 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
880 \$(CC) -shared -o libIRCDchannels.so channels.o
882 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
883 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
884 \$(CC) -shared -o libIRCDmode.so mode.o
886 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
887 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
888 \$(CC) -shared -o libIRCDxline.so xline.o
890 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
891 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
892 \$(CC) -shared -o libIRCDstring.so inspstring.o
894 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
895 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
896 \$(CC) -shared -o libIRCDasyncdns.so dns.o
898 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
899 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
900 \$(CC) -shared -o libIRCDbase.so base.o
902 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
903 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_util.cpp
904 \$(CC) -shared -o libIRCDutil.so inspircd_util.o
906 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
907 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_io.cpp
908 \$(CC) -shared -o libIRCDio.so inspircd_io.o
910 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
911 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c connection.cpp
912 \$(CC) -shared -o libIRCDconnection.so connection.o
914 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
915 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
916 \$(CC) -shared -o libIRCDmessage.so message.o
918 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
919 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
920 \$(CC) -shared -o libIRCDcommands.so commands.o
922 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
923 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dnsqueue.cpp
924 \$(CC) -shared -o libIRCDdnsqueue.so dnsqueue.o
926 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
927 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
928 \$(CC) -shared -o libIRCDdynamic.so dynamic.o
930 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
931 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
932 \$(CC) -shared -o libIRCDusers.so users.o
934 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
935 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
936 \$(CC) -shared -o libIRCDmodules.so modules.o
938 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
939 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
940 \$(CC) -shared -o libIRCDwildcard.so wildcard.o
942 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
943 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c servers.cpp
944 \$(CC) -shared -o libIRCDservers.so servers.o