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 ########################################
15 chomp($topdir = `pwd`);
16 $this = resolve_directory($topdir); # PWD, Regardless.
17 @modlist = (); # Declare for Module List..
18 %config = (); # Initiate Configuration Hash..
19 $config{ME} = resolve_directory($topdir); # Present Working Directory
20 $config{BASE_DIR} = $config{ME}; # Use CWD as 'Base' Directory.
21 $config{CONFIG_DIR} = resolve_directory($config{ME}."/conf"); # Configuration Directory
22 $config{MODULE_DIR} = resolve_directory($config{ME}."/modules"); # Modules Directory
23 $config{BINARY_DIR} = resolve_directory($config{ME}."/bin"); # Binary Directory
24 $config{LIBRARY_DIR} = resolve_directory($config{ME}."/lib"); # Library Directory
25 chomp($config{HAS_GNUTLS} = `libgnutls-config --version 2>/dev/null | cut -c 1,2,3`); # GNUTLS Version.
26 chomp($config{HAS_OPENSSL} = `openssl version 2>/dev/null`); # Openssl version
27 $config{USE_GNUTLS} = "n"; # Use gnutls.
28 $config{USE_OPENSSL} = "n"; # Use openssl.
29 $config{OPTIMITEMP} = "0"; # Default Optimisation Value
30 $config{OPTIMISATI} = "-g"; # Optimisation Flag
31 $config{NICK_LENGT} = "31"; # Default Nick Length
32 $config{CHAN_LENGT} = "64"; # Default Channel Name Length
33 $config{MAX_CHANNE} = "20"; # Default Max. Channels per user
34 $config{MAX_OPERCH} = "60"; # Default Max. Channels per oper
35 $config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once.
36 $config{HAS_STRLCPY} = "false"; # strlcpy Check.
37 $config{HAS_STDINT} = "false"; # stdint.h check
38 $config{HAS_EXECINFO} = "0"; # execinfo.h Check.
39 $config{USE_KQUEUE} = "y"; # kqueue enabled
40 $config{USE_EPOLL} = "y"; # epoll enabled
41 $config{THREADED_DNS} = "n"; # threaded dns (experimental)
42 $config{IPV6} = "n"; # IPv6 support (experimental)
43 $config{STATIC_LINK} = "no"; # are doing static modules?
44 chomp($config{MAX_CLIENT_T} = `sh -c \"ulimit -n\"`); # FD Limit
45 chomp($config{MAX_DESCRIPTORS} = `sh -c \"ulimit -n\"`); # Hard FD Limit
46 chomp($config{GCCVER} = `g++ -dumpversion | cut -c 1`); # Major GCC Version
47 chomp($config{OSNAME} = `/bin/uname`); # Operating System Name
48 $config{CC} = "g++"; # C++ compiler
49 $config{MAKEORDER} = "ircd mods"; # build order
50 $config{STATICLIBS} = ""; # library archive path
51 $config{MAX_IDENT} = "12"; # max ident size
52 $config{MAX_QUIT} = "255"; # max quit message size
53 $config{MAX_TOPIC} = "307"; # max topic size
54 $config{MAX_KICK} = "255"; # max kick message size
55 $config{MAX_GECOS} = "128"; # max GECOS size
56 $config{MAX_AWAY} = "200"; # max AWAY size
60 $config{HAS_OPENSSL} =~ /OpenSSL (\S+) \d+ \S+ \d{4}/;
61 $config{HAS_OPENSSL} = $1;
63 if ($config{GCCVER} eq "") {
64 print "g++ was not found! You require g++ (the GNU C++ compiler, part of GCC) to build InspIRCd!\n";
68 # Minihack! Convert Cygwin to 'Cyg-Static' so i can
69 # Keep my dynamic module experiments here for later
72 if ($config{OSNAME} =~ /CYGWIN/) {
73 $config{OSNAME} = "CYG-STATIC";
76 if ((!$config{OSNAME}) || ($config{OSNAME} eq "")) {
77 chomp($config{OSNAME} = `/usr/bin/uname`);
78 if ((!$config{OSNAME}) || ($config{OSNAME} eq "")){
79 $config{OSNAME} = "Unknown";
83 if (!$config{MAX_CLIENT_T}) {
84 $config{MAX_CLIENT_T} = 1024; # Set a reasonable 'Default'
85 $fd_scan_fail = "true"; # Used Later
88 # Get and Set some important vars..
91 my $arg = $ARGV[0]; # Do Some Argument Checks..
92 if ($arg eq "-clean") {
93 system("rm -rf .config.cache");
94 } # Remove the config.cache file.
96 if ($arg eq "-update") {
97 # Does the cache file exist?
99 # No, No it doesn't.. *BASH*
100 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
103 # We've Loaded the cache file and all our variables..
104 print "Updating Files..\n";
106 $has_epoll = $config{HAS_EPOLL};
107 $has_kqueue = $config{HAS_KQUEUE};
114 if ($arg eq "-modupdate") {
115 # Does the cache file exist?
117 # No, No it doesn't.. *BASH*
118 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
121 # We've Loaded the cache file and all our variables..
122 print "Updating Files..\n";
124 $has_epoll = $config{HAS_EPOLL};
125 $has_kqueue = $config{HAS_KQUEUE};
134 if ($arg eq "-svnupdate") {
136 open(FH,"<.svn/entries") or $fail = 1;
138 print "This is not an SVN copy of InspIRCd.\n";
141 system("svn update");
142 system("perl configure -update");
143 if ($ARGV[1] eq "rebuild") {
144 system("make install");
149 print "Checking for cache from previous configure...\n";
151 print "Checking operating system version...\n";
154 if (!$config{MAX_CLIENT}) {
155 # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this
156 # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go
157 # higher than the found value" :))
158 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
161 printf "Checking if stdint.h exists... ";
162 $config{HAS_STDINT} = "true";
164 open(STDINT, "</usr/include/stdint.h") or $config{HAS_STDINT} = "false";
165 if ($config{HAS_STDINT} eq "true") {
168 print "yes\n" if $config{HAS_STDINT} eq "true";
169 print "no\n" if $config{HAS_STDINT} eq "false";
172 printf "Checking if strlcpy exists... ";
173 # Perform the strlcpy() test..
174 $config{HAS_STRLCPY} = "false";
176 open(STRLCPY, "</usr/include/string.h") or $fail = 1;
178 while (chomp($line = <STRLCPY>)) {
179 # try and find the delcaration of:
180 # size_t strlcpy(...)
181 if ($line =~ /size_t(\0x9|\s)+strlcpy/) {
182 $config{HAS_STRLCPY} = "true";
187 print "yes\n" if $config{HAS_STRLCPY} eq "true";
188 print "no\n" if $config{HAS_STRLCPY} eq "false";
190 printf "Checking if execinfo.h exists... ";
191 $config{HAS_EXECINFO} = "0";
193 open(EXECINFO, "</usr/include/execinfo.h") or $fail = 1;
196 open(EXECINFO, "</usr/local/include/execinfo.h") or $fail = 1;
198 printf "/usr/local/include/execinfo.h\n";
199 $config{HAS_EXECINFO} = "1";
203 printf "Not found!\n";
207 printf "/usr/include/execinfo.h\n";
208 $config{HAS_EXECINFO} = "1";
212 printf "Checking if kqueue exists... ";
215 open(KQUEUE, "</usr/include/sys/event.h") or $fail = 1;
217 while (chomp($line = <KQUEUE>)) {
218 # try and find the delcaration of:
220 if ($line =~ /int(\0x9|\s)+kqueue/) {
226 print "yes\n" if $has_kqueue == 1;
227 print "no\n" if $has_kqueue == 0;
229 printf "Checking if epoll exists... ";
232 open(EPOLL, "</usr/include/sys/epoll.h") or $fail = 1;
238 my $kernel = `uname -r`;
240 if (($kernel =~ /2\.0/) || ($kernel =~ /2\.2/) || ($kernel =~ /2\.4/)) {
244 print "yes\n" if $has_epoll == 1;
245 print "no\n" if $has_epoll == 0;
247 if (($config{OSNAME} =~ /CYGWIN/) || ($config{OSNAME} eq "CYG-STATIC")) {
248 $config{HAS_STRLCPY} = "true";
251 $config{HAS_EPOLL} = $has_epoll;
252 $config{HAS_KQUEUE} = $has_kqueue;
254 printf "Checking for libgnutls... ";
255 if (($config{HAS_GNUTLS}) && (($config{HAS_GNUTLS} >= 1.2) || ($config{HAS_GNUTLS} eq "y"))) {
257 $config{HAS_GNUTLS} = "y";
260 $config{HAS_GNUTLS} = "n";
263 printf "Checking for openssl... ";
264 if (($config{HAS_OPENSSL}) && (($config{HAS_OPENSSL} >= 0.8) || ($config{HAS_OPENSSL} eq "y"))) {
266 $config{HAS_OPENSSL} = "y";
269 $config{HAS_OPENSSL} = "n";
272 ################################################################################
273 # BEGIN INTERACTIVE PART #
274 ################################################################################
278 # Display Splash Logo..
280 chomp($wholeos = `uname -mnr`);
282 my $rev = getrevision();
283 # Display Introduction Message..
285 Welcome to the InspIRCd Configuration program!
287 *** If you are unsure of any of these values, leave it blank for ***
288 *** standard settings that will work, and your server will run ***
289 *** using them. If you are running this server as part of a ***
290 *** larger network, you must consult with your network admins ***
291 *** for the proper values to use, or server links will be unstable! ***
293 Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter
294 a new value. Please note: You will \033[1mHAVE\033[0m to read the docs
295 dir, otherwise you won't have a config file!
297 Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos), fdmax: $config{MAX_CLIENT_T}
298 Your InspIRCd revision ID is \033[1;32mr$rev\033[0m";
300 print " (Non-SVN build)";
304 $config{CHANGE_COMPILER} = "n";
305 print "I have detected the following compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
307 while (($config{GCCVER} < 3) || ($config{GCCVER} eq "")) {
308 print "\033[1;32mIMPORTANT!\033[0m A GCC 2.x compiler has been detected, and
309 should NOT be used. You should probably specify a newer compiler.\n\n";
310 yesno(CHANGE_COMPILER,"Do you want to change the compiler?");
311 if ($config{CHANGE_COMPILER} =~ /y/i) {
312 print "What command do you want to use to invoke your compiler?\n";
313 print "[\033[1;32m$config{CC}\033[0m] -> ";
314 chomp($config{CC} = <STDIN>);
315 if ($config{CC} eq "") {
318 chomp($foo = `$config{CC} -dumpversion | cut -c 1`);
320 chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change compilers
321 print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
322 if ($config{GCCVER} < 3) {
323 print "\033[1;32mGCC 2.x WILL NOT WORK!\033[0m. Let's try that again, shall we?\n";
327 print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n";
334 # Directory Settings..
335 my $tmpbase = $config{BASE_DIR};
336 dir_check("do you wish to install the InspIRCd base", "BASE_DIR");
337 if ($tmpbase ne $config{BASE_DIR}) {
338 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Directory
339 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
340 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
341 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
344 dir_check("are the configuration files", "CONFIG_DIR");
345 dir_check("are the modules to be compiled to", "MODULE_DIR");
346 dir_check("is the IRCd binary to be placed", "BINARY_DIR");
347 dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
350 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?");
354 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?");
357 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y"));
358 if (!$chose_hiperf) {
359 print "No high-performance socket engines are available, or you chose\n";
360 print "not to enable one. Defaulting to select() engine.\n\n";
363 yesno(THREADED_DNS,"InspIRCd supports multi-threaded DNS lookups,\nwhich can improve the efficiency on a multiple-processor machine.\n\nDo you want to enable this feature?");
366 yesno(IPV6,"Would you like to enable experimental IPv6 support?");
369 if (($config{HAS_GNUTLS} eq "y") && ($config{HAS_OPENSSL} eq "y")) {
370 print "I have detected both GnuTLS and OpenSSL on your system.\n";
371 print "I will default to GnuTLS. If you wish to use OpenSSL\n";
372 print "instead, you should enable the OpenSSL module yourself\n";
373 print "by copying it from src/modules/extra to src/modules.\n\n";
376 if ($config{HAS_GNUTLS} eq "y") {
377 yesno(USE_GNUTLS, "Would you like to enable SSL Support?");
378 if ($config{USE_GNUTLS} eq "y") {
379 print "\nUsing GnuTLS SSL module.\n";
381 } elsif ($config{HAS_OPENSSL} eq "y") {
382 yesno(USE_OPENSSL, "Would you like to enable SSL Support?");
383 if ($config{USE_OPENSSL} eq "y") {
384 print "\nUsing OpenSSL SSL module.\nYou will get better performance if you move to GnuTLS in the future.\n";
388 print "\nThe following questions will ask you for various figures relating\n";
389 print "To your IRCd install. Please note that these should usually be left\n";
390 print "as defaults unless you have a real reason to change them. If they\n";
391 print "changed, then the values must be identical on all servers on your\n";
392 print "network, or malfunctions and/or crashes may occur, with the exception\n";
393 print "of the 'maximum number of clients' setting which may be different on\n";
394 print "different servers on the network.\n\n";
396 # File Descriptor Settings..
399 print "Maximum number of clients at any one time ($config{MAX_CLIENT_T})\n";
400 print "[\033[1;32m$config{MAX_CLIENT}\033[0m] -> ";
401 chomp($var = <STDIN>);
403 $var = $config{MAX_CLIENT};
405 if ($var =~ /^\d+$/) {
406 if (($var > $config{MAX_CLIENT_T}) && ($fd_scan_failed ne true)) {
407 # Client has entered a larger number than the 'discovered' value
409 print "WARNING: Our scans have indicated that you are attempting
410 to use more sockets than there are avaliable. Are you sure
411 you wish to do this? It may cause the IRCd to malfunction [y/n]
412 [\033[1;32mn\033[0m] -> $c";
413 chomp($tmp = <STDIN>);
415 print "Please enter the correct value.\n\n";
420 print "You must enter a number in this field. Please try again.\n\n";
423 # If we get here, we should be good to go.
424 $config{MAX_CLIENT} = $var;
431 print "What is the maximum length of nicknames?\n";
432 print "[\033[1;32m$config{NICK_LENGT}\033[0m] -> ";
433 chomp($var = <STDIN>);
435 $var = $config{NICK_LENGT};
437 if ($var =~ /^\d+$/) {
438 # We don't care what the number is, set it and be on our way.
439 $config{NICK_LENGT} = $var;
443 print "You must enter a number in this field. Please try again.\n\n";
449 print "What is the maximum length of channel names?\n";
450 print "[\033[1;32m$config{CHAN_LENGT}\033[0m] -> ";
451 chomp($var = <STDIN>);
453 $var = $config{CHAN_LENGT};
455 if ($var =~ /^\d+$/) {
456 # We don't care what the number is, set it and be on our way.
457 $config{CHAN_LENGT} = $var;
461 print "You must enter a number in this field. Please try again.\n\n";
467 print "What is the maximum number of channels a normal user may join at any one time?\n";
468 print "[\033[1;32m$config{MAX_CHANNE}\033[0m] -> ";
469 chomp($var = <STDIN>);
471 $var = $config{MAX_CHANNE};
473 if ($var =~ /^\d+$/) {
474 # We don't care what the number is, set it and be on our way.
475 $config{MAX_CHANNE} = $var;
479 print "You must enter a number in this field. Please try again.\n\n";
485 print "What is the maximum number of channels an oper may join at any one time?\n";
486 print "[\033[1;32m$config{MAX_OPERCH}\033[0m] -> ";
487 chomp($var = <STDIN>);
489 $var = $config{MAX_OPERCH};
491 if ($var =~ /^\d+$/) {
492 # We don't care what the number is, set it and be on our way.
493 $config{MAX_OPERCH} = $var;
501 print "What is the maximum number of mode changes in one line?\n";
502 print "[\033[1;32m$config{MAXI_MODES}\033[0m] -> ";
503 chomp($var = <STDIN>);
505 $var = $config{MAXI_MODES};
507 if ($var =~ /^\d+$/) {
508 # We don't care what the number is, set it and be on our way.
509 $config{MAXI_MODES} = $var;
513 print "You must enter a number in this field. Please try again.\n\n";
519 print "What is the maximum length of an ident (username)?\n";
520 print "[\033[1;32m$config{MAX_IDENT}\033[0m] -> ";
521 chomp($var = <STDIN>);
523 $var = $config{MAX_IDENT};
525 if ($var =~ /^\d+$/) {
526 # We don't care what the number is, set it and be on our way.
527 $config{MAX_IDENT} = $var;
531 print "You must enter a number in this field. Please try again.\n\n";
537 print "What is the maximum length of a quit message?\n";
538 print "[\033[1;32m$config{MAX_QUIT}\033[0m] -> ";
539 chomp($var = <STDIN>);
541 $var = $config{MAX_QUIT};
543 if ($var =~ /^\d+$/) {
544 # We don't care what the number is, set it and be on our way.
545 $config{MAX_QUIT} = $var;
549 print "You must enter a number in this field. Please try again.\n\n";
555 print "What is the maximum length of a channel topic?\n";
556 print "[\033[1;32m$config{MAX_TOPIC}\033[0m] -> ";
557 chomp($var = <STDIN>);
559 $var = $config{MAX_TOPIC};
561 if ($var =~ /^\d+$/) {
562 # We don't care what the number is, set it and be on our way.
563 $config{MAX_TOPIC} = $var;
567 print "You must enter a number in this field. Please try again.\n\n";
573 print "What is the maximum length of a kick message?\n";
574 print "[\033[1;32m$config{MAX_KICK}\033[0m] -> ";
575 chomp($var = <STDIN>);
577 $var = $config{MAX_KICK};
579 if ($var =~ /^\d+$/) {
580 # We don't care what the number is, set it and be on our way.
581 $config{MAX_KICK} = $var;
585 print "You must enter a number in this field. Please try again.\n\n";
591 print "What is the maximum length of a GECOS (real name) field?\n";
592 print "[\033[1;32m$config{MAX_GECOS}\033[0m] -> ";
593 chomp($var = <STDIN>);
595 $var = $config{MAX_GECOS};
597 if ($var =~ /^\d+$/) {
598 # We don't care what the number is, set it and be on our way.
599 $config{MAX_GECOS} = $var;
603 print "You must enter a number in this field. Please try again.\n\n";
609 print "What is the maximum length of an away message?\n";
610 print "[\033[1;32m$config{MAX_AWAY}\033[0m] -> ";
611 chomp($var = <STDIN>);
613 $var = $config{MAX_AWAY};
615 if ($var =~ /^\d+$/) {
616 # We don't care what the number is, set it and be on our way.
617 $config{MAX_AWAY} = $var;
621 print "You must enter a number in this field. Please try again.\n\n";
626 print "Enter the Level Of Binary optimisation. This is a number between 0 and 3.
627 The InspIRCd Team will NOT support any bug reports above 0. Also note,
628 the IRCd behaviour will be different depending on this value. Please
629 read the documentation for more information.
631 The higher the number, the more optimised your binary will be. This
632 value will default to 0 if you either don't enter a number, or enter
633 a value outside the range.
635 As always, if you are unsure, just press enter and accept the default.\n\n";
636 print "[\033[1;32m$config{OPTIMITEMP}\033[0m] -> ";
637 chomp($var = <STDIN>);
639 $var = $config{OPTIMITEMP};
643 $config{OPTIMITEMP} = 1;
644 $config{OPTIMISATI} = "-O";
645 } elsif ($var eq "2") {
646 $config{OPTIMITEMP} = 2;
647 $config{OPTIMISATI} = "-O2";
648 } elsif ($var eq "3") {
649 $config{OPTIMITEMP} = 3;
650 $config{OPTIMISATI} = "-O3";
652 $config{OPTIMITEMP} = 0;
653 $config{OPTIMISATI} = "-g";
656 print "\n\033[1;32mPre-build configuration is complete!\033[0m\n\n";
657 print "\033[0mBase install path:\033[1;32m\t\t$config{BASE_DIR}\033[0m\n";
658 print "\033[0mConfig path:\033[1;32m\t\t\t$config{CONFIG_DIR}\033[0m\n";
659 print "\033[0mModule path:\033[1;32m\t\t\t$config{MODULE_DIR}\033[0m\n";
660 print "\033[0mLibrary path:\033[1;32m\t\t\t$config{LIBRARY_DIR}\033[0m\n";
661 print "\033[0mMax connections:\033[1;32m\t\t$config{MAX_CLIENT}\033[0m\n";
662 print "\033[0mMax User Channels:\033[1;32m\t\t$config{MAX_CHANNE}\033[0m\n";
663 print "\033[0mMax Oper Channels:\033[1;32m\t\t$config{MAX_OPERCH}\033[0m\n";
664 print "\033[0mMax nickname length:\033[1;32m\t\t$config{NICK_LENGT}\033[0m\n";
665 print "\033[0mMax channel length:\033[1;32m\t\t$config{CHAN_LENGT}\033[0m\n";
666 print "\033[0mMax mode length:\033[1;32m\t\t$config{MAXI_MODES}\033[0m\n";
667 print "\033[0mMax ident length:\033[1;32m\t\t$config{MAX_IDENT}\033[0m\n";
668 print "\033[0mMax quit length:\033[1;32m\t\t$config{MAX_QUIT}\033[0m\n";
669 print "\033[0mMax topic length:\033[1;32m\t\t$config{MAX_TOPIC}\033[0m\n";
670 print "\033[0mMax kick length:\033[1;32m\t\t$config{MAX_KICK}\033[0m\n";
671 print "\033[0mMax name length:\033[1;32m\t\t$config{MAX_GECOS}\033[0m\n";
672 print "\033[0mMax away length:\033[1;32m\t\t$config{MAX_AWAY}\033[0m\n";
673 print "\033[0mGCC Version Found:\033[1;32m\t\t$config{GCCVER}.x\033[0m\n";
674 print "\033[0mOptimization Flag:\033[1;32m\t\t$config{OPTIMISATI}\033[0m\n";
675 print "\033[0mCompiler program:\033[1;32m\t\t$config{CC}\033[0m\n";
676 print "\033[0mStatic modules:\033[1;32m\t\t\t$config{STATIC_LINK}\033[0m\n";
677 print "\033[0mMultithread DNS:\033[1;32m\t\t$config{THREADED_DNS}\033[0m\n";
678 print "\033[0mIPv6 Support:\033[1;32m\t\t\t$config{IPV6}\033[0m\n";
679 print "\033[0mGnuTLS Support:\033[1;32m\t\t\t$config{USE_GNUTLS}\033[0m\n";
680 print "\033[0mOpenSSL Support:\033[1;32m\t\t$config{USE_OPENSSL}\033[0m\n\n";
682 if ($config{USE_GNUTLS} eq "y") {
684 open(TMP, "<src/modules/m_ssl_gnutls.cpp") or $failed = 1;
687 print "Symlinking src/modules/m_ssl_gnutls.cpp from extra/\n";
688 chdir("src/modules");
689 system("ln -s extra/m_ssl_gnutls.cpp");
694 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
696 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
699 print "SSL Certificates Not found, Generating.. \n\n
700 *************************************************************
701 * Generating the Private Key may take some time, go grab a *
702 * Coffee. Even better, to generate some more entropy if it *
703 * is taking a while, open another console and type du / a *
704 * few times and get that HD going :) Then answer the *
705 * Questions which follow. If you are unsure, just hit enter *
706 *************************************************************\n\n";
707 system("certtool --generate-privkey --outfile key.pem");
708 system("certtool --generate-self-signed --load-privkey key.pem --outfile cert.pem");
709 print "\nCertificate generation complete, copying to config directory... ";
710 system("mv key.pem $config{CONFIG_DIR}/key.pem");
711 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
714 print "SSL Certificates found, skipping.\n\n"
716 } elsif ($config{USE_OPENSSL} eq "y") {
718 open(TMP, "<src/modules/m_ssl_openssl.cpp") or $failed = 1;
721 print "Symlinking src/modules/m_ssl_openssl.cpp from extra/\n";
722 chdir("src/modules");
723 system("ln -s extra/m_ssl_openssl.cpp");
728 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
730 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
733 print "SSL Certificates Not found, Generating.. \n\n
734 *************************************************************
735 * Generating the certificates may take some time, go grab a *
736 * coffee, or something. *
737 *************************************************************\n\n";
738 system("openssl req -x509 -nodes -newkey rsa:1024 -keyout key.pem -out cert.pem");
739 system("openssl dhparam -out dhparams.pem 1024");
740 print "\nCertificate generation complete, copying to config directory... ";
741 system("mv key.pem $config{CONFIG_DIR}/key.pem");
742 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
743 system("mv dhparams.pem $config{CONFIG_DIR}/dhparams.pem");
746 print "SSL Certificates found, skipping.\n\n"
749 if (($config{USE_GNUTLS} eq "n") && ($config{USE_OPENSSL} eq "n")) {
750 print "Skipping SSL Certificate generation, SSL support is not available.\n\n";
758 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
759 if (($config{USE_GNUTLS} eq "y") || ($config{USE_OPENSSL} eq "y")) {
760 print "Please remember that to enable \033[1;32mSSL support\033[0m you must\n";
761 print "load the required modules in your config. This configure process\n";
762 print "has just prepared these modules to be compiled for you, and has not\n";
763 print "configured them to be compiled into the core of the ircd.\n";
765 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
766 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
767 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";
770 if ($config{GCCVER} < "3") {
772 \033[1;32mWARNING!\033[0m You are attempting to compile InspIRCd on GCC 2.x!
773 GCC 2.x series compilers only had partial (read as broken) C++ support, and
774 your compile will most likely fail horribly! If you have any problems, do NOT
775 report them to the bugtracker or forums without first upgrading your compiler
776 to a newer 3.x or 4.x (or whatever is available currently) version.
780 ################################################################################
782 ################################################################################
784 # Retrieves the .config.cache file, and loads values into the main config hash.
785 open(CACHE, ".config.cache") or return undef;
788 # Ignore Blank lines, and comments..
791 my ($key, $value) = split("=", $_);
792 $value =~ /^\"(.*)\"$/;
793 # Do something with data here!
801 # Dump the contents of %config
802 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
803 open(FILEHANDLE, ">.config.cache");
804 foreach $key (keys %config) {
805 print FILEHANDLE "$key=\"$config{$key}\"\n";
811 my ($desc, $hash_key) = @_;
814 print "In what directory $desc?\n";
815 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
816 chomp($var = <STDIN>);
818 $var = $config{$hash_key};
820 if ($var =~ /^\~\/(.+)$/) {
821 # Convert it to a full path..
822 $var = resolve_directory($ENV{HOME} . "/" . $1);
824 if (substr($var,0,1) ne "/")
826 # Assume relative Path was given.. fill in the rest.
827 $var = $this . "/$var";
829 $var = resolve_directory($var);
831 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
832 chomp($tmp = <STDIN>);
833 if (($tmp eq "") || ($tmp =~ /^y/i)) {
834 # Attempt to Create the Dir..
835 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
837 print "Unable to create directory. ($var)\n\n";
842 # They said they don't want to create, and we can't install there.
848 # Target exists, but is not a directory.
849 print "File $var exists, but is not a directory.\n\n";
853 # Either Dir Exists, or was created fine.
854 $config{$hash_key} = $var;
861 if ($config{OSNAME} =~ /BSD$/) {
862 $config{LDLIBS} = "-Ldl -lstdc++";
863 $config{FLAGS} = "-fPIC -frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
864 $config{MAKEPROG} = "gmake";
865 if ($config{OSNAME} eq "OpenBSD") {
866 chomp($foo = `eg++ -dumpversion | cut -c 1`);
867 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
868 # if theyre not running this, configure lets the build continue but they probably wont manage to
869 # compile as this standard version is 2.95.3!
871 $config{CC} = "eg++";
872 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change the compiler path
876 $config{LDLIBS} = "-ldl -lstdc++";
877 $config{FLAGS} = "-fPIC -frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
878 $config{MAKEPROG} = "make";
879 if ($config{OSNAME} =~ /CYGWIN/) {
880 $config{FLAGS} = "-frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
881 $config{LDLIBS} = "";
882 $config{MAKEPROG} = "/usr/bin/make";
883 $config{MAKEORDER} = "ircd mods";
884 } elsif ($config{OSNAME} eq "CYG-STATIC") {
885 $config{FLAGS} = "-frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
886 $config{LDLIBS} = "";
887 $config{MAKEPROG} = "/usr/bin/make";
888 $config{MAKEORDER} = "mods ircd";
889 $config{STATICLIBS} = "modules/mods.a";
890 $config{STATIC_LINK} = "yes";
893 if ($config{OSNAME} =~ /SunOS/) {
894 # solaris/sunos needs these
895 # socket = bsd sockets api
897 # rt = POSIX realtime extensions
898 # resolv = inet_aton only (why isnt this in nsl?!)
899 $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv";
917 print "Detecting modules ";
918 opendir(DIRHANDLE, "src/modules");
919 foreach $name (sort readdir(DIRHANDLE)) {
920 if ($name =~ /^m_(.+)\.cpp$/)
923 if ($mod !~ /_static$/) {
924 $modlist[$i++] = $mod;
930 print "\nOk, $i modules.\n";
937 my $data = `svn info`;
943 $data =~ /Revision: (\d+)/;
945 if (!defined($rev)) {
952 my($writeheader) = @_;
953 # First File.. inspircd_config.h
954 chomp(my $incos = `uname -n -s -r`);
955 chomp(my $version = `sh ./src/version.sh`);
956 chomp(my $revision = getrevision());
957 $version = "$version(r$revision)";
958 chomp(my $revision2 = getrevision());
959 if ($writeheader == 1)
961 print "Writing \033[1;32minspircd_config.h\033[0m\n";
962 open(FILEHANDLE, ">include/inspircd_config.h");
963 my $NL = $config{NICK_LENGT}+1;
964 my $CL = $config{CHAN_LENGT}+1;
965 print FILEHANDLE <<EOF;
966 /* Auto generated by configure, do not modify! */
967 #ifndef __CONFIGURATION_AUTO__
968 #define __CONFIGURATION_AUTO__
970 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
971 #define MOD_PATH "$config{MODULE_DIR}"
972 #define VERSION "$version"
973 #define REVISION "$revision2"
974 #define MAXCLIENTS $config{MAX_CLIENT}
975 #define MAX_DESCRIPTORS $config{MAX_DESCRIPTORS}
978 #define MAXCHANS $config{MAX_CHANNE}
979 #define OPERMAXCHANS $config{MAX_OPERCH}
980 #define MAXMODES $config{MAXI_MODES}
981 #define IDENTMAX $config{MAX_IDENT}
982 #define MAXQUIT $config{MAX_QUIT}
983 #define MAXTOPIC $config{MAX_TOPIC}
984 #define MAXKICK $config{MAX_KICK}
985 #define MAXGECOS $config{MAX_GECOS}
986 #define MAXAWAY $config{MAX_AWAY}
987 #define OPTIMISATION $config{OPTIMITEMP}
988 #define SYSTEM "$incos"
991 if ($config{OSNAME} =~ /SunOS/) {
992 print FILEHANDLE "#define IS_SOLARIS\n";
994 if ($config{OSNAME} =~ /CYGWIN/) {
995 print FILEHANDLE "#define IS_CYGWIN\n";
996 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
998 if ($config{OSNAME} eq "CYG-STATIC") {
999 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
1001 if ($config{HAS_EXECINFO} eq "1") {
1002 print FILEHANDLE "#define HAS_EXECINFO\n";
1004 if ($config{STATIC_LINK} eq "yes") {
1005 print FILEHANDLE "#define STATIC_LINK\n";
1007 if ($config{GCCVER} >= 3) {
1008 print FILEHANDLE "#define GCC3\n";
1010 if ($config{HAS_STRLCPY} eq "true") {
1011 print FILEHANDLE "#define HAS_STRLCPY\n";
1013 if ($config{HAS_STDINT} eq "true") {
1014 print FILEHANDLE "#define HAS_STDINT\n";
1016 if ($config{THREADED_DNS} =~ /y/i) {
1017 print FILEHANDLE "#define THREADED_DNS\n";
1019 if ($config{IPV6} =~/y/i) {
1020 print FILEHANDLE "#define IPV6\n";
1023 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1024 print FILEHANDLE "#define USE_KQUEUE\n";
1025 $se = "socketengine_kqueue";
1028 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1029 print FILEHANDLE "#define USE_EPOLL\n";
1030 $se = "socketengine_epoll";
1033 # user didn't choose either epoll or select for their OS.
1034 # default them to USE_SELECT (ewwy puke puke)
1036 print FILEHANDLE "#define USE_SELECT\n";
1037 $se = "socketengine_select";
1039 print FILEHANDLE "\n#endif\n";
1045 open(FILEHANDLE, ">include/inspircd_se_config.h");
1046 print FILEHANDLE <<EOF;
1047 /* Auto generated by configure, do not modify or commit to svn! */
1048 #ifndef __CONFIGURATION_SOCKETENGINE__
1049 #define __CONFIGURATION_SOCKETENGINE__
1059 # Create a Modules List..
1061 foreach $i (@modlist)
1063 if ($config{STATIC_LINK} eq "yes") {
1064 $modules .= "m_".$i.".o ";
1067 $modules .= "m_".$i.".so ";
1070 chomp($modules); # Remove Redundant whitespace..
1073 # Write all .in files.
1076 my $exe = "inspircd";
1078 if ($config{OSNAME} =~ /CYGWIN/) {
1079 $exe = "inspircd.exe";
1082 opendir(DIRHANDLE, $this);
1083 if ($config{THREADED_DNS} =~ /y/i) {
1084 $config{LDLIBS} = $config{LDLIBS} . " -pthread";
1086 foreach $name (sort readdir(DIRHANDLE)) {
1087 if ($name =~ /^\.(.+)\.inc$/) {
1089 # All .name.inc files need parsing!
1091 open(FILEHANDLE, ".$file.inc");
1092 while (<FILEHANDLE>) {
1097 $tmp =~ s/\@CC\@/$config{CC}/;
1098 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
1099 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
1100 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
1101 $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/;
1102 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
1103 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
1104 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
1105 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
1106 $tmp =~ s/\@MODULES\@/$modules/;
1107 $tmp =~ s/\@EXECUTABLE\@/$exe/;
1108 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
1109 $tmp =~ s/\@STATICLIBS\@/$config{STATICLIBS}/;
1111 print "Writing \033[1;32m$file\033[0m\n";
1112 open(FILEHANDLE, ">$file");
1113 print FILEHANDLE $tmp;
1116 closedir(DIRHANDLE);
1118 # Make inspircd executable!
1119 chmod 0744, 'inspircd';
1121 if ($config{STATIC_LINK} eq "yes") {
1122 print "Writing static-build \033[1;32msrc/Makefile\033[0m\n";
1123 write_static_makefile();
1124 write_static_modules_makefile();
1125 } elsif ($config{OSNAME} =~ /CYGWIN/) {
1126 print "Writing cygwin-build \033[1;32msrc/Makefile\033[0m\n";
1127 write_static_makefile();
1128 write_dynamic_modules_makefile();
1130 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
1131 write_dynamic_makefile();
1132 write_dynamic_modules_makefile();
1136 sub getcompilerflags {
1140 if ($_ =~ /^\/\* \$CompileFlags: (.+) \*\/$/) {
1149 sub getlinkerflags {
1153 if ($_ =~ /^\/\* \$LinkerFlags: (.+) \*\/$/) {
1163 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";
1164 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";
1165 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";
1166 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";
1167 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";
1168 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";
1169 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";
1170 print "\033[0m\033[0m....::..::::..:::......:::..:::::::::....::..:::::..:::......:::........:::\n\n";
1173 sub resolve_directory {
1175 return File::Spec->rel2abs($_[0]);
1179 my ($flag,$prompt) = @_;
1180 print "$prompt [\033[1;32m$config{$flag}\033[0m] -> ";
1181 chomp($tmp = <STDIN>);
1182 if ($tmp eq "") { $tmp = $config{$flag} }
1184 if (($tmp eq "") || ($tmp =~ /^y/i)) {
1185 $config{$flag} = "y";
1187 $config{$flag} = "n";
1192 sub write_static_modules_makefile {
1193 # Modules Makefile..
1194 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1195 open(FILEHANDLE, ">src/modules/Makefile");
1198 # Module Makefile Header
1200 print FILEHANDLE <<EOF;
1201 # (C) ChatSpike development team
1202 # Makefile by <Craig\@ChatSpike.net>
1203 # Many Thanks to Andrew Church <achurch\@achurch.org>
1204 # for assisting with making this work right.
1206 # Automatically Generated by ./configure to add a modules
1207 # please run ./configure --update
1213 # End Module Makefile Header
1216 # Create a Modules List..
1221 open(MODLIST,">include/modlist.h");
1224 # Include File Header
1226 print MODLIST <<HEADER;
1227 // Generated automatically by configure. DO NOT EDIT!
1229 #ifndef __SYMBOLS__H_CONFIGURED__
1230 #define __SYMBOLS__H_CONFIGURED__
1234 # End Include File Header
1237 # Place Module List into Include
1238 foreach $i (@modlist) {
1239 if ($i !~ /_static$/) {
1240 print MODLIST "extern \"C\" void * $i\_init (void);\n";
1243 print MODLIST "\nstruct {const char *name; initfunc *value; } modsyms[] = {\n";
1248 foreach $i (@modlist)
1250 if ($i !~ /_static$/) {
1251 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1252 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1255 # Write Entry to the Makefile
1257 print FILEHANDLE <<EOCHEESE;
1258 m_$i.o: .m_$i\_static.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h
1259 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c .m_$i\_static.cpp
1260 mv .m_$i\_static.o ../m_$i.o
1264 # End Write Entry to the MakeFile
1266 print "Configuring module [\033[1;32mm_$i.so\033[0m] for static linking... ";
1267 open(MODULE,"<src/modules/m_".$i.".cpp") or die("Could not open m_".$i.".cpp");
1268 open(MUNGED,">src/modules/.m_".$i."_static.cpp") or die("Could not create .m_".$i."_static.cpp");
1269 while (chomp($a = <MODULE>)) {
1270 $a =~ s/init_module/$i\_init/g;
1271 print MUNGED "$a\n";
1275 print MODLIST <<EOENT;
1276 {"m_$i.so",\&$i\_init},
1281 print MODLIST "{0}};\n\n#endif\n";
1285 sub write_dynamic_modules_makefile {
1286 # Modules Makefile..
1287 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1288 open(FILEHANDLE, ">src/modules/Makefile");
1291 if ($config{OSNAME} =~ /CYGWIN/) {
1292 $extra = "../inspircd.dll.a";
1296 # Module Makefile Header
1298 print FILEHANDLE <<EOF;
1299 # (C) ChatSpike development team
1300 # Makefile by <Craig\@ChatSpike.net>
1301 # Many Thanks to Andrew Church <achurch\@achurch.org>
1302 # for assisting with making this work right.
1304 # Automatically Generated by ./configure to add a modules
1305 # please run ./configure -update or ./configure -modupdate
1311 # End Module Makefile Header
1314 # Create a Modules List..
1320 foreach $i (@modlist) {
1322 # Write Entry to the MakeFile
1324 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1325 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1326 print FILEHANDLE <<EOCHEESE;
1327 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
1328 \$(CC) -pipe -I../../include \$(FLAGS) $cmflags -export-dynamic -c m_$i.cpp
1329 \$(CC) \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o $extra
1332 $crud = $crud . " \@install -v -m 0700 m_$i.so \$(MODPATH)\n";
1334 # End Write Entry to the MakeFile
1337 print FILEHANDLE "modinst:\n \@echo \"Installing modules...\"\n" . $crud;
1341 sub write_static_makefile {
1342 open(FH,">src/Makefile") or die("Could not write src/Makefile!");
1345 opendir(DIRHANDLE, "src");
1346 foreach $name (sort readdir(DIRHANDLE)) {
1347 if ($name =~ /^cmd_(.+)\.cpp$/) {
1348 $cmdlist[$i++] = $1;
1351 closedir(DIRHANDLE);
1354 foreach my $cmd (@cmdlist) {
1355 $cmdobjs = $cmdobjs . "cmd_$cmd.o ";
1356 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1361 # (C) ChatSpike development team
1362 # Makefile by <Craig\@ChatSpike.net>
1363 # Makefile version 2 (statically linked core) by <brain\@inspircd.org>
1366 CC = im a cheezeball
1368 CXXFLAGS = -I../include \${FLAGS}
1369 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1370 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1374 $se = "socketengine_select";
1375 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1376 $se = "socketengine_kqueue";
1378 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1379 $se = "socketengine_epoll";
1383 # This next section is for cygwin dynamic module builds.
1384 # Basically, what we do, is build the inspircd core as a library
1385 # then the main executable uses that. the library is capable of
1386 # loading / unloading the modules dynamically :)
1387 # Massive thanks to the guys on #cygwin @ irc.freenode.net for helping
1391 if ($config{OSNAME} =~ /CYGWIN/) {
1393 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 dnsqueue.o dynamic.o users.o modules.o wildcard.o helperfuncs.o snomasks.o inspircd.exe
1395 inspircd.exe: inspircd.dll.a
1398 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 dnsqueue.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
1399 \$(CC) -shared -Wl,--out-implib=inspircd.dll.a -o inspircd.dll \$^
1403 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 dnsqueue.o dynamic.o users.o modules.o wildcard.o helperfuncs.o snomasks.o \$(MODULES) inspircd.exe
1405 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
1406 \$(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 dnsqueue.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)
1412 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
1413 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1415 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
1416 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1418 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
1419 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1421 userprocess.o: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1422 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1424 socketengine.o: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1425 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1427 hashcomp.o: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1428 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1430 helperfuncs.o: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1431 \$(CC) -pipe -I/usr/local/include -L/usr/local/lib -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1433 channels.o: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1434 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1436 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)
1437 \${MAKE} -C "modes" DIRNAME="src/modes" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1438 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1440 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
1441 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1443 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
1444 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1446 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
1447 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1449 base.o: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1450 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1452 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
1453 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1455 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
1456 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
1458 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
1459 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp $cmdobjs
1461 dnsqueue.o: dnsqueue.cpp ../include/base.h ../include/dnsqueue.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1462 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dnsqueue.cpp
1464 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
1465 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1467 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
1468 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1470 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
1471 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1473 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
1474 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1476 socket.o: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1477 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1479 inspsocket.o: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1480 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1482 aes.o: aes.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1483 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c aes.cpp
1485 timer.o: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1486 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1489 foreach my $cmd (@cmdlist) {
1491 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
1492 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1498 sub write_dynamic_makefile {
1502 opendir(DIRHANDLE, "src");
1503 foreach $name (sort readdir(DIRHANDLE)) {
1504 if ($name =~ /^cmd_(.+)\.cpp$/) {
1505 $cmdlist[$i++] = $1;
1508 closedir(DIRHANDLE);
1512 foreach my $cmd (@cmdlist) {
1513 $cmdobjs = $cmdobjs . "cmd_$cmd.o ";
1514 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1517 if (($config{OSNAME} !~ /Linux/i) && ($config{HAS_EXECINFO} eq "1")) {
1518 $extra = "-L/usr/local/lib -lexecinfo";
1523 $se = "socketengine_select";
1524 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1525 $se = "socketengine_kqueue";
1527 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1528 $se = "socketengine_epoll";
1531 open(FH,">src/Makefile") or die("Could not write src/Makefile");
1535 # (C) ChatSpike development team
1536 # Makefile by <Craig\@ChatSpike.net>
1537 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
1540 CC = im a cheezeball
1542 CXXFLAGS = -I../include \${FLAGS}
1543 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1544 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1546 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 libIRCDdnsqueue.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDcommand_parse.so libIRCDsnomasks.so inspircd
1548 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 libIRCDdnsqueue.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDcommand_parse.so
1549 \$(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 libIRCDdnsqueue.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
1551 libIRCDsocketengine.so: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1552 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1553 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocketengine.so socketengine.o $se.o
1555 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
1556 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1557 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsnomasks.so snomasks.o
1559 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
1560 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1561 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommand_parse.so command_parse.o
1563 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
1564 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1565 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcull_list.so cull_list.o
1567 libIRCDuserprocess.so: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1568 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1569 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDuserprocess.so userprocess.o
1571 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1572 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1573 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhash.so hashcomp.o
1575 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1576 \$(CC) -pipe -I/usr/local/include -L/usr/local/lib -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1577 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhelper.so helperfuncs.o
1579 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1580 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1581 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDchannels.so channels.o
1583 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)
1584 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1585 \${MAKE} -C "modes" DIRNAME="src/modes" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1586 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmode.so mode.o modes/modeclasses.a
1588 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
1589 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1590 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDxline.so xline.o
1592 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
1593 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1594 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDstring.so inspstring.o
1596 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
1597 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1598 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDasyncdns.so dns.o
1600 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1601 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1602 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDbase.so base.o
1604 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
1605 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1606 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDconfigreader.so configreader.o
1608 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
1609 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
1610 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmessage.so message.o
1612 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
1613 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1614 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommands.so commands.o $cmdobjs
1616 libIRCDdnsqueue.so: dnsqueue.cpp ../include/base.h ../include/dnsqueue.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1617 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dnsqueue.cpp
1618 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDdnsqueue.so dnsqueue.o
1620 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
1621 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1622 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDdynamic.so dynamic.o
1624 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
1625 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1626 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDusers.so users.o
1628 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
1629 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1630 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmodules.so modules.o
1632 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
1633 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1634 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDwildcard.so wildcard.o
1636 libIRCDsocket.so: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1637 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1638 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocket.so socket.o
1640 libIRCDinspsocket.so: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1641 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1642 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDinspsocket.so inspsocket.o
1644 libIRCDaes.so: aes.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1645 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c aes.cpp
1646 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDaes.so aes.o
1648 libIRCDtimer.so: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1649 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1650 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDtimer.so timer.o
1653 foreach my $cmd (@cmdlist) {
1655 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
1656 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp