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{BASE_DIR} = $config{ME}; # Use CWD as 'Base' Directory.
20 $config{CONFIG_DIR} = resolve_directory($config{ME}."/conf"); # Configuration Directory
21 $config{MODULE_DIR} = resolve_directory($config{ME}."/modules"); # Modules Directory
22 $config{BINARY_DIR} = resolve_directory($config{ME}."/bin"); # Binary Directory
23 $config{LIBRARY_DIR} = resolve_directory($config{ME}."/lib"); # Library Directory
24 $config{OPTIMITEMP} = "0"; # Default Optimisation Value
25 $config{OPTIMISATI} = "-g"; # Optimisation Flag
26 $config{NICK_LENGT} = "31"; # Default Nick Length
27 $config{CHAN_LENGT} = "64"; # Default Channel Name Length
28 $config{MAX_CHANNE} = "20"; # Default Max. Channels per user..
29 $config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once.
30 $config{HAS_STRLCPY} = "false"; # strlcpy Check.
31 $config{USE_KQUEUE} = "y"; # kqueue enabled
32 $config{USE_EPOLL} = "y"; # epoll enabled
33 $config{THREADED_DNS} = "n"; # threaded dns (experimental)
34 $config{STATIC_LINK} = "no"; # are doing static modules?
35 chomp($config{MAX_CLIENT_T} = `sh -c \"ulimit -n\"`); # FD Limit
36 chomp($config{GCCVER} = `gcc -dumpversion | cut -c 1`); # Major GCC Version
37 chomp($config{GCC34} = `gcc -dumpversion | cut -c 3`); # Minor GCC Version
38 chomp($config{OSNAME} = `/bin/uname`); # Operating System Name
39 $config{CC} = "g++"; # C++ compiler
40 $config{MAKEORDER} = "ircd mods config bininst"; # build order
41 $config{STATICLIBS} = ""; # library archive path
42 $config{MAX_IDENT} = "12"; # max ident size
43 $config{MAX_QUIT} = "255"; # max quit message size
44 $config{MAX_TOPIC} = "307"; # max topic size
45 $config{MAX_KICK} = "255"; # max kick message size
46 $config{MAX_GECOS} = "128"; # max GECOS size
47 $config{MAX_AWAY} = "200"; # max AWAY size
49 if ((!$config{OSNAME}) || ($config{OSNAME} eq "")) {
50 chomp($config{OSNAME} = `/usr/bin/uname`);
51 if ((!$config{OSNAME}) || ($config{OSNAME} eq "")){
52 $config{OSNAME} = "Unknown";
56 if (!$config{MAX_CLIENT_T}) {
57 $config{MAX_CLIENT_T} = 1024; # Set a reasonable 'Default'
58 $fd_scan_fail = "true"; # Used Later
61 # Get and Set some important vars..
64 my $arg = $ARGV[0]; # Do Some Argument Checks..
65 if ($arg eq "-clean") { `rm -rf .config.cache`; } # Remove the config.cache file.
67 if ($arg eq "-update") {
68 # Does the cache file exist?
70 # No, No it doesn't.. *BASH*
71 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
74 # We've Loaded the cache file and all our variables..
75 print "Updating Files..\n";
77 $has_epoll = $config{HAS_EPOLL};
78 $has_kqueue = $config{HAS_KQUEUE};
85 print "Checking for cache from previous configure...\n";
87 print "Checking operating system version...\n";
90 if (!$config{MAX_CLIENT}) {
91 # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this
92 # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go
93 # higher than the found value" :))
94 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
97 printf "Checking if strlcpy exists... ";
98 # Perform the strlcpy() test..
99 $config{HAS_STRLCPY} = "false";
101 open(STRLCPY, "</usr/include/string.h") or $fail = 1;
104 while (chomp($line = <STRLCPY>))
106 # try and find the delcaration of:
107 # size_t strlcpy(...)
108 if ($line =~ /size_t(\0x9|\s)+strlcpy/)
110 $config{HAS_STRLCPY} = "true";
115 print "yes\n" if $config{HAS_STRLCPY} eq "true";
116 print "no\n" if $config{HAS_STRLCPY} eq "false";
118 printf "Checking if kqueue exists... ";
121 open(KQUEUE, "</usr/include/sys/event.h") or $fail = 1;
124 while (chomp($line = <KQUEUE>))
126 # try and find the delcaration of:
128 if ($line =~ /int(\0x9|\s)+kqueue/)
135 print "yes\n" if $has_kqueue == 1;
136 print "no\n" if $has_kqueue == 0;
138 printf "Checking if epoll exists... ";
141 open(EPOLL, "</usr/include/sys/epoll.h") or $fail = 1;
144 while (chomp($line = <EPOLL>))
146 # try and find the declaration of:
147 # extern int epoll_create (int __size) __THROW;
148 if (($line =~ /int(\0x9|\s)+epoll_create(\0x9|\s)+\(/) || ($line =~ /int(\0x9|\s)+epoll_create\(/))
156 my $kernel = `uname -r`;
158 if (($kernel =~ /2\.0/) || ($kernel =~ /2\.2/) || ($kernel =~ /2\.4/)) {
162 print "yes\n" if $has_epoll == 1;
163 print "no\n" if $has_epoll == 0;
165 if ($config{OSNAME} =~ /CYGWIN/) {
166 $config{HAS_STRLCPY} = "true";
169 $config{HAS_EPOLL} = $has_epoll;
170 $config{HAS_KQUEUE} = $has_kqueue;
172 ################################################################################
173 # BEGIN INTERACTIVE PART #
174 ################################################################################
178 # Display Splash Logo..
180 chomp($wholeos = `uname -mnr`);
182 # Display Introduction Message..
184 Welcome to the InspIRCd Configuration program!
186 *** If you are unsure of any of these values, leave it blank for ***
187 *** standard settings that will work, and your server will run ***
188 *** using them. If you are running this server as part of a ***
189 *** larger network, you must consult with your network admins ***
190 *** for the proper values to use, or server links will be unstable! ***
192 Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter
193 a new value. Please note: You will \033[1mHAVE\033[0m to read the docs
194 dir, otherwise you won't have a config file!
196 Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos), fdmax: $config{MAX_CLIENT_T}\n\n";
198 $config{CHANGE_COMPILER} = "n";
199 print "I have detected the following compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.$config{GCC34}\033[0m)\n";
201 if ($config{GCCVER} < 3)
203 print "\033[1;32mIMPORTANT!\033[0m A GCC 2.x compiler has been detected, and
204 should NOT be used. You should probably specify a newer compiler.\n";
206 yesno(CHANGE_COMPILER,"Do you want to change the compiler?");
207 if ($config{CHANGE_COMPILER} =~ /y/i)
209 print "What command do you want to use to invoke your compiler?\n";
210 print "[\033[1;32m$config{CC}\033[0m] -> ";
211 chomp($config{CC} = <STDIN>);
212 if ($config{CC} eq "") { $config{CC} = "g++"; }
213 chomp($foo = `$config{CC} -dumpversion | cut -c 1`);
215 chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change
216 chomp($config{GCC34} = `$config{CC} -dumpversion | cut -c 3`); # the compiler path
217 print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.$config{GCC34}\033[0m)\n";
221 print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n";
227 # Directory Settings..
228 my $tmpbase = $config{BASE_DIR};
229 dir_check("do you wish to install the InspIRCd base", "BASE_DIR");
230 if ($tmpbase ne $config{BASE_DIR}) {
231 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Directory
232 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
233 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
234 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
237 dir_check("are the configuration files", "CONFIG_DIR");
238 dir_check("are the modules to be compiled to", "MODULE_DIR");
239 dir_check("is the IRCd binary to be placed", "BINARY_DIR");
240 dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
243 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?");
247 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?");
250 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y"));
253 print "No high-performance socket engines are available, or you chose\n";
254 print "not to enable one. Defaulting to select() engine.\n\n";
257 yesno(THREADED_DNS,"Would you like to enable the experimental multi-threaded DNS lookup?");
260 print "\nThe following questions will ask you for various figures relating\n";
261 print "To your IRCd install. Please note that these should usually be left\n";
262 print "as defaults unless you have a real reason to change them. If they\n";
263 print "changed, then the values must be identical on all servers on your\n";
264 print "network, or malfunctions and/or crashes may occur, with the exception\n";
265 print "of the 'maximum number of clients' setting which may be different on\n";
266 print "different servers on the network.\n\n";
268 # File Descriptor Settings..
271 print "Maximum number of clients at any one time ($config{MAX_CLIENT_T})\n";
272 print "[\033[1;32m$config{MAX_CLIENT}\033[0m] -> ";
273 chomp($var = <STDIN>);
274 if ($var eq "") { $var = $config{MAX_CLIENT}; }
275 if ($var =~ /^\d+$/) {
276 if (($var > $config{MAX_CLIENT_T}) && ($fd_scan_failed ne true)) {
277 # Client has entered a larger number than the 'discovered' value
279 print "WARNING: Our scans have indicated that you are attempting
280 to use more sockets than there are avaliable. Are you sure
281 you wish to do this? It may cause the IRCd to malfunction [y/n]
282 [\033[1;32mn\033[0m] -> $c";
283 chomp($tmp = <STDIN>);
285 print "Please enter the correct value.\n\n";
290 print "You must enter a number in this field. Please try again.\n\n";
293 # If we get here, we should be good to go.
294 $config{MAX_CLIENT} = $var;
301 print "What is the maximum length of nicknames?\n";
302 print "[\033[1;32m$config{NICK_LENGT}\033[0m] -> ";
303 chomp($var = <STDIN>);
304 if ($var eq "") { $var = $config{NICK_LENGT}; }
305 if ($var =~ /^\d+$/) {
306 # We don't care what the number is, set it and be on our way.
307 $config{NICK_LENGT} = $var;
311 print "You must enter a number in this field. Please try again.\n\n";
317 print "What is the maximum length of channel names?\n";
318 print "[\033[1;32m$config{CHAN_LENGT}\033[0m] -> ";
319 chomp($var = <STDIN>);
320 if ($var eq "") { $var = $config{CHAN_LENGT}; }
321 if ($var =~ /^\d+$/) {
322 # We don't care what the number is, set it and be on our way.
323 $config{CHAN_LENGT} = $var;
327 print "You must enter a number in this field. Please try again.\n\n";
333 print "What is the maximum number of channels a user may join at any one time?\n";
334 print "[\033[1;32m$config{MAX_CHANNE}\033[0m] -> ";
335 chomp($var = <STDIN>);
336 if ($var eq "") { $var = $config{MAX_CHANNE}; }
337 if ($var =~ /^\d+$/) {
338 # We don't care what the number is, set it and be on our way.
339 $config{MAX_CHANNE} = $var;
343 print "You must enter a number in this field. Please try again.\n\n";
349 print "What is the maximum number of mode changes in one line?\n";
350 print "[\033[1;32m$config{MAXI_MODES}\033[0m] -> ";
351 chomp($var = <STDIN>);
352 if ($var eq "") { $var = $config{MAXI_MODES}; }
353 if ($var =~ /^\d+$/) {
354 # We don't care what the number is, set it and be on our way.
355 $config{MAXI_MODES} = $var;
359 print "You must enter a number in this field. Please try again.\n\n";
365 print "What is the maximum length of an ident (username)?\n";
366 print "[\033[1;32m$config{MAX_IDENT}\033[0m] -> ";
367 chomp($var = <STDIN>);
368 if ($var eq "") { $var = $config{MAX_IDENT}; }
369 if ($var =~ /^\d+$/) {
370 # We don't care what the number is, set it and be on our way.
371 $config{MAX_IDENT} = $var;
375 print "You must enter a number in this field. Please try again.\n\n";
381 print "What is the maximum length of a quit message?\n";
382 print "[\033[1;32m$config{MAX_QUIT}\033[0m] -> ";
383 chomp($var = <STDIN>);
384 if ($var eq "") { $var = $config{MAX_QUIT}; }
385 if ($var =~ /^\d+$/) {
386 # We don't care what the number is, set it and be on our way.
387 $config{MAX_QUIT} = $var;
391 print "You must enter a number in this field. Please try again.\n\n";
397 print "What is the maximum length of a channel topic?\n";
398 print "[\033[1;32m$config{MAX_TOPIC}\033[0m] -> ";
399 chomp($var = <STDIN>);
400 if ($var eq "") { $var = $config{MAX_TOPIC}; }
401 if ($var =~ /^\d+$/) {
402 # We don't care what the number is, set it and be on our way.
403 $config{MAX_TOPIC} = $var;
407 print "You must enter a number in this field. Please try again.\n\n";
413 print "What is the maximum length of a kick message?\n";
414 print "[\033[1;32m$config{MAX_KICK}\033[0m] -> ";
415 chomp($var = <STDIN>);
416 if ($var eq "") { $var = $config{MAX_KICK}; }
417 if ($var =~ /^\d+$/) {
418 # We don't care what the number is, set it and be on our way.
419 $config{MAX_KICK} = $var;
423 print "You must enter a number in this field. Please try again.\n\n";
429 print "What is the maximum length of a GECOS (real name) field?\n";
430 print "[\033[1;32m$config{MAX_GECOS}\033[0m] -> ";
431 chomp($var = <STDIN>);
432 if ($var eq "") { $var = $config{MAX_GECOS}; }
433 if ($var =~ /^\d+$/) {
434 # We don't care what the number is, set it and be on our way.
435 $config{MAX_GECOS} = $var;
439 print "You must enter a number in this field. Please try again.\n\n";
445 print "What is the maximum length of an away message?\n";
446 print "[\033[1;32m$config{MAX_AWAY}\033[0m] -> ";
447 chomp($var = <STDIN>);
448 if ($var eq "") { $var = $config{MAX_AWAY}; }
449 if ($var =~ /^\d+$/) {
450 # We don't care what the number is, set it and be on our way.
451 $config{MAX_AWAY} = $var;
455 print "You must enter a number in this field. Please try again.\n\n";
460 print "Enter the Level Of Binary optimisation. This is a number between 0 and 3.
461 The InspIRCd Team will NOT support any bug reports above 0. Also note,
462 the IRCd behaviour will be different depending on this value. Please
463 read the documentation for more information.
465 The higher the number, the more optimised your binary will be. This
466 value will default to 0 if you either don't enter a number, or enter
467 a value outside the range.
469 As always, if you are unsure, just press enter and accept the default.\n\n";
470 print "[\033[1;32m$config{OPTIMITEMP}\033[0m] -> ";
471 chomp($var = <STDIN>);
473 $var = $config{OPTIMITEMP};
477 $config{OPTIMITEMP} = 1;
478 $config{OPTIMISATI} = "-O";
479 } elsif ($var eq "2") {
480 $config{OPTIMITEMP} = 2;
481 $config{OPTIMISATI} = "-O2";
482 } elsif ($var eq "3") {
483 $config{OPTIMITEMP} = 3;
484 $config{OPTIMISATI} = "-O3";
486 $config{OPTIMITEMP} = 0;
487 $config{OPTIMISATI} = "-g";
490 print "\n\033[1;32mPre-build configuration is complete!\033[0m\n\n";
491 print "\033[0mBase install path:\033[1;32m\t\t$config{BASE_DIR}\n";
492 print "\033[0mConfig path:\033[1;32m\t\t\t$config{CONFIG_DIR}\n";
493 print "\033[0mModule path:\033[1;32m\t\t\t$config{MODULE_DIR}\n";
494 print "\033[0mLibrary path:\033[1;32m\t\t\t$config{LIBRARY_DIR}\n";
495 print "\033[0mMax connections:\033[1;32m\t\t$config{MAX_CLIENT}\n";
496 print "\033[0mMax User Channels:\033[1;32m\t\t$config{MAX_CHANNE}\n";
497 print "\033[0mMax nickname length:\033[1;32m\t\t$config{NICK_LENGT}\n";
498 print "\033[0mMax channel length:\033[1;32m\t\t$config{CHAN_LENGT}\n";
499 print "\033[0mMax mode length:\033[1;32m\t\t$config{MAXI_MODES}\n";
500 print "\033[0mMax ident length:\033[1;32m\t\t$config{MAX_IDENT}\n";
501 print "\033[0mMax quit length:\033[1;32m\t\t$config{MAX_QUIT}\n";
502 print "\033[0mMax topic length:\033[1;32m\t\t$config{MAX_TOPIC}\n";
503 print "\033[0mMax kick length:\033[1;32m\t\t$config{MAX_KICK}\n";
504 print "\033[0mMax name length:\033[1;32m\t\t$config{MAX_GECOS}\n";
505 print "\033[0mMax away length:\033[1;32m\t\t$config{MAX_AWAY}\n";
506 print "\033[0mGCC Version Found:\033[1;32m\t\t$config{GCCVER}.$config{GCC34}\n";
507 print "\033[0mOptimatizaton Flag:\033[1;32m\t\t$config{OPTIMISATI}\033[0m\n";
508 print "\033[0mCompiler program:\033[1;32m\t\t$config{CC}\033[0m\n";
509 print "\033[0mStatic modules:\033[1;32m\t\t\t$config{STATIC_LINK}\033[0m\n";
510 print "\033[0mMultithread DNS:\033[1;32m\t\t$config{THREADED_DNS}\033[0m\n\n";
516 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
517 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
518 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
519 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";
521 if ($config{OSNAME} =~ /CYGWIN/) {
523 \033[1;32mWARNING!\033[0m CYGWIN does not properly support shared modules,
524 so modules will be compiled statically into the core of the ircd. The modules
525 will act like they are being loaded from disk and being unloaded from RAM,
526 however they are in fact being enabled and disabled similar to features in
531 if ($config{GCCVER} < "3") {
533 \033[1;32mWARNING!\033[0m You are attempting to compile InspIRCd on GCC 2.x!
534 GCC 2.x series compilers only had partial (read as broken) C++ support, and
535 your compile will most likely fail horribly! If you have any problems, do NOT
536 report them to the bugtracker or forums without first upgrading your compiler
537 to a newer 3.x or 4.x (or whatever is available currently) version.
541 ################################################################################
543 ################################################################################
545 # Retrieves the .config.cache file, and loads values into the main config hash.
546 open(CACHE, ".config.cache") or return undef;
550 # Ignore Blank lines, and comments..
554 my ($key, $value) = split("=", $_);
555 $value =~ /^\"(.*)\"$/;
556 # Do something with data here!
564 # Dump the contents of %config
565 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
566 open(FILEHANDLE, ">.config.cache");
567 foreach $key (keys %config)
569 print FILEHANDLE "$key=\"$config{$key}\"\n";
575 my ($desc, $hash_key) = @_;
578 print "In what directory $desc?\n";
579 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
580 chomp($var = <STDIN>);
581 if ($var eq "") { $var = $config{$hash_key}; }
582 if ($var =~ /^\~\/(.+)$/) {
583 # Convert it to a full path..
584 $var = resolve_directory($ENV{HOME} . "/" . $1);
586 if (substr($var,0,1) ne "/")
588 # Assume relative Path was given.. fill in the rest.
589 $var = $this . "/$var";
591 $var = resolve_directory($var);
593 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
594 chomp($tmp = <STDIN>);
595 if (($tmp eq "") || ($tmp =~ /^y/i)) {
596 # Attempt to Create the Dir..
597 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
599 print "Unable to create directory. ($var)\n\n";
604 # They said they don't want to create, and we can't install there.
610 # Target exists, but is not a directory.
611 print "File $var exists, but is not a directory.\n\n";
615 # Either Dir Exists, or was created fine.
616 $config{$hash_key} = $var;
623 if ($config{OSNAME} =~ /BSD$/) {
624 $config{LDLIBS} = "-Ldl -lstdc++";
625 $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Wall -Woverloaded-virtual $config{OPTIMISATI}";
626 $config{MAKEPROG} = "gmake";
627 if ($config{OSNAME} eq "OpenBSD") {
628 chomp($foo = `eg++ -dumpversion | cut -c 1`);
629 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
630 # if theyre not running this, configure lets the build continue but they probably wont manage to
631 # compile as this standard version is 2.95.3!
633 $config{CC} = "eg++";
634 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change
635 chomp($config{GCC34} = `eg++ -dumpversion | cut -c 3`); # the compiler path
639 $config{LDLIBS} = "-ldl -lstdc++";
640 $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Wall -Woverloaded-virtual $config{OPTIMISATI}";
641 $config{MAKEPROG} = "make";
642 if ($config{OSNAME} =~ /CYGWIN/) {
643 $config{FLAGS} = "-frtti $OPTIMISATI -Wall -Woverloaded-virtual $config{OPTIMISATI}";
644 $config{LDLIBS} = "";
645 $config{MAKEPROG} = "/usr/bin/make";
646 $config{MAKEORDER} = "mods ircd config bininst";
647 $config{STATICLIBS} = "modules/mods.a";
648 $config{STATIC_LINK} = "yes";
651 if ($config{OSNAME} =~ /SunOS/) {
652 # solaris/sunos needs these
653 # socket = bsd sockets api
655 # rt = POSIX realtime extensions
656 # resolv = inet_aton only (why isnt this in nsl?!)
657 $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv";
675 opendir(DIRHANDLE, "src/modules");
676 foreach $name (sort readdir(DIRHANDLE)) {
677 if ($name =~ /^m_(.+)\.cpp$/)
680 if ($mod !~ /_static$/) {
681 $modlist[$i++] = $mod;
690 print "Writing \033[1;32minspircd_config.h\033[0m\n";
691 # First File.. inspircd_config.h
692 chomp(my $incos = `uname -n -s -r`);
693 chomp(my $version = `sh ./src/version.sh`);
694 open(FILEHANDLE, ">include/inspircd_config.h");
695 my $NL = $config{NICK_LENGT}+1;
696 my $CL = $config{CHAN_LENGT}+1;
697 print FILEHANDLE <<EOF;
698 /* Auto generated by configure, do not modify! */
699 #ifndef __CONFIGURATION_AUTO__
700 #define __CONFIGURATION_AUTO__
702 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
703 #define MOD_PATH "$config{MODULE_DIR}"
704 #define VERSION "$version"
705 #define MAXCLIENTS $config{MAX_CLIENT}
708 #define MAXCHANS $config{MAX_CHANNE}
709 #define MAXMODES $config{MAXI_MODES}
710 #define IDENTMAX $config{MAX_IDENT}
711 #define MAXQUIT $config{MAX_QUIT}
712 #define MAXTOPIC $config{MAX_TOPIC}
713 #define MAXKICK $config{MAX_KICK}
714 #define MAXGECOS $config{MAX_GECOS}
715 #define MAXAWAY $config{MAX_AWAY}
716 #define OPTIMISATION $config{OPTIMITEMP}
717 #define SYSTEM "$incos"
721 if ($config{OSNAME} =~ /SunOS/) {
722 print FILEHANDLE "#define IS_SOLARIS\n";
724 if ($config{OSNAME} =~ /CYGWIN/) {
725 print FILEHANDLE "#define IS_CYGWIN\n";
726 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
728 if ($config{STATIC_LINK} eq "yes") {
729 print FILEHANDLE "#define STATIC_LINK\n";
731 if ($config{GCCVER} > 3) {
732 print FILEHANDLE "#define GCC3\n";
733 print FILEHANDLE "#define GCC34\n";
737 if ($config{GCCVER} == 3) {
738 print FILEHANDLE "#define GCC3\n";
739 if ($config{GCC34} > 3) {
740 print FILEHANDLE "#define GCC34\n";
744 if ($config{HAS_STRLCPY} eq "true") {
745 print FILEHANDLE "#define HAS_STRLCPY\n";
747 if ($config{THREADED_DNS} =~ /y/i) {
748 print FILEHANDLE "#define THREADED_DNS\n";
751 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
752 print FILEHANDLE "#define USE_KQUEUE\n";
755 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
756 print FILEHANDLE "#define USE_EPOLL\n";
759 # user didn't choose either epoll or select for their OS.
760 # default them to USE_SELECT (ewwy puke puke)
762 print FILEHANDLE "#define USE_SELECT\n";
764 print FILEHANDLE "\n#endif\n";
767 # Create a Modules List..
769 foreach $i (@modlist)
771 if ($config{OSNAME} =~ /CYGWIN/) {
772 $modules .= "m_".$i.".o ";
775 $modules .= "m_".$i.".so ";
778 chomp($modules); # Remove Redundant whitespace..
781 # Write all .in files.
784 my $exe = "inspircd";
786 if ($config{OSNAME} =~ /CYGWIN/) {
787 $exe = "inspircd.exe";
790 opendir(DIRHANDLE, $this);
791 if ($config{THREADED_DNS} =~ /y/i) {
792 $config{LDLIBS} = $config{LDLIBS} . " -pthread";
794 foreach $name (sort readdir(DIRHANDLE)) {
795 if ($name =~ /^\.(.+)\.inc$/)
798 # All .name.inc files need parsing!
800 open(FILEHANDLE, ".$file.inc");
801 while (<FILEHANDLE>) {
806 $tmp =~ s/\@CC\@/$config{CC}/;
807 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
808 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
809 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
810 $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/;
811 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
812 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
813 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
814 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
815 $tmp =~ s/\@MODULES\@/$modules/;
816 $tmp =~ s/\@EXECUTABLE\@/$exe/;
817 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
818 $tmp =~ s/\@STATICLIBS\@/$config{STATICLIBS}/;
820 print "Writing \033[1;32m$file\033[0m\n";
821 open(FILEHANDLE, ">$file");
822 print FILEHANDLE $tmp;
827 # Make inspircd executable!
828 chmod 0744, 'inspircd';
830 if ($config{OSNAME} =~ /CYGWIN/) {
831 print "Writing static-build \033[1;32msrc/Makefile\033[0m\n";
832 write_static_makefile();
835 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
836 write_dynamic_makefile();
841 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
842 open(FILEHANDLE, ">src/modules/Makefile");
843 print FILEHANDLE <<EOF;
844 # (C) ChatSpike development team
845 # Makefile by <Craig\@ChatSpike.net>
846 # Many Thanks to Andrew Church <achurch\@achurch.org>
847 # for assisting with making this work right.
849 # Automatically Generated by ./configure to add a modules
850 # please run ./configure --update
856 # Create a Modules List..
859 if ($config{OSNAME} =~ /CYGWIN/) {
860 open(MODLIST,">include/modlist.h");
861 print MODLIST <<HEADER;
862 // Generated automatically by configure. DO NOT EDIT!
864 #ifndef __SYMBOLS__H_CONFIGURED__
865 #define __SYMBOLS__H_CONFIGURED__
868 foreach $i (@modlist) {
869 if ($i !~ /_static$/) {
870 print MODLIST "extern \"C\" void * $i\_init (void);\n";
873 print MODLIST "\nstruct {const char *name; initfunc *value; } modsyms[] = {\n";
875 foreach $i (@modlist)
877 if ($i !~ /_static$/) {
878 $flags = getcompilerflags("src/modules/m_".$i.".cpp");
879 if ($config{OSNAME} =~ /CYGWIN/) {
880 print FILEHANDLE <<EOCHEESE;
881 m_$i.o: m_$i\_static.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h
882 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c m_$i\_static.cpp
883 mv m_$i\_static.o ../m_$i.o
886 print "Configuring module [\033[1;32mm_$i.so\033[0m] for static linking... ";
887 open(MODULE,"<src/modules/m_".$i.".cpp") or die("Could not open m_".$i.".cpp");
888 open(MUNGED,">src/modules/m_".$i."_static.cpp") or die("Could not create m_".$i."_static.cpp");
889 while (chomp($a = <MODULE>)) {
890 $a =~ s/init_module/$i\_init/g;
891 $a =~ s/Srv/$i\Srv/g;
896 print MODLIST <<EOENT;
897 {"m_$i.so",\&$i\_init},
902 print FILEHANDLE <<EOCHEESE;
903 m_$i.so: m_$i.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h
904 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c m_$i.cpp
905 \$(CC) \$(FLAGS) -shared $flags -o m_$i.so m_$i.o
906 \@-rm -f \$(MODPATH)/m_$i.so
907 cp m_$i.so \$(MODPATH)/
908 chmod 0700 \$(MODPATH)/m_$i.so
914 if ($config{OSNAME} =~ /CYGWIN/) {
915 print MODLIST "{0}};\n\n#endif\n";
920 sub getcompilerflags {
924 if ($_ =~ /^\/\* \$CompileFlags: (.+) \*\/$/) {
934 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";
935 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";
936 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";
937 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";
938 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";
939 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";
940 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";
941 print "\033[0m\033[0m....::..::::..:::......:::..:::::::::....::..:::::..:::......:::........:::\n\n";
944 sub resolve_directory {
946 return File::Spec->rel2abs($_[0]);
950 my ($flag,$prompt) = @_;
951 print "$prompt [\033[1;32m$config{$flag}\033[0m] -> ";
952 chomp($tmp = <STDIN>);
953 if ($tmp eq "") { $tmp = $config{$flag} }
955 if (($tmp eq "") || ($tmp =~ /^y/i)) {
956 $config{$flag} = "y";
958 $config{$flag} = "n";
964 sub write_static_makefile {
965 open(FH,">src/Makefile") or die("Could not write src/Makefile!");
969 # (C) ChatSpike development team
970 # Makefile by <Craig\@ChatSpike.net>
971 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
976 CXXFLAGS = -I../include \${FLAGS}
978 all: socketengine.o socket.o hashcomp.o channels.o mode.o xline.o inspstring.o dns.o base.o inspircd_util.o inspircd_io.o message.o commands.o dnsqueue.o dynamic.o users.o modules.o wildcard.o helperfuncs.o \$(MODULES) inspircd.exe
980 inspircd.exe: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h ../include/base.h
981 \$(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 message.o commands.o dnsqueue.o dynamic.o users.o modules.o wildcard.o helperfuncs.o hashcomp.o socket.o socketengine.o \$(MODULES)
983 socketengine.o: socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
984 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp
986 hashcomp.o: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
987 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
989 helperfuncs.o: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
990 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
992 channels.o: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
993 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
995 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
996 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
998 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
999 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1001 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
1002 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1004 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
1005 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1007 base.o: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1008 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1010 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
1011 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_util.cpp
1013 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
1014 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_io.cpp
1016 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
1017 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
1019 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
1020 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1022 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
1023 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dnsqueue.cpp
1025 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
1026 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1028 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
1029 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1031 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
1032 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1034 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
1035 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1037 socket.o: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1038 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1045 sub write_dynamic_makefile {
1046 open(FH,">src/Makefile") or die("Could not write src/Makefile");
1050 # (C) ChatSpike development team
1051 # Makefile by <Craig\@ChatSpike.net>
1052 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
1055 CC = im a cheezeball
1057 CXXFLAGS = -I../include \${FLAGS}
1059 all: libIRCDsocketengine.so libIRCDsocket.so libIRCDhash.so libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDutil.so libIRCDio.so libIRCDmessage.so libIRCDcommands.so libIRCDdnsqueue.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so inspircd
1061 inspircd: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h ../include/socket.h
1062 \$(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 libIRCDmessage.so libIRCDcommands.so libIRCDdnsqueue.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDhash.so libIRCDsocket.so libIRCDsocketengine.so
1064 libIRCDsocketengine.so: socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1065 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp
1066 \$(CC) -shared -o libIRCDsocketengine.so socketengine.o
1068 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1069 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1070 \$(CC) -shared -o libIRCDhash.so hashcomp.o
1072 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1073 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1074 \$(CC) -shared -o libIRCDhelper.so helperfuncs.o
1076 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1077 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1078 \$(CC) -shared -o libIRCDchannels.so channels.o
1080 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
1081 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1082 \$(CC) -shared -o libIRCDmode.so mode.o
1084 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
1085 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1086 \$(CC) -shared -o libIRCDxline.so xline.o
1088 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
1089 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1090 \$(CC) -shared -o libIRCDstring.so inspstring.o
1092 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
1093 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1094 \$(CC) -shared -o libIRCDasyncdns.so dns.o
1096 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1097 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1098 \$(CC) -shared -o libIRCDbase.so base.o
1100 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
1101 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_util.cpp
1102 \$(CC) -shared -o libIRCDutil.so inspircd_util.o
1104 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
1105 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_io.cpp
1106 \$(CC) -shared -o libIRCDio.so inspircd_io.o
1108 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
1109 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
1110 \$(CC) -shared -o libIRCDmessage.so message.o
1112 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
1113 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1114 \$(CC) -shared -o libIRCDcommands.so commands.o
1116 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
1117 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dnsqueue.cpp
1118 \$(CC) -shared -o libIRCDdnsqueue.so dnsqueue.o
1120 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
1121 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1122 \$(CC) -shared -o libIRCDdynamic.so dynamic.o
1124 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
1125 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1126 \$(CC) -shared -o libIRCDusers.so users.o
1128 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
1129 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1130 \$(CC) -shared -o libIRCDmodules.so modules.o
1132 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
1133 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1134 \$(CC) -shared -o libIRCDwildcard.so wildcard.o
1136 libIRCDsocket.so: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1137 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1138 \$(CC) -shared -o libIRCDsocket.so socket.o