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{MAX_OPERCH} = "60"; # Default Max. Channels per oper
30 $config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once.
31 $config{HAS_STRLCPY} = "false"; # strlcpy Check.
32 $config{USE_KQUEUE} = "y"; # kqueue enabled
33 $config{USE_EPOLL} = "y"; # epoll enabled
34 $config{THREADED_DNS} = "n"; # threaded dns (experimental)
35 $config{STATIC_LINK} = "no"; # are doing static modules?
36 chomp($config{MAX_CLIENT_T} = `sh -c \"ulimit -n\"`); # FD Limit
37 chomp($config{GCCVER} = `gcc -dumpversion | cut -c 1`); # Major GCC Version
38 chomp($config{GCC34} = `gcc -dumpversion | cut -c 3`); # Minor GCC Version
39 chomp($config{OSNAME} = `/bin/uname`); # Operating System Name
40 $config{CC} = "g++"; # C++ compiler
41 $config{MAKEORDER} = "ircd mods config bininst"; # build order
42 $config{STATICLIBS} = ""; # library archive path
43 $config{MAX_IDENT} = "12"; # max ident size
44 $config{MAX_QUIT} = "255"; # max quit message size
45 $config{MAX_TOPIC} = "307"; # max topic size
46 $config{MAX_KICK} = "255"; # max kick message size
47 $config{MAX_GECOS} = "128"; # max GECOS size
48 $config{MAX_AWAY} = "200"; # max AWAY size
50 if ((!$config{OSNAME}) || ($config{OSNAME} eq "")) {
51 chomp($config{OSNAME} = `/usr/bin/uname`);
52 if ((!$config{OSNAME}) || ($config{OSNAME} eq "")){
53 $config{OSNAME} = "Unknown";
57 if (!$config{MAX_CLIENT_T}) {
58 $config{MAX_CLIENT_T} = 1024; # Set a reasonable 'Default'
59 $fd_scan_fail = "true"; # Used Later
62 # Get and Set some important vars..
65 my $arg = $ARGV[0]; # Do Some Argument Checks..
66 if ($arg eq "-clean") { `rm -rf .config.cache`; } # Remove the config.cache file.
68 if ($arg eq "-update") {
69 # Does the cache file exist?
71 # No, No it doesn't.. *BASH*
72 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
75 # We've Loaded the cache file and all our variables..
76 print "Updating Files..\n";
78 $has_epoll = $config{HAS_EPOLL};
79 $has_kqueue = $config{HAS_KQUEUE};
86 print "Checking for cache from previous configure...\n";
88 print "Checking operating system version...\n";
91 if (!$config{MAX_CLIENT}) {
92 # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this
93 # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go
94 # higher than the found value" :))
95 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
98 printf "Checking if strlcpy exists... ";
99 # Perform the strlcpy() test..
100 $config{HAS_STRLCPY} = "false";
102 open(STRLCPY, "</usr/include/string.h") or $fail = 1;
105 while (chomp($line = <STRLCPY>))
107 # try and find the delcaration of:
108 # size_t strlcpy(...)
109 if ($line =~ /size_t(\0x9|\s)+strlcpy/)
111 $config{HAS_STRLCPY} = "true";
116 print "yes\n" if $config{HAS_STRLCPY} eq "true";
117 print "no\n" if $config{HAS_STRLCPY} eq "false";
119 printf "Checking if kqueue exists... ";
122 open(KQUEUE, "</usr/include/sys/event.h") or $fail = 1;
125 while (chomp($line = <KQUEUE>))
127 # try and find the delcaration of:
129 if ($line =~ /int(\0x9|\s)+kqueue/)
136 print "yes\n" if $has_kqueue == 1;
137 print "no\n" if $has_kqueue == 0;
139 printf "Checking if epoll exists... ";
142 open(EPOLL, "</usr/include/sys/epoll.h") or $fail = 1;
145 while (chomp($line = <EPOLL>))
147 # try and find the declaration of:
148 # extern int epoll_create (int __size) __THROW;
149 if (($line =~ /int(\0x9|\s)+epoll_create(\0x9|\s)+\(/) || ($line =~ /int(\0x9|\s)+epoll_create\(/))
157 my $kernel = `uname -r`;
159 if (($kernel =~ /2\.0/) || ($kernel =~ /2\.2/) || ($kernel =~ /2\.4/)) {
163 print "yes\n" if $has_epoll == 1;
164 print "no\n" if $has_epoll == 0;
166 if ($config{OSNAME} =~ /CYGWIN/) {
167 $config{HAS_STRLCPY} = "true";
170 $config{HAS_EPOLL} = $has_epoll;
171 $config{HAS_KQUEUE} = $has_kqueue;
173 ################################################################################
174 # BEGIN INTERACTIVE PART #
175 ################################################################################
179 # Display Splash Logo..
181 chomp($wholeos = `uname -mnr`);
183 # Display Introduction Message..
185 Welcome to the InspIRCd Configuration program!
187 *** If you are unsure of any of these values, leave it blank for ***
188 *** standard settings that will work, and your server will run ***
189 *** using them. If you are running this server as part of a ***
190 *** larger network, you must consult with your network admins ***
191 *** for the proper values to use, or server links will be unstable! ***
193 Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter
194 a new value. Please note: You will \033[1mHAVE\033[0m to read the docs
195 dir, otherwise you won't have a config file!
197 Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos), fdmax: $config{MAX_CLIENT_T}\n\n";
199 $config{CHANGE_COMPILER} = "n";
200 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";
202 if ($config{GCCVER} < 3)
204 print "\033[1;32mIMPORTANT!\033[0m A GCC 2.x compiler has been detected, and
205 should NOT be used. You should probably specify a newer compiler.\n";
207 yesno(CHANGE_COMPILER,"Do you want to change the compiler?");
208 if ($config{CHANGE_COMPILER} =~ /y/i)
210 print "What command do you want to use to invoke your compiler?\n";
211 print "[\033[1;32m$config{CC}\033[0m] -> ";
212 chomp($config{CC} = <STDIN>);
213 if ($config{CC} eq "") { $config{CC} = "g++"; }
214 chomp($foo = `$config{CC} -dumpversion | cut -c 1`);
216 chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change
217 chomp($config{GCC34} = `$config{CC} -dumpversion | cut -c 3`); # the compiler path
218 print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.$config{GCC34}\033[0m)\n";
222 print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n";
228 # Directory Settings..
229 my $tmpbase = $config{BASE_DIR};
230 dir_check("do you wish to install the InspIRCd base", "BASE_DIR");
231 if ($tmpbase ne $config{BASE_DIR}) {
232 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Directory
233 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
234 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
235 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
238 dir_check("are the configuration files", "CONFIG_DIR");
239 dir_check("are the modules to be compiled to", "MODULE_DIR");
240 dir_check("is the IRCd binary to be placed", "BINARY_DIR");
241 dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
244 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?");
248 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?");
251 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y"));
254 print "No high-performance socket engines are available, or you chose\n";
255 print "not to enable one. Defaulting to select() engine.\n\n";
258 yesno(THREADED_DNS,"Would you like to enable the experimental multi-threaded DNS lookup?");
261 print "\nThe following questions will ask you for various figures relating\n";
262 print "To your IRCd install. Please note that these should usually be left\n";
263 print "as defaults unless you have a real reason to change them. If they\n";
264 print "changed, then the values must be identical on all servers on your\n";
265 print "network, or malfunctions and/or crashes may occur, with the exception\n";
266 print "of the 'maximum number of clients' setting which may be different on\n";
267 print "different servers on the network.\n\n";
269 # File Descriptor Settings..
272 print "Maximum number of clients at any one time ($config{MAX_CLIENT_T})\n";
273 print "[\033[1;32m$config{MAX_CLIENT}\033[0m] -> ";
274 chomp($var = <STDIN>);
275 if ($var eq "") { $var = $config{MAX_CLIENT}; }
276 if ($var =~ /^\d+$/) {
277 if (($var > $config{MAX_CLIENT_T}) && ($fd_scan_failed ne true)) {
278 # Client has entered a larger number than the 'discovered' value
280 print "WARNING: Our scans have indicated that you are attempting
281 to use more sockets than there are avaliable. Are you sure
282 you wish to do this? It may cause the IRCd to malfunction [y/n]
283 [\033[1;32mn\033[0m] -> $c";
284 chomp($tmp = <STDIN>);
286 print "Please enter the correct value.\n\n";
291 print "You must enter a number in this field. Please try again.\n\n";
294 # If we get here, we should be good to go.
295 $config{MAX_CLIENT} = $var;
302 print "What is the maximum length of nicknames?\n";
303 print "[\033[1;32m$config{NICK_LENGT}\033[0m] -> ";
304 chomp($var = <STDIN>);
305 if ($var eq "") { $var = $config{NICK_LENGT}; }
306 if ($var =~ /^\d+$/) {
307 # We don't care what the number is, set it and be on our way.
308 $config{NICK_LENGT} = $var;
312 print "You must enter a number in this field. Please try again.\n\n";
318 print "What is the maximum length of channel names?\n";
319 print "[\033[1;32m$config{CHAN_LENGT}\033[0m] -> ";
320 chomp($var = <STDIN>);
321 if ($var eq "") { $var = $config{CHAN_LENGT}; }
322 if ($var =~ /^\d+$/) {
323 # We don't care what the number is, set it and be on our way.
324 $config{CHAN_LENGT} = $var;
328 print "You must enter a number in this field. Please try again.\n\n";
334 print "What is the maximum number of channels a normal user may join at any one time?\n";
335 print "[\033[1;32m$config{MAX_CHANNE}\033[0m] -> ";
336 chomp($var = <STDIN>);
337 if ($var eq "") { $var = $config{MAX_CHANNE}; }
338 if ($var =~ /^\d+$/) {
339 # We don't care what the number is, set it and be on our way.
340 $config{MAX_CHANNE} = $var;
344 print "You must enter a number in this field. Please try again.\n\n";
350 print "What is the maximum number of channels an oper may join at any one time?\n";
351 print "[\033[1;32m$config{MAX_OPERCH}\033[0m] -> ";
352 chomp($var = <STDIN>);
353 if ($var eq "") { $var = $config{MAX_OPERCH}; }
354 if ($var =~ /^\d+$/) {
355 # We don't care what the number is, set it and be on our way.
356 $config{MAX_OPERCH} = $var;
364 print "What is the maximum number of mode changes in one line?\n";
365 print "[\033[1;32m$config{MAXI_MODES}\033[0m] -> ";
366 chomp($var = <STDIN>);
367 if ($var eq "") { $var = $config{MAXI_MODES}; }
368 if ($var =~ /^\d+$/) {
369 # We don't care what the number is, set it and be on our way.
370 $config{MAXI_MODES} = $var;
374 print "You must enter a number in this field. Please try again.\n\n";
380 print "What is the maximum length of an ident (username)?\n";
381 print "[\033[1;32m$config{MAX_IDENT}\033[0m] -> ";
382 chomp($var = <STDIN>);
383 if ($var eq "") { $var = $config{MAX_IDENT}; }
384 if ($var =~ /^\d+$/) {
385 # We don't care what the number is, set it and be on our way.
386 $config{MAX_IDENT} = $var;
390 print "You must enter a number in this field. Please try again.\n\n";
396 print "What is the maximum length of a quit message?\n";
397 print "[\033[1;32m$config{MAX_QUIT}\033[0m] -> ";
398 chomp($var = <STDIN>);
399 if ($var eq "") { $var = $config{MAX_QUIT}; }
400 if ($var =~ /^\d+$/) {
401 # We don't care what the number is, set it and be on our way.
402 $config{MAX_QUIT} = $var;
406 print "You must enter a number in this field. Please try again.\n\n";
412 print "What is the maximum length of a channel topic?\n";
413 print "[\033[1;32m$config{MAX_TOPIC}\033[0m] -> ";
414 chomp($var = <STDIN>);
415 if ($var eq "") { $var = $config{MAX_TOPIC}; }
416 if ($var =~ /^\d+$/) {
417 # We don't care what the number is, set it and be on our way.
418 $config{MAX_TOPIC} = $var;
422 print "You must enter a number in this field. Please try again.\n\n";
428 print "What is the maximum length of a kick message?\n";
429 print "[\033[1;32m$config{MAX_KICK}\033[0m] -> ";
430 chomp($var = <STDIN>);
431 if ($var eq "") { $var = $config{MAX_KICK}; }
432 if ($var =~ /^\d+$/) {
433 # We don't care what the number is, set it and be on our way.
434 $config{MAX_KICK} = $var;
438 print "You must enter a number in this field. Please try again.\n\n";
444 print "What is the maximum length of a GECOS (real name) field?\n";
445 print "[\033[1;32m$config{MAX_GECOS}\033[0m] -> ";
446 chomp($var = <STDIN>);
447 if ($var eq "") { $var = $config{MAX_GECOS}; }
448 if ($var =~ /^\d+$/) {
449 # We don't care what the number is, set it and be on our way.
450 $config{MAX_GECOS} = $var;
454 print "You must enter a number in this field. Please try again.\n\n";
460 print "What is the maximum length of an away message?\n";
461 print "[\033[1;32m$config{MAX_AWAY}\033[0m] -> ";
462 chomp($var = <STDIN>);
463 if ($var eq "") { $var = $config{MAX_AWAY}; }
464 if ($var =~ /^\d+$/) {
465 # We don't care what the number is, set it and be on our way.
466 $config{MAX_AWAY} = $var;
470 print "You must enter a number in this field. Please try again.\n\n";
475 print "Enter the Level Of Binary optimisation. This is a number between 0 and 3.
476 The InspIRCd Team will NOT support any bug reports above 0. Also note,
477 the IRCd behaviour will be different depending on this value. Please
478 read the documentation for more information.
480 The higher the number, the more optimised your binary will be. This
481 value will default to 0 if you either don't enter a number, or enter
482 a value outside the range.
484 As always, if you are unsure, just press enter and accept the default.\n\n";
485 print "[\033[1;32m$config{OPTIMITEMP}\033[0m] -> ";
486 chomp($var = <STDIN>);
488 $var = $config{OPTIMITEMP};
492 $config{OPTIMITEMP} = 1;
493 $config{OPTIMISATI} = "-O";
494 } elsif ($var eq "2") {
495 $config{OPTIMITEMP} = 2;
496 $config{OPTIMISATI} = "-O2";
497 } elsif ($var eq "3") {
498 $config{OPTIMITEMP} = 3;
499 $config{OPTIMISATI} = "-O3";
501 $config{OPTIMITEMP} = 0;
502 $config{OPTIMISATI} = "-g";
505 print "\n\033[1;32mPre-build configuration is complete!\033[0m\n\n";
506 print "\033[0mBase install path:\033[1;32m\t\t$config{BASE_DIR}\n";
507 print "\033[0mConfig path:\033[1;32m\t\t\t$config{CONFIG_DIR}\n";
508 print "\033[0mModule path:\033[1;32m\t\t\t$config{MODULE_DIR}\n";
509 print "\033[0mLibrary path:\033[1;32m\t\t\t$config{LIBRARY_DIR}\n";
510 print "\033[0mMax connections:\033[1;32m\t\t$config{MAX_CLIENT}\n";
511 print "\033[0mMax User Channels:\033[1;32m\t\t$config{MAX_CHANNE}\n";
512 print "\033[0mMax nickname length:\033[1;32m\t\t$config{NICK_LENGT}\n";
513 print "\033[0mMax channel length:\033[1;32m\t\t$config{CHAN_LENGT}\n";
514 print "\033[0mMax mode length:\033[1;32m\t\t$config{MAXI_MODES}\n";
515 print "\033[0mMax ident length:\033[1;32m\t\t$config{MAX_IDENT}\n";
516 print "\033[0mMax quit length:\033[1;32m\t\t$config{MAX_QUIT}\n";
517 print "\033[0mMax topic length:\033[1;32m\t\t$config{MAX_TOPIC}\n";
518 print "\033[0mMax kick length:\033[1;32m\t\t$config{MAX_KICK}\n";
519 print "\033[0mMax name length:\033[1;32m\t\t$config{MAX_GECOS}\n";
520 print "\033[0mMax away length:\033[1;32m\t\t$config{MAX_AWAY}\n";
521 print "\033[0mGCC Version Found:\033[1;32m\t\t$config{GCCVER}.$config{GCC34}\n";
522 print "\033[0mOptimatizaton Flag:\033[1;32m\t\t$config{OPTIMISATI}\033[0m\n";
523 print "\033[0mCompiler program:\033[1;32m\t\t$config{CC}\033[0m\n";
524 print "\033[0mStatic modules:\033[1;32m\t\t\t$config{STATIC_LINK}\033[0m\n";
525 print "\033[0mMultithread DNS:\033[1;32m\t\t$config{THREADED_DNS}\033[0m\n\n";
531 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
532 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
533 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
534 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";
536 if ($config{OSNAME} =~ /CYGWIN/) {
538 \033[1;32mWARNING!\033[0m CYGWIN does not properly support shared modules,
539 so modules will be compiled statically into the core of the ircd. The modules
540 will act like they are being loaded from disk and being unloaded from RAM,
541 however they are in fact being enabled and disabled similar to features in
546 if ($config{GCCVER} < "3") {
548 \033[1;32mWARNING!\033[0m You are attempting to compile InspIRCd on GCC 2.x!
549 GCC 2.x series compilers only had partial (read as broken) C++ support, and
550 your compile will most likely fail horribly! If you have any problems, do NOT
551 report them to the bugtracker or forums without first upgrading your compiler
552 to a newer 3.x or 4.x (or whatever is available currently) version.
556 ################################################################################
558 ################################################################################
560 # Retrieves the .config.cache file, and loads values into the main config hash.
561 open(CACHE, ".config.cache") or return undef;
565 # Ignore Blank lines, and comments..
569 my ($key, $value) = split("=", $_);
570 $value =~ /^\"(.*)\"$/;
571 # Do something with data here!
579 # Dump the contents of %config
580 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
581 open(FILEHANDLE, ">.config.cache");
582 foreach $key (keys %config)
584 print FILEHANDLE "$key=\"$config{$key}\"\n";
590 my ($desc, $hash_key) = @_;
593 print "In what directory $desc?\n";
594 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
595 chomp($var = <STDIN>);
596 if ($var eq "") { $var = $config{$hash_key}; }
597 if ($var =~ /^\~\/(.+)$/) {
598 # Convert it to a full path..
599 $var = resolve_directory($ENV{HOME} . "/" . $1);
601 if (substr($var,0,1) ne "/")
603 # Assume relative Path was given.. fill in the rest.
604 $var = $this . "/$var";
606 $var = resolve_directory($var);
608 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
609 chomp($tmp = <STDIN>);
610 if (($tmp eq "") || ($tmp =~ /^y/i)) {
611 # Attempt to Create the Dir..
612 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
614 print "Unable to create directory. ($var)\n\n";
619 # They said they don't want to create, and we can't install there.
625 # Target exists, but is not a directory.
626 print "File $var exists, but is not a directory.\n\n";
630 # Either Dir Exists, or was created fine.
631 $config{$hash_key} = $var;
638 if ($config{OSNAME} =~ /BSD$/) {
639 $config{LDLIBS} = "-Ldl -lstdc++";
640 $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Wall -Woverloaded-virtual $config{OPTIMISATI}";
641 $config{MAKEPROG} = "gmake";
642 if ($config{OSNAME} eq "OpenBSD") {
643 chomp($foo = `eg++ -dumpversion | cut -c 1`);
644 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
645 # if theyre not running this, configure lets the build continue but they probably wont manage to
646 # compile as this standard version is 2.95.3!
648 $config{CC} = "eg++";
649 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change
650 chomp($config{GCC34} = `eg++ -dumpversion | cut -c 3`); # the compiler path
654 $config{LDLIBS} = "-ldl -lstdc++";
655 $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Wall -Woverloaded-virtual $config{OPTIMISATI}";
656 $config{MAKEPROG} = "make";
657 if ($config{OSNAME} =~ /CYGWIN/) {
658 $config{FLAGS} = "-frtti $OPTIMISATI -Wall -Woverloaded-virtual $config{OPTIMISATI}";
659 $config{LDLIBS} = "";
660 $config{MAKEPROG} = "/usr/bin/make";
661 $config{MAKEORDER} = "mods ircd config bininst";
662 $config{STATICLIBS} = "modules/mods.a";
663 $config{STATIC_LINK} = "yes";
666 if ($config{OSNAME} =~ /SunOS/) {
667 # solaris/sunos needs these
668 # socket = bsd sockets api
670 # rt = POSIX realtime extensions
671 # resolv = inet_aton only (why isnt this in nsl?!)
672 $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv";
690 opendir(DIRHANDLE, "src/modules");
691 foreach $name (sort readdir(DIRHANDLE)) {
692 if ($name =~ /^m_(.+)\.cpp$/)
695 if ($mod !~ /_static$/) {
696 $modlist[$i++] = $mod;
705 print "Writing \033[1;32minspircd_config.h\033[0m\n";
706 # First File.. inspircd_config.h
707 chomp(my $incos = `uname -n -s -r`);
708 chomp(my $version = `sh ./src/version.sh`);
709 open(FILEHANDLE, ">include/inspircd_config.h");
710 my $NL = $config{NICK_LENGT}+1;
711 my $CL = $config{CHAN_LENGT}+1;
712 print FILEHANDLE <<EOF;
713 /* Auto generated by configure, do not modify! */
714 #ifndef __CONFIGURATION_AUTO__
715 #define __CONFIGURATION_AUTO__
717 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
718 #define MOD_PATH "$config{MODULE_DIR}"
719 #define VERSION "$version"
720 #define MAXCLIENTS $config{MAX_CLIENT}
723 #define MAXCHANS $config{MAX_CHANNE}
724 #define OPERMAXCHANS $config{MAX_OPERCH}
725 #define MAXMODES $config{MAXI_MODES}
726 #define IDENTMAX $config{MAX_IDENT}
727 #define MAXQUIT $config{MAX_QUIT}
728 #define MAXTOPIC $config{MAX_TOPIC}
729 #define MAXKICK $config{MAX_KICK}
730 #define MAXGECOS $config{MAX_GECOS}
731 #define MAXAWAY $config{MAX_AWAY}
732 #define OPTIMISATION $config{OPTIMITEMP}
733 #define SYSTEM "$incos"
737 if ($config{OSNAME} =~ /SunOS/) {
738 print FILEHANDLE "#define IS_SOLARIS\n";
740 if ($config{OSNAME} =~ /CYGWIN/) {
741 print FILEHANDLE "#define IS_CYGWIN\n";
742 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
744 if ($config{STATIC_LINK} eq "yes") {
745 print FILEHANDLE "#define STATIC_LINK\n";
747 if ($config{GCCVER} > 3) {
748 print FILEHANDLE "#define GCC3\n";
749 print FILEHANDLE "#define GCC34\n";
753 if ($config{GCCVER} == 3) {
754 print FILEHANDLE "#define GCC3\n";
755 if ($config{GCC34} > 3) {
756 print FILEHANDLE "#define GCC34\n";
760 if ($config{HAS_STRLCPY} eq "true") {
761 print FILEHANDLE "#define HAS_STRLCPY\n";
763 if ($config{THREADED_DNS} =~ /y/i) {
764 print FILEHANDLE "#define THREADED_DNS\n";
767 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
768 print FILEHANDLE "#define USE_KQUEUE\n";
771 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
772 print FILEHANDLE "#define USE_EPOLL\n";
775 # user didn't choose either epoll or select for their OS.
776 # default them to USE_SELECT (ewwy puke puke)
778 print FILEHANDLE "#define USE_SELECT\n";
780 print FILEHANDLE "\n#endif\n";
783 # Create a Modules List..
785 foreach $i (@modlist)
787 if ($config{OSNAME} =~ /CYGWIN/) {
788 $modules .= "m_".$i.".o ";
791 $modules .= "m_".$i.".so ";
794 chomp($modules); # Remove Redundant whitespace..
797 # Write all .in files.
800 my $exe = "inspircd";
802 if ($config{OSNAME} =~ /CYGWIN/) {
803 $exe = "inspircd.exe";
806 opendir(DIRHANDLE, $this);
807 if ($config{THREADED_DNS} =~ /y/i) {
808 $config{LDLIBS} = $config{LDLIBS} . " -pthread";
810 foreach $name (sort readdir(DIRHANDLE)) {
811 if ($name =~ /^\.(.+)\.inc$/)
814 # All .name.inc files need parsing!
816 open(FILEHANDLE, ".$file.inc");
817 while (<FILEHANDLE>) {
822 $tmp =~ s/\@CC\@/$config{CC}/;
823 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
824 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
825 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
826 $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/;
827 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
828 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
829 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
830 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
831 $tmp =~ s/\@MODULES\@/$modules/;
832 $tmp =~ s/\@EXECUTABLE\@/$exe/;
833 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
834 $tmp =~ s/\@STATICLIBS\@/$config{STATICLIBS}/;
836 print "Writing \033[1;32m$file\033[0m\n";
837 open(FILEHANDLE, ">$file");
838 print FILEHANDLE $tmp;
843 # Make inspircd executable!
844 chmod 0744, 'inspircd';
846 if ($config{OSNAME} =~ /CYGWIN/) {
847 print "Writing static-build \033[1;32msrc/Makefile\033[0m\n";
848 write_static_makefile();
851 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
852 write_dynamic_makefile();
857 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
858 open(FILEHANDLE, ">src/modules/Makefile");
859 print FILEHANDLE <<EOF;
860 # (C) ChatSpike development team
861 # Makefile by <Craig\@ChatSpike.net>
862 # Many Thanks to Andrew Church <achurch\@achurch.org>
863 # for assisting with making this work right.
865 # Automatically Generated by ./configure to add a modules
866 # please run ./configure --update
872 # Create a Modules List..
875 if ($config{OSNAME} =~ /CYGWIN/) {
876 open(MODLIST,">include/modlist.h");
877 print MODLIST <<HEADER;
878 // Generated automatically by configure. DO NOT EDIT!
880 #ifndef __SYMBOLS__H_CONFIGURED__
881 #define __SYMBOLS__H_CONFIGURED__
884 foreach $i (@modlist) {
885 if ($i !~ /_static$/) {
886 print MODLIST "extern \"C\" void * $i\_init (void);\n";
889 print MODLIST "\nstruct {const char *name; initfunc *value; } modsyms[] = {\n";
891 foreach $i (@modlist)
893 if ($i !~ /_static$/) {
894 $flags = getcompilerflags("src/modules/m_".$i.".cpp");
895 if ($config{OSNAME} =~ /CYGWIN/) {
896 print FILEHANDLE <<EOCHEESE;
897 m_$i.o: m_$i\_static.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h
898 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c m_$i\_static.cpp
899 mv m_$i\_static.o ../m_$i.o
902 print "Configuring module [\033[1;32mm_$i.so\033[0m] for static linking... ";
903 open(MODULE,"<src/modules/m_".$i.".cpp") or die("Could not open m_".$i.".cpp");
904 open(MUNGED,">src/modules/m_".$i."_static.cpp") or die("Could not create m_".$i."_static.cpp");
905 while (chomp($a = <MODULE>)) {
906 $a =~ s/init_module/$i\_init/g;
907 $a =~ s/Srv/$i\Srv/g;
912 print MODLIST <<EOENT;
913 {"m_$i.so",\&$i\_init},
918 print FILEHANDLE <<EOCHEESE;
919 m_$i.so: m_$i.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h
920 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c m_$i.cpp
921 \$(CC) \$(FLAGS) -shared $flags -o m_$i.so m_$i.o
922 \@-rm -f \$(MODPATH)/m_$i.so
923 cp m_$i.so \$(MODPATH)/
924 chmod 0700 \$(MODPATH)/m_$i.so
930 if ($config{OSNAME} =~ /CYGWIN/) {
931 print MODLIST "{0}};\n\n#endif\n";
936 sub getcompilerflags {
940 if ($_ =~ /^\/\* \$CompileFlags: (.+) \*\/$/) {
950 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";
951 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";
952 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";
953 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";
954 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";
955 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";
956 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";
957 print "\033[0m\033[0m....::..::::..:::......:::..:::::::::....::..:::::..:::......:::........:::\n\n";
960 sub resolve_directory {
962 return File::Spec->rel2abs($_[0]);
966 my ($flag,$prompt) = @_;
967 print "$prompt [\033[1;32m$config{$flag}\033[0m] -> ";
968 chomp($tmp = <STDIN>);
969 if ($tmp eq "") { $tmp = $config{$flag} }
971 if (($tmp eq "") || ($tmp =~ /^y/i)) {
972 $config{$flag} = "y";
974 $config{$flag} = "n";
980 sub write_static_makefile {
981 open(FH,">src/Makefile") or die("Could not write src/Makefile!");
985 # (C) ChatSpike development team
986 # Makefile by <Craig\@ChatSpike.net>
987 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
992 CXXFLAGS = -I../include \${FLAGS}
994 all: userprocess.o 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
996 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
997 \$(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 userprocess.o \$(MODULES)
999 userprocess.o: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1000 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1002 socketengine.o: socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1003 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp
1005 hashcomp.o: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1006 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1008 helperfuncs.o: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1009 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1011 channels.o: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1012 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1014 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
1015 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1017 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
1018 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1020 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
1021 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1023 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
1024 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1026 base.o: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1027 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1029 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
1030 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_util.cpp
1032 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
1033 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_io.cpp
1035 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
1036 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
1038 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
1039 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1041 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
1042 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dnsqueue.cpp
1044 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
1045 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1047 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
1048 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1050 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
1051 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1053 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
1054 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1056 socket.o: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1057 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1064 sub write_dynamic_makefile {
1065 open(FH,">src/Makefile") or die("Could not write src/Makefile");
1069 # (C) ChatSpike development team
1070 # Makefile by <Craig\@ChatSpike.net>
1071 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
1074 CC = im a cheezeball
1076 CXXFLAGS = -I../include \${FLAGS}
1078 all: libIRCDuserprocess.so 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
1080 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
1081 \$(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 libIRCDuserprocess.so
1083 libIRCDsocketengine.so: socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1084 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp
1085 \$(CC) -shared -o libIRCDsocketengine.so socketengine.o
1087 libIRCDuserprocess.so: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1088 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1089 \$(CC) -shared -o libIRCDuserprocess.so userprocess.o
1091 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1092 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1093 \$(CC) -shared -o libIRCDhash.so hashcomp.o
1095 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1096 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1097 \$(CC) -shared -o libIRCDhelper.so helperfuncs.o
1099 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1100 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1101 \$(CC) -shared -o libIRCDchannels.so channels.o
1103 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
1104 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1105 \$(CC) -shared -o libIRCDmode.so mode.o
1107 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
1108 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1109 \$(CC) -shared -o libIRCDxline.so xline.o
1111 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
1112 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1113 \$(CC) -shared -o libIRCDstring.so inspstring.o
1115 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
1116 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1117 \$(CC) -shared -o libIRCDasyncdns.so dns.o
1119 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1120 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1121 \$(CC) -shared -o libIRCDbase.so base.o
1123 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
1124 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_util.cpp
1125 \$(CC) -shared -o libIRCDutil.so inspircd_util.o
1127 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
1128 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_io.cpp
1129 \$(CC) -shared -o libIRCDio.so inspircd_io.o
1131 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
1132 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
1133 \$(CC) -shared -o libIRCDmessage.so message.o
1135 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
1136 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1137 \$(CC) -shared -o libIRCDcommands.so commands.o
1139 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
1140 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dnsqueue.cpp
1141 \$(CC) -shared -o libIRCDdnsqueue.so dnsqueue.o
1143 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
1144 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1145 \$(CC) -shared -o libIRCDdynamic.so dynamic.o
1147 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
1148 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1149 \$(CC) -shared -o libIRCDusers.so users.o
1151 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
1152 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1153 \$(CC) -shared -o libIRCDmodules.so modules.o
1155 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
1156 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1157 \$(CC) -shared -o libIRCDwildcard.so wildcard.o
1159 libIRCDsocket.so: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1160 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1161 \$(CC) -shared -o libIRCDsocket.so socket.o