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 (.*?) /)
481 $libcv =~ /([0-9\.\-])+/;
484 elsif ($line =~ /Compiled on a Linux (.*?\..*?)\.* system/)
487 # Fix for some retarded libc builds, strip off >> and << etc.
488 $kernelv =~ /([0-9\.\-])+/;
496 printf "libc too old: $libcv... ";
501 printf "libc built against older kernel $kernelv... ";
506 print "yes\n" if $has_epoll == 1;
507 print "no\n" if $has_epoll == 0;
509 printf "Checking if Solaris I/O completion ports are available... ";
511 my $system = `uname -s`;
513 $has_ports = 1 if ($system eq "SunOS");
516 my $kernel = `uname -r`;
518 if (($kernel !~ /^5\.1./)) {
522 print "yes\n" if $has_ports == 1;
523 print "no\n" if $has_ports == 0;
525 $config{HAS_EPOLL} = $has_epoll;
526 $config{HAS_KQUEUE} = $has_kqueue;
528 printf "Checking for libgnutls... ";
529 if (($config{HAS_GNUTLS}) && (($config{HAS_GNUTLS} >= 1.2) || ($config{HAS_GNUTLS} eq "y"))) {
531 $config{HAS_GNUTLS} = "y";
534 $config{HAS_GNUTLS} = "n";
537 printf "Checking for openssl... ";
538 if (($config{HAS_OPENSSL}) && (($config{HAS_OPENSSL} >= 0.8) || ($config{HAS_OPENSSL} eq "y"))) {
540 $config{HAS_OPENSSL} = "y";
543 $config{HAS_OPENSSL} = "n";
546 ################################################################################
547 # BEGIN INTERACTIVE PART #
548 ################################################################################
556 my $rev = getrevision();
557 # Display Introduction Message..
559 Welcome to the \033[1mInspIRCd\033[0m Configuration program! (\033[1minteractive mode\033[0m)
560 \033[1mPackage maintainers: Type ./configure --help for non-interactive help\033[0m
562 *** If you are unsure of any of these values, leave it blank for ***
563 *** standard settings that will work, and your server will run ***
564 *** using them. Please consult your IRC network admin if in doubt. ***
566 Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter
567 a new value. Please note: You will \033[1mHAVE\033[0m to read the docs
568 dir, otherwise you won't have a config file!
570 Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos)
571 Maximum file descriptors: \033[1;32m$config{MAX_CLIENT_T}\033[0m
572 Your InspIRCd revision ID is \033[1;32mr$rev\033[0m";
574 print " (Non-SVN build)";
578 $config{CHANGE_COMPILER} = "n";
579 print "I have detected the following compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
581 while (($config{GCCVER} < 3) || ($config{GCCVER} eq "")) {
582 print "\033[1;32mIMPORTANT!\033[0m A GCC 2.x compiler has been detected, and
583 should NOT be used. You should probably specify a newer compiler.\n\n";
584 yesno(CHANGE_COMPILER,"Do you want to change the compiler?");
585 if ($config{CHANGE_COMPILER} =~ /y/i) {
586 print "What command do you want to use to invoke your compiler?\n";
587 print "[\033[1;32m$config{CC}\033[0m] -> ";
588 chomp($config{CC} = <STDIN>);
589 if ($config{CC} eq "") {
592 chomp($foo = `$config{CC} -dumpversion | cut -c 1`);
594 chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change compilers
595 print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
596 if ($config{GCCVER} < 3) {
597 print "\033[1;32mGCC 2.x WILL NOT WORK!\033[0m. Let's try that again, shall we?\n";
601 print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n";
608 # Directory Settings..
609 my $tmpbase = $config{BASE_DIR};
610 dir_check("do you wish to install the InspIRCd base", "BASE_DIR");
611 if ($tmpbase ne $config{BASE_DIR}) {
612 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Dir
613 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
614 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
615 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
618 dir_check("are the configuration files", "CONFIG_DIR");
619 dir_check("are the modules to be compiled to", "MODULE_DIR");
620 dir_check("is the IRCd binary to be placed", "BINARY_DIR");
621 dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
624 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?");
628 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?");
632 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?");
635 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y") || ($config{USE_PORTS} eq "y"));
636 if (!$chose_hiperf) {
637 print "No high-performance socket engines are available, or you chose\n";
638 print "not to enable one. Defaulting to select() engine.\n\n";
641 yesno(IPV6,"Would you like to build InspIRCd with IPv6 support?");
644 if ($config{IPV6} eq "y") {
645 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";
646 $config{SUPPORT_IP6LINKS} = "y";
648 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)");
652 if (($config{HAS_GNUTLS} eq "y") && ($config{HAS_OPENSSL} eq "y")) {
653 print "I have detected both \033[1;32mGnuTLS\033[0m and \033[1;32mOpenSSL\033[0m on your system.\n";
654 print "I will default to GnuTLS. If you wish to use OpenSSL\n";
655 print "instead, you should enable the OpenSSL module yourself\n";
656 print "by copying it from src/modules/extra to src/modules.\n\n";
657 print "Detected GnuTLS version: \033[1;32m" . $gnutls_ver . "\033[0m\n";
658 print "Detected OpenSSL version: \033[1;32m" . $openssl_ver . "\033[0m\n\n";
661 if ($config{HAS_GNUTLS} eq "y") {
662 yesno(USE_GNUTLS, "Would you like to enable SSL Support?");
663 if ($config{USE_GNUTLS} eq "y") {
664 print "\nUsing GnuTLS SSL module.\n";
666 } elsif ($config{HAS_OPENSSL} eq "y") {
667 yesno(USE_OPENSSL, "Would you like to enable SSL Support?");
668 if ($config{USE_OPENSSL} eq "y") {
669 print "\nUsing OpenSSL SSL module.\nYou will get better performance if you move to GnuTLS in the future.\n";
673 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";
676 print "\nThe following questions will ask you for various figures relating\n";
677 print "To your IRCd install. Please note that these should usually be left\n";
678 print "as defaults unless you have a real reason to change them. If they\n";
679 print "changed, then the values must be identical on all servers on your\n";
680 print "network, or malfunctions and/or crashes may occur, with the exception\n";
681 print "of the 'maximum number of clients' setting which may be different on\n";
682 print "different servers on the network.\n\n";
684 # File Descriptor Settings..
685 promptnumeric("number of clients at any one time", "MAX_CLIENT_T");
686 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
687 $config{MAX_DESCRIPTORS} = $config{MAX_CLIENT_T};
689 promptnumeric("length of nicknames", "NICK_LENGT");
690 promptnumeric("length of channel names", "CHAN_LENGT");
691 promptnumeric("number of mode changes in one line", "MAXI_MODES");
692 promptnumeric("length of an ident (username)", "MAX_IDENT");
693 promptnumeric("length of a quit message", "MAX_QUIT");
694 promptnumeric("length of a channel topic", "MAX_TOPIC");
695 promptnumeric("length of a kick message", "MAX_KICK");
696 promptnumeric("length of a GECOS (real name)", "MAX_GECOS");
697 promptnumeric("length of an away message", "MAX_AWAY");
702 if (($config{USE_GNUTLS} eq "y") && ($config{HAS_GNUTLS} ne "y"))
704 print "Sorry, but i couldn't detect gnutls. Make sure gnutls-config is in your path.\n";
707 if (($config{USE_OPENSSL} eq "y") && ($config{HAS_OPENSSL} ne "y"))
709 print "Sorry, but i couldn't detect openssl. Make sure openssl is in your path.\n";
713 if ($config{USE_GNUTLS} eq "y") {
715 open(TMP, "<src/modules/m_ssl_gnutls.cpp") or $failed = 1;
718 print "Symlinking src/modules/m_ssl_gnutls.cpp from extra/\n";
719 chdir("src/modules");
720 system("ln -s extra/m_ssl_gnutls.cpp");
727 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
729 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
732 print "SSL Certificates Not found, Generating.. \n\n
733 *************************************************************
734 * Generating the Private Key may take some time, go grab a *
735 * Coffee. Even better, to generate some more entropy if it *
736 * is taking a while, open another console and type du / a *
737 * few times and get that HD going :) Then answer the *
738 * Questions which follow. If you are unsure, just hit enter *
739 *************************************************************\n\n";
740 $failed = make_gnutls_cert();
742 print "\n\033[1;32mCertificate generation failed!\033[0m\n\n";
744 print "\nCertificate generation complete, copying to config directory... ";
745 system("mv key.pem $config{CONFIG_DIR}/key.pem");
746 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
751 print "SSL Certificates found, skipping.\n\n";
756 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
758 } elsif ($config{USE_OPENSSL} eq "y") {
760 open(TMP, "<src/modules/m_ssl_openssl.cpp") or $failed = 1;
763 print "Symlinking src/modules/m_ssl_openssl.cpp from extra/\n";
764 chdir("src/modules");
765 system("ln -s extra/m_ssl_openssl.cpp");
772 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
774 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
777 print "SSL Certificates Not found, Generating.. \n\n
778 *************************************************************
779 * Generating the certificates may take some time, go grab a *
780 * coffee, or something. *
781 *************************************************************\n\n";
783 print "\nCertificate generation complete, copying to config directory... ";
784 system("mv key.pem $config{CONFIG_DIR}/key.pem");
785 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
786 system("mv dhparams.pem $config{CONFIG_DIR}/dhparams.pem");
789 print "SSL Certificates found, skipping.\n\n"
794 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
797 if (($config{USE_GNUTLS} eq "n") && ($config{USE_OPENSSL} eq "n")) {
798 print "Skipping SSL Certificate generation, SSL support is not available.\n\n";
806 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
807 if (($config{USE_GNUTLS} eq "y") || ($config{USE_OPENSSL} eq "y")) {
808 print "Please remember that to enable \033[1;32mSSL support\033[0m you must\n";
809 print "load the required modules in your config. This configure process\n";
810 print "has just prepared these modules to be compiled for you, and has not\n";
811 print "configured them to be compiled into the core of the ircd.\n";
813 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
814 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
815 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";
818 if ($config{GCCVER} < "3") {
820 \033[1;32mWARNING!\033[0m You are attempting to compile InspIRCd on GCC 2.x!
821 GCC 2.x series compilers only had partial (read as broken) C++ support, and
822 your compile will most likely fail horribly! If you have any problems, do NOT
823 report them to the bugtracker or forums without first upgrading your compiler
824 to a newer 3.x or 4.x (or whatever is available currently) version.
828 ################################################################################
830 ################################################################################
832 # Retrieves the .config.cache file, and loads values into the main config hash.
833 open(CACHE, ".config.cache") or return 0;
836 # Ignore Blank lines, and comments..
839 my ($key, $value) = split("=", $_, 2);
840 $value =~ /^\"(.*)\"$/;
841 # Do something with data here!
849 # Dump the contents of %config
850 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
851 open(FILEHANDLE, ">.config.cache");
852 foreach $key (keys %config) {
853 print FILEHANDLE "$key=\"$config{$key}\"\n";
859 my ($desc, $hash_key) = @_;
862 print "In what directory $desc?\n";
863 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
864 chomp($var = <STDIN>);
866 $var = $config{$hash_key};
868 if ($var =~ /^\~\/(.+)$/) {
869 # Convert it to a full path..
870 $var = resolve_directory($ENV{HOME} . "/" . $1);
872 elsif ((($config{OSNAME} =~ /MINGW32/i) and ($var !~ /^[A-Z]{1}:\\.*/)) and (substr($var,0,1) ne "/"))
874 # Assume relative Path was given.. fill in the rest.
875 $var = $this . "/$var";
878 $var = resolve_directory($var);
880 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
881 chomp($tmp = <STDIN>);
882 if (($tmp eq "") || ($tmp =~ /^y/i)) {
883 # Attempt to Create the Dir..
885 system("mkdir -p \"$var\" >> /dev/null 2>&1");
886 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
888 print "Unable to create directory. ($var)\n\n";
893 # They said they don't want to create, and we can't install there.
899 # Target exists, but is not a directory.
900 print "File $var exists, but is not a directory.\n\n";
904 # Either Dir Exists, or was created fine.
905 $config{$hash_key} = $var;
913 $config{LDLIBS} = "-lstdc++";
914 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}";
915 $config{DEVELOPER} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated -g";
916 $SHARED = "-Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared";
917 $config{MAKEPROG} = "make";
919 if ($config{OSNAME} =~ /darwin/i) {
920 $config{FLAGS} = "-DDARWIN -frtti -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}";
921 $SHARED = "-bundle -twolevel_namespace -undefined dynamic_lookup";
922 $config{LDLIBS} = "-ldl -lstdc++";
925 if ($config{OSNAME} =~ /OpenBSD/i) {
926 $config{MAKEPROG} = "gmake";
927 chomp($foo = `eg++ -dumpversion | cut -c 1`);
928 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
929 # if theyre not running this, configure lets the build continue but they probably wont manage to
930 # compile as this standard version is 2.95.3!
932 $config{CC} = "eg++";
933 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change the compiler path
938 if ($config{OSNAME} =~ /Linux/i) {
939 $config{LDLIBS} = "-ldl -lstdc++";
940 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}";
941 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
942 $config{LDLIBS} .= " " . $ENV{LDLIBS} if exists($ENV{LDLIBS});
943 $config{MAKEPROG} = "make";
946 if ($config{OSNAME} =~ /FreeBSD/i) {
947 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
948 $config{LDLIBS} .= " " . $ENV{LDLIBS} if exists($ENV{LDLIBS});
951 if ($config{OSNAME} =~ /SunOS/i or $config{OSNAME} =~ /solaris/i)
953 # solaris/sunos needs these
954 # socket = bsd sockets api
956 # rt = POSIX realtime extensions
957 # resolv = inet_aton only (why isnt this in nsl?!)
958 $config{MAKEPROG} = "gmake";
959 $config{LDLIBS} .= " -lsocket -lnsl -lrt -lresolv";
963 if($config{OSNAME} =~ /MINGW32/i)
965 # All code is position-independent on windows
966 $config{FLAGS} =~ s/-fPIC //;
970 return $config{OSNAME};
974 my($writeheader) = @_;
975 # First File.. inspircd_config.h
976 chomp(my $incos = `uname -n -s -r`);
977 chomp($version = `sh src/version.sh`);
978 chomp(my $revision2 = getrevision());
979 if ($writeheader == 1)
981 print "Writing \033[1;32minspircd_config.h\033[0m\n";
982 open(FILEHANDLE, ">include/inspircd_config.h");
983 my $NL = $config{NICK_LENGT}+1;
984 my $CL = $config{CHAN_LENGT}+1;
985 print FILEHANDLE <<EOF;
986 /* Auto generated by configure, do not modify! */
987 #ifndef __CONFIGURATION_AUTO__
988 #define __CONFIGURATION_AUTO__
990 /* this is for windows support. */
991 #define CoreExport /**/
992 #define DllExport /**/
994 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
995 #define MOD_PATH "$config{MODULE_DIR}"
996 #define VERSION "$version"
997 #define REVISION "$revision2"
998 #define MAXCLIENTS $config{MAX_CLIENT}
999 #define MAXCLIENTS_S "$config{MAX_CLIENT}"
1000 #define SOMAXCONN_S "$config{_SOMAXCONN}"
1001 #define MAX_DESCRIPTORS $config{MAX_DESCRIPTORS}
1004 #define MAXMODES $config{MAXI_MODES}
1005 #define IDENTMAX $config{MAX_IDENT}
1006 #define MAXQUIT $config{MAX_QUIT}
1007 #define MAXTOPIC $config{MAX_TOPIC}
1008 #define MAXKICK $config{MAX_KICK}
1009 #define MAXGECOS $config{MAX_GECOS}
1010 #define MAXAWAY $config{MAX_AWAY}
1011 #define OPTIMISATION $config{OPTIMITEMP}
1012 #define LIBRARYDIR "$config{LIBRARY_DIR}"
1013 #define SYSTEM "$incos"
1015 print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n";
1017 if ($config{OSNAME} =~ /SunOS/i) {
1018 print FILEHANDLE "#define IS_SOLARIS\n";
1020 if ($config{OSNAME} =~ /MINGW32/i) {
1021 print FILEHANDLE "#define IS_MINGW\n";
1023 if ($config{GCCVER} >= 3) {
1024 print FILEHANDLE "#define GCC3\n";
1026 if ($config{HAS_STRLCPY} eq "true") {
1027 print FILEHANDLE "#define HAS_STRLCPY\n";
1029 if ($config{HAS_STDINT} eq "true") {
1030 print FILEHANDLE "#define HAS_STDINT\n";
1032 if ($config{IPV6} =~ /y/i) {
1033 print FILEHANDLE "#define IPV6\n";
1035 if ($config{SUPPORT_IP6LINKS} =~ /y/i) {
1036 print FILEHANDLE "#define SUPPORT_IP6LINKS\n";
1039 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1040 print FILEHANDLE "#define USE_KQUEUE\n";
1041 $se = "socketengine_kqueue";
1044 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1045 print FILEHANDLE "#define USE_EPOLL\n";
1046 $se = "socketengine_epoll";
1049 if (($has_ports) && ($config{USE_PORTS} eq "y")) {
1050 print FILEHANDLE "#define USE_PORTS\n";
1051 $se = "socketengine_ports";
1054 # user didn't choose either epoll or select for their OS.
1055 # default them to USE_SELECT (ewwy puke puke)
1057 print FILEHANDLE "#define USE_SELECT\n";
1058 $se = "socketengine_select";
1060 print FILEHANDLE "\n#endif\n";
1066 open(FILEHANDLE, ">include/inspircd_se_config.h");
1067 print FILEHANDLE <<EOF;
1068 /* Auto generated by configure, do not modify or commit to svn! */
1069 #ifndef __CONFIGURATION_SOCKETENGINE__
1070 #define __CONFIGURATION_SOCKETENGINE__
1080 # Create a Modules List..
1082 foreach $i (@modlist)
1084 $modules .= "m_".$i.".so ";
1086 chomp($modules); # Remove Redundant whitespace..
1088 opendir(DIRHANDLE, "src/modules");
1089 foreach $name (sort readdir(DIRHANDLE)) {
1090 if ($name =~ /^m_(.+?)$/) {
1091 if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
1092 closedir(MDIRHANDLE);
1093 $modules .= "$name.so ";
1097 closedir(DIRHANDLE);
1100 # Write all .in files.
1103 my $exe = "inspircd";
1105 opendir(DIRHANDLE, $this);
1107 # Do this once here, and cache it in the .*.inc files,
1108 # rather than attempting to read src/version.sh from
1109 # compiled code -- we might not have the source to hand.
1110 # Fix for bug#177 by Brain.
1112 chomp(my $version = `sh ./src/version.sh`);
1113 chomp(my $revision = getrevision());
1114 $version = "$version(r$revision)";
1117 if ($config{IS_DARWIN} eq "YES")
1121 # We can actually parse any file starting with . and ending with .inc,
1122 # but right now we only parse .inspircd.inc to form './inspircd'
1124 foreach $name (sort readdir(DIRHANDLE)) {
1125 if ($name =~ /^\.(.+)\.inc$/) {
1128 # Bug #353, omit this on non-darwin
1129 next if (($config{OSNAME} !~ /darwin/) && ($file eq "org.inspircd.plist"));
1131 # All .name.inc files need parsing!
1133 open(FILEHANDLE, ".$file.inc");
1134 while (<FILEHANDLE>) {
1139 $tmp =~ s/\@CC\@/$config{CC}/;
1140 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
1141 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
1142 $tmp =~ s/\@DEVELOPER\@/$config{DEVELOPER}/;
1143 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
1144 $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/;
1145 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
1146 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
1147 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
1148 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
1149 $tmp =~ s/\@LIBRARY_EXT\@/$LIBEXT/;
1150 $tmp =~ s/\@MODULES\@/$modules/;
1151 $tmp =~ s/\@STARTSCRIPT\@/$config{STARTSCRIPT}/;
1152 $tmp =~ s/\@DESTINATION\@/$config{DESTINATION}/;
1153 $tmp =~ s/\@EXTRA_DIR\@/$config{EXTRA_DIR}/;
1154 $tmp =~ s/\@EXECUTABLE\@/$exe/;
1155 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
1156 $tmp =~ s/\@VERSION\@/$version/;
1158 print "Writing \033[1;32m$file\033[0m\n";
1159 open(FILEHANDLE, ">$file");
1160 print FILEHANDLE $tmp;
1163 closedir(DIRHANDLE);
1165 # Make inspircd executable!
1166 chmod 0744, 'inspircd';
1168 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
1169 write_dynamic_makefile();
1170 write_dynamic_modules_makefile();
1173 sub write_dynamic_modules_makefile {
1174 # Modules Makefile..
1175 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1176 open(FILEHANDLE, ">src/modules/Makefile");
1179 # Module Makefile Header
1181 print FILEHANDLE <<EOF;
1182 ###################################################
1183 # Copyright 2002-2007 The InspIRCd Development Team
1184 # http://www.inspircd.org/wiki/index.php/Credits
1186 # Thanks to Andrew Church <achurch\@achurch.org>
1187 # for assisting with making this work right.
1189 # Automatically Generated by ./configure to add a
1190 # modules please run ./configure -modupdate
1191 ###################################################
1197 # End Module Makefile Header
1200 # Create a Modules List..
1206 foreach $i (@modlist) {
1208 # Write Entry to the MakeFile
1210 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1211 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1212 $deps = getdependencies("src/modules/m_".$i.".cpp");
1214 #print "file: $i: cmflags=$cmflags; liflags=$liflags; deps=$deps\n";
1216 print FILEHANDLE <<EOCHEESE;
1217 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
1218 \$(CC) -pipe -I../../include \$(FLAGS) $cmflags -export-dynamic -c m_$i.cpp
1221 if ($config{OSNAME} =~ /darwin/) {
1222 print FILEHANDLE <<EOCHEESE;
1223 \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle $liflags -o m_$i.so m_$i.o
1227 print FILEHANDLE <<EOCHEESE;
1228 \$(CC) -pipe \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o
1232 $crud = $crud . " install -m \$(INSTMODE) m_$i.so \$(MODPATH)\n";
1234 # End Write Entry to the MakeFile
1238 opendir(DIRHANDLE, "src/modules");
1239 foreach $name (sort readdir(DIRHANDLE)) {
1240 if ($name =~ /^m_(.+?)$/) {
1244 # A module made of multiple files, in a dir, e.g. src/modules/m_spanningtree/
1245 if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
1247 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";
1248 foreach $fname (sort readdir(MDIRHANDLE)) {
1249 if ($fname =~ /\.cpp$/) {
1250 $cmflags = getcompilerflags("src/modules/$name/$fname");
1251 $mliflags = $mliflags . " " . getlinkerflags("src/modules/$name/$fname");
1252 $deps = getdependencies("src/modules/$name/$fname");
1254 $oname =~ s/\.cpp$/.o/g;
1255 print FILEHANDLE " $name/$oname";
1256 $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";
1257 $crapola = $crapola . " \$(CC) -pipe -I../../include -I. \$(FLAGS) $cmflags -export-dynamic -o $name/$oname -c $name/$fname\n\n";
1258 $crap3 = $crap3 . " $name/$oname";
1262 print "Composing Makefile rules for directory \033[1;32m$name\033[0m... (\033[1;32m$i files found\033[0m)\n";
1263 if ($config{IS_DARWIN} eq "YES") {
1264 print FILEHANDLE "\n \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle -o $name.so $crap3\n";
1266 print FILEHANDLE "\n \$(CC) -pipe \$(FLAGS) -shared $mliflags -o $name.so $crap3\n";
1268 print FILEHANDLE "\n$crapola\n";
1269 closedir(MDIRHANDLE);
1270 $crud = $crud . " install -m \$(INSTMODE) $name.so \$(MODPATH)\n";
1274 closedir(DIRHANDLE);
1276 print FILEHANDLE "modinst:\n \@echo \"Installing modules...\"\n" . $crud;
1279 sub write_dynamic_makefile {
1283 opendir(DIRHANDLE, "src");
1284 foreach $name (sort readdir(DIRHANDLE)) {
1285 if ($name =~ /^cmd_(.+)\.cpp$/) {
1286 $cmdlist[$i++] = $1;
1289 closedir(DIRHANDLE);
1293 foreach my $cmd (@cmdlist) {
1294 $cmdobjs = $cmdobjs . "cmd_$cmd.so ";
1295 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1298 $se = "socketengine_select";
1299 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1300 $se = "socketengine_kqueue";
1302 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1303 $se = "socketengine_epoll";
1305 elsif (($has_ports) && ($config{USE_PORTS} eq "y")) {
1306 $se = "socketengine_ports";
1309 open(FH,">src/Makefile") or die("Could not write src/Makefile");
1311 ###################################################
1312 # Copyright 2002-2007 The InspIRCd Development Team
1313 # http://www.inspircd.org/wiki/index.php/Credits
1315 # Thanks to Andrew Church <achurch\@achurch.org>
1316 # for assisting with making this work right.
1318 # This file is automagically generated by configure
1319 # Any changes made will be lost on ./configure
1320 ###################################################
1322 CC = im a cheezeball
1324 CXXFLAGS = -I../include \${FLAGS}
1325 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1326 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1330 if ($config{IS_DARWIN} eq "YES") {
1332 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
1334 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
1335 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd.cpp
1336 \$(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
1338 libIRCDsocketengine.dylib: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1339 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp
1340 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c $se.cpp
1341 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsocketengine.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsocketengine.dylib socketengine.o $se.o
1343 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
1344 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1345 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsnomasks.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsnomasks.dylib snomasks.o
1347 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
1348 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1349 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcommand_parse.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcommand_parse.dylib command_parse.o
1351 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
1352 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1353 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcull_list.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcull_list.dylib cull_list.o
1355 libIRCDuserprocess.dylib: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1356 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1357 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDuserprocess.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDuserprocess.dylib userprocess.o
1359 libIRCDhash.dylib: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1360 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1361 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDhash.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDhash.dylib hashcomp.o
1363 libIRCDhelper.dylib: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1364 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1365 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDhelper.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDhelper.dylib helperfuncs.o
1367 libIRCDchannels.dylib: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1368 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1369 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDchannels.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDchannels.dylib channels.o
1371 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)
1372 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1373 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1374 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDmode.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDmode.dylib mode.o modes/modeclasses.a
1376 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
1377 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1378 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDxline.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDxline.dylib xline.o
1380 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
1381 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1382 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDstring.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDstring.dylib inspstring.o
1384 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
1385 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1386 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDasyncdns.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDasyncdns.dylib dns.o
1388 libIRCDbase.dylib: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1389 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1390 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDbase.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDbase.dylib base.o
1392 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
1393 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1394 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDconfigreader.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDconfigreader.dylib configreader.o
1396 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
1397 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1398 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcommands.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcommands.dylib commands.o
1400 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
1401 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1402 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDdynamic.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDdynamic.dylib dynamic.o
1404 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
1405 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1406 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDusers.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDusers.dylib users.o
1408 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
1409 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1410 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDmodules.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDmodules.dylib modules.o
1412 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
1413 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1414 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDwildcard.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDwildcard.dylib wildcard.o
1416 libIRCDsocket.dylib: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1417 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1418 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsocket.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsocket.dylib socket.o
1420 libIRCDinspsocket.dylib: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1421 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1422 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDinspsocket.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDinspsocket.dylib inspsocket.o
1424 libIRCDtimer.dylib: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1425 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1426 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDtimer.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDtimer.dylib timer.o
1428 libIRCDserver.dylib: server.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1429 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c server.cpp
1430 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDserver.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDserver.dylib server.o
1432 libIRCDfilelogger.dylib: filelogger.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1433 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c filelogger.cpp
1434 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDfilelogger.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDfilelogger.dylib filelogger.o
1441 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
1443 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
1444 \$(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
1446 libIRCDsocketengine.so: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1447 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1448 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocketengine.so socketengine.o $se.o
1450 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
1451 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1452 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsnomasks.so snomasks.o
1454 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
1455 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1456 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommand_parse.so command_parse.o
1458 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
1459 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1460 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcull_list.so cull_list.o
1462 libIRCDuserprocess.so: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1463 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1464 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDuserprocess.so userprocess.o
1466 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1467 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1468 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhash.so hashcomp.o
1470 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1471 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1472 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhelper.so helperfuncs.o
1474 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1475 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1476 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDchannels.so channels.o
1478 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)
1479 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1480 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1481 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmode.so mode.o modes/modeclasses.a
1483 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
1484 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1485 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDxline.so xline.o
1487 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
1488 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1489 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDstring.so inspstring.o
1491 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
1492 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1493 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDasyncdns.so dns.o
1495 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1496 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1497 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDbase.so base.o
1499 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
1500 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1501 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDconfigreader.so configreader.o
1503 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
1504 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1505 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommands.so commands.o
1507 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
1508 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1509 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDdynamic.so dynamic.o
1511 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
1512 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1513 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDusers.so users.o
1515 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
1516 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1517 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmodules.so modules.o
1519 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
1520 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1521 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDwildcard.so wildcard.o
1523 libIRCDsocket.so: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1524 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1525 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocket.so socket.o
1527 libIRCDinspsocket.so: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1528 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1529 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDinspsocket.so inspsocket.o
1531 libIRCDtimer.so: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1532 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1533 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDtimer.so timer.o
1535 libIRCDserver.so: server.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1536 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c server.cpp
1537 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDserver.so server.o
1539 libIRCDfilelogger.so: filelogger.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1540 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c filelogger.cpp
1541 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDfilelogger.so filelogger.o
1545 foreach my $cmd (@cmdlist) {
1547 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
1548 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1549 \$(CC) -pipe $SHARED -o cmd_$cmd.so cmd_$cmd.o