2 ###################################################
3 # InspIRCd Configuration Script
5 # Copyright 2002-2007 The InspIRCd Development Team
6 # http://www.inspircd.org/wiki/index.php/Credits
8 # Licensed under GPL, please see the COPYING file
13 ###################################################
20 # Utility functions for our buildsystem
24 use make::opensslcert;
27 'enable-gnutls' => \$opt_use_gnutls,
28 'rebuild' => \$opt_rebuild,
29 'enable-openssl' => \$opt_use_openssl,
30 'disable-interactive' => \$opt_nointeractive,
31 'with-nick-length=i' => \$opt_nick_length,
32 'with-channel-length=i' => \$opt_chan_length,
33 'with-max-clients=i' => \$opt_maxclients,
34 'enable-ports' => \$opt_ports,
35 'enable-epoll' => \$opt_epoll,
36 'enable-kqueue' => \$opt_kqueue,
37 'disable-ports' => \$opt_noports,
38 'disable-epoll' => \$opt_noepoll,
39 'disable-kqueue' => \$opt_nokqueue,
40 'enable-ipv6' => \$opt_ipv6,
41 'enable-remote-ipv6' => \$opt_ipv6links,
42 'disable-remote-ipv6' => \$opt_noipv6links,
43 'with-cc=s' => \$opt_cc,
44 'with-ident-length=i' => \$opt_ident,
45 'with-quit-length=i' => \$opt_quit,
46 'with-topic-length=i' => \$opt_topic,
47 'with-maxbuf=i' => \$opt_maxbuf,
48 'with-kick-length=i' => \$opt_kick,
49 'with-gecos-length=i' => \$opt_gecos,
50 'with-away-length=i' => \$opt_away,
51 'with-max-modes=i' => \$opt_modes,
52 'prefix=s' => \$opt_base_dir,
53 'config-dir=s' => \$opt_config_dir,
54 'module-dir=s' => \$opt_module_dir,
55 'binary-dir=s' => \$opt_binary_dir,
56 'library-dir=s' => \$opt_library_dir,
57 'disable-debuginfo' => sub { $opt_disable_debug = 1 },
58 'help' => sub { showhelp(); },
59 'modupdate' => sub { modupdate(); },
60 'update' => sub { update(); },
61 'svnupdate' => sub { svnupdate(); },
62 'clean' => sub { clean(); },
65 my $non_interactive = (
66 (defined $opt_library_dir) ||
67 (defined $opt_base_dir) ||
68 (defined $opt_config_dir) ||
69 (defined $opt_module_dir) ||
70 (defined $opt_base_dir) ||
71 (defined $opt_binary_dir) ||
72 (defined $opt_nointeractive) ||
73 (defined $opt_away) ||
74 (defined $opt_gecos) ||
75 (defined $opt_kick) ||
76 (defined $opt_maxclients) ||
77 (defined $opt_modes) ||
78 (defined $opt_topic) ||
79 (defined $opt_quit) ||
80 (defined $opt_ident) ||
82 (defined $opt_ipv6) ||
83 (defined $opt_ipv6links) ||
84 (defined $opt_noipv6links) ||
85 (defined $opt_kqueue) ||
86 (defined $opt_epoll) ||
87 (defined $opt_ports) ||
88 (defined $opt_maxchans) ||
89 (defined $opt_opermaxchans) ||
90 (defined $opt_chan_length) ||
91 (defined $opt_nick_length) ||
92 (defined $opt_use_openssl) ||
93 (defined $opt_nokqueue) ||
94 (defined $opt_noepoll) ||
95 (defined $opt_noports) ||
96 (defined $opt_maxbuf) ||
97 (defined $opt_use_gnutls)
99 my $interactive = !$non_interactive;
102 chomp($topdir = getcwd());
103 $this = resolve_directory($topdir); # PWD, Regardless.
104 @modlist = (); # Declare for Module List..
105 %config = (); # Initiate Configuration Hash..
106 $config{ME} = resolve_directory($topdir); # Present Working Directory
108 $config{BASE_DIR} = $config{ME};
110 if (defined $opt_base_dir)
112 $config{BASE_DIR} = $opt_base_dir;
115 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Directory
116 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
117 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
118 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
120 if (defined $opt_config_dir)
122 $config{CONFIG_DIR} = $opt_config_dir;
124 if (defined $opt_module_dir)
126 $config{MODULE_DIR} = $opt_module_dir;
128 if (defined $opt_binary_dir)
130 $config{BINARY_DIR} = $opt_binary_dir;
132 if (defined $opt_library_dir)
134 $config{LIBRARY_DIR} = $opt_library_dir;
136 chomp($config{HAS_GNUTLS} = `libgnutls-config --version 2>/dev/null | cut -c 1,2,3`); # GNUTLS Version.
137 chomp($config{HAS_OPENSSL} = `pkg-config --modversion openssl 2>/dev/null`); # Openssl version
138 chomp($gnutls_ver = $config{HAS_GNUTLS});
139 chomp($openssl_ver = $config{HAS_OPENSSL});
140 $config{USE_GNUTLS} = "n";
141 if (defined $opt_use_gnutls)
143 $config{USE_GNUTLS} = "y"; # Use gnutls.
145 $config{USE_OPENSSL} = "n"; # Use openssl.
146 if (defined $opt_use_openssl)
148 $config{USE_OPENSSL} = "y";
151 # no, let's not change these.
152 $config{OPTIMITEMP} = "0"; # Default Optimisation Value
153 if (!defined $opt_disable_debug)
155 $config{OPTIMISATI} = "-g1"; # Optimisation Flag
159 $config{OPTIMISATI} = "-O2"; # DEBUGGING OFF!
162 $config{NICK_LENGT} = "31"; # Default Nick Length
163 if (defined $opt_nick_length)
165 $config{NICK_LENGT} = $opt_nick_length;
167 $config{CHAN_LENGT} = "64"; # Default Channel Name Length
168 if (defined $opt_chan_length)
170 $config{CHAN_LENGT} = $opt_chan_length;
172 $config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once.
173 if (defined $opt_modes)
175 $config{MAXI_MODES} = $opt_modes;
177 $config{HAS_STRLCPY} = "false"; # strlcpy Check.
178 $config{HAS_STDINT} = "false"; # stdint.h check
179 $config{USE_KQUEUE} = "y"; # kqueue enabled
180 if (defined $opt_kqueue)
182 $config{USE_KQUEUE} = "y";
184 if (defined $opt_nokqueue)
186 $config{USE_KQUEUE} = "n";
188 $config{USE_EPOLL} = "y"; # epoll enabled
189 if (defined $opt_epoll)
191 $config{USE_EPOLL} = "y";
193 if (defined $opt_noepoll)
195 $config{USE_EPOLL} = "n";
197 $config{USE_PORTS} = "y"; # epoll enabled
198 if (defined $opt_ports)
200 $config{USE_PORTS} = "y";
202 if (defined $opt_noports)
204 $config{USE_PORTS} = "n";
206 $config{IPV6} = "n"; # IPv6 support (experimental)
207 if (defined $opt_ipv6)
211 $config{SUPPORT_IP6LINKS} = "y"; # IPv4 supporting IPv6 links (experimental)
212 if (defined $opt_ipv6links)
214 $config{SUPPORT_IP6LINKS} = "y";
216 if (defined $opt_noipv6links)
218 $config{SUPPORT_IP6LINKS} = "n";
220 chomp($config{MAX_CLIENT_T} = `sh -c \"ulimit -n\"`); # FD Limit
221 chomp($config{MAX_DESCRIPTORS} = `sh -c \"ulimit -n\"`); # Hard FD Limit
222 chomp($config{GCCVER} = `g++ -dumpversion | cut -c 1`); # Major GCC Version
223 $config{_SOMAXCONN} = SOMAXCONN; # Max connections in accept queue
224 $config{OSNAME} = $^O; # Operating System Name
225 $config{IS_DARWIN} = "NO"; # Is OSX?
226 $config{STARTSCRIPT} = "inspircd"; # start script?
227 $config{DESTINATION} = "BASE"; # Is target path.
228 $config{EXTRA_DIR} = ""; # Is empty.
229 if ($config{OSNAME} =~ /darwin/i)
231 $config{IS_DARWIN} = "YES";
232 $config{STARTSCRIPT} = "org.inspircd.plist"; # start script for OSX.
233 $config{DESTINATION} = "LAUNCHDPATH"; # Is OSX target.
234 $config{EXTRA_DIR} = " launchd_dir"; # Is OSX specific path.
236 $config{CC} = "g++"; # C++ compiler
239 $config{CC} = $opt_cc;
241 $exec = $config{CC} . " -dumpversion | cut -c 1";
242 chomp($config{GCCVER} = `$exec`); # Major GCC Version
243 $config{MAKEORDER} = "ircd mods"; # build order
244 $config{MAX_IDENT} = "12"; # max ident size
245 $config{MAX_QUIT} = "255"; # max quit message size
246 $config{MAX_TOPIC} = "307"; # max topic size
247 $config{MAX_KICK} = "255"; # max kick message size
248 $config{MAX_GECOS} = "128"; # max GECOS size
249 $config{MAX_AWAY} = "200"; # max AWAY size
250 $config{MAXBUF} = "512"; # Max buffer size
251 if (defined $opt_ident)
253 $config{MAX_IDENT} = $opt_ident;
255 if (defined $opt_quit)
257 $config{MAX_QUIT} = $opt_quit;
259 if (defined $opt_topic)
261 $config{MAX_TOPIC} = $opt_topic;
263 if (defined $opt_kick)
265 $config{MAX_KICK} = $opt_kick;
267 if (defined $opt_gecos)
269 $config{MAX_GECOS} = $opt_gecos;
271 if (defined $opt_away)
273 $config{MAX_AWAY} = $opt_away;
276 $config{HAS_OPENSSL} =~ /^([-[:digit:].]+)([a-z])?(\-[a-z][0-9])?$/;
277 $config{HAS_OPENSSL} = $1;
279 if ($config{GCCVER} eq "") {
280 print $config{CC} . " was not found! You require g++ (the GNU C++ compiler, part of GCC) to build InspIRCd!\n";
284 if (!$config{MAX_CLIENT_T}) {
285 $config{MAX_CLIENT_T} = 1024; # Set a reasonable 'Default'
286 $fd_scan_fail = "true"; # Used Later
289 # Get and Set some important vars..
294 system("rm -rf .config.cache");
300 chomp($topdir = getcwd());
301 $this = resolve_directory($topdir); # PWD, Regardless.
303 # Does the cache file exist?
305 # No, No it doesn't.. *BASH*
306 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
309 # We've Loaded the cache file and all our variables..
310 print "Updating Files..\n";
312 if ($opt_disable_debug == 1)
314 print "Disabling debug information (-g).\n";
315 $config{OPTIMISATI} = "";
318 $has_epoll = $config{HAS_EPOLL};
319 $has_ports = $config{HAS_PORTS};
320 $has_kqueue = $config{HAS_KQUEUE};
329 print "Configure update failed: $@\n";
337 chomp($topdir = getcwd());
338 $this = resolve_directory($topdir); # PWD, Regardless.
340 # Does the cache file exist?
342 # No, No it doesn't.. *BASH*
343 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
346 # We've Loaded the cache file and all our variables..
347 print "Updating Files..\n";
349 $has_epoll = $config{HAS_EPOLL};
350 $has_ports = $config{HAS_PORTS};
351 $has_kqueue = $config{HAS_KQUEUE};
360 print "Module update failed: $@\n";
370 open(FH,"<.svn/entries") or $fail = 1;
372 print "This is not an SVN copy of InspIRCd.\n";
379 system("svn update");
380 system("perl configure -update");
381 if (defined $opt_rebuild) {
382 system("make install");
387 print "Running non-interactive configure...\n" unless $interactive;
388 print "Checking for cache from previous configure... ";
389 print ((!getcache()) ? "not found\n" : "found\n");
390 print "Checking operating system version... ";
391 print getosflags() . "\n";
393 if (defined $opt_maxclients)
395 $config{MAX_CLIENT} = $opt_maxclients;
398 if (!$config{MAX_CLIENT}) {
399 # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this
400 # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go
401 # higher than the found value" :))
402 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
405 printf "Checking if stdint.h exists... ";
406 $config{HAS_STDINT} = "true";
408 open(STDINT, "</usr/include/stdint.h") or $config{HAS_STDINT} = "false";
409 if ($config{HAS_STDINT} eq "true") {
412 print "yes\n" if $config{HAS_STDINT} eq "true";
413 print "no\n" if $config{HAS_STDINT} eq "false";
416 printf "Checking if strlcpy exists... ";
417 # Perform the strlcpy() test..
418 $config{HAS_STRLCPY} = "false";
420 open(STRLCPY, "</usr/include/string.h") or $fail = 1;
422 while (chomp($line = <STRLCPY>)) {
423 # try and find the delcaration of:
424 # size_t strlcpy(...)
425 if ($line =~ /size_t(\0x9|\s)+strlcpy/) {
426 $config{HAS_STRLCPY} = "true";
431 print "yes\n" if $config{HAS_STRLCPY} eq "true";
432 print "no\n" if $config{HAS_STRLCPY} eq "false";
435 printf "Checking if kqueue exists... ";
438 open(KQUEUE, "</usr/include/sys/event.h") or $fail = 1;
440 while (chomp($line = <KQUEUE>)) {
441 # try and find the delcaration of:
443 if ($line =~ /int(\0x9|\s)+kqueue/) {
449 print "yes\n" if $has_kqueue == 1;
450 print "no\n" if $has_kqueue == 0;
452 printf "Checking if epoll exists... ";
455 open(EPOLL, "</usr/include/sys/epoll.h") or $fail = 1;
461 my $kernel = `uname -r`;
463 if (($kernel =~ /^2\.0\./) || ($kernel =~ /^2\.2\./) || ($kernel =~ /^2\.4\./)) {
468 # Suggestion from nenolod, weed out odd systems which have glibc built
469 # against 2.4 kernels (ick)
470 my $kernel_arch = `uname -p`;
474 if ($kernel_arch =~ /x86_64/) {
475 open (FH,"/lib64/libc.so.6|") or $has_epoll = 0;
478 open (FH,"/lib/libc.so.6|") or $has_epoll = 0;
482 while (chomp($line = <FH>))
484 if ($line =~ /GNU C Library .* version (.*?) /)
487 $libcv =~ /(\d+\.\d+)/;
490 elsif ($line =~ /Compiled on a Linux (.*?\..*?)\.* system/)
493 # Fix for some retarded libc builds, strip off >> and << etc.
494 $kernelv =~ /(\d+\.\d+)/;
502 printf "libc too old: $libcv... ";
507 printf "libc built against older kernel $kernelv... ";
512 print "yes\n" if $has_epoll == 1;
513 print "no\n" if $has_epoll == 0;
515 printf "Checking if Solaris I/O completion ports are available... ";
517 my $system = `uname -s`;
519 $has_ports = 1 if ($system eq "SunOS");
522 my $kernel = `uname -r`;
524 if (($kernel !~ /^5\.1./)) {
528 print "yes\n" if $has_ports == 1;
529 print "no\n" if $has_ports == 0;
531 $config{HAS_EPOLL} = $has_epoll;
532 $config{HAS_KQUEUE} = $has_kqueue;
534 printf "Checking for libgnutls... ";
535 if (($config{HAS_GNUTLS}) && (($config{HAS_GNUTLS} >= 1.2) || ($config{HAS_GNUTLS} eq "y"))) {
537 $config{HAS_GNUTLS} = "y";
540 $config{HAS_GNUTLS} = "n";
543 printf "Checking for openssl... ";
544 if (($config{HAS_OPENSSL}) && (($config{HAS_OPENSSL} >= 0.8) || ($config{HAS_OPENSSL} eq "y"))) {
546 $config{HAS_OPENSSL} = "y";
549 $config{HAS_OPENSSL} = "n";
552 printf "Checking if you are running an ancient, unsupported OS... ";
553 if ($config{OSNAME} =~ /FreeBSD/i)
555 $version = `uname -r`;
556 if ($version =~ /^4\./)
558 $foundit = `ls -l /usr/local/lib/libgnugetopt* | wc -l`;
561 # ICKY ICKY ICK, FREEBSD 4.x! GET AN UPGRADE!
562 $config{CRAQ} = "-L/usr/local/lib -lgnugetopt -DHAVE_DECL_GETOPT=1";
567 print "\n\nERROR: You require libgnugetopt (from ports or packages) to build InspIRCd on FreeBSD 4.11.\n";
573 print "no ($version)\n";
579 print "no ($config{OSNAME})\n";
582 ################################################################################
583 # BEGIN INTERACTIVE PART #
584 ################################################################################
592 my $rev = getrevision();
593 # Display Introduction Message..
595 Welcome to the \033[1mInspIRCd\033[0m Configuration program! (\033[1minteractive mode\033[0m)
596 \033[1mPackage maintainers: Type ./configure --help for non-interactive help\033[0m
598 *** If you are unsure of any of these values, leave it blank for ***
599 *** standard settings that will work, and your server will run ***
600 *** using them. Please consult your IRC network admin if in doubt. ***
602 Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter
603 a new value. Please note: You will \033[1mHAVE\033[0m to read the docs
604 dir, otherwise you won't have a config file!
606 Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos)
607 Maximum file descriptors: \033[1;32m$config{MAX_CLIENT_T}\033[0m
608 Your InspIRCd revision ID is \033[1;32mr$rev\033[0m";
610 print " (Non-SVN build)";
614 $config{CHANGE_COMPILER} = "n";
615 print "I have detected the following compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
617 while (($config{GCCVER} < 3) || ($config{GCCVER} eq "")) {
618 print "\033[1;32mIMPORTANT!\033[0m A GCC 2.x compiler has been detected, and
619 should NOT be used. You should probably specify a newer compiler.\n\n";
620 yesno(CHANGE_COMPILER,"Do you want to change the compiler?");
621 if ($config{CHANGE_COMPILER} =~ /y/i) {
622 print "What command do you want to use to invoke your compiler?\n";
623 print "[\033[1;32m$config{CC}\033[0m] -> ";
624 chomp($config{CC} = <STDIN>);
625 if ($config{CC} eq "") {
628 chomp($foo = `$config{CC} -dumpversion | cut -c 1`);
630 chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change compilers
631 print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
632 if ($config{GCCVER} < 3) {
633 print "\033[1;32mGCC 2.x WILL NOT WORK!\033[0m. Let's try that again, shall we?\n";
637 print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n";
644 # Directory Settings..
645 my $tmpbase = $config{BASE_DIR};
646 dir_check("do you wish to install the InspIRCd base", "BASE_DIR");
647 if ($tmpbase ne $config{BASE_DIR}) {
648 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Dir
649 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
650 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
651 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
654 dir_check("are the configuration files", "CONFIG_DIR");
655 dir_check("are the modules to be compiled to", "MODULE_DIR");
656 dir_check("is the IRCd binary to be placed", "BINARY_DIR");
657 dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
660 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?");
664 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?");
668 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?");
671 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y") || ($config{USE_PORTS} eq "y"));
672 if (!$chose_hiperf) {
673 print "No high-performance socket engines are available, or you chose\n";
674 print "not to enable one. Defaulting to select() engine.\n\n";
677 yesno(IPV6,"Would you like to build InspIRCd with IPv6 support?");
680 if ($config{IPV6} eq "y") {
681 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";
682 $config{SUPPORT_IP6LINKS} = "y";
684 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)");
688 if (($config{HAS_GNUTLS} eq "y") && ($config{HAS_OPENSSL} eq "y")) {
689 print "I have detected both \033[1;32mGnuTLS\033[0m and \033[1;32mOpenSSL\033[0m on your system.\n";
690 print "I will default to GnuTLS. If you wish to use OpenSSL\n";
691 print "instead, you should enable the OpenSSL module yourself\n";
692 print "by copying it from src/modules/extra to src/modules.\n\n";
693 print "Detected GnuTLS version: \033[1;32m" . $gnutls_ver . "\033[0m\n";
694 print "Detected OpenSSL version: \033[1;32m" . $openssl_ver . "\033[0m\n\n";
697 if ($config{HAS_GNUTLS} eq "y") {
698 yesno(USE_GNUTLS, "Would you like to enable SSL Support?");
699 if ($config{USE_GNUTLS} eq "y") {
700 print "\nUsing GnuTLS SSL module.\n";
702 } elsif ($config{HAS_OPENSSL} eq "y") {
703 yesno(USE_OPENSSL, "Would you like to enable SSL Support?");
704 if ($config{USE_OPENSSL} eq "y") {
705 print "\nUsing OpenSSL SSL module.\nYou will get better performance if you move to GnuTLS in the future.\n";
709 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";
712 print "\nThe following questions will ask you for various figures relating\n";
713 print "To your IRCd install. Please note that these should usually be left\n";
714 print "as defaults unless you have a real reason to change them. If they\n";
715 print "changed, then the values must be identical on all servers on your\n";
716 print "network, or malfunctions and/or crashes may occur, with the exception\n";
717 print "of the 'maximum number of clients' setting which may be different on\n";
718 print "different servers on the network.\n\n";
720 # File Descriptor Settings..
721 promptnumeric("number of clients at any one time", "MAX_CLIENT_T");
722 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
723 $config{MAX_DESCRIPTORS} = $config{MAX_CLIENT_T};
725 promptnumeric("length of nicknames", "NICK_LENGT");
726 promptnumeric("length of channel names", "CHAN_LENGT");
727 promptnumeric("number of mode changes in one line", "MAXI_MODES");
728 promptnumeric("length of an ident (username)", "MAX_IDENT");
729 promptnumeric("length of a quit message", "MAX_QUIT");
730 promptnumeric("length of a channel topic", "MAX_TOPIC");
731 promptnumeric("length of a kick message", "MAX_KICK");
732 promptnumeric("length of a GECOS (real name)", "MAX_GECOS");
733 promptnumeric("length of an away message", "MAX_AWAY");
738 if (($config{USE_GNUTLS} eq "y") && ($config{HAS_GNUTLS} ne "y"))
740 print "Sorry, but i couldn't detect gnutls. Make sure gnutls-config is in your path.\n";
743 if (($config{USE_OPENSSL} eq "y") && ($config{HAS_OPENSSL} ne "y"))
745 print "Sorry, but i couldn't detect openssl. Make sure openssl is in your path.\n";
749 if ($config{USE_GNUTLS} eq "y") {
751 open(TMP, "<src/modules/m_ssl_gnutls.cpp") or $failed = 1;
754 print "Symlinking src/modules/m_ssl_gnutls.cpp from extra/\n";
755 chdir("src/modules");
756 system("ln -s extra/m_ssl_gnutls.cpp");
763 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
765 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
768 print "SSL Certificates Not found, Generating.. \n\n
769 *************************************************************
770 * Generating the Private Key may take some time, go grab a *
771 * Coffee. Even better, to generate some more entropy if it *
772 * is taking a while, open another console and type du / a *
773 * few times and get that HD going :) Then answer the *
774 * Questions which follow. If you are unsure, just hit enter *
775 *************************************************************\n\n";
776 $failed = make_gnutls_cert();
778 print "\n\033[1;32mCertificate generation failed!\033[0m\n\n";
780 print "\nCertificate generation complete, copying to config directory... ";
781 system("mv key.pem $config{CONFIG_DIR}/key.pem");
782 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
787 print "SSL Certificates found, skipping.\n\n";
792 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
794 } elsif ($config{USE_OPENSSL} eq "y") {
796 open(TMP, "<src/modules/m_ssl_openssl.cpp") or $failed = 1;
799 print "Symlinking src/modules/m_ssl_openssl.cpp from extra/\n";
800 chdir("src/modules");
801 system("ln -s extra/m_ssl_openssl.cpp");
808 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
810 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
813 print "SSL Certificates Not found, Generating.. \n\n
814 *************************************************************
815 * Generating the certificates may take some time, go grab a *
816 * coffee, or something. *
817 *************************************************************\n\n";
819 print "\nCertificate generation complete, copying to config directory... ";
820 system("mv key.pem $config{CONFIG_DIR}/key.pem");
821 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
822 system("mv dhparams.pem $config{CONFIG_DIR}/dhparams.pem");
825 print "SSL Certificates found, skipping.\n\n"
830 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
833 if (($config{USE_GNUTLS} eq "n") && ($config{USE_OPENSSL} eq "n")) {
834 print "Skipping SSL Certificate generation, SSL support is not available.\n\n";
842 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
843 if (($config{USE_GNUTLS} eq "y") || ($config{USE_OPENSSL} eq "y")) {
844 print "Please remember that to enable \033[1;32mSSL support\033[0m you must\n";
845 print "load the required modules in your config. This configure process\n";
846 print "has just prepared these modules to be compiled for you, and has not\n";
847 print "configured them to be compiled into the core of the ircd.\n";
849 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
850 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
851 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";
854 if ($config{GCCVER} < "3") {
856 \033[1;32mWARNING!\033[0m You are attempting to compile InspIRCd on GCC 2.x!
857 GCC 2.x series compilers only had partial (read as broken) C++ support, and
858 your compile will most likely fail horribly! If you have any problems, do NOT
859 report them to the bugtracker or forums without first upgrading your compiler
860 to a newer 3.x or 4.x (or whatever is available currently) version.
864 ################################################################################
866 ################################################################################
868 # Retrieves the .config.cache file, and loads values into the main config hash.
869 open(CACHE, ".config.cache") or return 0;
872 # Ignore Blank lines, and comments..
875 my ($key, $value) = split("=", $_, 2);
876 $value =~ /^\"(.*)\"$/;
877 # Do something with data here!
885 # Dump the contents of %config
886 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
887 open(FILEHANDLE, ">.config.cache");
888 foreach $key (keys %config) {
889 print FILEHANDLE "$key=\"$config{$key}\"\n";
895 my ($desc, $hash_key) = @_;
898 print "In what directory $desc?\n";
899 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
900 chomp($var = <STDIN>);
902 $var = $config{$hash_key};
904 if ($var =~ /^\~\/(.+)$/) {
905 # Convert it to a full path..
906 $var = resolve_directory($ENV{HOME} . "/" . $1);
908 elsif ((($config{OSNAME} =~ /MINGW32/i) and ($var !~ /^[A-Z]{1}:\\.*/)) and (substr($var,0,1) ne "/"))
910 # Assume relative Path was given.. fill in the rest.
911 $var = $this . "/$var";
914 $var = resolve_directory($var);
916 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
917 chomp($tmp = <STDIN>);
918 if (($tmp eq "") || ($tmp =~ /^y/i)) {
919 # Attempt to Create the Dir..
921 system("mkdir -p \"$var\" >> /dev/null 2>&1");
922 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
924 print "Unable to create directory. ($var)\n\n";
929 # They said they don't want to create, and we can't install there.
935 # Target exists, but is not a directory.
936 print "File $var exists, but is not a directory.\n\n";
940 # Either Dir Exists, or was created fine.
941 $config{$hash_key} = $var;
949 $config{LDLIBS} = "-lstdc++";
950 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}";
951 $config{DEVELOPER} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated -g";
952 $SHARED = "-Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared";
953 $config{MAKEPROG} = "make";
955 if ($config{OSNAME} =~ /darwin/i) {
956 $config{FLAGS} = "-DDARWIN -frtti -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}";
957 $SHARED = "-bundle -twolevel_namespace -undefined dynamic_lookup";
958 $config{LDLIBS} = "-ldl -lstdc++";
961 if ($config{OSNAME} =~ /OpenBSD/i) {
962 $config{MAKEPROG} = "gmake";
963 $config{LDLIBS} = $config{LDLIBS} . " -lunwind";
964 chomp($foo = `eg++ -dumpversion | cut -c 1`);
965 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
966 # if theyre not running this, configure lets the build continue but they probably wont manage to
967 # compile as this standard version is 2.95.3!
969 $config{CC} = "eg++";
970 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change the compiler path
975 if ($config{OSNAME} =~ /Linux/i) {
976 $config{LDLIBS} = "-ldl -lstdc++";
977 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}";
978 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
979 $config{LDLIBS} .= " " . $ENV{LDLIBS} if exists($ENV{LDLIBS});
980 $config{MAKEPROG} = "make";
983 if ($config{OSNAME} =~ /FreeBSD/i) {
984 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
985 $config{LDLIBS} .= " " . $ENV{LDLIBS} if exists($ENV{LDLIBS});
988 if ($config{OSNAME} =~ /SunOS/i or $config{OSNAME} =~ /solaris/i)
990 # solaris/sunos needs these
991 # socket = bsd sockets api
993 # rt = POSIX realtime extensions
994 # resolv = inet_aton only (why isnt this in nsl?!)
995 $config{MAKEPROG} = "gmake";
996 $config{LDLIBS} .= " -lsocket -lnsl -lrt -lresolv";
1000 if($config{OSNAME} =~ /MINGW32/i)
1002 # All code is position-independent on windows
1003 $config{FLAGS} =~ s/-fPIC //;
1007 return $config{OSNAME};
1011 my($writeheader) = @_;
1012 # First File.. inspircd_config.h
1013 chomp(my $incos = `uname -n -s -r`);
1014 chomp($version = `sh src/version.sh`);
1015 chomp(my $revision2 = getrevision());
1016 if ($writeheader == 1)
1018 print "Writing \033[1;32minspircd_config.h\033[0m\n";
1019 open(FILEHANDLE, ">include/inspircd_config.h");
1020 my $NL = $config{NICK_LENGT}+1;
1021 my $CL = $config{CHAN_LENGT}+1;
1022 print FILEHANDLE <<EOF;
1023 /* Auto generated by configure, do not modify! */
1024 #ifndef __CONFIGURATION_AUTO__
1025 #define __CONFIGURATION_AUTO__
1027 /* this is for windows support. */
1028 #define CoreExport /**/
1029 #define DllExport /**/
1031 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
1032 #define MOD_PATH "$config{MODULE_DIR}"
1033 #define VERSION "$version"
1034 #define REVISION "$revision2"
1035 #define MAXCLIENTS $config{MAX_CLIENT}
1036 #define MAXCLIENTS_S "$config{MAX_CLIENT}"
1037 #define SOMAXCONN_S "$config{_SOMAXCONN}"
1038 #define MAX_DESCRIPTORS $config{MAX_DESCRIPTORS}
1041 #define MAXMODES $config{MAXI_MODES}
1042 #define IDENTMAX $config{MAX_IDENT}
1043 #define MAXQUIT $config{MAX_QUIT}
1044 #define MAXTOPIC $config{MAX_TOPIC}
1045 #define MAXKICK $config{MAX_KICK}
1046 #define MAXGECOS $config{MAX_GECOS}
1047 #define MAXAWAY $config{MAX_AWAY}
1048 #define OPTIMISATION $config{OPTIMITEMP}
1049 #define LIBRARYDIR "$config{LIBRARY_DIR}"
1050 #define SYSTEM "$incos"
1052 print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n";
1054 if ($config{OSNAME} =~ /SunOS/i) {
1055 print FILEHANDLE "#define IS_SOLARIS\n";
1057 if ($config{OSNAME} =~ /MINGW32/i) {
1058 print FILEHANDLE "#define IS_MINGW\n";
1060 if ($config{GCCVER} >= 3) {
1061 print FILEHANDLE "#define GCC3\n";
1063 if ($config{HAS_STRLCPY} eq "true") {
1064 print FILEHANDLE "#define HAS_STRLCPY\n";
1066 if ($config{HAS_STDINT} eq "true") {
1067 print FILEHANDLE "#define HAS_STDINT\n";
1069 if ($config{IPV6} =~ /y/i) {
1070 print FILEHANDLE "#define IPV6\n";
1072 if ($config{SUPPORT_IP6LINKS} =~ /y/i) {
1073 print FILEHANDLE "#define SUPPORT_IP6LINKS\n";
1076 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1077 print FILEHANDLE "#define USE_KQUEUE\n";
1078 $se = "socketengine_kqueue";
1081 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1082 print FILEHANDLE "#define USE_EPOLL\n";
1083 $se = "socketengine_epoll";
1086 if (($has_ports) && ($config{USE_PORTS} eq "y")) {
1087 print FILEHANDLE "#define USE_PORTS\n";
1088 $se = "socketengine_ports";
1091 # user didn't choose either epoll or select for their OS.
1092 # default them to USE_SELECT (ewwy puke puke)
1094 print FILEHANDLE "#define USE_SELECT\n";
1095 $se = "socketengine_select";
1097 print FILEHANDLE "\n#endif\n";
1103 open(FILEHANDLE, ">include/inspircd_se_config.h");
1104 print FILEHANDLE <<EOF;
1105 /* Auto generated by configure, do not modify or commit to svn! */
1106 #ifndef __CONFIGURATION_SOCKETENGINE__
1107 #define __CONFIGURATION_SOCKETENGINE__
1117 # Create a Modules List..
1119 foreach $i (@modlist)
1121 $modules .= "m_".$i.".so ";
1123 chomp($modules); # Remove Redundant whitespace..
1125 opendir(DIRHANDLE, "src/modules");
1126 foreach $name (sort readdir(DIRHANDLE)) {
1127 if ($name =~ /^m_(.+?)$/) {
1128 if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
1129 closedir(MDIRHANDLE);
1130 $modules .= "$name.so ";
1134 closedir(DIRHANDLE);
1137 # Write all .in files.
1140 my $exe = "inspircd";
1142 opendir(DIRHANDLE, $this);
1144 # Do this once here, and cache it in the .*.inc files,
1145 # rather than attempting to read src/version.sh from
1146 # compiled code -- we might not have the source to hand.
1147 # Fix for bug#177 by Brain.
1149 chomp(my $version = `sh ./src/version.sh`);
1150 chomp(my $revision = getrevision());
1151 $version = "$version(r$revision)";
1154 if ($config{IS_DARWIN} eq "YES")
1158 # We can actually parse any file starting with . and ending with .inc,
1159 # but right now we only parse .inspircd.inc to form './inspircd'
1161 foreach $name (sort readdir(DIRHANDLE)) {
1162 if ($name =~ /^\.(.+)\.inc$/) {
1165 # Bug #353, omit this on non-darwin
1166 next if (($config{OSNAME} !~ /darwin/) && ($file eq "org.inspircd.plist"));
1168 # All .name.inc files need parsing!
1170 open(FILEHANDLE, ".$file.inc");
1171 while (<FILEHANDLE>) {
1176 $tmp =~ s/\@CC\@/$config{CC}/;
1177 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
1178 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
1179 $tmp =~ s/\@DEVELOPER\@/$config{DEVELOPER}/;
1180 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
1181 $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/;
1182 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
1183 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
1184 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
1185 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
1186 $tmp =~ s/\@LIBRARY_EXT\@/$LIBEXT/;
1187 $tmp =~ s/\@MODULES\@/$modules/;
1188 $tmp =~ s/\@STARTSCRIPT\@/$config{STARTSCRIPT}/;
1189 $tmp =~ s/\@DESTINATION\@/$config{DESTINATION}/;
1190 $tmp =~ s/\@EXTRA_DIR\@/$config{EXTRA_DIR}/;
1191 $tmp =~ s/\@EXECUTABLE\@/$exe/;
1192 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
1193 $tmp =~ s/\@VERSION\@/$version/;
1195 print "Writing \033[1;32m$file\033[0m\n";
1196 open(FILEHANDLE, ">$file");
1197 print FILEHANDLE $tmp;
1200 closedir(DIRHANDLE);
1202 # Make inspircd executable!
1203 chmod 0744, 'inspircd';
1205 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
1206 write_dynamic_makefile();
1207 write_dynamic_modules_makefile();
1210 sub write_dynamic_modules_makefile {
1211 # Modules Makefile..
1212 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1213 open(FILEHANDLE, ">src/modules/Makefile");
1216 # Module Makefile Header
1218 print FILEHANDLE <<EOF;
1219 ###################################################
1220 # Copyright 2002-2007 The InspIRCd Development Team
1221 # http://www.inspircd.org/wiki/index.php/Credits
1223 # Thanks to Andrew Church <achurch\@achurch.org>
1224 # for assisting with making this work right.
1226 # Automatically Generated by ./configure to add a
1227 # modules please run ./configure -modupdate
1228 ###################################################
1234 # End Module Makefile Header
1237 # Create a Modules List..
1243 foreach $i (@modlist) {
1245 # Write Entry to the MakeFile
1247 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1248 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1249 $deps = getdependencies("src/modules/m_".$i.".cpp");
1251 #print "file: $i: cmflags=$cmflags; liflags=$liflags; deps=$deps\n";
1253 print FILEHANDLE <<EOCHEESE;
1254 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
1255 \$(CC) -pipe -I../../include \$(FLAGS) $cmflags -export-dynamic -c m_$i.cpp
1258 if ($config{OSNAME} =~ /darwin/) {
1259 print FILEHANDLE <<EOCHEESE;
1260 \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle $liflags -o m_$i.so m_$i.o
1264 print FILEHANDLE <<EOCHEESE;
1265 \$(CC) -pipe \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o
1269 $crud = $crud . " install -m \$(INSTMODE) m_$i.so \$(MODPATH)\n";
1271 # End Write Entry to the MakeFile
1275 opendir(DIRHANDLE, "src/modules");
1276 foreach $name (sort readdir(DIRHANDLE)) {
1277 if ($name =~ /^m_(.+?)$/) {
1282 # A module made of multiple files, in a dir, e.g. src/modules/m_spanningtree/
1283 if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
1284 read_module_directory("src/modules/$name", $name);
1285 print "Composing Makefile rules for directory \033[1;32m$name\033[0m... (\033[1;32m$mfcount files found\033[0m)\n";
1286 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 $mobjs\n";
1287 if ($config{IS_DARWIN} eq "YES") {
1288 print FILEHANDLE " \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) $mliflags -bundle -o $name.so $mobjs\n";
1290 print FILEHANDLE " \$(CC) -pipe \$(FLAGS) -shared $mliflags -o $name.so $mobjs\n";
1292 print FILEHANDLE "\n$mfrules\n";
1293 closedir(MDIRHANDLE);
1294 $crud = $crud . " install -m \$(INSTMODE) $name.so \$(MODPATH)\n";
1298 closedir(DIRHANDLE);
1300 print FILEHANDLE "modinst:\n \@echo \"Installing modules...\"\n" . $crud;
1303 sub read_module_directory {
1304 my ($dpath, $reldpath) = @_;
1306 if (opendir(MDIRHANDLE, $dpath) == 0) {
1310 foreach $fname (sort readdir(MDIRHANDLE)) {
1311 if ($fname =~ /\.cpp$/) {
1312 $cmflags = getcompilerflags("$dpath/$fname");
1313 $mliflags = $mliflags . " " . getlinkerflags("$dpath/$fname");
1314 $deps = getdependencies("$dpath/$fname");
1316 $oname =~ s/\.cpp$/.o/g;
1317 $mfrules = $mfrules . "$reldpath/$oname: $reldpath/$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";
1318 $mfrules = $mfrules . " \$(CC) -pipe -I../../include -I. \$(FLAGS) $cmflags -export-dynamic -o $reldpath/$oname -c $reldpath/$fname\n\n";
1319 $mobjs = $mobjs . " $reldpath/$oname";
1322 elsif ((-d "$dpath/$fname") && !($fname eq ".") && !($fname eq "..")) {
1323 read_module_directory($dpath."/".$fname, $reldpath."/".$fname);
1328 sub write_dynamic_makefile {
1332 opendir(DIRHANDLE, "src");
1333 foreach $name (sort readdir(DIRHANDLE)) {
1334 if ($name =~ /^cmd_(.+)\.cpp$/) {
1335 $cmdlist[$i++] = $1;
1338 closedir(DIRHANDLE);
1342 foreach my $cmd (@cmdlist) {
1343 $cmdobjs = $cmdobjs . "cmd_$cmd.so ";
1344 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1347 $se = "socketengine_select";
1348 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1349 $se = "socketengine_kqueue";
1351 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1352 $se = "socketengine_epoll";
1354 elsif (($has_ports) && ($config{USE_PORTS} eq "y")) {
1355 $se = "socketengine_ports";
1358 $freebsd4libs = $config{CRAQ};
1360 open(FH,">src/Makefile") or die("Could not write src/Makefile");
1362 ###################################################
1363 # Copyright 2002-2007 The InspIRCd Development Team
1364 # http://www.inspircd.org/wiki/index.php/Credits
1366 # Thanks to Andrew Church <achurch\@achurch.org>
1367 # for assisting with making this work right.
1369 # This file is automagically generated by configure
1370 # Any changes made will be lost on ./configure
1371 ###################################################
1373 CC = im a cheezeball
1375 CXXFLAGS = -I../include \${FLAGS}
1376 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1377 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1381 if ($config{IS_DARWIN} eq "YES") {
1383 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
1385 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
1386 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd.cpp
1387 \$(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
1389 libIRCDsocketengine.dylib: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1390 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp
1391 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c $se.cpp
1392 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsocketengine.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsocketengine.dylib socketengine.o $se.o
1394 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
1395 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1396 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsnomasks.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsnomasks.dylib snomasks.o
1398 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
1399 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1400 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcommand_parse.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcommand_parse.dylib command_parse.o
1402 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
1403 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1404 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcull_list.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcull_list.dylib cull_list.o
1406 libIRCDuserprocess.dylib: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1407 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1408 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDuserprocess.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDuserprocess.dylib userprocess.o
1410 libIRCDhash.dylib: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1411 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1412 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDhash.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDhash.dylib hashcomp.o
1414 libIRCDhelper.dylib: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1415 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1416 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDhelper.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDhelper.dylib helperfuncs.o
1418 libIRCDchannels.dylib: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1419 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1420 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDchannels.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDchannels.dylib channels.o
1422 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)
1423 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1424 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1425 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDmode.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDmode.dylib mode.o modes/modeclasses.a
1427 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
1428 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1429 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDxline.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDxline.dylib xline.o
1431 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
1432 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1433 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDstring.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDstring.dylib inspstring.o
1435 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
1436 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1437 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDasyncdns.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDasyncdns.dylib dns.o
1439 libIRCDbase.dylib: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1440 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1441 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDbase.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDbase.dylib base.o
1443 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
1444 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1445 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDconfigreader.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDconfigreader.dylib configreader.o
1447 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
1448 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1449 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcommands.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcommands.dylib commands.o
1451 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
1452 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1453 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDdynamic.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDdynamic.dylib dynamic.o
1455 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
1456 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1457 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDusers.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDusers.dylib users.o
1459 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
1460 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1461 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDmodules.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDmodules.dylib modules.o
1463 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
1464 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1465 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDwildcard.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDwildcard.dylib wildcard.o
1467 libIRCDsocket.dylib: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1468 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1469 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsocket.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsocket.dylib socket.o
1471 libIRCDinspsocket.dylib: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1472 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1473 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDinspsocket.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDinspsocket.dylib inspsocket.o
1475 libIRCDtimer.dylib: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1476 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1477 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDtimer.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDtimer.dylib timer.o
1479 libIRCDserver.dylib: server.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1480 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c server.cpp
1481 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDserver.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDserver.dylib server.o
1483 libIRCDfilelogger.dylib: filelogger.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1484 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c filelogger.cpp
1485 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDfilelogger.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDfilelogger.dylib filelogger.o
1492 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
1494 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
1495 \$(CC) -pipe -I../include -Wl,--rpath -Wl,$config{LIBRARY_DIR} \$(FLAGS) $freebsd4libs -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
1497 libIRCDsocketengine.so: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1498 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1499 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocketengine.so socketengine.o $se.o
1501 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
1502 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1503 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsnomasks.so snomasks.o
1505 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
1506 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1507 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommand_parse.so command_parse.o
1509 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
1510 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1511 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcull_list.so cull_list.o
1513 libIRCDuserprocess.so: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1514 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1515 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDuserprocess.so userprocess.o
1517 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1518 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1519 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhash.so hashcomp.o
1521 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1522 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1523 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhelper.so helperfuncs.o
1525 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1526 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1527 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDchannels.so channels.o
1529 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)
1530 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1531 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1532 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmode.so mode.o modes/modeclasses.a
1534 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
1535 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1536 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDxline.so xline.o
1538 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
1539 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1540 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDstring.so inspstring.o
1542 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
1543 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1544 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDasyncdns.so dns.o
1546 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1547 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1548 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDbase.so base.o
1550 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
1551 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1552 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDconfigreader.so configreader.o
1554 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
1555 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1556 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommands.so commands.o
1558 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
1559 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1560 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDdynamic.so dynamic.o
1562 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
1563 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1564 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDusers.so users.o
1566 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
1567 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1568 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmodules.so modules.o
1570 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
1571 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1572 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDwildcard.so wildcard.o
1574 libIRCDsocket.so: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1575 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1576 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocket.so socket.o
1578 libIRCDinspsocket.so: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1579 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1580 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDinspsocket.so inspsocket.o
1582 libIRCDtimer.so: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1583 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1584 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDtimer.so timer.o
1586 libIRCDserver.so: server.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1587 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c server.cpp
1588 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDserver.so server.o
1590 libIRCDfilelogger.so: filelogger.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1591 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c filelogger.cpp
1592 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDfilelogger.so filelogger.o
1596 foreach my $cmd (@cmdlist) {
1598 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
1599 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1600 \$(CC) -pipe $SHARED -o cmd_$cmd.so cmd_$cmd.o