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)
473 open (FH,"/lib/libc.so.6|") or $has_epoll = 0;
476 while (chomp($line = <FH>))
478 if ($line =~ /GNU C Library .* version (.*?) /)
482 elsif ($line =~ /Compiled on a Linux (.*?\..*?)\.* system/)
491 printf "libc too old: $libcv... ";
496 printf "libc built against older kernel $kernelv... ";
501 print "yes\n" if $has_epoll == 1;
502 print "no\n" if $has_epoll == 0;
504 printf "Checking if Solaris I/O completion ports are available... ";
506 my $system = `uname -s`;
508 $has_ports = 1 if ($system eq "SunOS");
511 my $kernel = `uname -r`;
513 if (($kernel !~ /^5\.1./)) {
517 print "yes\n" if $has_ports == 1;
518 print "no\n" if $has_ports == 0;
520 $config{HAS_EPOLL} = $has_epoll;
521 $config{HAS_KQUEUE} = $has_kqueue;
523 printf "Checking for libgnutls... ";
524 if (($config{HAS_GNUTLS}) && (($config{HAS_GNUTLS} >= 1.2) || ($config{HAS_GNUTLS} eq "y"))) {
526 $config{HAS_GNUTLS} = "y";
529 $config{HAS_GNUTLS} = "n";
532 printf "Checking for openssl... ";
533 if (($config{HAS_OPENSSL}) && (($config{HAS_OPENSSL} >= 0.8) || ($config{HAS_OPENSSL} eq "y"))) {
535 $config{HAS_OPENSSL} = "y";
538 $config{HAS_OPENSSL} = "n";
541 ################################################################################
542 # BEGIN INTERACTIVE PART #
543 ################################################################################
551 my $rev = getrevision();
552 # Display Introduction Message..
554 Welcome to the \033[1mInspIRCd\033[0m Configuration program! (\033[1minteractive mode\033[0m)
555 \033[1mPackage maintainers: Type ./configure --help for non-interactive help\033[0m
557 *** If you are unsure of any of these values, leave it blank for ***
558 *** standard settings that will work, and your server will run ***
559 *** using them. Please consult your IRC network admin if in doubt. ***
561 Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter
562 a new value. Please note: You will \033[1mHAVE\033[0m to read the docs
563 dir, otherwise you won't have a config file!
565 Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos)
566 Maximum file descriptors: \033[1;32m$config{MAX_CLIENT_T}\033[0m
567 Your InspIRCd revision ID is \033[1;32mr$rev\033[0m";
569 print " (Non-SVN build)";
573 $config{CHANGE_COMPILER} = "n";
574 print "I have detected the following compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
576 while (($config{GCCVER} < 3) || ($config{GCCVER} eq "")) {
577 print "\033[1;32mIMPORTANT!\033[0m A GCC 2.x compiler has been detected, and
578 should NOT be used. You should probably specify a newer compiler.\n\n";
579 yesno(CHANGE_COMPILER,"Do you want to change the compiler?");
580 if ($config{CHANGE_COMPILER} =~ /y/i) {
581 print "What command do you want to use to invoke your compiler?\n";
582 print "[\033[1;32m$config{CC}\033[0m] -> ";
583 chomp($config{CC} = <STDIN>);
584 if ($config{CC} eq "") {
587 chomp($foo = `$config{CC} -dumpversion | cut -c 1`);
589 chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change compilers
590 print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
591 if ($config{GCCVER} < 3) {
592 print "\033[1;32mGCC 2.x WILL NOT WORK!\033[0m. Let's try that again, shall we?\n";
596 print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n";
603 # Directory Settings..
604 my $tmpbase = $config{BASE_DIR};
605 dir_check("do you wish to install the InspIRCd base", "BASE_DIR");
606 if ($tmpbase ne $config{BASE_DIR}) {
607 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Dir
608 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
609 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
610 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
613 dir_check("are the configuration files", "CONFIG_DIR");
614 dir_check("are the modules to be compiled to", "MODULE_DIR");
615 dir_check("is the IRCd binary to be placed", "BINARY_DIR");
616 dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
619 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?");
623 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?");
627 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?");
630 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y") || ($config{USE_PORTS} eq "y"));
631 if (!$chose_hiperf) {
632 print "No high-performance socket engines are available, or you chose\n";
633 print "not to enable one. Defaulting to select() engine.\n\n";
636 yesno(IPV6,"Would you like to build InspIRCd with IPv6 support?");
639 if ($config{IPV6} eq "y") {
640 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";
641 $config{SUPPORT_IP6LINKS} = "y";
643 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)");
647 if (($config{HAS_GNUTLS} eq "y") && ($config{HAS_OPENSSL} eq "y")) {
648 print "I have detected both \033[1;32mGnuTLS\033[0m and \033[1;32mOpenSSL\033[0m on your system.\n";
649 print "I will default to GnuTLS. If you wish to use OpenSSL\n";
650 print "instead, you should enable the OpenSSL module yourself\n";
651 print "by copying it from src/modules/extra to src/modules.\n\n";
652 print "Detected GnuTLS version: \033[1;32m" . $gnutls_ver . "\033[0m\n";
653 print "Detected OpenSSL version: \033[1;32m" . $openssl_ver . "\033[0m\n\n";
656 if ($config{HAS_GNUTLS} eq "y") {
657 yesno(USE_GNUTLS, "Would you like to enable SSL Support?");
658 if ($config{USE_GNUTLS} eq "y") {
659 print "\nUsing GnuTLS SSL module.\n";
661 } elsif ($config{HAS_OPENSSL} eq "y") {
662 yesno(USE_OPENSSL, "Would you like to enable SSL Support?");
663 if ($config{USE_OPENSSL} eq "y") {
664 print "\nUsing OpenSSL SSL module.\nYou will get better performance if you move to GnuTLS in the future.\n";
668 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";
671 print "\nThe following questions will ask you for various figures relating\n";
672 print "To your IRCd install. Please note that these should usually be left\n";
673 print "as defaults unless you have a real reason to change them. If they\n";
674 print "changed, then the values must be identical on all servers on your\n";
675 print "network, or malfunctions and/or crashes may occur, with the exception\n";
676 print "of the 'maximum number of clients' setting which may be different on\n";
677 print "different servers on the network.\n\n";
679 # File Descriptor Settings..
680 promptnumeric("number of clients at any one time", "MAX_CLIENT_T");
681 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
682 $config{MAX_DESCRIPTORS} = $config{MAX_CLIENT_T};
684 promptnumeric("length of nicknames", "NICK_LENGT");
685 promptnumeric("length of channel names", "CHAN_LENGT");
686 promptnumeric("number of mode changes in one line", "MAXI_MODES");
687 promptnumeric("length of an ident (username)", "MAX_IDENT");
688 promptnumeric("length of a quit message", "MAX_QUIT");
689 promptnumeric("length of a channel topic", "MAX_TOPIC");
690 promptnumeric("length of a kick message", "MAX_KICK");
691 promptnumeric("length of a GECOS (real name)", "MAX_GECOS");
692 promptnumeric("length of an away message", "MAX_AWAY");
697 if (($config{USE_GNUTLS} eq "y") && ($config{HAS_GNUTLS} ne "y"))
699 print "Sorry, but i couldn't detect gnutls. Make sure gnutls-config is in your path.\n";
702 if (($config{USE_OPENSSL} eq "y") && ($config{HAS_OPENSSL} ne "y"))
704 print "Sorry, but i couldn't detect openssl. Make sure openssl is in your path.\n";
708 if ($config{USE_GNUTLS} eq "y") {
710 open(TMP, "<src/modules/m_ssl_gnutls.cpp") or $failed = 1;
713 print "Symlinking src/modules/m_ssl_gnutls.cpp from extra/\n";
714 chdir("src/modules");
715 system("ln -s extra/m_ssl_gnutls.cpp");
722 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
724 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
727 print "SSL Certificates Not found, Generating.. \n\n
728 *************************************************************
729 * Generating the Private Key may take some time, go grab a *
730 * Coffee. Even better, to generate some more entropy if it *
731 * is taking a while, open another console and type du / a *
732 * few times and get that HD going :) Then answer the *
733 * Questions which follow. If you are unsure, just hit enter *
734 *************************************************************\n\n";
735 $failed = make_gnutls_cert();
737 print "\n\033[1;32mCertificate generation failed!\033[0m\n\n";
739 print "\nCertificate generation complete, copying to config directory... ";
740 system("mv key.pem $config{CONFIG_DIR}/key.pem");
741 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
746 print "SSL Certificates found, skipping.\n\n";
751 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
753 } elsif ($config{USE_OPENSSL} eq "y") {
755 open(TMP, "<src/modules/m_ssl_openssl.cpp") or $failed = 1;
758 print "Symlinking src/modules/m_ssl_openssl.cpp from extra/\n";
759 chdir("src/modules");
760 system("ln -s extra/m_ssl_openssl.cpp");
767 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
769 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
772 print "SSL Certificates Not found, Generating.. \n\n
773 *************************************************************
774 * Generating the certificates may take some time, go grab a *
775 * coffee, or something. *
776 *************************************************************\n\n";
778 print "\nCertificate generation complete, copying to config directory... ";
779 system("mv key.pem $config{CONFIG_DIR}/key.pem");
780 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
781 system("mv dhparams.pem $config{CONFIG_DIR}/dhparams.pem");
784 print "SSL Certificates found, skipping.\n\n"
789 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
792 if (($config{USE_GNUTLS} eq "n") && ($config{USE_OPENSSL} eq "n")) {
793 print "Skipping SSL Certificate generation, SSL support is not available.\n\n";
801 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
802 if (($config{USE_GNUTLS} eq "y") || ($config{USE_OPENSSL} eq "y")) {
803 print "Please remember that to enable \033[1;32mSSL support\033[0m you must\n";
804 print "load the required modules in your config. This configure process\n";
805 print "has just prepared these modules to be compiled for you, and has not\n";
806 print "configured them to be compiled into the core of the ircd.\n";
808 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
809 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
810 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";
813 if ($config{GCCVER} < "3") {
815 \033[1;32mWARNING!\033[0m You are attempting to compile InspIRCd on GCC 2.x!
816 GCC 2.x series compilers only had partial (read as broken) C++ support, and
817 your compile will most likely fail horribly! If you have any problems, do NOT
818 report them to the bugtracker or forums without first upgrading your compiler
819 to a newer 3.x or 4.x (or whatever is available currently) version.
823 ################################################################################
825 ################################################################################
827 # Retrieves the .config.cache file, and loads values into the main config hash.
828 open(CACHE, ".config.cache") or return 0;
831 # Ignore Blank lines, and comments..
834 my ($key, $value) = split("=", $_, 2);
835 $value =~ /^\"(.*)\"$/;
836 # Do something with data here!
844 # Dump the contents of %config
845 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
846 open(FILEHANDLE, ">.config.cache");
847 foreach $key (keys %config) {
848 print FILEHANDLE "$key=\"$config{$key}\"\n";
854 my ($desc, $hash_key) = @_;
857 print "In what directory $desc?\n";
858 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
859 chomp($var = <STDIN>);
861 $var = $config{$hash_key};
863 if ($var =~ /^\~\/(.+)$/) {
864 # Convert it to a full path..
865 $var = resolve_directory($ENV{HOME} . "/" . $1);
867 elsif ((($config{OSNAME} =~ /MINGW32/i) and ($var !~ /^[A-Z]{1}:\\.*/)) and (substr($var,0,1) ne "/"))
869 # Assume relative Path was given.. fill in the rest.
870 $var = $this . "/$var";
873 $var = resolve_directory($var);
875 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
876 chomp($tmp = <STDIN>);
877 if (($tmp eq "") || ($tmp =~ /^y/i)) {
878 # Attempt to Create the Dir..
880 system("mkdir -p \"$var\" >> /dev/null 2>&1");
881 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
883 print "Unable to create directory. ($var)\n\n";
888 # They said they don't want to create, and we can't install there.
894 # Target exists, but is not a directory.
895 print "File $var exists, but is not a directory.\n\n";
899 # Either Dir Exists, or was created fine.
900 $config{$hash_key} = $var;
908 $config{LDLIBS} = "-lstdc++";
909 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}";
910 $config{DEVELOPER} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated -g";
911 $SHARED = "-Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared";
912 $config{MAKEPROG} = "make";
914 if ($config{OSNAME} =~ /darwin/i) {
915 $config{FLAGS} = "-DDARWIN -frtti -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}";
916 $SHARED = "-bundle -twolevel_namespace -undefined dynamic_lookup";
917 $config{LDLIBS} = "-ldl -lstdc++";
920 if ($config{OSNAME} =~ /OpenBSD/i) {
921 $config{MAKEPROG} = "gmake";
922 chomp($foo = `eg++ -dumpversion | cut -c 1`);
923 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
924 # if theyre not running this, configure lets the build continue but they probably wont manage to
925 # compile as this standard version is 2.95.3!
927 $config{CC} = "eg++";
928 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change the compiler path
933 if ($config{OSNAME} =~ /Linux/i) {
934 $config{LDLIBS} = "-ldl -lstdc++";
935 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}";
936 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
937 $config{LDLIBS} .= " " . $ENV{LDLIBS} if exists($ENV{LDLIBS});
938 $config{MAKEPROG} = "make";
941 if ($config{OSNAME} =~ /FreeBSD/i) {
942 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
943 $config{LDLIBS} .= " " . $ENV{LDLIBS} if exists($ENV{LDLIBS});
946 if ($config{OSNAME} =~ /SunOS/i or $config{OSNAME} =~ /solaris/i)
948 # solaris/sunos needs these
949 # socket = bsd sockets api
951 # rt = POSIX realtime extensions
952 # resolv = inet_aton only (why isnt this in nsl?!)
953 $config{MAKEPROG} = "gmake";
954 $config{LDLIBS} .= " -lsocket -lnsl -lrt -lresolv";
958 if($config{OSNAME} =~ /MINGW32/i)
960 # All code is position-independent on windows
961 $config{FLAGS} =~ s/-fPIC //;
965 return $config{OSNAME};
969 my($writeheader) = @_;
970 # First File.. inspircd_config.h
971 chomp(my $incos = `uname -n -s -r`);
972 chomp($version = `sh src/version.sh`);
973 chomp(my $revision2 = getrevision());
974 if ($writeheader == 1)
976 print "Writing \033[1;32minspircd_config.h\033[0m\n";
977 open(FILEHANDLE, ">include/inspircd_config.h");
978 my $NL = $config{NICK_LENGT}+1;
979 my $CL = $config{CHAN_LENGT}+1;
980 print FILEHANDLE <<EOF;
981 /* Auto generated by configure, do not modify! */
982 #ifndef __CONFIGURATION_AUTO__
983 #define __CONFIGURATION_AUTO__
985 /* this is for windows support. */
986 #define CoreExport /**/
987 #define DllExport /**/
989 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
990 #define MOD_PATH "$config{MODULE_DIR}"
991 #define VERSION "$version"
992 #define REVISION "$revision2"
993 #define MAXCLIENTS $config{MAX_CLIENT}
994 #define MAXCLIENTS_S "$config{MAX_CLIENT}"
995 #define SOMAXCONN_S "$config{_SOMAXCONN}"
996 #define MAX_DESCRIPTORS $config{MAX_DESCRIPTORS}
999 #define MAXMODES $config{MAXI_MODES}
1000 #define IDENTMAX $config{MAX_IDENT}
1001 #define MAXQUIT $config{MAX_QUIT}
1002 #define MAXTOPIC $config{MAX_TOPIC}
1003 #define MAXKICK $config{MAX_KICK}
1004 #define MAXGECOS $config{MAX_GECOS}
1005 #define MAXAWAY $config{MAX_AWAY}
1006 #define OPTIMISATION $config{OPTIMITEMP}
1007 #define LIBRARYDIR "$config{LIBRARY_DIR}"
1008 #define SYSTEM "$incos"
1010 print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n";
1012 if ($config{OSNAME} =~ /SunOS/i) {
1013 print FILEHANDLE "#define IS_SOLARIS\n";
1015 if ($config{OSNAME} =~ /MINGW32/i) {
1016 print FILEHANDLE "#define IS_MINGW\n";
1018 if ($config{GCCVER} >= 3) {
1019 print FILEHANDLE "#define GCC3\n";
1021 if ($config{HAS_STRLCPY} eq "true") {
1022 print FILEHANDLE "#define HAS_STRLCPY\n";
1024 if ($config{HAS_STDINT} eq "true") {
1025 print FILEHANDLE "#define HAS_STDINT\n";
1027 if ($config{IPV6} =~ /y/i) {
1028 print FILEHANDLE "#define IPV6\n";
1030 if ($config{SUPPORT_IP6LINKS} =~ /y/i) {
1031 print FILEHANDLE "#define SUPPORT_IP6LINKS\n";
1034 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1035 print FILEHANDLE "#define USE_KQUEUE\n";
1036 $se = "socketengine_kqueue";
1039 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1040 print FILEHANDLE "#define USE_EPOLL\n";
1041 $se = "socketengine_epoll";
1044 if (($has_ports) && ($config{USE_PORTS} eq "y")) {
1045 print FILEHANDLE "#define USE_PORTS\n";
1046 $se = "socketengine_ports";
1049 # user didn't choose either epoll or select for their OS.
1050 # default them to USE_SELECT (ewwy puke puke)
1052 print FILEHANDLE "#define USE_SELECT\n";
1053 $se = "socketengine_select";
1055 print FILEHANDLE "\n#endif\n";
1061 open(FILEHANDLE, ">include/inspircd_se_config.h");
1062 print FILEHANDLE <<EOF;
1063 /* Auto generated by configure, do not modify or commit to svn! */
1064 #ifndef __CONFIGURATION_SOCKETENGINE__
1065 #define __CONFIGURATION_SOCKETENGINE__
1075 # Create a Modules List..
1077 foreach $i (@modlist)
1079 $modules .= "m_".$i.".so ";
1081 chomp($modules); # Remove Redundant whitespace..
1083 opendir(DIRHANDLE, "src/modules");
1084 foreach $name (sort readdir(DIRHANDLE)) {
1085 if ($name =~ /^m_(.+?)$/) {
1086 if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
1087 closedir(MDIRHANDLE);
1088 $modules .= "$name.so ";
1092 closedir(DIRHANDLE);
1095 # Write all .in files.
1098 my $exe = "inspircd";
1100 opendir(DIRHANDLE, $this);
1102 # Do this once here, and cache it in the .*.inc files,
1103 # rather than attempting to read src/version.sh from
1104 # compiled code -- we might not have the source to hand.
1105 # Fix for bug#177 by Brain.
1107 chomp(my $version = `sh ./src/version.sh`);
1108 chomp(my $revision = getrevision());
1109 $version = "$version(r$revision)";
1112 if ($config{IS_DARWIN} eq "YES")
1116 # We can actually parse any file starting with . and ending with .inc,
1117 # but right now we only parse .inspircd.inc to form './inspircd'
1119 foreach $name (sort readdir(DIRHANDLE)) {
1120 if ($name =~ /^\.(.+)\.inc$/) {
1123 # Bug #353, omit this on non-darwin
1124 next if (($config{OSNAME} !~ /darwin/) && ($file eq "org.inspircd.plist"));
1126 # All .name.inc files need parsing!
1128 open(FILEHANDLE, ".$file.inc");
1129 while (<FILEHANDLE>) {
1134 $tmp =~ s/\@CC\@/$config{CC}/;
1135 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
1136 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
1137 $tmp =~ s/\@DEVELOPER\@/$config{DEVELOPER}/;
1138 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
1139 $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/;
1140 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
1141 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
1142 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
1143 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
1144 $tmp =~ s/\@LIBRARY_EXT\@/$LIBEXT/;
1145 $tmp =~ s/\@MODULES\@/$modules/;
1146 $tmp =~ s/\@STARTSCRIPT\@/$config{STARTSCRIPT}/;
1147 $tmp =~ s/\@DESTINATION\@/$config{DESTINATION}/;
1148 $tmp =~ s/\@EXTRA_DIR\@/$config{EXTRA_DIR}/;
1149 $tmp =~ s/\@EXECUTABLE\@/$exe/;
1150 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
1151 $tmp =~ s/\@VERSION\@/$version/;
1153 print "Writing \033[1;32m$file\033[0m\n";
1154 open(FILEHANDLE, ">$file");
1155 print FILEHANDLE $tmp;
1158 closedir(DIRHANDLE);
1160 # Make inspircd executable!
1161 chmod 0744, 'inspircd';
1163 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
1164 write_dynamic_makefile();
1165 write_dynamic_modules_makefile();
1168 sub write_dynamic_modules_makefile {
1169 # Modules Makefile..
1170 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1171 open(FILEHANDLE, ">src/modules/Makefile");
1174 # Module Makefile Header
1176 print FILEHANDLE <<EOF;
1177 ###################################################
1178 # Copyright 2002-2007 The InspIRCd Development Team
1179 # http://www.inspircd.org/wiki/index.php/Credits
1181 # Thanks to Andrew Church <achurch\@achurch.org>
1182 # for assisting with making this work right.
1184 # Automatically Generated by ./configure to add a
1185 # modules please run ./configure -modupdate
1186 ###################################################
1192 # End Module Makefile Header
1195 # Create a Modules List..
1201 foreach $i (@modlist) {
1203 # Write Entry to the MakeFile
1205 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1206 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1207 $deps = getdependencies("src/modules/m_".$i.".cpp");
1209 #print "file: $i: cmflags=$cmflags; liflags=$liflags; deps=$deps\n";
1211 print FILEHANDLE <<EOCHEESE;
1212 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
1213 \$(CC) -pipe -I../../include \$(FLAGS) $cmflags -export-dynamic -c m_$i.cpp
1216 if ($config{OSNAME} =~ /darwin/) {
1217 print FILEHANDLE <<EOCHEESE;
1218 \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle $liflags -o m_$i.so m_$i.o
1222 print FILEHANDLE <<EOCHEESE;
1223 \$(CC) -pipe \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o
1227 $crud = $crud . " install -m \$(INSTMODE) m_$i.so \$(MODPATH)\n";
1229 # End Write Entry to the MakeFile
1233 opendir(DIRHANDLE, "src/modules");
1234 foreach $name (sort readdir(DIRHANDLE)) {
1235 if ($name =~ /^m_(.+?)$/) {
1239 # A module made of multiple files, in a dir, e.g. src/modules/m_spanningtree/
1240 if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
1242 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";
1243 foreach $fname (sort readdir(MDIRHANDLE)) {
1244 if ($fname =~ /\.cpp$/) {
1245 $cmflags = getcompilerflags("src/modules/$name/$fname");
1246 $mliflags = $mliflags . " " . getlinkerflags("src/modules/$name/$fname");
1247 $deps = getdependencies("src/modules/$name/$fname");
1249 $oname =~ s/\.cpp$/.o/g;
1250 print FILEHANDLE " $name/$oname";
1251 $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";
1252 $crapola = $crapola . " \$(CC) -pipe -I../../include -I. \$(FLAGS) $cmflags -export-dynamic -o $name/$oname -c $name/$fname\n\n";
1253 $crap3 = $crap3 . " $name/$oname";
1257 print "Composing Makefile rules for directory \033[1;32m$name\033[0m... (\033[1;32m$i files found\033[0m)\n";
1258 if ($config{IS_DARWIN} eq "YES") {
1259 print FILEHANDLE "\n \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle -o $name.so $crap3\n";
1261 print FILEHANDLE "\n \$(CC) -pipe \$(FLAGS) -shared $mliflags -o $name.so $crap3\n";
1263 print FILEHANDLE "\n$crapola\n";
1264 closedir(MDIRHANDLE);
1265 $crud = $crud . " install -m \$(INSTMODE) $name.so \$(MODPATH)\n";
1269 closedir(DIRHANDLE);
1271 print FILEHANDLE "modinst:\n \@echo \"Installing modules...\"\n" . $crud;
1274 sub write_dynamic_makefile {
1278 opendir(DIRHANDLE, "src");
1279 foreach $name (sort readdir(DIRHANDLE)) {
1280 if ($name =~ /^cmd_(.+)\.cpp$/) {
1281 $cmdlist[$i++] = $1;
1284 closedir(DIRHANDLE);
1288 foreach my $cmd (@cmdlist) {
1289 $cmdobjs = $cmdobjs . "cmd_$cmd.so ";
1290 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1293 $se = "socketengine_select";
1294 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1295 $se = "socketengine_kqueue";
1297 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1298 $se = "socketengine_epoll";
1300 elsif (($has_ports) && ($config{USE_PORTS} eq "y")) {
1301 $se = "socketengine_ports";
1304 open(FH,">src/Makefile") or die("Could not write src/Makefile");
1306 ###################################################
1307 # Copyright 2002-2007 The InspIRCd Development Team
1308 # http://www.inspircd.org/wiki/index.php/Credits
1310 # Thanks to Andrew Church <achurch\@achurch.org>
1311 # for assisting with making this work right.
1313 # This file is automagically generated by configure
1314 # Any changes made will be lost on ./configure
1315 ###################################################
1317 CC = im a cheezeball
1319 CXXFLAGS = -I../include \${FLAGS}
1320 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1321 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1325 if ($config{IS_DARWIN} eq "YES") {
1327 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
1329 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
1330 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd.cpp
1331 \$(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
1333 libIRCDsocketengine.dylib: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1334 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp
1335 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c $se.cpp
1336 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsocketengine.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsocketengine.dylib socketengine.o $se.o
1338 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
1339 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1340 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsnomasks.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsnomasks.dylib snomasks.o
1342 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
1343 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1344 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcommand_parse.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcommand_parse.dylib command_parse.o
1346 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
1347 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1348 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcull_list.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcull_list.dylib cull_list.o
1350 libIRCDuserprocess.dylib: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1351 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1352 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDuserprocess.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDuserprocess.dylib userprocess.o
1354 libIRCDhash.dylib: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1355 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1356 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDhash.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDhash.dylib hashcomp.o
1358 libIRCDhelper.dylib: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1359 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1360 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDhelper.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDhelper.dylib helperfuncs.o
1362 libIRCDchannels.dylib: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1363 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1364 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDchannels.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDchannels.dylib channels.o
1366 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)
1367 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1368 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1369 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDmode.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDmode.dylib mode.o modes/modeclasses.a
1371 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
1372 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1373 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDxline.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDxline.dylib xline.o
1375 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
1376 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1377 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDstring.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDstring.dylib inspstring.o
1379 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
1380 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1381 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDasyncdns.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDasyncdns.dylib dns.o
1383 libIRCDbase.dylib: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1384 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1385 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDbase.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDbase.dylib base.o
1387 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
1388 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1389 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDconfigreader.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDconfigreader.dylib configreader.o
1391 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
1392 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1393 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcommands.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcommands.dylib commands.o
1395 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
1396 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1397 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDdynamic.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDdynamic.dylib dynamic.o
1399 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
1400 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1401 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDusers.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDusers.dylib users.o
1403 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
1404 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1405 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDmodules.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDmodules.dylib modules.o
1407 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
1408 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1409 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDwildcard.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDwildcard.dylib wildcard.o
1411 libIRCDsocket.dylib: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1412 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1413 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsocket.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsocket.dylib socket.o
1415 libIRCDinspsocket.dylib: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1416 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1417 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDinspsocket.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDinspsocket.dylib inspsocket.o
1419 libIRCDtimer.dylib: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1420 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1421 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDtimer.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDtimer.dylib timer.o
1423 libIRCDserver.dylib: server.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1424 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c server.cpp
1425 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDserver.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDserver.dylib server.o
1427 libIRCDfilelogger.dylib: filelogger.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1428 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c filelogger.cpp
1429 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDfilelogger.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDfilelogger.dylib filelogger.o
1436 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
1438 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
1439 \$(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
1441 libIRCDsocketengine.so: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1442 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1443 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocketengine.so socketengine.o $se.o
1445 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
1446 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1447 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsnomasks.so snomasks.o
1449 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
1450 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1451 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommand_parse.so command_parse.o
1453 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
1454 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1455 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcull_list.so cull_list.o
1457 libIRCDuserprocess.so: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1458 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1459 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDuserprocess.so userprocess.o
1461 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1462 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1463 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhash.so hashcomp.o
1465 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1466 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1467 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhelper.so helperfuncs.o
1469 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1470 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1471 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDchannels.so channels.o
1473 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)
1474 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1475 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1476 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmode.so mode.o modes/modeclasses.a
1478 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
1479 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1480 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDxline.so xline.o
1482 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
1483 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1484 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDstring.so inspstring.o
1486 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
1487 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1488 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDasyncdns.so dns.o
1490 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1491 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1492 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDbase.so base.o
1494 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
1495 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1496 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDconfigreader.so configreader.o
1498 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
1499 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1500 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommands.so commands.o
1502 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
1503 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1504 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDdynamic.so dynamic.o
1506 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
1507 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1508 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDusers.so users.o
1510 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
1511 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1512 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmodules.so modules.o
1514 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
1515 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1516 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDwildcard.so wildcard.o
1518 libIRCDsocket.so: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1519 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1520 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocket.so socket.o
1522 libIRCDinspsocket.so: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1523 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1524 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDinspsocket.so inspsocket.o
1526 libIRCDtimer.so: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1527 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1528 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDtimer.so timer.o
1530 libIRCDserver.so: server.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1531 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c server.cpp
1532 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDserver.so server.o
1534 libIRCDfilelogger.so: filelogger.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1535 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c filelogger.cpp
1536 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDfilelogger.so filelogger.o
1540 foreach my $cmd (@cmdlist) {
1542 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
1543 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1544 \$(CC) -pipe $SHARED -o cmd_$cmd.so cmd_$cmd.o