3 # InspIRCd Configuration Script
5 # Copyright 2003 The ChatSpike Development Team
6 # <brain@chatspike.net>
7 # <Craig@chatspike.net>
9 # [14:21] Brain: <matrix impression> i know perl-fu!
13 ########################################
17 chomp($topdir = getcwd());
18 $this = resolve_directory($topdir); # PWD, Regardless.
19 @modlist = (); # Declare for Module List..
20 %config = (); # Initiate Configuration Hash..
21 $config{ME} = resolve_directory($topdir); # Present Working Directory
22 $config{BASE_DIR} = $config{ME}; # Use CWD as 'Base' Directory.
23 $config{CONFIG_DIR} = resolve_directory($config{ME}."/conf"); # Configuration Directory
24 $config{MODULE_DIR} = resolve_directory($config{ME}."/modules"); # Modules Directory
25 $config{BINARY_DIR} = resolve_directory($config{ME}."/bin"); # Binary Directory
26 $config{LIBRARY_DIR} = resolve_directory($config{ME}."/lib"); # Library Directory
27 chomp($config{HAS_GNUTLS} = `libgnutls-config --version 2>/dev/null | cut -c 1,2,3`); # GNUTLS Version.
28 chomp($config{HAS_OPENSSL} = `openssl version 2>/dev/null`); # Openssl version
29 $config{USE_GNUTLS} = "n"; # Use gnutls.
30 $config{USE_OPENSSL} = "n"; # Use openssl.
31 $config{OPTIMITEMP} = "0"; # Default Optimisation Value
32 $config{OPTIMISATI} = "-g"; # Optimisation Flag
33 $config{NICK_LENGT} = "31"; # Default Nick Length
34 $config{CHAN_LENGT} = "64"; # Default Channel Name Length
35 $config{MAX_CHANNE} = "20"; # Default Max. Channels per user
36 $config{MAX_OPERCH} = "60"; # Default Max. Channels per oper
37 $config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once.
38 $config{HAS_STRLCPY} = "false"; # strlcpy Check.
39 $config{HAS_STDINT} = "false"; # stdint.h check
40 $config{HAS_EXECINFO} = "0"; # execinfo.h Check.
41 $config{USE_KQUEUE} = "y"; # kqueue enabled
42 $config{USE_EPOLL} = "y"; # epoll enabled
43 $config{THREADED_DNS} = "n"; # threaded dns
44 $config{IPV6} = "n"; # IPv6 support (experimental)
45 $config{SUPPORT_IP6LINKS} = "y"; # IPv4 supporting IPv6 links (experimental)
46 $config{STATIC_LINK} = "no"; # are doing static modules?
47 chomp($config{MAX_CLIENT_T} = `sh -c \"ulimit -n\"`); # FD Limit
48 chomp($config{MAX_DESCRIPTORS} = `sh -c \"ulimit -n\"`); # Hard FD Limit
49 chomp($config{GCCVER} = `g++ -dumpversion | cut -c 1`); # Major GCC Version
50 chomp($config{OSNAME} = `/bin/uname`); # Operating System Name
51 $config{CC} = "g++"; # C++ compiler
52 $config{MAKEORDER} = "ircd mods"; # build order
53 $config{STATICLIBS} = ""; # library archive path
54 $config{MAX_IDENT} = "12"; # max ident size
55 $config{MAX_QUIT} = "255"; # max quit message size
56 $config{MAX_TOPIC} = "307"; # max topic size
57 $config{MAX_KICK} = "255"; # max kick message size
58 $config{MAX_GECOS} = "128"; # max GECOS size
59 $config{MAX_AWAY} = "200"; # max AWAY size
63 $config{HAS_OPENSSL} =~ /OpenSSL (\S+) \d+ \S+ \d{4}/;
64 $config{HAS_OPENSSL} = $1;
66 if ($config{GCCVER} eq "") {
67 print "g++ was not found! You require g++ (the GNU C++ compiler, part of GCC) to build InspIRCd!\n";
71 # Minihack! Convert Cygwin to 'Cyg-Static' so i can
72 # Keep my dynamic module experiments here for later
75 if ($config{OSNAME} =~ /CYGWIN/)
77 $config{OSNAME} = "CYG-STATIC";
79 elsif($config{OSNAME} =~ /^MINGW32/)
81 $config{OSNAME} = "MINGW32";
83 elsif ((!$config{OSNAME}) || ($config{OSNAME} eq ""))
85 chomp($config{OSNAME} = `/usr/bin/uname`);
87 if((!$config{OSNAME}) || ($config{OSNAME} eq ""))
89 $config{OSNAME} = "Unknown";
93 if (!$config{MAX_CLIENT_T}) {
94 $config{MAX_CLIENT_T} = 1024; # Set a reasonable 'Default'
95 $fd_scan_fail = "true"; # Used Later
98 # Get and Set some important vars..
101 my $arg = $ARGV[0]; # Do Some Argument Checks..
102 if ($arg eq "-clean") {
103 system("rm -rf .config.cache");
104 } # Remove the config.cache file.
106 if ($arg eq "-update") {
107 # Does the cache file exist?
109 # No, No it doesn't.. *BASH*
110 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
113 # We've Loaded the cache file and all our variables..
114 print "Updating Files..\n";
116 $has_epoll = $config{HAS_EPOLL};
117 $has_kqueue = $config{HAS_KQUEUE};
124 if ($arg eq "-modupdate") {
125 # Does the cache file exist?
127 # No, No it doesn't.. *BASH*
128 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
131 # We've Loaded the cache file and all our variables..
132 print "Updating Files..\n";
134 $has_epoll = $config{HAS_EPOLL};
135 $has_kqueue = $config{HAS_KQUEUE};
144 if ($arg eq "-svnupdate") {
146 open(FH,"<.svn/entries") or $fail = 1;
148 print "This is not an SVN copy of InspIRCd.\n";
151 system("svn update");
152 system("perl configure -update");
153 if ($ARGV[1] eq "rebuild") {
154 system("make install");
159 print "Checking for cache from previous configure...\n";
161 print "Checking operating system version...\n";
164 if (!$config{MAX_CLIENT}) {
165 # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this
166 # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go
167 # higher than the found value" :))
168 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
171 printf "Checking if stdint.h exists... ";
172 $config{HAS_STDINT} = "true";
174 open(STDINT, "</usr/include/stdint.h") or $config{HAS_STDINT} = "false";
175 if ($config{HAS_STDINT} eq "true") {
178 print "yes\n" if $config{HAS_STDINT} eq "true";
179 print "no\n" if $config{HAS_STDINT} eq "false";
182 printf "Checking if strlcpy exists... ";
183 # Perform the strlcpy() test..
184 $config{HAS_STRLCPY} = "false";
186 open(STRLCPY, "</usr/include/string.h") or $fail = 1;
188 while (chomp($line = <STRLCPY>)) {
189 # try and find the delcaration of:
190 # size_t strlcpy(...)
191 if ($line =~ /size_t(\0x9|\s)+strlcpy/) {
192 $config{HAS_STRLCPY} = "true";
197 print "yes\n" if $config{HAS_STRLCPY} eq "true";
198 print "no\n" if $config{HAS_STRLCPY} eq "false";
200 printf "Checking if execinfo.h exists... ";
201 $config{HAS_EXECINFO} = "0";
203 open(EXECINFO, "</usr/include/execinfo.h") or $fail = 1;
206 open(EXECINFO, "</usr/local/include/execinfo.h") or $fail = 1;
208 printf "/usr/local/include/execinfo.h\n";
209 $config{HAS_EXECINFO} = "1";
213 printf "Not found!\n";
217 printf "/usr/include/execinfo.h\n";
218 $config{HAS_EXECINFO} = "1";
222 printf "Checking if kqueue exists... ";
225 open(KQUEUE, "</usr/include/sys/event.h") or $fail = 1;
227 while (chomp($line = <KQUEUE>)) {
228 # try and find the delcaration of:
230 if ($line =~ /int(\0x9|\s)+kqueue/) {
236 print "yes\n" if $has_kqueue == 1;
237 print "no\n" if $has_kqueue == 0;
239 printf "Checking if epoll exists... ";
242 open(EPOLL, "</usr/include/sys/epoll.h") or $fail = 1;
248 my $kernel = `uname -r`;
250 if (($kernel =~ /2\.0/) || ($kernel =~ /2\.2/) || ($kernel =~ /2\.4/)) {
254 print "yes\n" if $has_epoll == 1;
255 print "no\n" if $has_epoll == 0;
257 if (($config{OSNAME} =~ /CYGWIN/) || ($config{OSNAME} eq "CYG-STATIC")) {
258 $config{HAS_STRLCPY} = "true";
261 $config{HAS_EPOLL} = $has_epoll;
262 $config{HAS_KQUEUE} = $has_kqueue;
264 printf "Checking for libgnutls... ";
265 if (($config{HAS_GNUTLS}) && (($config{HAS_GNUTLS} >= 1.2) || ($config{HAS_GNUTLS} eq "y"))) {
267 $config{HAS_GNUTLS} = "y";
270 $config{HAS_GNUTLS} = "n";
273 printf "Checking for openssl... ";
274 if (($config{HAS_OPENSSL}) && (($config{HAS_OPENSSL} >= 0.8) || ($config{HAS_OPENSSL} eq "y"))) {
276 $config{HAS_OPENSSL} = "y";
279 $config{HAS_OPENSSL} = "n";
282 ################################################################################
283 # BEGIN INTERACTIVE PART #
284 ################################################################################
288 # Display Splash Logo..
290 chomp($wholeos = `uname -mnr`);
292 my $rev = getrevision();
293 # Display Introduction Message..
295 Welcome to the InspIRCd Configuration program!
297 *** If you are unsure of any of these values, leave it blank for ***
298 *** standard settings that will work, and your server will run ***
299 *** using them. If you are running this server as part of a ***
300 *** larger network, you must consult with your network admins ***
301 *** for the proper values to use, or server links will be unstable! ***
303 Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter
304 a new value. Please note: You will \033[1mHAVE\033[0m to read the docs
305 dir, otherwise you won't have a config file!
307 Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos), fdmax: $config{MAX_CLIENT_T}
308 Your InspIRCd revision ID is \033[1;32mr$rev\033[0m";
310 print " (Non-SVN build)";
314 $config{CHANGE_COMPILER} = "n";
315 print "I have detected the following compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
317 while (($config{GCCVER} < 3) || ($config{GCCVER} eq "")) {
318 print "\033[1;32mIMPORTANT!\033[0m A GCC 2.x compiler has been detected, and
319 should NOT be used. You should probably specify a newer compiler.\n\n";
320 yesno(CHANGE_COMPILER,"Do you want to change the compiler?");
321 if ($config{CHANGE_COMPILER} =~ /y/i) {
322 print "What command do you want to use to invoke your compiler?\n";
323 print "[\033[1;32m$config{CC}\033[0m] -> ";
324 chomp($config{CC} = <STDIN>);
325 if ($config{CC} eq "") {
328 chomp($foo = `$config{CC} -dumpversion | cut -c 1`);
330 chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change compilers
331 print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
332 if ($config{GCCVER} < 3) {
333 print "\033[1;32mGCC 2.x WILL NOT WORK!\033[0m. Let's try that again, shall we?\n";
337 print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n";
344 # Directory Settings..
345 my $tmpbase = $config{BASE_DIR};
346 dir_check("do you wish to install the InspIRCd base", "BASE_DIR");
347 if ($tmpbase ne $config{BASE_DIR}) {
348 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Directory
349 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
350 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
351 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
354 dir_check("are the configuration files", "CONFIG_DIR");
355 dir_check("are the modules to be compiled to", "MODULE_DIR");
356 dir_check("is the IRCd binary to be placed", "BINARY_DIR");
357 dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
360 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?");
364 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?");
367 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y"));
368 if (!$chose_hiperf) {
369 print "No high-performance socket engines are available, or you chose\n";
370 print "not to enable one. Defaulting to select() engine.\n\n";
373 yesno(IPV6,"Would you like to build InspIRCd with IPv6 support?");
376 if ($config{IPV6} eq "y") {
377 print "You have chosen to build an \033[1;32mIPV6-only\033[0m server.\nTo accept IPV4 users, you must use the '::ffff:' notation of addresses.\n\n";
378 $config{SUPPORT_IP6LINKS} = "y";
380 yesno(SUPPORT_IP6LINKS,"You have chosen to build an \033[1;32mIPV4-only\033[0m server.\nWould you like to enable support for linking to IPV6-enabled\nInspIRCd servers which are using '::ffff:' notation?\nIf you are using a recent operating\nsystem and are unsure, answer yes.");
384 if (($config{HAS_GNUTLS} eq "y") && ($config{HAS_OPENSSL} eq "y")) {
385 print "I have detected both GnuTLS and OpenSSL on your system.\n";
386 print "I will default to GnuTLS. If you wish to use OpenSSL\n";
387 print "instead, you should enable the OpenSSL module yourself\n";
388 print "by copying it from src/modules/extra to src/modules.\n\n";
391 if ($config{HAS_GNUTLS} eq "y") {
392 yesno(USE_GNUTLS, "Would you like to enable SSL Support?");
393 if ($config{USE_GNUTLS} eq "y") {
394 print "\nUsing GnuTLS SSL module.\n";
396 } elsif ($config{HAS_OPENSSL} eq "y") {
397 yesno(USE_OPENSSL, "Would you like to enable SSL Support?");
398 if ($config{USE_OPENSSL} eq "y") {
399 print "\nUsing OpenSSL SSL module.\nYou will get better performance if you move to GnuTLS in the future.\n";
403 print "\nThe following questions will ask you for various figures relating\n";
404 print "To your IRCd install. Please note that these should usually be left\n";
405 print "as defaults unless you have a real reason to change them. If they\n";
406 print "changed, then the values must be identical on all servers on your\n";
407 print "network, or malfunctions and/or crashes may occur, with the exception\n";
408 print "of the 'maximum number of clients' setting which may be different on\n";
409 print "different servers on the network.\n\n";
411 # File Descriptor Settings..
414 print "Maximum number of clients at any one time ($config{MAX_CLIENT_T})\n";
415 print "[\033[1;32m$config{MAX_CLIENT}\033[0m] -> ";
416 chomp($var = <STDIN>);
418 $var = $config{MAX_CLIENT};
420 if ($var =~ /^\d+$/) {
421 if (($var > $config{MAX_CLIENT_T}) && ($fd_scan_failed ne true)) {
422 # Client has entered a larger number than the 'discovered' value
424 print "WARNING: Our scans have indicated that you are attempting
425 to use more sockets than there are avaliable. Are you sure
426 you wish to do this? It may cause the IRCd to malfunction [y/n]
427 [\033[1;32mn\033[0m] -> $c";
428 chomp($tmp = <STDIN>);
430 print "Please enter the correct value.\n\n";
435 print "You must enter a number in this field. Please try again.\n\n";
438 # If we get here, we should be good to go.
439 $config{MAX_CLIENT} = $var;
446 print "What is the maximum length of nicknames?\n";
447 print "[\033[1;32m$config{NICK_LENGT}\033[0m] -> ";
448 chomp($var = <STDIN>);
450 $var = $config{NICK_LENGT};
452 if ($var =~ /^\d+$/) {
453 # We don't care what the number is, set it and be on our way.
454 $config{NICK_LENGT} = $var;
458 print "You must enter a number in this field. Please try again.\n\n";
464 print "What is the maximum length of channel names?\n";
465 print "[\033[1;32m$config{CHAN_LENGT}\033[0m] -> ";
466 chomp($var = <STDIN>);
468 $var = $config{CHAN_LENGT};
470 if ($var =~ /^\d+$/) {
471 # We don't care what the number is, set it and be on our way.
472 $config{CHAN_LENGT} = $var;
476 print "You must enter a number in this field. Please try again.\n\n";
482 print "What is the maximum number of channels a normal user may join at any one time?\n";
483 print "[\033[1;32m$config{MAX_CHANNE}\033[0m] -> ";
484 chomp($var = <STDIN>);
486 $var = $config{MAX_CHANNE};
488 if ($var =~ /^\d+$/) {
489 # We don't care what the number is, set it and be on our way.
490 $config{MAX_CHANNE} = $var;
494 print "You must enter a number in this field. Please try again.\n\n";
500 print "What is the maximum number of channels an oper may join at any one time?\n";
501 print "[\033[1;32m$config{MAX_OPERCH}\033[0m] -> ";
502 chomp($var = <STDIN>);
504 $var = $config{MAX_OPERCH};
506 if ($var =~ /^\d+$/) {
507 # We don't care what the number is, set it and be on our way.
508 $config{MAX_OPERCH} = $var;
516 print "What is the maximum number of mode changes in one line?\n";
517 print "[\033[1;32m$config{MAXI_MODES}\033[0m] -> ";
518 chomp($var = <STDIN>);
520 $var = $config{MAXI_MODES};
522 if ($var =~ /^\d+$/) {
523 # We don't care what the number is, set it and be on our way.
524 $config{MAXI_MODES} = $var;
528 print "You must enter a number in this field. Please try again.\n\n";
534 print "What is the maximum length of an ident (username)?\n";
535 print "[\033[1;32m$config{MAX_IDENT}\033[0m] -> ";
536 chomp($var = <STDIN>);
538 $var = $config{MAX_IDENT};
540 if ($var =~ /^\d+$/) {
541 # We don't care what the number is, set it and be on our way.
542 $config{MAX_IDENT} = $var;
546 print "You must enter a number in this field. Please try again.\n\n";
552 print "What is the maximum length of a quit message?\n";
553 print "[\033[1;32m$config{MAX_QUIT}\033[0m] -> ";
554 chomp($var = <STDIN>);
556 $var = $config{MAX_QUIT};
558 if ($var =~ /^\d+$/) {
559 # We don't care what the number is, set it and be on our way.
560 $config{MAX_QUIT} = $var;
564 print "You must enter a number in this field. Please try again.\n\n";
570 print "What is the maximum length of a channel topic?\n";
571 print "[\033[1;32m$config{MAX_TOPIC}\033[0m] -> ";
572 chomp($var = <STDIN>);
574 $var = $config{MAX_TOPIC};
576 if ($var =~ /^\d+$/) {
577 # We don't care what the number is, set it and be on our way.
578 $config{MAX_TOPIC} = $var;
582 print "You must enter a number in this field. Please try again.\n\n";
588 print "What is the maximum length of a kick message?\n";
589 print "[\033[1;32m$config{MAX_KICK}\033[0m] -> ";
590 chomp($var = <STDIN>);
592 $var = $config{MAX_KICK};
594 if ($var =~ /^\d+$/) {
595 # We don't care what the number is, set it and be on our way.
596 $config{MAX_KICK} = $var;
600 print "You must enter a number in this field. Please try again.\n\n";
606 print "What is the maximum length of a GECOS (real name) field?\n";
607 print "[\033[1;32m$config{MAX_GECOS}\033[0m] -> ";
608 chomp($var = <STDIN>);
610 $var = $config{MAX_GECOS};
612 if ($var =~ /^\d+$/) {
613 # We don't care what the number is, set it and be on our way.
614 $config{MAX_GECOS} = $var;
618 print "You must enter a number in this field. Please try again.\n\n";
624 print "What is the maximum length of an away message?\n";
625 print "[\033[1;32m$config{MAX_AWAY}\033[0m] -> ";
626 chomp($var = <STDIN>);
628 $var = $config{MAX_AWAY};
630 if ($var =~ /^\d+$/) {
631 # We don't care what the number is, set it and be on our way.
632 $config{MAX_AWAY} = $var;
636 print "You must enter a number in this field. Please try again.\n\n";
641 print "Enter the Level Of Binary optimisation. This is a number between 0 and 3.
642 The InspIRCd Team will NOT support any bug reports above 0. Also note,
643 the IRCd behaviour will be different depending on this value. Please
644 read the documentation for more information.
646 The higher the number, the more optimised your binary will be. This
647 value will default to 0 if you either don't enter a number, or enter
648 a value outside the range.
650 As always, if you are unsure, just press enter and accept the default.\n\n";
651 print "[\033[1;32m$config{OPTIMITEMP}\033[0m] -> ";
652 chomp($var = <STDIN>);
654 $var = $config{OPTIMITEMP};
658 $config{OPTIMITEMP} = 1;
659 $config{OPTIMISATI} = "-O";
660 } elsif ($var eq "2") {
661 $config{OPTIMITEMP} = 2;
662 $config{OPTIMISATI} = "-O2";
663 } elsif ($var eq "3") {
664 $config{OPTIMITEMP} = 3;
665 $config{OPTIMISATI} = "-O3";
667 $config{OPTIMITEMP} = 0;
668 $config{OPTIMISATI} = "-g";
671 print "\n\033[1;32mPre-build configuration is complete!\033[0m\n\n";
672 print "\033[0mBase install path:\033[1;32m\t\t$config{BASE_DIR}\033[0m\n";
673 print "\033[0mConfig path:\033[1;32m\t\t\t$config{CONFIG_DIR}\033[0m\n";
674 print "\033[0mModule path:\033[1;32m\t\t\t$config{MODULE_DIR}\033[0m\n";
675 print "\033[0mLibrary path:\033[1;32m\t\t\t$config{LIBRARY_DIR}\033[0m\n";
676 print "\033[0mMax connections:\033[1;32m\t\t$config{MAX_CLIENT}\033[0m\n";
677 print "\033[0mMax User Channels:\033[1;32m\t\t$config{MAX_CHANNE}\033[0m\n";
678 print "\033[0mMax Oper Channels:\033[1;32m\t\t$config{MAX_OPERCH}\033[0m\n";
679 print "\033[0mMax nickname length:\033[1;32m\t\t$config{NICK_LENGT}\033[0m\n";
680 print "\033[0mMax channel length:\033[1;32m\t\t$config{CHAN_LENGT}\033[0m\n";
681 print "\033[0mMax mode length:\033[1;32m\t\t$config{MAXI_MODES}\033[0m\n";
682 print "\033[0mMax ident length:\033[1;32m\t\t$config{MAX_IDENT}\033[0m\n";
683 print "\033[0mMax quit length:\033[1;32m\t\t$config{MAX_QUIT}\033[0m\n";
684 print "\033[0mMax topic length:\033[1;32m\t\t$config{MAX_TOPIC}\033[0m\n";
685 print "\033[0mMax kick length:\033[1;32m\t\t$config{MAX_KICK}\033[0m\n";
686 print "\033[0mMax name length:\033[1;32m\t\t$config{MAX_GECOS}\033[0m\n";
687 print "\033[0mMax away length:\033[1;32m\t\t$config{MAX_AWAY}\033[0m\n";
688 print "\033[0mGCC Version Found:\033[1;32m\t\t$config{GCCVER}.x\033[0m\n";
689 print "\033[0mOptimization Flag:\033[1;32m\t\t$config{OPTIMISATI}\033[0m\n";
690 print "\033[0mCompiler program:\033[1;32m\t\t$config{CC}\033[0m\n";
691 print "\033[0mStatic modules:\033[1;32m\t\t\t$config{STATIC_LINK}\033[0m\n";
692 print "\033[0mMultithread DNS:\033[1;32m\t\t$config{THREADED_DNS}\033[0m\n";
693 print "\033[0mIPv6 Support:\033[1;32m\t\t\t$config{IPV6}\033[0m\n";
694 print "\033[0mIPv6 to IPv4 Links:\033[1;32m\t\t$config{SUPPORT_IP6LINKS}\033[0m\n";
695 print "\033[0mGnuTLS Support:\033[1;32m\t\t\t$config{USE_GNUTLS}\033[0m\n";
696 print "\033[0mOpenSSL Support:\033[1;32m\t\t$config{USE_OPENSSL}\033[0m\n\n";
698 if ($config{USE_GNUTLS} eq "y") {
700 open(TMP, "<src/modules/m_ssl_gnutls.cpp") or $failed = 1;
703 print "Symlinking src/modules/m_ssl_gnutls.cpp from extra/\n";
704 chdir("src/modules");
705 system("ln -s extra/m_ssl_gnutls.cpp");
710 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
712 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
715 print "SSL Certificates Not found, Generating.. \n\n
716 *************************************************************
717 * Generating the Private Key may take some time, go grab a *
718 * Coffee. Even better, to generate some more entropy if it *
719 * is taking a while, open another console and type du / a *
720 * few times and get that HD going :) Then answer the *
721 * Questions which follow. If you are unsure, just hit enter *
722 *************************************************************\n\n";
723 system("certtool --generate-privkey --outfile key.pem");
724 system("certtool --generate-self-signed --load-privkey key.pem --outfile cert.pem");
725 print "\nCertificate generation complete, copying to config directory... ";
726 system("mv key.pem $config{CONFIG_DIR}/key.pem");
727 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
730 print "SSL Certificates found, skipping.\n\n"
732 } elsif ($config{USE_OPENSSL} eq "y") {
734 open(TMP, "<src/modules/m_ssl_openssl.cpp") or $failed = 1;
737 print "Symlinking src/modules/m_ssl_openssl.cpp from extra/\n";
738 chdir("src/modules");
739 system("ln -s extra/m_ssl_openssl.cpp");
744 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
746 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
749 print "SSL Certificates Not found, Generating.. \n\n
750 *************************************************************
751 * Generating the certificates may take some time, go grab a *
752 * coffee, or something. *
753 *************************************************************\n\n";
754 system("openssl req -x509 -nodes -newkey rsa:1024 -keyout key.pem -out cert.pem");
755 system("openssl dhparam -out dhparams.pem 1024");
756 print "\nCertificate generation complete, copying to config directory... ";
757 system("mv key.pem $config{CONFIG_DIR}/key.pem");
758 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
759 system("mv dhparams.pem $config{CONFIG_DIR}/dhparams.pem");
762 print "SSL Certificates found, skipping.\n\n"
765 if (($config{USE_GNUTLS} eq "n") && ($config{USE_OPENSSL} eq "n")) {
766 print "Skipping SSL Certificate generation, SSL support is not available.\n\n";
774 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
775 if (($config{USE_GNUTLS} eq "y") || ($config{USE_OPENSSL} eq "y")) {
776 print "Please remember that to enable \033[1;32mSSL support\033[0m you must\n";
777 print "load the required modules in your config. This configure process\n";
778 print "has just prepared these modules to be compiled for you, and has not\n";
779 print "configured them to be compiled into the core of the ircd.\n";
781 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
782 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
783 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";
786 if ($config{GCCVER} < "3") {
788 \033[1;32mWARNING!\033[0m You are attempting to compile InspIRCd on GCC 2.x!
789 GCC 2.x series compilers only had partial (read as broken) C++ support, and
790 your compile will most likely fail horribly! If you have any problems, do NOT
791 report them to the bugtracker or forums without first upgrading your compiler
792 to a newer 3.x or 4.x (or whatever is available currently) version.
796 ################################################################################
798 ################################################################################
800 # Retrieves the .config.cache file, and loads values into the main config hash.
801 open(CACHE, ".config.cache") or return undef;
804 # Ignore Blank lines, and comments..
807 my ($key, $value) = split("=", $_);
808 $value =~ /^\"(.*)\"$/;
809 # Do something with data here!
817 # Dump the contents of %config
818 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
819 open(FILEHANDLE, ">.config.cache");
820 foreach $key (keys %config) {
821 print FILEHANDLE "$key=\"$config{$key}\"\n";
827 my ($desc, $hash_key) = @_;
830 print "In what directory $desc?\n";
831 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
832 chomp($var = <STDIN>);
834 $var = $config{$hash_key};
836 if ($var =~ /^\~\/(.+)$/) {
837 # Convert it to a full path..
838 $var = resolve_directory($ENV{HOME} . "/" . $1);
840 elsif ((($config{OSNAME} == "MINGW32") and ($var !~ /^[A-Z]{1}:\\.*/)) and (substr($var,0,1) ne "/"))
842 # Assume relative Path was given.. fill in the rest.
843 $var = $this . "/$var";
846 $var = resolve_directory($var);
848 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
849 chomp($tmp = <STDIN>);
850 if (($tmp eq "") || ($tmp =~ /^y/i)) {
851 # Attempt to Create the Dir..
853 print("mkdir -p \"$var\" >> /dev/null 2>&1");
854 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
856 print "Unable to create directory. ($var)\n\n";
861 # They said they don't want to create, and we can't install there.
867 # Target exists, but is not a directory.
868 print "File $var exists, but is not a directory.\n\n";
872 # Either Dir Exists, or was created fine.
873 $config{$hash_key} = $var;
880 if ($config{OSNAME} =~ /BSD$/) {
881 $config{LDLIBS} = "-Ldl -lstdc++";
882 $config{FLAGS} = "-fPIC -frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
883 $config{MAKEPROG} = "gmake";
884 if ($config{OSNAME} eq "OpenBSD") {
885 chomp($foo = `eg++ -dumpversion | cut -c 1`);
886 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
887 # if theyre not running this, configure lets the build continue but they probably wont manage to
888 # compile as this standard version is 2.95.3!
890 $config{CC} = "eg++";
891 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change the compiler path
895 $config{LDLIBS} = "-ldl -lstdc++";
896 $config{FLAGS} = "-fPIC -frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
897 $config{MAKEPROG} = "make";
898 if ($config{OSNAME} =~ /CYGWIN/) {
899 $config{FLAGS} = "-frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
900 $config{LDLIBS} = "";
901 $config{MAKEPROG} = "/usr/bin/make";
902 $config{MAKEORDER} = "ircd mods";
903 } elsif ($config{OSNAME} eq "CYG-STATIC") {
904 $config{FLAGS} = "-frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
905 $config{LDLIBS} = "";
906 $config{MAKEPROG} = "/usr/bin/make";
907 $config{MAKEORDER} = "mods ircd";
908 $config{STATICLIBS} = "modules/mods.a";
909 $config{STATIC_LINK} = "yes";
913 if ($config{OSNAME} =~ /SunOS/)
915 # solaris/sunos needs these
916 # socket = bsd sockets api
918 # rt = POSIX realtime extensions
919 # resolv = inet_aton only (why isnt this in nsl?!)
920 $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv";
923 if($config{OSNAME} eq "MINGW32")
925 # All code is position-independent on windows
926 $config{FLAGS} =~ s/-fPIC //;
944 print "Detecting modules ";
945 opendir(DIRHANDLE, "src/modules");
946 foreach $name (sort readdir(DIRHANDLE)) {
947 if ($name =~ /^m_(.+)\.cpp$/)
950 if ($mod !~ /_static$/) {
951 $modlist[$i++] = $mod;
957 print "\nOk, $i modules.\n";
964 my $data = `svn info`;
971 $data =~ /Revision: (\d+)/;
973 if (!defined($rev)) {
980 my($writeheader) = @_;
981 # First File.. inspircd_config.h
982 chomp(my $incos = `uname -n -s -r`);
983 chomp(my $version = `sh ./src/version.sh`);
984 chomp(my $revision = getrevision());
985 $version = "$version(r$revision)";
986 chomp(my $revision2 = getrevision());
987 if ($writeheader == 1)
989 print "Writing \033[1;32minspircd_config.h\033[0m\n";
990 open(FILEHANDLE, ">include/inspircd_config.h");
991 my $NL = $config{NICK_LENGT}+1;
992 my $CL = $config{CHAN_LENGT}+1;
993 print FILEHANDLE <<EOF;
994 /* Auto generated by configure, do not modify! */
995 #ifndef __CONFIGURATION_AUTO__
996 #define __CONFIGURATION_AUTO__
998 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
999 #define MOD_PATH "$config{MODULE_DIR}"
1000 #define VERSION "$version"
1001 #define REVISION "$revision2"
1002 #define MAXCLIENTS $config{MAX_CLIENT}
1003 #define MAX_DESCRIPTORS $config{MAX_DESCRIPTORS}
1006 #define MAXCHANS $config{MAX_CHANNE}
1007 #define OPERMAXCHANS $config{MAX_OPERCH}
1008 #define MAXMODES $config{MAXI_MODES}
1009 #define IDENTMAX $config{MAX_IDENT}
1010 #define MAXQUIT $config{MAX_QUIT}
1011 #define MAXTOPIC $config{MAX_TOPIC}
1012 #define MAXKICK $config{MAX_KICK}
1013 #define MAXGECOS $config{MAX_GECOS}
1014 #define MAXAWAY $config{MAX_AWAY}
1015 #define OPTIMISATION $config{OPTIMITEMP}
1016 #define SYSTEM "$incos"
1019 if ($config{OSNAME} =~ /SunOS/) {
1020 print FILEHANDLE "#define IS_SOLARIS\n";
1022 if ($config{OSNAME} =~ /CYGWIN/) {
1023 print FILEHANDLE "#define IS_CYGWIN\n";
1024 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
1026 if ($config{OSNAME} eq "MINGW32") {
1027 print FILEHANDLE "#define IS_MINGW\n";
1029 if ($config{OSNAME} eq "CYG-STATIC") {
1030 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
1032 if ($config{HAS_EXECINFO} eq "1") {
1033 print FILEHANDLE "#define HAS_EXECINFO\n";
1035 if ($config{STATIC_LINK} eq "yes") {
1036 print FILEHANDLE "#define STATIC_LINK\n";
1038 if ($config{GCCVER} >= 3) {
1039 print FILEHANDLE "#define GCC3\n";
1041 if ($config{HAS_STRLCPY} eq "true") {
1042 print FILEHANDLE "#define HAS_STRLCPY\n";
1044 if ($config{HAS_STDINT} eq "true") {
1045 print FILEHANDLE "#define HAS_STDINT\n";
1047 if ($config{THREADED_DNS} =~ /y/i) {
1048 print FILEHANDLE "#define THREADED_DNS\n";
1050 if ($config{IPV6} =~ /y/i) {
1051 print FILEHANDLE "#define IPV6\n";
1053 if ($config{SUPPORT_IP6LINKS} =~ /y/i) {
1054 print FILEHANDLE "#define SUPPORT_IP6LINKS\n";
1057 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1058 print FILEHANDLE "#define USE_KQUEUE\n";
1059 $se = "socketengine_kqueue";
1062 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1063 print FILEHANDLE "#define USE_EPOLL\n";
1064 $se = "socketengine_epoll";
1067 # user didn't choose either epoll or select for their OS.
1068 # default them to USE_SELECT (ewwy puke puke)
1070 print FILEHANDLE "#define USE_SELECT\n";
1071 $se = "socketengine_select";
1073 print FILEHANDLE "\n#endif\n";
1079 open(FILEHANDLE, ">include/inspircd_se_config.h");
1080 print FILEHANDLE <<EOF;
1081 /* Auto generated by configure, do not modify or commit to svn! */
1082 #ifndef __CONFIGURATION_SOCKETENGINE__
1083 #define __CONFIGURATION_SOCKETENGINE__
1093 # Create a Modules List..
1095 foreach $i (@modlist)
1097 if ($config{STATIC_LINK} eq "yes") {
1098 $modules .= "m_".$i.".o ";
1101 $modules .= "m_".$i.".so ";
1104 chomp($modules); # Remove Redundant whitespace..
1107 # Write all .in files.
1110 my $exe = "inspircd";
1112 if ($config{OSNAME} =~ /CYGWIN/) {
1113 $exe = "inspircd.exe";
1116 opendir(DIRHANDLE, $this);
1117 if ($config{THREADED_DNS} =~ /y/i) {
1118 $config{LDLIBS} = $config{LDLIBS} . " -pthread";
1120 foreach $name (sort readdir(DIRHANDLE)) {
1121 if ($name =~ /^\.(.+)\.inc$/) {
1123 # All .name.inc files need parsing!
1125 open(FILEHANDLE, ".$file.inc");
1126 while (<FILEHANDLE>) {
1131 $tmp =~ s/\@CC\@/$config{CC}/;
1132 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
1133 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
1134 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
1135 $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/;
1136 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
1137 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
1138 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
1139 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
1140 $tmp =~ s/\@MODULES\@/$modules/;
1141 $tmp =~ s/\@EXECUTABLE\@/$exe/;
1142 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
1143 $tmp =~ s/\@STATICLIBS\@/$config{STATICLIBS}/;
1145 print "Writing \033[1;32m$file\033[0m\n";
1146 open(FILEHANDLE, ">$file");
1147 print FILEHANDLE $tmp;
1150 closedir(DIRHANDLE);
1152 # Make inspircd executable!
1153 chmod 0744, 'inspircd';
1155 if ($config{STATIC_LINK} eq "yes") {
1156 print "Writing static-build \033[1;32msrc/Makefile\033[0m\n";
1157 write_static_makefile();
1158 write_static_modules_makefile();
1159 } elsif ($config{OSNAME} =~ /CYGWIN/) {
1160 print "Writing cygwin-build \033[1;32msrc/Makefile\033[0m\n";
1161 write_static_makefile();
1162 write_dynamic_modules_makefile();
1164 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
1165 write_dynamic_makefile();
1166 write_dynamic_modules_makefile();
1170 sub getcompilerflags {
1174 if ($_ =~ /^\/\* \$CompileFlags: (.+) \*\/$/) {
1183 sub getlinkerflags {
1187 if ($_ =~ /^\/\* \$LinkerFlags: (.+) \*\/$/) {
1197 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";
1198 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";
1199 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";
1200 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";
1201 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";
1202 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";
1203 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";
1204 print "\033[0m\033[0m....::..::::..:::......:::..:::::::::....::..:::::..:::......:::........:::\n\n";
1207 sub resolve_directory {
1209 return File::Spec->rel2abs($_[0]);
1213 my ($flag,$prompt) = @_;
1214 print "$prompt [\033[1;32m$config{$flag}\033[0m] -> ";
1215 chomp($tmp = <STDIN>);
1216 if ($tmp eq "") { $tmp = $config{$flag} }
1218 if (($tmp eq "") || ($tmp =~ /^y/i)) {
1219 $config{$flag} = "y";
1221 $config{$flag} = "n";
1226 sub write_static_modules_makefile {
1227 # Modules Makefile..
1228 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1229 open(FILEHANDLE, ">src/modules/Makefile");
1232 # Module Makefile Header
1234 print FILEHANDLE <<EOF;
1235 # (C) ChatSpike development team
1236 # Makefile by <Craig\@ChatSpike.net>
1237 # Many Thanks to Andrew Church <achurch\@achurch.org>
1238 # for assisting with making this work right.
1240 # Automatically Generated by ./configure to add a modules
1241 # please run ./configure --update
1247 # End Module Makefile Header
1250 # Create a Modules List..
1255 open(MODLIST,">include/modlist.h");
1258 # Include File Header
1260 print MODLIST <<HEADER;
1261 // Generated automatically by configure. DO NOT EDIT!
1263 #ifndef __SYMBOLS__H_CONFIGURED__
1264 #define __SYMBOLS__H_CONFIGURED__
1268 # End Include File Header
1271 # Place Module List into Include
1272 foreach $i (@modlist) {
1273 if ($i !~ /_static$/) {
1274 print MODLIST "extern \"C\" void * $i\_init (void);\n";
1277 print MODLIST "\nstruct {const char *name; initfunc *value; } modsyms[] = {\n";
1282 foreach $i (@modlist)
1284 if ($i !~ /_static$/) {
1285 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1286 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1289 # Write Entry to the Makefile
1291 print FILEHANDLE <<EOCHEESE;
1292 m_$i.o: .m_$i\_static.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h
1293 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c .m_$i\_static.cpp
1294 mv .m_$i\_static.o ../m_$i.o
1298 # End Write Entry to the MakeFile
1300 print "Configuring module [\033[1;32mm_$i.so\033[0m] for static linking... ";
1301 open(MODULE,"<src/modules/m_".$i.".cpp") or die("Could not open m_".$i.".cpp");
1302 open(MUNGED,">src/modules/.m_".$i."_static.cpp") or die("Could not create .m_".$i."_static.cpp");
1303 while (chomp($a = <MODULE>)) {
1304 $a =~ s/init_module/$i\_init/g;
1305 print MUNGED "$a\n";
1309 print MODLIST <<EOENT;
1310 {"m_$i.so",\&$i\_init},
1315 print MODLIST "{0}};\n\n#endif\n";
1319 sub write_dynamic_modules_makefile {
1320 # Modules Makefile..
1321 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1322 open(FILEHANDLE, ">src/modules/Makefile");
1325 if ($config{OSNAME} =~ /CYGWIN/) {
1326 $extra = "../inspircd.dll.a";
1330 # Module Makefile Header
1332 print FILEHANDLE <<EOF;
1333 # (C) ChatSpike development team
1334 # Makefile by <Craig\@ChatSpike.net>
1335 # Many Thanks to Andrew Church <achurch\@achurch.org>
1336 # for assisting with making this work right.
1338 # Automatically Generated by ./configure to add a modules
1339 # please run ./configure -update or ./configure -modupdate
1345 # End Module Makefile Header
1348 # Create a Modules List..
1354 foreach $i (@modlist) {
1356 # Write Entry to the MakeFile
1358 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1359 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1360 print FILEHANDLE <<EOCHEESE;
1361 m_$i.so: m_$i.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h ../../include/inspircd_config.h ../../include/inspircd.h ../../include/configreader.h
1362 \$(CC) -pipe -I../../include \$(FLAGS) $cmflags -export-dynamic -c m_$i.cpp
1363 \$(CC) \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o $extra
1366 $crud = $crud . " \@install -v -m 0700 m_$i.so \$(MODPATH)\n";
1368 # End Write Entry to the MakeFile
1371 print FILEHANDLE "modinst:\n \@echo \"Installing modules...\"\n" . $crud;
1375 sub write_static_makefile {
1376 open(FH,">src/Makefile") or die("Could not write src/Makefile!");
1379 opendir(DIRHANDLE, "src");
1380 foreach $name (sort readdir(DIRHANDLE)) {
1381 if ($name =~ /^cmd_(.+)\.cpp$/) {
1382 $cmdlist[$i++] = $1;
1385 closedir(DIRHANDLE);
1388 foreach my $cmd (@cmdlist) {
1389 $cmdobjs = $cmdobjs . "cmd_$cmd.o ";
1390 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1395 # (C) ChatSpike development team
1396 # Makefile by <Craig\@ChatSpike.net>
1397 # Makefile version 2 (statically linked core) by <brain\@inspircd.org>
1400 CC = im a cheezeball
1402 CXXFLAGS = -I../include \${FLAGS}
1403 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1404 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1408 $se = "socketengine_select";
1409 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1410 $se = "socketengine_kqueue";
1412 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1413 $se = "socketengine_epoll";
1417 # This next section is for cygwin dynamic module builds.
1418 # Basically, what we do, is build the inspircd core as a library
1419 # then the main executable uses that. the library is capable of
1420 # loading / unloading the modules dynamically :)
1421 # Massive thanks to the guys on #cygwin @ irc.freenode.net for helping
1425 if ($config{OSNAME} =~ /CYGWIN/) {
1427 all: timer.o aes.o command_parse.o cull_list.o userprocess.o socketengine.o socket.o hashcomp.o channels.o mode.o xline.o inspstring.o dns.o base.o configreader.o inspsocket.o message.o $cmdobjs commands.o dynamic.o users.o modules.o wildcard.o helperfuncs.o snomasks.o inspircd.exe
1429 inspircd.exe: inspircd.dll.a
1432 inspircd.dll inspircd.dll.a: inspircd.o channels.o mode.o xline.o inspstring.o dns.o base.o configreader.o inspsocket.o message.o $cmdobjs commands.o dynamic.o users.o modules.o wildcard.o helperfuncs.o hashcomp.o socket.o socketengine.o userprocess.o cull_list.o command_parse.o aes.o timer.o snomasks.o
1433 \$(CC) -shared -Wl,--out-implib=inspircd.dll.a -o inspircd.dll \$^
1437 all: timer.o aes.o command_parse.o cull_list.o userprocess.o socketengine.o socket.o hashcomp.o channels.o mode.o xline.o inspstring.o dns.o base.o configreader.o inspsocket.o message.o $cmdobjs commands.o dynamic.o users.o modules.o wildcard.o helperfuncs.o snomasks.o \$(MODULES) inspircd.exe
1439 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
1440 \$(CC) -I../include \$(FLAGS) inspircd.cpp -o inspircd.exe \$(LDLIBS) channels.o mode.o xline.o inspstring.o dns.o base.o inspsocket.o configreader.o message.o $cmdobjs commands.o dynamic.o users.o modules.o wildcard.o helperfuncs.o hashcomp.o socket.o socketengine.o userprocess.o cull_list.o command_parse.o aes.o timer.o snomasks.o modes/modeclasses.a \$(MODULES)
1446 cull_list.o: cull_list.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/users.h ../include/channels.h
1447 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1449 snomasks.o: snomasks.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/channels.h
1450 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1452 command_parse.o: command_parse.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1453 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1455 userprocess.o: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1456 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1458 socketengine.o: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1459 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1461 hashcomp.o: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1462 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1464 helperfuncs.o: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1465 \$(CC) -pipe -I/usr/local/include -L/usr/local/lib -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1467 channels.o: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1468 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1470 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 \$(RELCPPFILES)
1471 \${MAKE} -C "modes" DIRNAME="src/modes" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1472 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1474 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
1475 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1477 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
1478 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1480 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
1481 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1483 base.o: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1484 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1486 configreader.o: configreader.cpp ../include/base.h ../include/configreader.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1487 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1489 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
1490 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
1492 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 $srcobjs
1493 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp $cmdobjs
1495 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
1496 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1498 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
1499 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1501 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
1502 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1504 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
1505 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1507 socket.o: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1508 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1510 inspsocket.o: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1511 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1513 aes.o: aes.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1514 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c aes.cpp
1516 timer.o: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1517 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1520 foreach my $cmd (@cmdlist) {
1522 cmd_$cmd.o: cmd_$cmd.cpp ../include/base.h ../include/modules.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/commands/cmd_$cmd.h
1523 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1529 sub write_dynamic_makefile {
1533 opendir(DIRHANDLE, "src");
1534 foreach $name (sort readdir(DIRHANDLE)) {
1535 if ($name =~ /^cmd_(.+)\.cpp$/) {
1536 $cmdlist[$i++] = $1;
1539 closedir(DIRHANDLE);
1543 foreach my $cmd (@cmdlist) {
1544 $cmdobjs = $cmdobjs . "cmd_$cmd.o ";
1545 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1548 if (($config{OSNAME} !~ /Linux/i) && ($config{HAS_EXECINFO} eq "1")) {
1549 $extra = "-L/usr/local/lib -lexecinfo";
1554 $se = "socketengine_select";
1555 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1556 $se = "socketengine_kqueue";
1558 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1559 $se = "socketengine_epoll";
1562 open(FH,">src/Makefile") or die("Could not write src/Makefile");
1566 # (C) ChatSpike development team
1567 # Makefile by <Craig\@ChatSpike.net>
1568 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
1571 CC = im a cheezeball
1573 CXXFLAGS = -I../include \${FLAGS}
1574 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1575 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1577 all: libIRCDtimer.so libIRCDaes.so libIRCDcull_list.so libIRCDuserprocess.so libIRCDsocketengine.so libIRCDsocket.so libIRCDhash.so libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDconfigreader.so libIRCDinspsocket.so libIRCDmessage.so $cmdobjs libIRCDcommands.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDcommand_parse.so libIRCDsnomasks.so inspircd
1579 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 libIRCDtimer.so libIRCDaes.so libIRCDcull_list.so libIRCDuserprocess.so libIRCDsocketengine.so libIRCDsocket.so libIRCDhash.so libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDconfigreader.so libIRCDinspsocket.so libIRCDmessage.so $cmdobjs libIRCDsnomasks.so libIRCDcommands.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDcommand_parse.so
1580 \$(CC) -I../include $extra -Wl,--rpath -Wl,/usr/local/lib -Wl,--rpath -Wl,$config{LIBRARY_DIR} \$(FLAGS) -rdynamic -L. inspircd.cpp -o inspircd \$(LDLIBS) libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDconfigreader.so libIRCDinspsocket.so libIRCDmessage.so libIRCDcommands.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDhash.so libIRCDsocket.so libIRCDsocketengine.so libIRCDuserprocess.so libIRCDcull_list.so libIRCDcommand_parse.so libIRCDaes.so libIRCDtimer.so libIRCDsnomasks.so
1582 libIRCDsocketengine.so: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1583 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1584 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocketengine.so socketengine.o $se.o
1586 libIRCDsnomasks.so: snomasks.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/channels.h
1587 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1588 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsnomasks.so snomasks.o
1590 libIRCDcommand_parse.so: command_parse.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1591 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1592 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommand_parse.so command_parse.o
1594 libIRCDcull_list.so: cull_list.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/users.h ../include/channels.h
1595 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1596 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcull_list.so cull_list.o
1598 libIRCDuserprocess.so: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1599 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1600 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDuserprocess.so userprocess.o
1602 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1603 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1604 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhash.so hashcomp.o
1606 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1607 \$(CC) -pipe -I/usr/local/include -L/usr/local/lib -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1608 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhelper.so helperfuncs.o
1610 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1611 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1612 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDchannels.so channels.o
1614 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 \$(RELCPPFILES)
1615 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1616 \${MAKE} -C "modes" DIRNAME="src/modes" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1617 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmode.so mode.o modes/modeclasses.a
1619 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
1620 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1621 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDxline.so xline.o
1623 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
1624 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1625 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDstring.so inspstring.o
1627 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
1628 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1629 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDasyncdns.so dns.o
1631 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1632 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1633 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDbase.so base.o
1635 libIRCDconfigreader.so: configreader.cpp ../include/base.h ../include/configreader.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1636 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1637 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDconfigreader.so configreader.o
1639 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
1640 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
1641 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmessage.so message.o
1643 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 $srcobjs
1644 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1645 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommands.so commands.o $cmdobjs
1647 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
1648 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1649 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDdynamic.so dynamic.o
1651 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
1652 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1653 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDusers.so users.o
1655 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
1656 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1657 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmodules.so modules.o
1659 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
1660 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1661 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDwildcard.so wildcard.o
1663 libIRCDsocket.so: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1664 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1665 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocket.so socket.o
1667 libIRCDinspsocket.so: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1668 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1669 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDinspsocket.so inspsocket.o
1671 libIRCDaes.so: aes.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1672 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c aes.cpp
1673 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDaes.so aes.o
1675 libIRCDtimer.so: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1676 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1677 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDtimer.so timer.o
1680 foreach my $cmd (@cmdlist) {
1682 cmd_$cmd.o: cmd_$cmd.cpp ../include/base.h ../include/modules.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/commands/cmd_$cmd.h
1683 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp