2 ###################################################
3 # InspIRCd Configuration Script
5 # Copyright 2002-2007 The InspIRCd Development Team
6 # http://www.inspircd.org/wiki/index.php/Credits
8 # Licensed under GPL, please see the COPYING file
13 ###################################################
20 # Utility functions for our buildsystem
24 use make::opensslcert;
27 'enable-gnutls' => \$opt_use_gnutls,
28 'rebuild' => \$opt_rebuild,
29 'enable-openssl' => \$opt_use_openssl,
30 'disable-interactive' => \$opt_nointeractive,
31 'with-nick-length=i' => \$opt_nick_length,
32 'with-channel-length=i' => \$opt_chan_length,
33 'with-max-clients=i' => \$opt_maxclients,
34 'enable-ports' => \$opt_ports,
35 'enable-epoll' => \$opt_epoll,
36 'enable-kqueue' => \$opt_kqueue,
37 'disable-ports' => \$opt_noports,
38 'disable-epoll' => \$opt_noepoll,
39 'disable-kqueue' => \$opt_nokqueue,
40 'enable-ipv6' => \$opt_ipv6,
41 'enable-remote-ipv6' => \$opt_ipv6links,
42 'disable-remote-ipv6' => \$opt_noipv6links,
43 'with-cc=s' => \$opt_cc,
44 'with-ident-length=i' => \$opt_ident,
45 'with-quit-length=i' => \$opt_quit,
46 'with-topic-length=i' => \$opt_topic,
47 'with-maxbuf=i' => \$opt_maxbuf,
48 'with-kick-length=i' => \$opt_kick,
49 'with-gecos-length=i' => \$opt_gecos,
50 'with-away-length=i' => \$opt_away,
51 'with-max-modes=i' => \$opt_modes,
52 'prefix=s' => \$opt_base_dir,
53 'config-dir=s' => \$opt_config_dir,
54 'module-dir=s' => \$opt_module_dir,
55 'binary-dir=s' => \$opt_binary_dir,
56 'library-dir=s' => \$opt_library_dir,
57 'disable-debuginfo' => sub { $opt_disable_debug = 1 },
58 'help' => sub { showhelp(); },
59 'modupdate' => sub { modupdate(); },
60 'update' => sub { update(); },
61 'svnupdate' => sub { svnupdate(); },
62 'clean' => sub { clean(); },
65 my $non_interactive = (
66 (defined $opt_library_dir) ||
67 (defined $opt_base_dir) ||
68 (defined $opt_config_dir) ||
69 (defined $opt_module_dir) ||
70 (defined $opt_base_dir) ||
71 (defined $opt_binary_dir) ||
72 (defined $opt_nointeractive) ||
73 (defined $opt_away) ||
74 (defined $opt_gecos) ||
75 (defined $opt_kick) ||
76 (defined $opt_maxclients) ||
77 (defined $opt_modes) ||
78 (defined $opt_topic) ||
79 (defined $opt_quit) ||
80 (defined $opt_ident) ||
82 (defined $opt_ipv6) ||
83 (defined $opt_ipv6links) ||
84 (defined $opt_noipv6links) ||
85 (defined $opt_kqueue) ||
86 (defined $opt_epoll) ||
87 (defined $opt_ports) ||
88 (defined $opt_maxchans) ||
89 (defined $opt_opermaxchans) ||
90 (defined $opt_chan_length) ||
91 (defined $opt_nick_length) ||
92 (defined $opt_use_openssl) ||
93 (defined $opt_nokqueue) ||
94 (defined $opt_noepoll) ||
95 (defined $opt_noports) ||
96 (defined $opt_maxbuf) ||
97 (defined $opt_use_gnutls)
99 my $interactive = !$non_interactive;
102 chomp($topdir = getcwd());
103 $this = resolve_directory($topdir); # PWD, Regardless.
104 @modlist = (); # Declare for Module List..
105 %config = (); # Initiate Configuration Hash..
106 $config{ME} = resolve_directory($topdir); # Present Working Directory
108 $config{BASE_DIR} = $config{ME};
110 if (defined $opt_base_dir)
112 $config{BASE_DIR} = $opt_base_dir;
115 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Directory
116 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
117 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
118 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
120 if (defined $opt_config_dir)
122 $config{CONFIG_DIR} = $opt_config_dir;
124 if (defined $opt_module_dir)
126 $config{MODULE_DIR} = $opt_module_dir;
128 if (defined $opt_binary_dir)
130 $config{BINARY_DIR} = $opt_binary_dir;
132 if (defined $opt_library_dir)
134 $config{LIBRARY_DIR} = $opt_library_dir;
136 chomp($config{HAS_GNUTLS} = `libgnutls-config --version 2>/dev/null | cut -c 1,2,3`); # GNUTLS Version.
137 chomp($config{HAS_OPENSSL} = `pkg-config --modversion openssl 2>/dev/null`); # Openssl version
138 chomp($gnutls_ver = $config{HAS_GNUTLS});
139 chomp($openssl_ver = $config{HAS_OPENSSL});
140 $config{USE_GNUTLS} = "n";
141 if (defined $opt_use_gnutls)
143 $config{USE_GNUTLS} = "y"; # Use gnutls.
145 $config{USE_OPENSSL} = "n"; # Use openssl.
146 if (defined $opt_use_openssl)
148 $config{USE_OPENSSL} = "y";
151 # no, let's not change these.
152 $config{OPTIMITEMP} = "0"; # Default Optimisation Value
153 if (!defined $opt_disable_debug)
155 $config{OPTIMISATI} = "-g1"; # Optimisation Flag
159 $config{OPTIMISATI} = "-O2"; # DEBUGGING OFF!
162 $config{NICK_LENGT} = "31"; # Default Nick Length
163 if (defined $opt_nick_length)
165 $config{NICK_LENGT} = $opt_nick_length;
167 $config{CHAN_LENGT} = "64"; # Default Channel Name Length
168 if (defined $opt_chan_length)
170 $config{CHAN_LENGT} = $opt_chan_length;
172 $config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once.
173 if (defined $opt_modes)
175 $config{MAXI_MODES} = $opt_modes;
177 $config{HAS_STRLCPY} = "false"; # strlcpy Check.
178 $config{HAS_STDINT} = "false"; # stdint.h check
179 $config{USE_KQUEUE} = "y"; # kqueue enabled
180 if (defined $opt_kqueue)
182 $config{USE_KQUEUE} = "y";
184 if (defined $opt_nokqueue)
186 $config{USE_KQUEUE} = "n";
188 $config{USE_EPOLL} = "y"; # epoll enabled
189 if (defined $opt_epoll)
191 $config{USE_EPOLL} = "y";
193 if (defined $opt_noepoll)
195 $config{USE_EPOLL} = "n";
197 $config{USE_PORTS} = "y"; # epoll enabled
198 if (defined $opt_ports)
200 $config{USE_PORTS} = "y";
202 if (defined $opt_noports)
204 $config{USE_PORTS} = "n";
206 $config{IPV6} = "n"; # IPv6 support (experimental)
207 if (defined $opt_ipv6)
211 $config{SUPPORT_IP6LINKS} = "y"; # IPv4 supporting IPv6 links (experimental)
212 if (defined $opt_ipv6links)
214 $config{SUPPORT_IP6LINKS} = "y";
216 if (defined $opt_noipv6links)
218 $config{SUPPORT_IP6LINKS} = "n";
220 chomp($config{MAX_CLIENT_T} = `sh -c \"ulimit -n\"`); # FD Limit
221 chomp($config{MAX_DESCRIPTORS} = `sh -c \"ulimit -n\"`); # Hard FD Limit
222 chomp($config{GCCVER} = `g++ -dumpversion | cut -c 1`); # Major GCC Version
223 $config{_SOMAXCONN} = SOMAXCONN; # Max connections in accept queue
224 $config{OSNAME} = $^O; # Operating System Name
225 $config{IS_DARWIN} = "NO"; # Is OSX?
226 $config{STARTSCRIPT} = "inspircd"; # start script?
227 $config{DESTINATION} = "BASE"; # Is target path.
228 $config{EXTRA_DIR} = ""; # Is empty.
229 if ($config{OSNAME} =~ /darwin/i)
231 $config{IS_DARWIN} = "YES";
232 $config{STARTSCRIPT} = "org.inspircd.plist"; # start script for OSX.
233 $config{DESTINATION} = "LAUNCHDPATH"; # Is OSX target.
234 $config{EXTRA_DIR} = " launchd_dir"; # Is OSX specific path.
236 $config{CC} = "g++"; # C++ compiler
239 $config{CC} = $opt_cc;
241 $exec = $config{CC} . " -dumpversion | cut -c 1";
242 chomp($config{GCCVER} = `$exec`); # Major GCC Version
243 $config{MAKEORDER} = "ircd mods"; # build order
244 $config{MAX_IDENT} = "12"; # max ident size
245 $config{MAX_QUIT} = "255"; # max quit message size
246 $config{MAX_TOPIC} = "307"; # max topic size
247 $config{MAX_KICK} = "255"; # max kick message size
248 $config{MAX_GECOS} = "128"; # max GECOS size
249 $config{MAX_AWAY} = "200"; # max AWAY size
250 $config{MAXBUF} = "512"; # Max buffer size
251 if (defined $opt_ident)
253 $config{MAX_IDENT} = $opt_ident;
255 if (defined $opt_quit)
257 $config{MAX_QUIT} = $opt_quit;
259 if (defined $opt_topic)
261 $config{MAX_TOPIC} = $opt_topic;
263 if (defined $opt_kick)
265 $config{MAX_KICK} = $opt_kick;
267 if (defined $opt_gecos)
269 $config{MAX_GECOS} = $opt_gecos;
271 if (defined $opt_away)
273 $config{MAX_AWAY} = $opt_away;
276 $config{HAS_OPENSSL} =~ /^([-[:digit:].]+)([a-z])?(\-[a-z][0-9])?$/;
277 $config{HAS_OPENSSL} = $1;
279 if ($config{GCCVER} eq "") {
280 print $config{CC} . " was not found! You require g++ (the GNU C++ compiler, part of GCC) to build InspIRCd!\n";
284 if (!$config{MAX_CLIENT_T}) {
285 $config{MAX_CLIENT_T} = 1024; # Set a reasonable 'Default'
286 $fd_scan_fail = "true"; # Used Later
289 # Get and Set some important vars..
294 system("rm -rf .config.cache");
300 chomp($topdir = getcwd());
301 $this = resolve_directory($topdir); # PWD, Regardless.
303 # Does the cache file exist?
305 # No, No it doesn't.. *BASH*
306 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
309 # We've Loaded the cache file and all our variables..
310 print "Updating Files..\n";
312 if ($opt_disable_debug == 1)
314 print "Disabling debug information (-g).\n";
315 $config{OPTIMISATI} = "";
318 $has_epoll = $config{HAS_EPOLL};
319 $has_ports = $config{HAS_PORTS};
320 $has_kqueue = $config{HAS_KQUEUE};
329 print "Configure update failed: $@\n";
337 chomp($topdir = getcwd());
338 $this = resolve_directory($topdir); # PWD, Regardless.
340 # Does the cache file exist?
342 # No, No it doesn't.. *BASH*
343 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
346 # We've Loaded the cache file and all our variables..
347 print "Updating Files..\n";
349 $has_epoll = $config{HAS_EPOLL};
350 $has_ports = $config{HAS_PORTS};
351 $has_kqueue = $config{HAS_KQUEUE};
360 print "Module update failed: $@\n";
370 open(FH,"<.svn/entries") or $fail = 1;
372 print "This is not an SVN copy of InspIRCd.\n";
379 system("svn update");
380 system("perl configure -update");
381 if (defined $opt_rebuild) {
382 system("make install");
387 print "Running non-interactive configure...\n" unless $interactive;
388 print "Checking for cache from previous configure... ";
389 print ((!getcache()) ? "not found\n" : "found\n");
390 print "Checking operating system version... ";
391 print getosflags() . "\n";
393 if (defined $opt_maxclients)
395 $config{MAX_CLIENT} = $opt_maxclients;
398 if (!$config{MAX_CLIENT}) {
399 # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this
400 # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go
401 # higher than the found value" :))
402 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
405 printf "Checking if stdint.h exists... ";
406 $config{HAS_STDINT} = "true";
408 open(STDINT, "</usr/include/stdint.h") or $config{HAS_STDINT} = "false";
409 if ($config{HAS_STDINT} eq "true") {
412 print "yes\n" if $config{HAS_STDINT} eq "true";
413 print "no\n" if $config{HAS_STDINT} eq "false";
416 printf "Checking if strlcpy exists... ";
417 # Perform the strlcpy() test..
418 $config{HAS_STRLCPY} = "false";
420 open(STRLCPY, "</usr/include/string.h") or $fail = 1;
422 while (chomp($line = <STRLCPY>)) {
423 # try and find the delcaration of:
424 # size_t strlcpy(...)
425 if ($line =~ /size_t(\0x9|\s)+strlcpy/) {
426 $config{HAS_STRLCPY} = "true";
431 print "yes\n" if $config{HAS_STRLCPY} eq "true";
432 print "no\n" if $config{HAS_STRLCPY} eq "false";
435 printf "Checking if kqueue exists... ";
438 open(KQUEUE, "</usr/include/sys/event.h") or $fail = 1;
440 while (chomp($line = <KQUEUE>)) {
441 # try and find the delcaration of:
443 if ($line =~ /int(\0x9|\s)+kqueue/) {
449 print "yes\n" if $has_kqueue == 1;
450 print "no\n" if $has_kqueue == 0;
452 printf "Checking if epoll exists... ";
455 open(EPOLL, "</usr/include/sys/epoll.h") or $fail = 1;
461 my $kernel = `uname -r`;
463 if (($kernel =~ /^2\.0\./) || ($kernel =~ /^2\.2\./) || ($kernel =~ /^2\.4\./)) {
468 # Suggestion from nenolod, weed out odd systems which have glibc built
469 # against 2.4 kernels (ick)
470 my $kernel_arch = `uname -p`;
474 if ($kernel_arch =~ /x86_64/) {
475 open (FH,"/lib64/libc.so.6|") or $has_epoll = 0;
478 open (FH,"/lib/libc.so.6|") or $has_epoll = 0;
482 while (chomp($line = <FH>))
484 if ($line =~ /GNU C Library .* version (.*?) /)
487 $libcv =~ /([0-9\.\-])+/;
490 elsif ($line =~ /Compiled on a Linux (.*?\..*?)\.* system/)
493 # Fix for some retarded libc builds, strip off >> and << etc.
494 $kernelv =~ /([0-9\.\-])+/;
502 printf "libc too old: $libcv... ";
507 printf "libc built against older kernel $kernelv... ";
512 print "yes\n" if $has_epoll == 1;
513 print "no\n" if $has_epoll == 0;
515 printf "Checking if Solaris I/O completion ports are available... ";
517 my $system = `uname -s`;
519 $has_ports = 1 if ($system eq "SunOS");
522 my $kernel = `uname -r`;
524 if (($kernel !~ /^5\.1./)) {
528 print "yes\n" if $has_ports == 1;
529 print "no\n" if $has_ports == 0;
531 $config{HAS_EPOLL} = $has_epoll;
532 $config{HAS_KQUEUE} = $has_kqueue;
534 printf "Checking for libgnutls... ";
535 if (($config{HAS_GNUTLS}) && (($config{HAS_GNUTLS} >= 1.2) || ($config{HAS_GNUTLS} eq "y"))) {
537 $config{HAS_GNUTLS} = "y";
540 $config{HAS_GNUTLS} = "n";
543 printf "Checking for openssl... ";
544 if (($config{HAS_OPENSSL}) && (($config{HAS_OPENSSL} >= 0.8) || ($config{HAS_OPENSSL} eq "y"))) {
546 $config{HAS_OPENSSL} = "y";
549 $config{HAS_OPENSSL} = "n";
552 ################################################################################
553 # BEGIN INTERACTIVE PART #
554 ################################################################################
562 my $rev = getrevision();
563 # Display Introduction Message..
565 Welcome to the \033[1mInspIRCd\033[0m Configuration program! (\033[1minteractive mode\033[0m)
566 \033[1mPackage maintainers: Type ./configure --help for non-interactive help\033[0m
568 *** If you are unsure of any of these values, leave it blank for ***
569 *** standard settings that will work, and your server will run ***
570 *** using them. Please consult your IRC network admin if in doubt. ***
572 Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter
573 a new value. Please note: You will \033[1mHAVE\033[0m to read the docs
574 dir, otherwise you won't have a config file!
576 Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos)
577 Maximum file descriptors: \033[1;32m$config{MAX_CLIENT_T}\033[0m
578 Your InspIRCd revision ID is \033[1;32mr$rev\033[0m";
580 print " (Non-SVN build)";
584 $config{CHANGE_COMPILER} = "n";
585 print "I have detected the following compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
587 while (($config{GCCVER} < 3) || ($config{GCCVER} eq "")) {
588 print "\033[1;32mIMPORTANT!\033[0m A GCC 2.x compiler has been detected, and
589 should NOT be used. You should probably specify a newer compiler.\n\n";
590 yesno(CHANGE_COMPILER,"Do you want to change the compiler?");
591 if ($config{CHANGE_COMPILER} =~ /y/i) {
592 print "What command do you want to use to invoke your compiler?\n";
593 print "[\033[1;32m$config{CC}\033[0m] -> ";
594 chomp($config{CC} = <STDIN>);
595 if ($config{CC} eq "") {
598 chomp($foo = `$config{CC} -dumpversion | cut -c 1`);
600 chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change compilers
601 print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
602 if ($config{GCCVER} < 3) {
603 print "\033[1;32mGCC 2.x WILL NOT WORK!\033[0m. Let's try that again, shall we?\n";
607 print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n";
614 # Directory Settings..
615 my $tmpbase = $config{BASE_DIR};
616 dir_check("do you wish to install the InspIRCd base", "BASE_DIR");
617 if ($tmpbase ne $config{BASE_DIR}) {
618 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Dir
619 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
620 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
621 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
624 dir_check("are the configuration files", "CONFIG_DIR");
625 dir_check("are the modules to be compiled to", "MODULE_DIR");
626 dir_check("is the IRCd binary to be placed", "BINARY_DIR");
627 dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
630 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?");
634 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?");
638 yesno(USE_PORTS,"You are running Solaris 10.\nWould you like to enable I/O completion ports support?\nThis is likely to increase performance.\nIf you are unsure, answer yes.\n\nEnable support for I/O completion ports?");
641 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y") || ($config{USE_PORTS} eq "y"));
642 if (!$chose_hiperf) {
643 print "No high-performance socket engines are available, or you chose\n";
644 print "not to enable one. Defaulting to select() engine.\n\n";
647 yesno(IPV6,"Would you like to build InspIRCd with IPv6 support?");
650 if ($config{IPV6} eq "y") {
651 print "You have chosen to build an \033[1;32mIPV6-enabled\033[0m server.\nTo accept IPV4 users, you can still use IPV4 addresses\nin your port bindings..\n\n";
652 $config{SUPPORT_IP6LINKS} = "y";
654 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?\nIf you are using a recent operating\nsystem and are unsure, answer yes.\nIf you answer 'no' here, your InspIRCd server will be unable\nto parse IPV6 addresses (e.g. for CIDR bans)");
658 if (($config{HAS_GNUTLS} eq "y") && ($config{HAS_OPENSSL} eq "y")) {
659 print "I have detected both \033[1;32mGnuTLS\033[0m and \033[1;32mOpenSSL\033[0m on your system.\n";
660 print "I will default to GnuTLS. If you wish to use OpenSSL\n";
661 print "instead, you should enable the OpenSSL module yourself\n";
662 print "by copying it from src/modules/extra to src/modules.\n\n";
663 print "Detected GnuTLS version: \033[1;32m" . $gnutls_ver . "\033[0m\n";
664 print "Detected OpenSSL version: \033[1;32m" . $openssl_ver . "\033[0m\n\n";
667 if ($config{HAS_GNUTLS} eq "y") {
668 yesno(USE_GNUTLS, "Would you like to enable SSL Support?");
669 if ($config{USE_GNUTLS} eq "y") {
670 print "\nUsing GnuTLS SSL module.\n";
672 } elsif ($config{HAS_OPENSSL} eq "y") {
673 yesno(USE_OPENSSL, "Would you like to enable SSL Support?");
674 if ($config{USE_OPENSSL} eq "y") {
675 print "\nUsing OpenSSL SSL module.\nYou will get better performance if you move to GnuTLS in the future.\n";
679 print "\nCould not detect OpenSSL or GnuTLS. Make sure pkg-config is installed if\nyou intend to use OpenSSL, or that GnuTLS is in your path if you intend\nto use GnuTLS.\n\n";
682 print "\nThe following questions will ask you for various figures relating\n";
683 print "To your IRCd install. Please note that these should usually be left\n";
684 print "as defaults unless you have a real reason to change them. If they\n";
685 print "changed, then the values must be identical on all servers on your\n";
686 print "network, or malfunctions and/or crashes may occur, with the exception\n";
687 print "of the 'maximum number of clients' setting which may be different on\n";
688 print "different servers on the network.\n\n";
690 # File Descriptor Settings..
691 promptnumeric("number of clients at any one time", "MAX_CLIENT_T");
692 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
693 $config{MAX_DESCRIPTORS} = $config{MAX_CLIENT_T};
695 promptnumeric("length of nicknames", "NICK_LENGT");
696 promptnumeric("length of channel names", "CHAN_LENGT");
697 promptnumeric("number of mode changes in one line", "MAXI_MODES");
698 promptnumeric("length of an ident (username)", "MAX_IDENT");
699 promptnumeric("length of a quit message", "MAX_QUIT");
700 promptnumeric("length of a channel topic", "MAX_TOPIC");
701 promptnumeric("length of a kick message", "MAX_KICK");
702 promptnumeric("length of a GECOS (real name)", "MAX_GECOS");
703 promptnumeric("length of an away message", "MAX_AWAY");
708 if (($config{USE_GNUTLS} eq "y") && ($config{HAS_GNUTLS} ne "y"))
710 print "Sorry, but i couldn't detect gnutls. Make sure gnutls-config is in your path.\n";
713 if (($config{USE_OPENSSL} eq "y") && ($config{HAS_OPENSSL} ne "y"))
715 print "Sorry, but i couldn't detect openssl. Make sure openssl is in your path.\n";
719 if ($config{USE_GNUTLS} eq "y") {
721 open(TMP, "<src/modules/m_ssl_gnutls.cpp") or $failed = 1;
724 print "Symlinking src/modules/m_ssl_gnutls.cpp from extra/\n";
725 chdir("src/modules");
726 system("ln -s extra/m_ssl_gnutls.cpp");
733 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
735 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
738 print "SSL Certificates Not found, Generating.. \n\n
739 *************************************************************
740 * Generating the Private Key may take some time, go grab a *
741 * Coffee. Even better, to generate some more entropy if it *
742 * is taking a while, open another console and type du / a *
743 * few times and get that HD going :) Then answer the *
744 * Questions which follow. If you are unsure, just hit enter *
745 *************************************************************\n\n";
746 $failed = make_gnutls_cert();
748 print "\n\033[1;32mCertificate generation failed!\033[0m\n\n";
750 print "\nCertificate generation complete, copying to config directory... ";
751 system("mv key.pem $config{CONFIG_DIR}/key.pem");
752 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
757 print "SSL Certificates found, skipping.\n\n";
762 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
764 } elsif ($config{USE_OPENSSL} eq "y") {
766 open(TMP, "<src/modules/m_ssl_openssl.cpp") or $failed = 1;
769 print "Symlinking src/modules/m_ssl_openssl.cpp from extra/\n";
770 chdir("src/modules");
771 system("ln -s extra/m_ssl_openssl.cpp");
778 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
780 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
783 print "SSL Certificates Not found, Generating.. \n\n
784 *************************************************************
785 * Generating the certificates may take some time, go grab a *
786 * coffee, or something. *
787 *************************************************************\n\n";
789 print "\nCertificate generation complete, copying to config directory... ";
790 system("mv key.pem $config{CONFIG_DIR}/key.pem");
791 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
792 system("mv dhparams.pem $config{CONFIG_DIR}/dhparams.pem");
795 print "SSL Certificates found, skipping.\n\n"
800 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
803 if (($config{USE_GNUTLS} eq "n") && ($config{USE_OPENSSL} eq "n")) {
804 print "Skipping SSL Certificate generation, SSL support is not available.\n\n";
812 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
813 if (($config{USE_GNUTLS} eq "y") || ($config{USE_OPENSSL} eq "y")) {
814 print "Please remember that to enable \033[1;32mSSL support\033[0m you must\n";
815 print "load the required modules in your config. This configure process\n";
816 print "has just prepared these modules to be compiled for you, and has not\n";
817 print "configured them to be compiled into the core of the ircd.\n";
819 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
820 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
821 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";
824 if ($config{GCCVER} < "3") {
826 \033[1;32mWARNING!\033[0m You are attempting to compile InspIRCd on GCC 2.x!
827 GCC 2.x series compilers only had partial (read as broken) C++ support, and
828 your compile will most likely fail horribly! If you have any problems, do NOT
829 report them to the bugtracker or forums without first upgrading your compiler
830 to a newer 3.x or 4.x (or whatever is available currently) version.
834 ################################################################################
836 ################################################################################
838 # Retrieves the .config.cache file, and loads values into the main config hash.
839 open(CACHE, ".config.cache") or return 0;
842 # Ignore Blank lines, and comments..
845 my ($key, $value) = split("=", $_, 2);
846 $value =~ /^\"(.*)\"$/;
847 # Do something with data here!
855 # Dump the contents of %config
856 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
857 open(FILEHANDLE, ">.config.cache");
858 foreach $key (keys %config) {
859 print FILEHANDLE "$key=\"$config{$key}\"\n";
865 my ($desc, $hash_key) = @_;
868 print "In what directory $desc?\n";
869 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
870 chomp($var = <STDIN>);
872 $var = $config{$hash_key};
874 if ($var =~ /^\~\/(.+)$/) {
875 # Convert it to a full path..
876 $var = resolve_directory($ENV{HOME} . "/" . $1);
878 elsif ((($config{OSNAME} =~ /MINGW32/i) and ($var !~ /^[A-Z]{1}:\\.*/)) and (substr($var,0,1) ne "/"))
880 # Assume relative Path was given.. fill in the rest.
881 $var = $this . "/$var";
884 $var = resolve_directory($var);
886 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
887 chomp($tmp = <STDIN>);
888 if (($tmp eq "") || ($tmp =~ /^y/i)) {
889 # Attempt to Create the Dir..
891 system("mkdir -p \"$var\" >> /dev/null 2>&1");
892 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
894 print "Unable to create directory. ($var)\n\n";
899 # They said they don't want to create, and we can't install there.
905 # Target exists, but is not a directory.
906 print "File $var exists, but is not a directory.\n\n";
910 # Either Dir Exists, or was created fine.
911 $config{$hash_key} = $var;
919 $config{LDLIBS} = "-lstdc++";
920 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}";
921 $config{DEVELOPER} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated -g";
922 $SHARED = "-Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared";
923 $config{MAKEPROG} = "make";
925 if ($config{OSNAME} =~ /darwin/i) {
926 $config{FLAGS} = "-DDARWIN -frtti -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}";
927 $SHARED = "-bundle -twolevel_namespace -undefined dynamic_lookup";
928 $config{LDLIBS} = "-ldl -lstdc++";
931 if ($config{OSNAME} =~ /OpenBSD/i) {
932 $config{MAKEPROG} = "gmake";
933 chomp($foo = `eg++ -dumpversion | cut -c 1`);
934 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
935 # if theyre not running this, configure lets the build continue but they probably wont manage to
936 # compile as this standard version is 2.95.3!
938 $config{CC} = "eg++";
939 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change the compiler path
944 if ($config{OSNAME} =~ /Linux/i) {
945 $config{LDLIBS} = "-ldl -lstdc++";
946 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}";
947 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
948 $config{LDLIBS} .= " " . $ENV{LDLIBS} if exists($ENV{LDLIBS});
949 $config{MAKEPROG} = "make";
952 if ($config{OSNAME} =~ /FreeBSD/i) {
953 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
954 $config{LDLIBS} .= " " . $ENV{LDLIBS} if exists($ENV{LDLIBS});
957 if ($config{OSNAME} =~ /SunOS/i or $config{OSNAME} =~ /solaris/i)
959 # solaris/sunos needs these
960 # socket = bsd sockets api
962 # rt = POSIX realtime extensions
963 # resolv = inet_aton only (why isnt this in nsl?!)
964 $config{MAKEPROG} = "gmake";
965 $config{LDLIBS} .= " -lsocket -lnsl -lrt -lresolv";
969 if($config{OSNAME} =~ /MINGW32/i)
971 # All code is position-independent on windows
972 $config{FLAGS} =~ s/-fPIC //;
976 return $config{OSNAME};
980 my($writeheader) = @_;
981 # First File.. inspircd_config.h
982 chomp(my $incos = `uname -n -s -r`);
983 chomp($version = `sh src/version.sh`);
984 chomp(my $revision2 = getrevision());
985 if ($writeheader == 1)
987 print "Writing \033[1;32minspircd_config.h\033[0m\n";
988 open(FILEHANDLE, ">include/inspircd_config.h");
989 my $NL = $config{NICK_LENGT}+1;
990 my $CL = $config{CHAN_LENGT}+1;
991 print FILEHANDLE <<EOF;
992 /* Auto generated by configure, do not modify! */
993 #ifndef __CONFIGURATION_AUTO__
994 #define __CONFIGURATION_AUTO__
996 /* this is for windows support. */
997 #define CoreExport /**/
998 #define DllExport /**/
1000 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
1001 #define MOD_PATH "$config{MODULE_DIR}"
1002 #define VERSION "$version"
1003 #define REVISION "$revision2"
1004 #define MAXCLIENTS $config{MAX_CLIENT}
1005 #define MAXCLIENTS_S "$config{MAX_CLIENT}"
1006 #define SOMAXCONN_S "$config{_SOMAXCONN}"
1007 #define MAX_DESCRIPTORS $config{MAX_DESCRIPTORS}
1010 #define MAXMODES $config{MAXI_MODES}
1011 #define IDENTMAX $config{MAX_IDENT}
1012 #define MAXQUIT $config{MAX_QUIT}
1013 #define MAXTOPIC $config{MAX_TOPIC}
1014 #define MAXKICK $config{MAX_KICK}
1015 #define MAXGECOS $config{MAX_GECOS}
1016 #define MAXAWAY $config{MAX_AWAY}
1017 #define OPTIMISATION $config{OPTIMITEMP}
1018 #define LIBRARYDIR "$config{LIBRARY_DIR}"
1019 #define SYSTEM "$incos"
1021 print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n";
1023 if ($config{OSNAME} =~ /SunOS/i) {
1024 print FILEHANDLE "#define IS_SOLARIS\n";
1026 if ($config{OSNAME} =~ /MINGW32/i) {
1027 print FILEHANDLE "#define IS_MINGW\n";
1029 if ($config{GCCVER} >= 3) {
1030 print FILEHANDLE "#define GCC3\n";
1032 if ($config{HAS_STRLCPY} eq "true") {
1033 print FILEHANDLE "#define HAS_STRLCPY\n";
1035 if ($config{HAS_STDINT} eq "true") {
1036 print FILEHANDLE "#define HAS_STDINT\n";
1038 if ($config{IPV6} =~ /y/i) {
1039 print FILEHANDLE "#define IPV6\n";
1041 if ($config{SUPPORT_IP6LINKS} =~ /y/i) {
1042 print FILEHANDLE "#define SUPPORT_IP6LINKS\n";
1045 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1046 print FILEHANDLE "#define USE_KQUEUE\n";
1047 $se = "socketengine_kqueue";
1050 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1051 print FILEHANDLE "#define USE_EPOLL\n";
1052 $se = "socketengine_epoll";
1055 if (($has_ports) && ($config{USE_PORTS} eq "y")) {
1056 print FILEHANDLE "#define USE_PORTS\n";
1057 $se = "socketengine_ports";
1060 # user didn't choose either epoll or select for their OS.
1061 # default them to USE_SELECT (ewwy puke puke)
1063 print FILEHANDLE "#define USE_SELECT\n";
1064 $se = "socketengine_select";
1066 print FILEHANDLE "\n#endif\n";
1072 open(FILEHANDLE, ">include/inspircd_se_config.h");
1073 print FILEHANDLE <<EOF;
1074 /* Auto generated by configure, do not modify or commit to svn! */
1075 #ifndef __CONFIGURATION_SOCKETENGINE__
1076 #define __CONFIGURATION_SOCKETENGINE__
1086 # Create a Modules List..
1088 foreach $i (@modlist)
1090 $modules .= "m_".$i.".so ";
1092 chomp($modules); # Remove Redundant whitespace..
1094 opendir(DIRHANDLE, "src/modules");
1095 foreach $name (sort readdir(DIRHANDLE)) {
1096 if ($name =~ /^m_(.+?)$/) {
1097 if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
1098 closedir(MDIRHANDLE);
1099 $modules .= "$name.so ";
1103 closedir(DIRHANDLE);
1106 # Write all .in files.
1109 my $exe = "inspircd";
1111 opendir(DIRHANDLE, $this);
1113 # Do this once here, and cache it in the .*.inc files,
1114 # rather than attempting to read src/version.sh from
1115 # compiled code -- we might not have the source to hand.
1116 # Fix for bug#177 by Brain.
1118 chomp(my $version = `sh ./src/version.sh`);
1119 chomp(my $revision = getrevision());
1120 $version = "$version(r$revision)";
1123 if ($config{IS_DARWIN} eq "YES")
1127 # We can actually parse any file starting with . and ending with .inc,
1128 # but right now we only parse .inspircd.inc to form './inspircd'
1130 foreach $name (sort readdir(DIRHANDLE)) {
1131 if ($name =~ /^\.(.+)\.inc$/) {
1134 # Bug #353, omit this on non-darwin
1135 next if (($config{OSNAME} !~ /darwin/) && ($file eq "org.inspircd.plist"));
1137 # All .name.inc files need parsing!
1139 open(FILEHANDLE, ".$file.inc");
1140 while (<FILEHANDLE>) {
1145 $tmp =~ s/\@CC\@/$config{CC}/;
1146 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
1147 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
1148 $tmp =~ s/\@DEVELOPER\@/$config{DEVELOPER}/;
1149 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
1150 $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/;
1151 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
1152 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
1153 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
1154 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
1155 $tmp =~ s/\@LIBRARY_EXT\@/$LIBEXT/;
1156 $tmp =~ s/\@MODULES\@/$modules/;
1157 $tmp =~ s/\@STARTSCRIPT\@/$config{STARTSCRIPT}/;
1158 $tmp =~ s/\@DESTINATION\@/$config{DESTINATION}/;
1159 $tmp =~ s/\@EXTRA_DIR\@/$config{EXTRA_DIR}/;
1160 $tmp =~ s/\@EXECUTABLE\@/$exe/;
1161 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
1162 $tmp =~ s/\@VERSION\@/$version/;
1164 print "Writing \033[1;32m$file\033[0m\n";
1165 open(FILEHANDLE, ">$file");
1166 print FILEHANDLE $tmp;
1169 closedir(DIRHANDLE);
1171 # Make inspircd executable!
1172 chmod 0744, 'inspircd';
1174 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
1175 write_dynamic_makefile();
1176 write_dynamic_modules_makefile();
1179 sub write_dynamic_modules_makefile {
1180 # Modules Makefile..
1181 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1182 open(FILEHANDLE, ">src/modules/Makefile");
1185 # Module Makefile Header
1187 print FILEHANDLE <<EOF;
1188 ###################################################
1189 # Copyright 2002-2007 The InspIRCd Development Team
1190 # http://www.inspircd.org/wiki/index.php/Credits
1192 # Thanks to Andrew Church <achurch\@achurch.org>
1193 # for assisting with making this work right.
1195 # Automatically Generated by ./configure to add a
1196 # modules please run ./configure -modupdate
1197 ###################################################
1203 # End Module Makefile Header
1206 # Create a Modules List..
1212 foreach $i (@modlist) {
1214 # Write Entry to the MakeFile
1216 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1217 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1218 $deps = getdependencies("src/modules/m_".$i.".cpp");
1220 #print "file: $i: cmflags=$cmflags; liflags=$liflags; deps=$deps\n";
1222 print FILEHANDLE <<EOCHEESE;
1223 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 $deps
1224 \$(CC) -pipe -I../../include \$(FLAGS) $cmflags -export-dynamic -c m_$i.cpp
1227 if ($config{OSNAME} =~ /darwin/) {
1228 print FILEHANDLE <<EOCHEESE;
1229 \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle $liflags -o m_$i.so m_$i.o
1233 print FILEHANDLE <<EOCHEESE;
1234 \$(CC) -pipe \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o
1238 $crud = $crud . " install -m \$(INSTMODE) m_$i.so \$(MODPATH)\n";
1240 # End Write Entry to the MakeFile
1244 opendir(DIRHANDLE, "src/modules");
1245 foreach $name (sort readdir(DIRHANDLE)) {
1246 if ($name =~ /^m_(.+?)$/) {
1250 # A module made of multiple files, in a dir, e.g. src/modules/m_spanningtree/
1251 if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
1253 print FILEHANDLE "$name.so: ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h ../../include/inspircd_config.h ../../include/inspircd.h ../../include/configreader.h";
1254 foreach $fname (sort readdir(MDIRHANDLE)) {
1255 if ($fname =~ /\.cpp$/) {
1256 $cmflags = getcompilerflags("src/modules/$name/$fname");
1257 $mliflags = $mliflags . " " . getlinkerflags("src/modules/$name/$fname");
1258 $deps = getdependencies("src/modules/$name/$fname");
1260 $oname =~ s/\.cpp$/.o/g;
1261 print FILEHANDLE " $name/$oname";
1262 $crapola = $crapola . "$name/$oname: $name/$fname ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h ../../include/inspircd_config.h ../../include/inspircd.h ../../include/configreader.h $deps\n";
1263 $crapola = $crapola . " \$(CC) -pipe -I../../include -I. \$(FLAGS) $cmflags -export-dynamic -o $name/$oname -c $name/$fname\n\n";
1264 $crap3 = $crap3 . " $name/$oname";
1268 print "Composing Makefile rules for directory \033[1;32m$name\033[0m... (\033[1;32m$i files found\033[0m)\n";
1269 if ($config{IS_DARWIN} eq "YES") {
1270 print FILEHANDLE "\n \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle -o $name.so $crap3\n";
1272 print FILEHANDLE "\n \$(CC) -pipe \$(FLAGS) -shared $mliflags -o $name.so $crap3\n";
1274 print FILEHANDLE "\n$crapola\n";
1275 closedir(MDIRHANDLE);
1276 $crud = $crud . " install -m \$(INSTMODE) $name.so \$(MODPATH)\n";
1280 closedir(DIRHANDLE);
1282 print FILEHANDLE "modinst:\n \@echo \"Installing modules...\"\n" . $crud;
1285 sub write_dynamic_makefile {
1289 opendir(DIRHANDLE, "src");
1290 foreach $name (sort readdir(DIRHANDLE)) {
1291 if ($name =~ /^cmd_(.+)\.cpp$/) {
1292 $cmdlist[$i++] = $1;
1295 closedir(DIRHANDLE);
1299 foreach my $cmd (@cmdlist) {
1300 $cmdobjs = $cmdobjs . "cmd_$cmd.so ";
1301 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1304 $se = "socketengine_select";
1305 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1306 $se = "socketengine_kqueue";
1308 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1309 $se = "socketengine_epoll";
1311 elsif (($has_ports) && ($config{USE_PORTS} eq "y")) {
1312 $se = "socketengine_ports";
1315 open(FH,">src/Makefile") or die("Could not write src/Makefile");
1317 ###################################################
1318 # Copyright 2002-2007 The InspIRCd Development Team
1319 # http://www.inspircd.org/wiki/index.php/Credits
1321 # Thanks to Andrew Church <achurch\@achurch.org>
1322 # for assisting with making this work right.
1324 # This file is automagically generated by configure
1325 # Any changes made will be lost on ./configure
1326 ###################################################
1328 CC = im a cheezeball
1330 CXXFLAGS = -I../include \${FLAGS}
1331 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1332 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1336 if ($config{IS_DARWIN} eq "YES") {
1338 all: libIRCDtimer.dylib libIRCDcull_list.dylib libIRCDuserprocess.dylib libIRCDsocketengine.dylib libIRCDsocket.dylib libIRCDhash.dylib libIRCDchannels.dylib libIRCDmode.dylib libIRCDxline.dylib libIRCDstring.dylib libIRCDasyncdns.dylib libIRCDbase.dylib libIRCDconfigreader.dylib libIRCDinspsocket.dylib libIRCDcommands.dylib libIRCDdynamic.dylib libIRCDusers.dylib libIRCDmodules.dylib libIRCDwildcard.dylib libIRCDhelper.dylib libIRCDcommand_parse.dylib libIRCDsnomasks.dylib libIRCDserver.dylib libIRCDfilelogger.dylib inspircd
1340 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 $cmdobjs libIRCDtimer.dylib libIRCDcull_list.dylib libIRCDuserprocess.dylib libIRCDsocketengine.dylib libIRCDsocket.dylib libIRCDhash.dylib libIRCDchannels.dylib libIRCDmode.dylib libIRCDxline.dylib libIRCDstring.dylib libIRCDasyncdns.dylib libIRCDbase.dylib libIRCDconfigreader.dylib libIRCDinspsocket.dylib libIRCDsnomasks.dylib libIRCDcommands.dylib libIRCDdynamic.dylib libIRCDusers.dylib libIRCDmodules.dylib libIRCDwildcard.dylib libIRCDhelper.dylib libIRCDcommand_parse.dylib libIRCDserver.dylib libIRCDfilelogger.dylib
1341 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd.cpp
1342 \$(CC) -pipe -dynamic -bind_at_load -L. -o inspircd \$(LDLIBS) inspircd.o libIRCDchannels.dylib libIRCDmode.dylib libIRCDxline.dylib libIRCDstring.dylib libIRCDasyncdns.dylib libIRCDbase.dylib libIRCDconfigreader.dylib libIRCDinspsocket.dylib libIRCDcommands.dylib libIRCDdynamic.dylib libIRCDusers.dylib libIRCDmodules.dylib libIRCDwildcard.dylib libIRCDhelper.dylib libIRCDhash.dylib libIRCDsocket.dylib libIRCDsocketengine.dylib libIRCDuserprocess.dylib libIRCDcull_list.dylib libIRCDcommand_parse.dylib libIRCDtimer.dylib libIRCDsnomasks.dylib libIRCDserver.dylib libIRCDfilelogger.dylib
1344 libIRCDsocketengine.dylib: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1345 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp
1346 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c $se.cpp
1347 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsocketengine.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsocketengine.dylib socketengine.o $se.o
1349 libIRCDsnomasks.dylib: snomasks.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/channels.h
1350 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1351 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsnomasks.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsnomasks.dylib snomasks.o
1353 libIRCDcommand_parse.dylib: command_parse.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1354 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1355 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcommand_parse.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcommand_parse.dylib command_parse.o
1357 libIRCDcull_list.dylib: cull_list.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/users.h ../include/channels.h
1358 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1359 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcull_list.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcull_list.dylib cull_list.o
1361 libIRCDuserprocess.dylib: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1362 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1363 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDuserprocess.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDuserprocess.dylib userprocess.o
1365 libIRCDhash.dylib: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1366 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1367 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDhash.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDhash.dylib hashcomp.o
1369 libIRCDhelper.dylib: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1370 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1371 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDhelper.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDhelper.dylib helperfuncs.o
1373 libIRCDchannels.dylib: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1374 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1375 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDchannels.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDchannels.dylib channels.o
1377 libIRCDmode.dylib: 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)
1378 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1379 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1380 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDmode.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDmode.dylib mode.o modes/modeclasses.a
1382 libIRCDxline.dylib: xline.cpp ../include/base.h ../include/xline.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1383 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1384 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDxline.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDxline.dylib xline.o
1386 libIRCDstring.dylib: inspstring.cpp ../include/base.h ../include/inspstring.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1387 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1388 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDstring.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDstring.dylib inspstring.o
1390 libIRCDasyncdns.dylib: dns.cpp ../include/base.h ../include/dns.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1391 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1392 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDasyncdns.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDasyncdns.dylib dns.o
1394 libIRCDbase.dylib: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1395 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1396 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDbase.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDbase.dylib base.o
1398 libIRCDconfigreader.dylib: configreader.cpp ../include/base.h ../include/configreader.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1399 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1400 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDconfigreader.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDconfigreader.dylib configreader.o
1402 libIRCDcommands.dylib: commands.cpp ../include/base.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1403 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1404 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcommands.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcommands.dylib commands.o
1406 libIRCDdynamic.dylib: dynamic.cpp ../include/base.h ../include/dynamic.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1407 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1408 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDdynamic.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDdynamic.dylib dynamic.o
1410 libIRCDusers.dylib: users.cpp ../include/base.h ../include/users.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1411 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1412 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDusers.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDusers.dylib users.o
1414 libIRCDmodules.dylib: modules.cpp ../include/base.h ../include/modules.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1415 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1416 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDmodules.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDmodules.dylib modules.o
1418 libIRCDwildcard.dylib: wildcard.cpp ../include/base.h ../include/wildcard.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1419 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1420 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDwildcard.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDwildcard.dylib wildcard.o
1422 libIRCDsocket.dylib: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1423 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1424 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsocket.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsocket.dylib socket.o
1426 libIRCDinspsocket.dylib: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1427 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1428 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDinspsocket.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDinspsocket.dylib inspsocket.o
1430 libIRCDtimer.dylib: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1431 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1432 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDtimer.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDtimer.dylib timer.o
1434 libIRCDserver.dylib: server.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1435 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c server.cpp
1436 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDserver.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDserver.dylib server.o
1438 libIRCDfilelogger.dylib: filelogger.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1439 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c filelogger.cpp
1440 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDfilelogger.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDfilelogger.dylib filelogger.o
1447 all: libIRCDtimer.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 $cmdobjs libIRCDcommands.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDcommand_parse.so libIRCDsnomasks.so libIRCDserver.so libIRCDfilelogger.so inspircd
1449 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 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 $cmdobjs libIRCDsnomasks.so libIRCDcommands.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDcommand_parse.so libIRCDserver.so libIRCDfilelogger.so
1450 \$(CC) -pipe -I../include -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 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 libIRCDtimer.so libIRCDsnomasks.so libIRCDserver.so libIRCDfilelogger.so
1452 libIRCDsocketengine.so: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1453 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1454 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocketengine.so socketengine.o $se.o
1456 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
1457 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1458 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsnomasks.so snomasks.o
1460 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
1461 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1462 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommand_parse.so command_parse.o
1464 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
1465 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1466 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcull_list.so cull_list.o
1468 libIRCDuserprocess.so: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1469 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1470 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDuserprocess.so userprocess.o
1472 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1473 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1474 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhash.so hashcomp.o
1476 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1477 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1478 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhelper.so helperfuncs.o
1480 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1481 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1482 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDchannels.so channels.o
1484 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)
1485 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1486 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1487 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmode.so mode.o modes/modeclasses.a
1489 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 ../include/timer.h
1490 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1491 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDxline.so xline.o
1493 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
1494 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1495 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDstring.so inspstring.o
1497 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 ../include/timer.h
1498 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1499 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDasyncdns.so dns.o
1501 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1502 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1503 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDbase.so base.o
1505 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
1506 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1507 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDconfigreader.so configreader.o
1509 libIRCDcommands.so: commands.cpp ../include/base.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1510 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1511 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommands.so commands.o
1513 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
1514 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1515 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDdynamic.so dynamic.o
1517 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 ../include/timer.h
1518 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1519 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDusers.so users.o
1521 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 ../include/timer.h
1522 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1523 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmodules.so modules.o
1525 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
1526 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1527 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDwildcard.so wildcard.o
1529 libIRCDsocket.so: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1530 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1531 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocket.so socket.o
1533 libIRCDinspsocket.so: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1534 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1535 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDinspsocket.so inspsocket.o
1537 libIRCDtimer.so: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1538 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1539 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDtimer.so timer.o
1541 libIRCDserver.so: server.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1542 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c server.cpp
1543 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDserver.so server.o
1545 libIRCDfilelogger.so: filelogger.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1546 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c filelogger.cpp
1547 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDfilelogger.so filelogger.o
1551 foreach my $cmd (@cmdlist) {
1553 cmd_$cmd.so: 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
1554 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1555 \$(CC) -pipe $SHARED -o cmd_$cmd.so cmd_$cmd.o