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/) {
76 $config{OSNAME} = "CYG-STATIC";
79 if ((!$config{OSNAME}) || ($config{OSNAME} eq "")) {
80 chomp($config{OSNAME} = `/usr/bin/uname`);
81 if ((!$config{OSNAME}) || ($config{OSNAME} eq "")){
82 $config{OSNAME} = "Unknown";
86 if (!$config{MAX_CLIENT_T}) {
87 $config{MAX_CLIENT_T} = 1024; # Set a reasonable 'Default'
88 $fd_scan_fail = "true"; # Used Later
91 # Get and Set some important vars..
94 my $arg = $ARGV[0]; # Do Some Argument Checks..
95 if ($arg eq "-clean") {
96 system("rm -rf .config.cache");
97 } # Remove the config.cache file.
99 if ($arg eq "-update") {
100 # Does the cache file exist?
102 # No, No it doesn't.. *BASH*
103 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
106 # We've Loaded the cache file and all our variables..
107 print "Updating Files..\n";
109 $has_epoll = $config{HAS_EPOLL};
110 $has_kqueue = $config{HAS_KQUEUE};
117 if ($arg eq "-modupdate") {
118 # Does the cache file exist?
120 # No, No it doesn't.. *BASH*
121 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
124 # We've Loaded the cache file and all our variables..
125 print "Updating Files..\n";
127 $has_epoll = $config{HAS_EPOLL};
128 $has_kqueue = $config{HAS_KQUEUE};
137 if ($arg eq "-svnupdate") {
139 open(FH,"<.svn/entries") or $fail = 1;
141 print "This is not an SVN copy of InspIRCd.\n";
144 system("svn update");
145 system("perl configure -update");
146 if ($ARGV[1] eq "rebuild") {
147 system("make install");
152 print "Checking for cache from previous configure...\n";
154 print "Checking operating system version...\n";
157 if (!$config{MAX_CLIENT}) {
158 # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this
159 # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go
160 # higher than the found value" :))
161 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
164 printf "Checking if stdint.h exists... ";
165 $config{HAS_STDINT} = "true";
167 open(STDINT, "</usr/include/stdint.h") or $config{HAS_STDINT} = "false";
168 if ($config{HAS_STDINT} eq "true") {
171 print "yes\n" if $config{HAS_STDINT} eq "true";
172 print "no\n" if $config{HAS_STDINT} eq "false";
175 printf "Checking if strlcpy exists... ";
176 # Perform the strlcpy() test..
177 $config{HAS_STRLCPY} = "false";
179 open(STRLCPY, "</usr/include/string.h") or $fail = 1;
181 while (chomp($line = <STRLCPY>)) {
182 # try and find the delcaration of:
183 # size_t strlcpy(...)
184 if ($line =~ /size_t(\0x9|\s)+strlcpy/) {
185 $config{HAS_STRLCPY} = "true";
190 print "yes\n" if $config{HAS_STRLCPY} eq "true";
191 print "no\n" if $config{HAS_STRLCPY} eq "false";
193 printf "Checking if execinfo.h exists... ";
194 $config{HAS_EXECINFO} = "0";
196 open(EXECINFO, "</usr/include/execinfo.h") or $fail = 1;
199 open(EXECINFO, "</usr/local/include/execinfo.h") or $fail = 1;
201 printf "/usr/local/include/execinfo.h\n";
202 $config{HAS_EXECINFO} = "1";
206 printf "Not found!\n";
210 printf "/usr/include/execinfo.h\n";
211 $config{HAS_EXECINFO} = "1";
215 printf "Checking if kqueue exists... ";
218 open(KQUEUE, "</usr/include/sys/event.h") or $fail = 1;
220 while (chomp($line = <KQUEUE>)) {
221 # try and find the delcaration of:
223 if ($line =~ /int(\0x9|\s)+kqueue/) {
229 print "yes\n" if $has_kqueue == 1;
230 print "no\n" if $has_kqueue == 0;
232 printf "Checking if epoll exists... ";
235 open(EPOLL, "</usr/include/sys/epoll.h") or $fail = 1;
241 my $kernel = `uname -r`;
243 if (($kernel =~ /2\.0/) || ($kernel =~ /2\.2/) || ($kernel =~ /2\.4/)) {
247 print "yes\n" if $has_epoll == 1;
248 print "no\n" if $has_epoll == 0;
250 if (($config{OSNAME} =~ /CYGWIN/) || ($config{OSNAME} eq "CYG-STATIC")) {
251 $config{HAS_STRLCPY} = "true";
254 $config{HAS_EPOLL} = $has_epoll;
255 $config{HAS_KQUEUE} = $has_kqueue;
257 printf "Checking for libgnutls... ";
258 if (($config{HAS_GNUTLS}) && (($config{HAS_GNUTLS} >= 1.2) || ($config{HAS_GNUTLS} eq "y"))) {
260 $config{HAS_GNUTLS} = "y";
263 $config{HAS_GNUTLS} = "n";
266 printf "Checking for openssl... ";
267 if (($config{HAS_OPENSSL}) && (($config{HAS_OPENSSL} >= 0.8) || ($config{HAS_OPENSSL} eq "y"))) {
269 $config{HAS_OPENSSL} = "y";
272 $config{HAS_OPENSSL} = "n";
275 ################################################################################
276 # BEGIN INTERACTIVE PART #
277 ################################################################################
281 # Display Splash Logo..
283 chomp($wholeos = `uname -mnr`);
285 my $rev = getrevision();
286 # Display Introduction Message..
288 Welcome to the InspIRCd Configuration program!
290 *** If you are unsure of any of these values, leave it blank for ***
291 *** standard settings that will work, and your server will run ***
292 *** using them. If you are running this server as part of a ***
293 *** larger network, you must consult with your network admins ***
294 *** for the proper values to use, or server links will be unstable! ***
296 Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter
297 a new value. Please note: You will \033[1mHAVE\033[0m to read the docs
298 dir, otherwise you won't have a config file!
300 Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos), fdmax: $config{MAX_CLIENT_T}
301 Your InspIRCd revision ID is \033[1;32mr$rev\033[0m";
303 print " (Non-SVN build)";
307 $config{CHANGE_COMPILER} = "n";
308 print "I have detected the following compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
310 while (($config{GCCVER} < 3) || ($config{GCCVER} eq "")) {
311 print "\033[1;32mIMPORTANT!\033[0m A GCC 2.x compiler has been detected, and
312 should NOT be used. You should probably specify a newer compiler.\n\n";
313 yesno(CHANGE_COMPILER,"Do you want to change the compiler?");
314 if ($config{CHANGE_COMPILER} =~ /y/i) {
315 print "What command do you want to use to invoke your compiler?\n";
316 print "[\033[1;32m$config{CC}\033[0m] -> ";
317 chomp($config{CC} = <STDIN>);
318 if ($config{CC} eq "") {
321 chomp($foo = `$config{CC} -dumpversion | cut -c 1`);
323 chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change compilers
324 print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
325 if ($config{GCCVER} < 3) {
326 print "\033[1;32mGCC 2.x WILL NOT WORK!\033[0m. Let's try that again, shall we?\n";
330 print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n";
337 # Directory Settings..
338 my $tmpbase = $config{BASE_DIR};
339 dir_check("do you wish to install the InspIRCd base", "BASE_DIR");
340 if ($tmpbase ne $config{BASE_DIR}) {
341 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Directory
342 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
343 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
344 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
347 dir_check("are the configuration files", "CONFIG_DIR");
348 dir_check("are the modules to be compiled to", "MODULE_DIR");
349 dir_check("is the IRCd binary to be placed", "BINARY_DIR");
350 dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
353 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?");
357 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?");
360 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y"));
361 if (!$chose_hiperf) {
362 print "No high-performance socket engines are available, or you chose\n";
363 print "not to enable one. Defaulting to select() engine.\n\n";
366 yesno(IPV6,"Would you like to build InspIRCd with IPv6 support?");
369 if ($config{IPV6} eq "y") {
370 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";
371 $config{SUPPORT_IP6LINKS} = "y";
373 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.");
377 if (($config{HAS_GNUTLS} eq "y") && ($config{HAS_OPENSSL} eq "y")) {
378 print "I have detected both GnuTLS and OpenSSL on your system.\n";
379 print "I will default to GnuTLS. If you wish to use OpenSSL\n";
380 print "instead, you should enable the OpenSSL module yourself\n";
381 print "by copying it from src/modules/extra to src/modules.\n\n";
384 if ($config{HAS_GNUTLS} eq "y") {
385 yesno(USE_GNUTLS, "Would you like to enable SSL Support?");
386 if ($config{USE_GNUTLS} eq "y") {
387 print "\nUsing GnuTLS SSL module.\n";
389 } elsif ($config{HAS_OPENSSL} eq "y") {
390 yesno(USE_OPENSSL, "Would you like to enable SSL Support?");
391 if ($config{USE_OPENSSL} eq "y") {
392 print "\nUsing OpenSSL SSL module.\nYou will get better performance if you move to GnuTLS in the future.\n";
396 print "\nThe following questions will ask you for various figures relating\n";
397 print "To your IRCd install. Please note that these should usually be left\n";
398 print "as defaults unless you have a real reason to change them. If they\n";
399 print "changed, then the values must be identical on all servers on your\n";
400 print "network, or malfunctions and/or crashes may occur, with the exception\n";
401 print "of the 'maximum number of clients' setting which may be different on\n";
402 print "different servers on the network.\n\n";
404 # File Descriptor Settings..
407 print "Maximum number of clients at any one time ($config{MAX_CLIENT_T})\n";
408 print "[\033[1;32m$config{MAX_CLIENT}\033[0m] -> ";
409 chomp($var = <STDIN>);
411 $var = $config{MAX_CLIENT};
413 if ($var =~ /^\d+$/) {
414 if (($var > $config{MAX_CLIENT_T}) && ($fd_scan_failed ne true)) {
415 # Client has entered a larger number than the 'discovered' value
417 print "WARNING: Our scans have indicated that you are attempting
418 to use more sockets than there are avaliable. Are you sure
419 you wish to do this? It may cause the IRCd to malfunction [y/n]
420 [\033[1;32mn\033[0m] -> $c";
421 chomp($tmp = <STDIN>);
423 print "Please enter the correct value.\n\n";
428 print "You must enter a number in this field. Please try again.\n\n";
431 # If we get here, we should be good to go.
432 $config{MAX_CLIENT} = $var;
439 print "What is the maximum length of nicknames?\n";
440 print "[\033[1;32m$config{NICK_LENGT}\033[0m] -> ";
441 chomp($var = <STDIN>);
443 $var = $config{NICK_LENGT};
445 if ($var =~ /^\d+$/) {
446 # We don't care what the number is, set it and be on our way.
447 $config{NICK_LENGT} = $var;
451 print "You must enter a number in this field. Please try again.\n\n";
457 print "What is the maximum length of channel names?\n";
458 print "[\033[1;32m$config{CHAN_LENGT}\033[0m] -> ";
459 chomp($var = <STDIN>);
461 $var = $config{CHAN_LENGT};
463 if ($var =~ /^\d+$/) {
464 # We don't care what the number is, set it and be on our way.
465 $config{CHAN_LENGT} = $var;
469 print "You must enter a number in this field. Please try again.\n\n";
475 print "What is the maximum number of channels a normal user may join at any one time?\n";
476 print "[\033[1;32m$config{MAX_CHANNE}\033[0m] -> ";
477 chomp($var = <STDIN>);
479 $var = $config{MAX_CHANNE};
481 if ($var =~ /^\d+$/) {
482 # We don't care what the number is, set it and be on our way.
483 $config{MAX_CHANNE} = $var;
487 print "You must enter a number in this field. Please try again.\n\n";
493 print "What is the maximum number of channels an oper may join at any one time?\n";
494 print "[\033[1;32m$config{MAX_OPERCH}\033[0m] -> ";
495 chomp($var = <STDIN>);
497 $var = $config{MAX_OPERCH};
499 if ($var =~ /^\d+$/) {
500 # We don't care what the number is, set it and be on our way.
501 $config{MAX_OPERCH} = $var;
509 print "What is the maximum number of mode changes in one line?\n";
510 print "[\033[1;32m$config{MAXI_MODES}\033[0m] -> ";
511 chomp($var = <STDIN>);
513 $var = $config{MAXI_MODES};
515 if ($var =~ /^\d+$/) {
516 # We don't care what the number is, set it and be on our way.
517 $config{MAXI_MODES} = $var;
521 print "You must enter a number in this field. Please try again.\n\n";
527 print "What is the maximum length of an ident (username)?\n";
528 print "[\033[1;32m$config{MAX_IDENT}\033[0m] -> ";
529 chomp($var = <STDIN>);
531 $var = $config{MAX_IDENT};
533 if ($var =~ /^\d+$/) {
534 # We don't care what the number is, set it and be on our way.
535 $config{MAX_IDENT} = $var;
539 print "You must enter a number in this field. Please try again.\n\n";
545 print "What is the maximum length of a quit message?\n";
546 print "[\033[1;32m$config{MAX_QUIT}\033[0m] -> ";
547 chomp($var = <STDIN>);
549 $var = $config{MAX_QUIT};
551 if ($var =~ /^\d+$/) {
552 # We don't care what the number is, set it and be on our way.
553 $config{MAX_QUIT} = $var;
557 print "You must enter a number in this field. Please try again.\n\n";
563 print "What is the maximum length of a channel topic?\n";
564 print "[\033[1;32m$config{MAX_TOPIC}\033[0m] -> ";
565 chomp($var = <STDIN>);
567 $var = $config{MAX_TOPIC};
569 if ($var =~ /^\d+$/) {
570 # We don't care what the number is, set it and be on our way.
571 $config{MAX_TOPIC} = $var;
575 print "You must enter a number in this field. Please try again.\n\n";
581 print "What is the maximum length of a kick message?\n";
582 print "[\033[1;32m$config{MAX_KICK}\033[0m] -> ";
583 chomp($var = <STDIN>);
585 $var = $config{MAX_KICK};
587 if ($var =~ /^\d+$/) {
588 # We don't care what the number is, set it and be on our way.
589 $config{MAX_KICK} = $var;
593 print "You must enter a number in this field. Please try again.\n\n";
599 print "What is the maximum length of a GECOS (real name) field?\n";
600 print "[\033[1;32m$config{MAX_GECOS}\033[0m] -> ";
601 chomp($var = <STDIN>);
603 $var = $config{MAX_GECOS};
605 if ($var =~ /^\d+$/) {
606 # We don't care what the number is, set it and be on our way.
607 $config{MAX_GECOS} = $var;
611 print "You must enter a number in this field. Please try again.\n\n";
617 print "What is the maximum length of an away message?\n";
618 print "[\033[1;32m$config{MAX_AWAY}\033[0m] -> ";
619 chomp($var = <STDIN>);
621 $var = $config{MAX_AWAY};
623 if ($var =~ /^\d+$/) {
624 # We don't care what the number is, set it and be on our way.
625 $config{MAX_AWAY} = $var;
629 print "You must enter a number in this field. Please try again.\n\n";
634 print "Enter the Level Of Binary optimisation. This is a number between 0 and 3.
635 The InspIRCd Team will NOT support any bug reports above 0. Also note,
636 the IRCd behaviour will be different depending on this value. Please
637 read the documentation for more information.
639 The higher the number, the more optimised your binary will be. This
640 value will default to 0 if you either don't enter a number, or enter
641 a value outside the range.
643 As always, if you are unsure, just press enter and accept the default.\n\n";
644 print "[\033[1;32m$config{OPTIMITEMP}\033[0m] -> ";
645 chomp($var = <STDIN>);
647 $var = $config{OPTIMITEMP};
651 $config{OPTIMITEMP} = 1;
652 $config{OPTIMISATI} = "-O";
653 } elsif ($var eq "2") {
654 $config{OPTIMITEMP} = 2;
655 $config{OPTIMISATI} = "-O2";
656 } elsif ($var eq "3") {
657 $config{OPTIMITEMP} = 3;
658 $config{OPTIMISATI} = "-O3";
660 $config{OPTIMITEMP} = 0;
661 $config{OPTIMISATI} = "-g";
664 print "\n\033[1;32mPre-build configuration is complete!\033[0m\n\n";
665 print "\033[0mBase install path:\033[1;32m\t\t$config{BASE_DIR}\033[0m\n";
666 print "\033[0mConfig path:\033[1;32m\t\t\t$config{CONFIG_DIR}\033[0m\n";
667 print "\033[0mModule path:\033[1;32m\t\t\t$config{MODULE_DIR}\033[0m\n";
668 print "\033[0mLibrary path:\033[1;32m\t\t\t$config{LIBRARY_DIR}\033[0m\n";
669 print "\033[0mMax connections:\033[1;32m\t\t$config{MAX_CLIENT}\033[0m\n";
670 print "\033[0mMax User Channels:\033[1;32m\t\t$config{MAX_CHANNE}\033[0m\n";
671 print "\033[0mMax Oper Channels:\033[1;32m\t\t$config{MAX_OPERCH}\033[0m\n";
672 print "\033[0mMax nickname length:\033[1;32m\t\t$config{NICK_LENGT}\033[0m\n";
673 print "\033[0mMax channel length:\033[1;32m\t\t$config{CHAN_LENGT}\033[0m\n";
674 print "\033[0mMax mode length:\033[1;32m\t\t$config{MAXI_MODES}\033[0m\n";
675 print "\033[0mMax ident length:\033[1;32m\t\t$config{MAX_IDENT}\033[0m\n";
676 print "\033[0mMax quit length:\033[1;32m\t\t$config{MAX_QUIT}\033[0m\n";
677 print "\033[0mMax topic length:\033[1;32m\t\t$config{MAX_TOPIC}\033[0m\n";
678 print "\033[0mMax kick length:\033[1;32m\t\t$config{MAX_KICK}\033[0m\n";
679 print "\033[0mMax name length:\033[1;32m\t\t$config{MAX_GECOS}\033[0m\n";
680 print "\033[0mMax away length:\033[1;32m\t\t$config{MAX_AWAY}\033[0m\n";
681 print "\033[0mGCC Version Found:\033[1;32m\t\t$config{GCCVER}.x\033[0m\n";
682 print "\033[0mOptimization Flag:\033[1;32m\t\t$config{OPTIMISATI}\033[0m\n";
683 print "\033[0mCompiler program:\033[1;32m\t\t$config{CC}\033[0m\n";
684 print "\033[0mStatic modules:\033[1;32m\t\t\t$config{STATIC_LINK}\033[0m\n";
685 print "\033[0mMultithread DNS:\033[1;32m\t\t$config{THREADED_DNS}\033[0m\n";
686 print "\033[0mIPv6 Support:\033[1;32m\t\t\t$config{IPV6}\033[0m\n";
687 print "\033[0mIPv6 to IPv4 Links:\033[1;32m\t\t$config{SUPPORT_IP6LINKS}\033[0m\n";
688 print "\033[0mGnuTLS Support:\033[1;32m\t\t\t$config{USE_GNUTLS}\033[0m\n";
689 print "\033[0mOpenSSL Support:\033[1;32m\t\t$config{USE_OPENSSL}\033[0m\n\n";
691 if ($config{USE_GNUTLS} eq "y") {
693 open(TMP, "<src/modules/m_ssl_gnutls.cpp") or $failed = 1;
696 print "Symlinking src/modules/m_ssl_gnutls.cpp from extra/\n";
697 chdir("src/modules");
698 system("ln -s extra/m_ssl_gnutls.cpp");
703 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
705 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
708 print "SSL Certificates Not found, Generating.. \n\n
709 *************************************************************
710 * Generating the Private Key may take some time, go grab a *
711 * Coffee. Even better, to generate some more entropy if it *
712 * is taking a while, open another console and type du / a *
713 * few times and get that HD going :) Then answer the *
714 * Questions which follow. If you are unsure, just hit enter *
715 *************************************************************\n\n";
716 system("certtool --generate-privkey --outfile key.pem");
717 system("certtool --generate-self-signed --load-privkey key.pem --outfile cert.pem");
718 print "\nCertificate generation complete, copying to config directory... ";
719 system("mv key.pem $config{CONFIG_DIR}/key.pem");
720 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
723 print "SSL Certificates found, skipping.\n\n"
725 } elsif ($config{USE_OPENSSL} eq "y") {
727 open(TMP, "<src/modules/m_ssl_openssl.cpp") or $failed = 1;
730 print "Symlinking src/modules/m_ssl_openssl.cpp from extra/\n";
731 chdir("src/modules");
732 system("ln -s extra/m_ssl_openssl.cpp");
737 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
739 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
742 print "SSL Certificates Not found, Generating.. \n\n
743 *************************************************************
744 * Generating the certificates may take some time, go grab a *
745 * coffee, or something. *
746 *************************************************************\n\n";
747 system("openssl req -x509 -nodes -newkey rsa:1024 -keyout key.pem -out cert.pem");
748 system("openssl dhparam -out dhparams.pem 1024");
749 print "\nCertificate generation complete, copying to config directory... ";
750 system("mv key.pem $config{CONFIG_DIR}/key.pem");
751 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
752 system("mv dhparams.pem $config{CONFIG_DIR}/dhparams.pem");
755 print "SSL Certificates found, skipping.\n\n"
758 if (($config{USE_GNUTLS} eq "n") && ($config{USE_OPENSSL} eq "n")) {
759 print "Skipping SSL Certificate generation, SSL support is not available.\n\n";
767 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
768 if (($config{USE_GNUTLS} eq "y") || ($config{USE_OPENSSL} eq "y")) {
769 print "Please remember that to enable \033[1;32mSSL support\033[0m you must\n";
770 print "load the required modules in your config. This configure process\n";
771 print "has just prepared these modules to be compiled for you, and has not\n";
772 print "configured them to be compiled into the core of the ircd.\n";
774 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
775 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
776 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";
779 if ($config{GCCVER} < "3") {
781 \033[1;32mWARNING!\033[0m You are attempting to compile InspIRCd on GCC 2.x!
782 GCC 2.x series compilers only had partial (read as broken) C++ support, and
783 your compile will most likely fail horribly! If you have any problems, do NOT
784 report them to the bugtracker or forums without first upgrading your compiler
785 to a newer 3.x or 4.x (or whatever is available currently) version.
789 ################################################################################
791 ################################################################################
793 # Retrieves the .config.cache file, and loads values into the main config hash.
794 open(CACHE, ".config.cache") or return undef;
797 # Ignore Blank lines, and comments..
800 my ($key, $value) = split("=", $_);
801 $value =~ /^\"(.*)\"$/;
802 # Do something with data here!
810 # Dump the contents of %config
811 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
812 open(FILEHANDLE, ">.config.cache");
813 foreach $key (keys %config) {
814 print FILEHANDLE "$key=\"$config{$key}\"\n";
820 my ($desc, $hash_key) = @_;
823 print "In what directory $desc?\n";
824 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
825 chomp($var = <STDIN>);
827 $var = $config{$hash_key};
829 if ($var =~ /^\~\/(.+)$/) {
830 # Convert it to a full path..
831 $var = resolve_directory($ENV{HOME} . "/" . $1);
833 if (substr($var,0,1) ne "/")
835 # Assume relative Path was given.. fill in the rest.
836 $var = $this . "/$var";
838 $var = resolve_directory($var);
840 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
841 chomp($tmp = <STDIN>);
842 if (($tmp eq "") || ($tmp =~ /^y/i)) {
843 # Attempt to Create the Dir..
844 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
846 print "Unable to create directory. ($var)\n\n";
851 # They said they don't want to create, and we can't install there.
857 # Target exists, but is not a directory.
858 print "File $var exists, but is not a directory.\n\n";
862 # Either Dir Exists, or was created fine.
863 $config{$hash_key} = $var;
870 if ($config{OSNAME} =~ /BSD$/) {
871 $config{LDLIBS} = "-Ldl -lstdc++";
872 $config{FLAGS} = "-fPIC -frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
873 $config{MAKEPROG} = "gmake";
874 if ($config{OSNAME} eq "OpenBSD") {
875 chomp($foo = `eg++ -dumpversion | cut -c 1`);
876 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
877 # if theyre not running this, configure lets the build continue but they probably wont manage to
878 # compile as this standard version is 2.95.3!
880 $config{CC} = "eg++";
881 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change the compiler path
885 $config{LDLIBS} = "-ldl -lstdc++";
886 $config{FLAGS} = "-fPIC -frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
887 $config{MAKEPROG} = "make";
888 if ($config{OSNAME} =~ /CYGWIN/) {
889 $config{FLAGS} = "-frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
890 $config{LDLIBS} = "";
891 $config{MAKEPROG} = "/usr/bin/make";
892 $config{MAKEORDER} = "ircd mods";
893 } elsif ($config{OSNAME} eq "CYG-STATIC") {
894 $config{FLAGS} = "-frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
895 $config{LDLIBS} = "";
896 $config{MAKEPROG} = "/usr/bin/make";
897 $config{MAKEORDER} = "mods ircd";
898 $config{STATICLIBS} = "modules/mods.a";
899 $config{STATIC_LINK} = "yes";
902 if ($config{OSNAME} =~ /SunOS/) {
903 # solaris/sunos needs these
904 # socket = bsd sockets api
906 # rt = POSIX realtime extensions
907 # resolv = inet_aton only (why isnt this in nsl?!)
908 $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv";
926 print "Detecting modules ";
927 opendir(DIRHANDLE, "src/modules");
928 foreach $name (sort readdir(DIRHANDLE)) {
929 if ($name =~ /^m_(.+)\.cpp$/)
932 if ($mod !~ /_static$/) {
933 $modlist[$i++] = $mod;
939 print "\nOk, $i modules.\n";
946 my $data = `svn info`;
952 $data =~ /Revision: (\d+)/;
954 if (!defined($rev)) {
961 my($writeheader) = @_;
962 # First File.. inspircd_config.h
963 chomp(my $incos = `uname -n -s -r`);
964 chomp(my $version = `sh ./src/version.sh`);
965 chomp(my $revision = getrevision());
966 $version = "$version(r$revision)";
967 chomp(my $revision2 = getrevision());
968 if ($writeheader == 1)
970 print "Writing \033[1;32minspircd_config.h\033[0m\n";
971 open(FILEHANDLE, ">include/inspircd_config.h");
972 my $NL = $config{NICK_LENGT}+1;
973 my $CL = $config{CHAN_LENGT}+1;
974 print FILEHANDLE <<EOF;
975 /* Auto generated by configure, do not modify! */
976 #ifndef __CONFIGURATION_AUTO__
977 #define __CONFIGURATION_AUTO__
979 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
980 #define MOD_PATH "$config{MODULE_DIR}"
981 #define VERSION "$version"
982 #define REVISION "$revision2"
983 #define MAXCLIENTS $config{MAX_CLIENT}
984 #define MAX_DESCRIPTORS $config{MAX_DESCRIPTORS}
987 #define MAXCHANS $config{MAX_CHANNE}
988 #define OPERMAXCHANS $config{MAX_OPERCH}
989 #define MAXMODES $config{MAXI_MODES}
990 #define IDENTMAX $config{MAX_IDENT}
991 #define MAXQUIT $config{MAX_QUIT}
992 #define MAXTOPIC $config{MAX_TOPIC}
993 #define MAXKICK $config{MAX_KICK}
994 #define MAXGECOS $config{MAX_GECOS}
995 #define MAXAWAY $config{MAX_AWAY}
996 #define OPTIMISATION $config{OPTIMITEMP}
997 #define SYSTEM "$incos"
1000 if ($config{OSNAME} =~ /SunOS/) {
1001 print FILEHANDLE "#define IS_SOLARIS\n";
1003 if ($config{OSNAME} =~ /CYGWIN/) {
1004 print FILEHANDLE "#define IS_CYGWIN\n";
1005 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
1007 if ($config{OSNAME} eq "CYG-STATIC") {
1008 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
1010 if ($config{HAS_EXECINFO} eq "1") {
1011 print FILEHANDLE "#define HAS_EXECINFO\n";
1013 if ($config{STATIC_LINK} eq "yes") {
1014 print FILEHANDLE "#define STATIC_LINK\n";
1016 if ($config{GCCVER} >= 3) {
1017 print FILEHANDLE "#define GCC3\n";
1019 if ($config{HAS_STRLCPY} eq "true") {
1020 print FILEHANDLE "#define HAS_STRLCPY\n";
1022 if ($config{HAS_STDINT} eq "true") {
1023 print FILEHANDLE "#define HAS_STDINT\n";
1025 if ($config{THREADED_DNS} =~ /y/i) {
1026 print FILEHANDLE "#define THREADED_DNS\n";
1028 if ($config{IPV6} =~ /y/i) {
1029 print FILEHANDLE "#define IPV6\n";
1031 if ($config{SUPPORT_IP6LINKS} =~ /y/i) {
1032 print FILEHANDLE "#define SUPPORT_IP6LINKS\n";
1035 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1036 print FILEHANDLE "#define USE_KQUEUE\n";
1037 $se = "socketengine_kqueue";
1040 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1041 print FILEHANDLE "#define USE_EPOLL\n";
1042 $se = "socketengine_epoll";
1045 # user didn't choose either epoll or select for their OS.
1046 # default them to USE_SELECT (ewwy puke puke)
1048 print FILEHANDLE "#define USE_SELECT\n";
1049 $se = "socketengine_select";
1051 print FILEHANDLE "\n#endif\n";
1057 open(FILEHANDLE, ">include/inspircd_se_config.h");
1058 print FILEHANDLE <<EOF;
1059 /* Auto generated by configure, do not modify or commit to svn! */
1060 #ifndef __CONFIGURATION_SOCKETENGINE__
1061 #define __CONFIGURATION_SOCKETENGINE__
1071 # Create a Modules List..
1073 foreach $i (@modlist)
1075 if ($config{STATIC_LINK} eq "yes") {
1076 $modules .= "m_".$i.".o ";
1079 $modules .= "m_".$i.".so ";
1082 chomp($modules); # Remove Redundant whitespace..
1085 # Write all .in files.
1088 my $exe = "inspircd";
1090 if ($config{OSNAME} =~ /CYGWIN/) {
1091 $exe = "inspircd.exe";
1094 opendir(DIRHANDLE, $this);
1095 if ($config{THREADED_DNS} =~ /y/i) {
1096 $config{LDLIBS} = $config{LDLIBS} . " -pthread";
1098 foreach $name (sort readdir(DIRHANDLE)) {
1099 if ($name =~ /^\.(.+)\.inc$/) {
1101 # All .name.inc files need parsing!
1103 open(FILEHANDLE, ".$file.inc");
1104 while (<FILEHANDLE>) {
1109 $tmp =~ s/\@CC\@/$config{CC}/;
1110 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
1111 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
1112 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
1113 $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/;
1114 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
1115 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
1116 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
1117 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
1118 $tmp =~ s/\@MODULES\@/$modules/;
1119 $tmp =~ s/\@EXECUTABLE\@/$exe/;
1120 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
1121 $tmp =~ s/\@STATICLIBS\@/$config{STATICLIBS}/;
1123 print "Writing \033[1;32m$file\033[0m\n";
1124 open(FILEHANDLE, ">$file");
1125 print FILEHANDLE $tmp;
1128 closedir(DIRHANDLE);
1130 # Make inspircd executable!
1131 chmod 0744, 'inspircd';
1133 if ($config{STATIC_LINK} eq "yes") {
1134 print "Writing static-build \033[1;32msrc/Makefile\033[0m\n";
1135 write_static_makefile();
1136 write_static_modules_makefile();
1137 } elsif ($config{OSNAME} =~ /CYGWIN/) {
1138 print "Writing cygwin-build \033[1;32msrc/Makefile\033[0m\n";
1139 write_static_makefile();
1140 write_dynamic_modules_makefile();
1142 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
1143 write_dynamic_makefile();
1144 write_dynamic_modules_makefile();
1148 sub getcompilerflags {
1152 if ($_ =~ /^\/\* \$CompileFlags: (.+) \*\/$/) {
1161 sub getlinkerflags {
1165 if ($_ =~ /^\/\* \$LinkerFlags: (.+) \*\/$/) {
1175 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";
1176 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";
1177 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";
1178 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";
1179 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";
1180 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";
1181 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";
1182 print "\033[0m\033[0m....::..::::..:::......:::..:::::::::....::..:::::..:::......:::........:::\n\n";
1185 sub resolve_directory {
1187 return File::Spec->rel2abs($_[0]);
1191 my ($flag,$prompt) = @_;
1192 print "$prompt [\033[1;32m$config{$flag}\033[0m] -> ";
1193 chomp($tmp = <STDIN>);
1194 if ($tmp eq "") { $tmp = $config{$flag} }
1196 if (($tmp eq "") || ($tmp =~ /^y/i)) {
1197 $config{$flag} = "y";
1199 $config{$flag} = "n";
1204 sub write_static_modules_makefile {
1205 # Modules Makefile..
1206 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1207 open(FILEHANDLE, ">src/modules/Makefile");
1210 # Module Makefile Header
1212 print FILEHANDLE <<EOF;
1213 # (C) ChatSpike development team
1214 # Makefile by <Craig\@ChatSpike.net>
1215 # Many Thanks to Andrew Church <achurch\@achurch.org>
1216 # for assisting with making this work right.
1218 # Automatically Generated by ./configure to add a modules
1219 # please run ./configure --update
1225 # End Module Makefile Header
1228 # Create a Modules List..
1233 open(MODLIST,">include/modlist.h");
1236 # Include File Header
1238 print MODLIST <<HEADER;
1239 // Generated automatically by configure. DO NOT EDIT!
1241 #ifndef __SYMBOLS__H_CONFIGURED__
1242 #define __SYMBOLS__H_CONFIGURED__
1246 # End Include File Header
1249 # Place Module List into Include
1250 foreach $i (@modlist) {
1251 if ($i !~ /_static$/) {
1252 print MODLIST "extern \"C\" void * $i\_init (void);\n";
1255 print MODLIST "\nstruct {const char *name; initfunc *value; } modsyms[] = {\n";
1260 foreach $i (@modlist)
1262 if ($i !~ /_static$/) {
1263 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1264 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1267 # Write Entry to the Makefile
1269 print FILEHANDLE <<EOCHEESE;
1270 m_$i.o: .m_$i\_static.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h
1271 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c .m_$i\_static.cpp
1272 mv .m_$i\_static.o ../m_$i.o
1276 # End Write Entry to the MakeFile
1278 print "Configuring module [\033[1;32mm_$i.so\033[0m] for static linking... ";
1279 open(MODULE,"<src/modules/m_".$i.".cpp") or die("Could not open m_".$i.".cpp");
1280 open(MUNGED,">src/modules/.m_".$i."_static.cpp") or die("Could not create .m_".$i."_static.cpp");
1281 while (chomp($a = <MODULE>)) {
1282 $a =~ s/init_module/$i\_init/g;
1283 print MUNGED "$a\n";
1287 print MODLIST <<EOENT;
1288 {"m_$i.so",\&$i\_init},
1293 print MODLIST "{0}};\n\n#endif\n";
1297 sub write_dynamic_modules_makefile {
1298 # Modules Makefile..
1299 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1300 open(FILEHANDLE, ">src/modules/Makefile");
1303 if ($config{OSNAME} =~ /CYGWIN/) {
1304 $extra = "../inspircd.dll.a";
1308 # Module Makefile Header
1310 print FILEHANDLE <<EOF;
1311 # (C) ChatSpike development team
1312 # Makefile by <Craig\@ChatSpike.net>
1313 # Many Thanks to Andrew Church <achurch\@achurch.org>
1314 # for assisting with making this work right.
1316 # Automatically Generated by ./configure to add a modules
1317 # please run ./configure -update or ./configure -modupdate
1323 # End Module Makefile Header
1326 # Create a Modules List..
1332 foreach $i (@modlist) {
1334 # Write Entry to the MakeFile
1336 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1337 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1338 print FILEHANDLE <<EOCHEESE;
1339 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
1340 \$(CC) -pipe -I../../include \$(FLAGS) $cmflags -export-dynamic -c m_$i.cpp
1341 \$(CC) \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o $extra
1344 $crud = $crud . " \@install -v -m 0700 m_$i.so \$(MODPATH)\n";
1346 # End Write Entry to the MakeFile
1349 print FILEHANDLE "modinst:\n \@echo \"Installing modules...\"\n" . $crud;
1353 sub write_static_makefile {
1354 open(FH,">src/Makefile") or die("Could not write src/Makefile!");
1357 opendir(DIRHANDLE, "src");
1358 foreach $name (sort readdir(DIRHANDLE)) {
1359 if ($name =~ /^cmd_(.+)\.cpp$/) {
1360 $cmdlist[$i++] = $1;
1363 closedir(DIRHANDLE);
1366 foreach my $cmd (@cmdlist) {
1367 $cmdobjs = $cmdobjs . "cmd_$cmd.o ";
1368 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1373 # (C) ChatSpike development team
1374 # Makefile by <Craig\@ChatSpike.net>
1375 # Makefile version 2 (statically linked core) by <brain\@inspircd.org>
1378 CC = im a cheezeball
1380 CXXFLAGS = -I../include \${FLAGS}
1381 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1382 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1386 $se = "socketengine_select";
1387 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1388 $se = "socketengine_kqueue";
1390 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1391 $se = "socketengine_epoll";
1395 # This next section is for cygwin dynamic module builds.
1396 # Basically, what we do, is build the inspircd core as a library
1397 # then the main executable uses that. the library is capable of
1398 # loading / unloading the modules dynamically :)
1399 # Massive thanks to the guys on #cygwin @ irc.freenode.net for helping
1403 if ($config{OSNAME} =~ /CYGWIN/) {
1405 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
1407 inspircd.exe: inspircd.dll.a
1410 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
1411 \$(CC) -shared -Wl,--out-implib=inspircd.dll.a -o inspircd.dll \$^
1415 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
1417 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
1418 \$(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)
1424 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
1425 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1427 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
1428 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1430 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
1431 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1433 userprocess.o: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1434 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1436 socketengine.o: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1437 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1439 hashcomp.o: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1440 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1442 helperfuncs.o: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1443 \$(CC) -pipe -I/usr/local/include -L/usr/local/lib -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1445 channels.o: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1446 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1448 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)
1449 \${MAKE} -C "modes" DIRNAME="src/modes" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1450 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1452 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
1453 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1455 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
1456 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1458 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
1459 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1461 base.o: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1462 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1464 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
1465 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1467 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
1468 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
1470 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
1471 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp $cmdobjs
1473 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
1474 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1476 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
1477 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1479 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
1480 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1482 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
1483 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1485 socket.o: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1486 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1488 inspsocket.o: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1489 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1491 aes.o: aes.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1492 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c aes.cpp
1494 timer.o: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1495 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1498 foreach my $cmd (@cmdlist) {
1500 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
1501 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1507 sub write_dynamic_makefile {
1511 opendir(DIRHANDLE, "src");
1512 foreach $name (sort readdir(DIRHANDLE)) {
1513 if ($name =~ /^cmd_(.+)\.cpp$/) {
1514 $cmdlist[$i++] = $1;
1517 closedir(DIRHANDLE);
1521 foreach my $cmd (@cmdlist) {
1522 $cmdobjs = $cmdobjs . "cmd_$cmd.o ";
1523 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1526 if (($config{OSNAME} !~ /Linux/i) && ($config{HAS_EXECINFO} eq "1")) {
1527 $extra = "-L/usr/local/lib -lexecinfo";
1532 $se = "socketengine_select";
1533 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1534 $se = "socketengine_kqueue";
1536 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1537 $se = "socketengine_epoll";
1540 open(FH,">src/Makefile") or die("Could not write src/Makefile");
1544 # (C) ChatSpike development team
1545 # Makefile by <Craig\@ChatSpike.net>
1546 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
1549 CC = im a cheezeball
1551 CXXFLAGS = -I../include \${FLAGS}
1552 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1553 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1555 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
1557 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
1558 \$(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
1560 libIRCDsocketengine.so: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1561 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1562 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocketengine.so socketengine.o $se.o
1564 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
1565 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1566 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsnomasks.so snomasks.o
1568 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
1569 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1570 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommand_parse.so command_parse.o
1572 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
1573 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1574 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcull_list.so cull_list.o
1576 libIRCDuserprocess.so: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1577 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1578 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDuserprocess.so userprocess.o
1580 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1581 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1582 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhash.so hashcomp.o
1584 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1585 \$(CC) -pipe -I/usr/local/include -L/usr/local/lib -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1586 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhelper.so helperfuncs.o
1588 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1589 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1590 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDchannels.so channels.o
1592 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)
1593 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1594 \${MAKE} -C "modes" DIRNAME="src/modes" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1595 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmode.so mode.o modes/modeclasses.a
1597 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
1598 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1599 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDxline.so xline.o
1601 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
1602 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1603 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDstring.so inspstring.o
1605 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
1606 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1607 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDasyncdns.so dns.o
1609 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1610 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1611 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDbase.so base.o
1613 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
1614 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1615 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDconfigreader.so configreader.o
1617 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
1618 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
1619 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmessage.so message.o
1621 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
1622 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1623 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommands.so commands.o $cmdobjs
1625 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
1626 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1627 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDdynamic.so dynamic.o
1629 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
1630 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1631 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDusers.so users.o
1633 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
1634 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1635 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmodules.so modules.o
1637 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
1638 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1639 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDwildcard.so wildcard.o
1641 libIRCDsocket.so: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1642 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1643 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocket.so socket.o
1645 libIRCDinspsocket.so: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1646 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1647 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDinspsocket.so inspsocket.o
1649 libIRCDaes.so: aes.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1650 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c aes.cpp
1651 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDaes.so aes.o
1653 libIRCDtimer.so: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1654 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1655 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDtimer.so timer.o
1658 foreach my $cmd (@cmdlist) {
1660 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
1661 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp