2 ###################################################
3 # InspIRCd Configuration Script
5 # Copyright 2002-2007 The InspIRCd Development Team
6 # http://www.inspircd.org/wiki/index.php/Credits
8 # Licensed under GPL, please see the COPYING file
13 ###################################################
20 # Utility functions for our buildsystem
24 use make::opensslcert;
27 'enable-gnutls' => \$opt_use_gnutls,
28 'rebuild' => \$opt_rebuild,
29 'enable-openssl' => \$opt_use_openssl,
30 'disable-interactive' => \$opt_nointeractive,
31 'with-nick-length=i' => \$opt_nick_length,
32 'with-channel-length=i' => \$opt_chan_length,
33 'with-max-clients=i' => \$opt_maxclients,
34 'enable-ports' => \$opt_ports,
35 'enable-epoll' => \$opt_epoll,
36 'enable-kqueue' => \$opt_kqueue,
37 'disable-ports' => \$opt_noports,
38 'disable-epoll' => \$opt_noepoll,
39 'disable-kqueue' => \$opt_nokqueue,
40 'enable-ipv6' => \$opt_ipv6,
41 'enable-remote-ipv6' => \$opt_ipv6links,
42 'disable-remote-ipv6' => \$opt_noipv6links,
43 'with-cc=s' => \$opt_cc,
44 'with-ident-length=i' => \$opt_ident,
45 'with-quit-length=i' => \$opt_quit,
46 'with-topic-length=i' => \$opt_topic,
47 'with-maxbuf=i' => \$opt_maxbuf,
48 'with-kick-length=i' => \$opt_kick,
49 'with-gecos-length=i' => \$opt_gecos,
50 'with-away-length=i' => \$opt_away,
51 'with-max-modes=i' => \$opt_modes,
52 'prefix=s' => \$opt_base_dir,
53 'config-dir=s' => \$opt_config_dir,
54 'module-dir=s' => \$opt_module_dir,
55 'binary-dir=s' => \$opt_binary_dir,
56 'library-dir=s' => \$opt_library_dir,
57 'disable-debuginfo' => sub { $opt_disable_debug = 1 },
58 'help' => sub { showhelp(); },
59 'modupdate' => sub { modupdate(); },
60 'update' => sub { update(); },
61 'svnupdate' => sub { svnupdate(); },
62 'clean' => sub { clean(); },
65 my $non_interactive = (
66 (defined $opt_library_dir) ||
67 (defined $opt_base_dir) ||
68 (defined $opt_config_dir) ||
69 (defined $opt_module_dir) ||
70 (defined $opt_base_dir) ||
71 (defined $opt_binary_dir) ||
72 (defined $opt_nointeractive) ||
73 (defined $opt_away) ||
74 (defined $opt_gecos) ||
75 (defined $opt_kick) ||
76 (defined $opt_maxclients) ||
77 (defined $opt_modes) ||
78 (defined $opt_topic) ||
79 (defined $opt_quit) ||
80 (defined $opt_ident) ||
82 (defined $opt_ipv6) ||
83 (defined $opt_ipv6links) ||
84 (defined $opt_noipv6links) ||
85 (defined $opt_kqueue) ||
86 (defined $opt_epoll) ||
87 (defined $opt_ports) ||
88 (defined $opt_maxchans) ||
89 (defined $opt_opermaxchans) ||
90 (defined $opt_chan_length) ||
91 (defined $opt_nick_length) ||
92 (defined $opt_use_openssl) ||
93 (defined $opt_nokqueue) ||
94 (defined $opt_noepoll) ||
95 (defined $opt_noports) ||
96 (defined $opt_maxbuf) ||
97 (defined $opt_use_gnutls)
99 my $interactive = !$non_interactive;
102 chomp($topdir = getcwd());
103 $this = resolve_directory($topdir); # PWD, Regardless.
104 @modlist = (); # Declare for Module List..
105 %config = (); # Initiate Configuration Hash..
106 $config{ME} = resolve_directory($topdir); # Present Working Directory
108 $config{BASE_DIR} = $config{ME};
110 if (defined $opt_base_dir)
112 $config{BASE_DIR} = $opt_base_dir;
115 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Directory
116 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
117 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
118 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
120 if (defined $opt_config_dir)
122 $config{CONFIG_DIR} = $opt_config_dir;
124 if (defined $opt_module_dir)
126 $config{MODULE_DIR} = $opt_module_dir;
128 if (defined $opt_binary_dir)
130 $config{BINARY_DIR} = $opt_binary_dir;
132 if (defined $opt_library_dir)
134 $config{LIBRARY_DIR} = $opt_library_dir;
136 chomp($config{HAS_GNUTLS} = `libgnutls-config --version 2>/dev/null | cut -c 1,2,3`); # GNUTLS Version.
137 chomp($config{HAS_OPENSSL} = `pkg-config --modversion openssl 2>/dev/null`); # Openssl version
138 chomp($gnutls_ver = $config{HAS_GNUTLS});
139 chomp($openssl_ver = $config{HAS_OPENSSL});
140 $config{USE_GNUTLS} = "n";
141 if (defined $opt_use_gnutls)
143 $config{USE_GNUTLS} = "y"; # Use gnutls.
145 $config{USE_OPENSSL} = "n"; # Use openssl.
146 if (defined $opt_use_openssl)
148 $config{USE_OPENSSL} = "y";
151 # no, let's not change these.
152 $config{OPTIMITEMP} = "0"; # Default Optimisation Value
153 if (!defined $opt_disable_debug)
155 $config{OPTIMISATI} = "-g1"; # Optimisation Flag
159 $config{OPTIMISATI} = "-O2"; # DEBUGGING OFF!
162 $config{NICK_LENGT} = "31"; # Default Nick Length
163 if (defined $opt_nick_length)
165 $config{NICK_LENGT} = $opt_nick_length;
167 $config{CHAN_LENGT} = "64"; # Default Channel Name Length
168 if (defined $opt_chan_length)
170 $config{CHAN_LENGT} = $opt_chan_length;
172 $config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once.
173 if (defined $opt_modes)
175 $config{MAXI_MODES} = $opt_modes;
177 $config{HAS_STRLCPY} = "false"; # strlcpy Check.
178 $config{HAS_STDINT} = "false"; # stdint.h check
179 $config{USE_KQUEUE} = "y"; # kqueue enabled
180 if (defined $opt_kqueue)
182 $config{USE_KQUEUE} = "y";
184 if (defined $opt_nokqueue)
186 $config{USE_KQUEUE} = "n";
188 $config{USE_EPOLL} = "y"; # epoll enabled
189 if (defined $opt_epoll)
191 $config{USE_EPOLL} = "y";
193 if (defined $opt_noepoll)
195 $config{USE_EPOLL} = "n";
197 $config{USE_PORTS} = "y"; # epoll enabled
198 if (defined $opt_ports)
200 $config{USE_PORTS} = "y";
202 if (defined $opt_noports)
204 $config{USE_PORTS} = "n";
206 $config{IPV6} = "n"; # IPv6 support (experimental)
207 if (defined $opt_ipv6)
211 $config{SUPPORT_IP6LINKS} = "y"; # IPv4 supporting IPv6 links (experimental)
212 if (defined $opt_ipv6links)
214 $config{SUPPORT_IP6LINKS} = "y";
216 if (defined $opt_noipv6links)
218 $config{SUPPORT_IP6LINKS} = "n";
220 chomp($config{MAX_CLIENT_T} = `sh -c \"ulimit -n\"`); # FD Limit
221 chomp($config{MAX_DESCRIPTORS} = `sh -c \"ulimit -n\"`); # Hard FD Limit
222 chomp($config{GCCVER} = `g++ -dumpversion | cut -c 1`); # Major GCC Version
223 $config{_SOMAXCONN} = SOMAXCONN; # Max connections in accept queue
224 $config{OSNAME} = $^O; # Operating System Name
225 $config{IS_DARWIN} = "NO"; # Is OSX?
226 $config{STARTSCRIPT} = "inspircd"; # start script?
227 $config{DESTINATION} = "BASE"; # Is target path.
228 $config{EXTRA_DIR} = ""; # Is empty.
229 if ($config{OSNAME} =~ /darwin/i)
231 $config{IS_DARWIN} = "YES";
232 $config{STARTSCRIPT} = "org.inspircd.plist"; # start script for OSX.
233 $config{DESTINATION} = "LAUNCHDPATH"; # Is OSX target.
234 $config{EXTRA_DIR} = " launchd_dir"; # Is OSX specific path.
236 $config{CC} = "g++"; # C++ compiler
239 $config{CC} = $opt_cc;
241 $exec = $config{CC} . " -dumpversion | cut -c 1";
242 chomp($config{GCCVER} = `$exec`); # Major GCC Version
243 $config{MAKEORDER} = "ircd mods"; # build order
244 $config{MAX_IDENT} = "12"; # max ident size
245 $config{MAX_QUIT} = "255"; # max quit message size
246 $config{MAX_TOPIC} = "307"; # max topic size
247 $config{MAX_KICK} = "255"; # max kick message size
248 $config{MAX_GECOS} = "128"; # max GECOS size
249 $config{MAX_AWAY} = "200"; # max AWAY size
250 $config{MAXBUF} = "512"; # Max buffer size
251 if (defined $opt_ident)
253 $config{MAX_IDENT} = $opt_ident;
255 if (defined $opt_quit)
257 $config{MAX_QUIT} = $opt_quit;
259 if (defined $opt_topic)
261 $config{MAX_TOPIC} = $opt_topic;
263 if (defined $opt_kick)
265 $config{MAX_KICK} = $opt_kick;
267 if (defined $opt_gecos)
269 $config{MAX_GECOS} = $opt_gecos;
271 if (defined $opt_away)
273 $config{MAX_AWAY} = $opt_away;
276 $config{HAS_OPENSSL} =~ /^([-[:digit:].]+)([a-z])?(\-[a-z][0-9])?$/;
277 $config{HAS_OPENSSL} = $1;
279 if ($config{GCCVER} eq "") {
280 print $config{CC} . " was not found! You require g++ (the GNU C++ compiler, part of GCC) to build InspIRCd!\n";
284 if (!$config{MAX_CLIENT_T}) {
285 $config{MAX_CLIENT_T} = 1024; # Set a reasonable 'Default'
286 $fd_scan_fail = "true"; # Used Later
289 # Get and Set some important vars..
294 system("rm -rf .config.cache");
300 chomp($topdir = getcwd());
301 $this = resolve_directory($topdir); # PWD, Regardless.
303 # Does the cache file exist?
305 # No, No it doesn't.. *BASH*
306 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
309 # We've Loaded the cache file and all our variables..
310 print "Updating Files..\n";
312 if ($opt_disable_debug == 1)
314 print "Disabling debug information (-g).\n";
315 $config{OPTIMISATI} = "";
318 $has_epoll = $config{HAS_EPOLL};
319 $has_ports = $config{HAS_PORTS};
320 $has_kqueue = $config{HAS_KQUEUE};
329 print "Configure update failed: $@\n";
337 chomp($topdir = getcwd());
338 $this = resolve_directory($topdir); # PWD, Regardless.
340 # Does the cache file exist?
342 # No, No it doesn't.. *BASH*
343 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
346 # We've Loaded the cache file and all our variables..
347 print "Updating Files..\n";
349 $has_epoll = $config{HAS_EPOLL};
350 $has_ports = $config{HAS_PORTS};
351 $has_kqueue = $config{HAS_KQUEUE};
360 print "Module update failed: $@\n";
370 open(FH,"<.svn/entries") or $fail = 1;
372 print "This is not an SVN copy of InspIRCd.\n";
379 system("svn update");
380 system("perl configure -update");
381 if (defined $opt_rebuild) {
382 system("make install");
387 print "Running non-interactive configure...\n" unless $interactive;
388 print "Checking for cache from previous configure... ";
389 print ((!getcache()) ? "not found\n" : "found\n");
390 print "Checking operating system version... ";
391 print getosflags() . "\n";
393 if (defined $opt_maxclients)
395 $config{MAX_CLIENT} = $opt_maxclients;
398 if (!$config{MAX_CLIENT}) {
399 # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this
400 # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go
401 # higher than the found value" :))
402 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
405 printf "Checking if stdint.h exists... ";
406 $config{HAS_STDINT} = "true";
408 open(STDINT, "</usr/include/stdint.h") or $config{HAS_STDINT} = "false";
409 if ($config{HAS_STDINT} eq "true") {
412 print "yes\n" if $config{HAS_STDINT} eq "true";
413 print "no\n" if $config{HAS_STDINT} eq "false";
416 printf "Checking if strlcpy exists... ";
417 # Perform the strlcpy() test..
418 $config{HAS_STRLCPY} = "false";
420 open(STRLCPY, "</usr/include/string.h") or $fail = 1;
422 while (chomp($line = <STRLCPY>)) {
423 # try and find the delcaration of:
424 # size_t strlcpy(...)
425 if ($line =~ /size_t(\0x9|\s)+strlcpy/) {
426 $config{HAS_STRLCPY} = "true";
431 print "yes\n" if $config{HAS_STRLCPY} eq "true";
432 print "no\n" if $config{HAS_STRLCPY} eq "false";
435 printf "Checking if kqueue exists... ";
438 open(KQUEUE, "</usr/include/sys/event.h") or $fail = 1;
440 while (chomp($line = <KQUEUE>)) {
441 # try and find the delcaration of:
443 if ($line =~ /int(\0x9|\s)+kqueue/) {
449 print "yes\n" if $has_kqueue == 1;
450 print "no\n" if $has_kqueue == 0;
452 printf "Checking if epoll exists... ";
455 open(EPOLL, "</usr/include/sys/epoll.h") or $fail = 1;
461 my $kernel = `uname -r`;
463 if (($kernel =~ /^2\.0\./) || ($kernel =~ /^2\.2\./) || ($kernel =~ /^2\.4\./)) {
468 # Suggestion from nenolod, weed out odd systems which have glibc built
469 # against 2.4 kernels (ick)
470 my $kernel_arch = `uname -p`;
474 if ($kernel_arch =~ /x86_64/) {
475 open (FH,"/lib64/libc.so.6|") or $has_epoll = 0;
478 open (FH,"/lib/libc.so.6|") or $has_epoll = 0;
482 while (chomp($line = <FH>))
484 if ($line =~ /GNU C Library .* version (.*?) /)
487 $libcv =~ /([0-9\.\-])+/;
490 elsif ($line =~ /Compiled on a Linux (.*?\..*?)\.* system/)
493 # Fix for some retarded libc builds, strip off >> and << etc.
494 $kernelv =~ /([0-9\.\-])+/;
502 printf "libc too old: $libcv... ";
507 printf "libc built against older kernel $kernelv... ";
512 print "yes\n" if $has_epoll == 1;
513 print "no\n" if $has_epoll == 0;
515 printf "Checking if Solaris I/O completion ports are available... ";
517 my $system = `uname -s`;
519 $has_ports = 1 if ($system eq "SunOS");
522 my $kernel = `uname -r`;
524 if (($kernel !~ /^5\.1./)) {
528 print "yes\n" if $has_ports == 1;
529 print "no\n" if $has_ports == 0;
531 $config{HAS_EPOLL} = $has_epoll;
532 $config{HAS_KQUEUE} = $has_kqueue;
534 printf "Checking for libgnutls... ";
535 if (($config{HAS_GNUTLS}) && (($config{HAS_GNUTLS} >= 1.2) || ($config{HAS_GNUTLS} eq "y"))) {
537 $config{HAS_GNUTLS} = "y";
540 $config{HAS_GNUTLS} = "n";
543 printf "Checking for openssl... ";
544 if (($config{HAS_OPENSSL}) && (($config{HAS_OPENSSL} >= 0.8) || ($config{HAS_OPENSSL} eq "y"))) {
546 $config{HAS_OPENSSL} = "y";
549 $config{HAS_OPENSSL} = "n";
552 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 # ICKY ICKY ICK, FREEBSD 4.x! GET AN UPGRADE!
559 $config{CRAQ} = "-L/usr/local/lib -lgnugetopt -DHAVE_DECL_GETOPT=1";
565 print "no ($version)\n";
571 print "no ($config{OSNAME})\n";
574 ################################################################################
575 # BEGIN INTERACTIVE PART #
576 ################################################################################
584 my $rev = getrevision();
585 # Display Introduction Message..
587 Welcome to the \033[1mInspIRCd\033[0m Configuration program! (\033[1minteractive mode\033[0m)
588 \033[1mPackage maintainers: Type ./configure --help for non-interactive help\033[0m
590 *** If you are unsure of any of these values, leave it blank for ***
591 *** standard settings that will work, and your server will run ***
592 *** using them. Please consult your IRC network admin if in doubt. ***
594 Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter
595 a new value. Please note: You will \033[1mHAVE\033[0m to read the docs
596 dir, otherwise you won't have a config file!
598 Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos)
599 Maximum file descriptors: \033[1;32m$config{MAX_CLIENT_T}\033[0m
600 Your InspIRCd revision ID is \033[1;32mr$rev\033[0m";
602 print " (Non-SVN build)";
606 $config{CHANGE_COMPILER} = "n";
607 print "I have detected the following compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
609 while (($config{GCCVER} < 3) || ($config{GCCVER} eq "")) {
610 print "\033[1;32mIMPORTANT!\033[0m A GCC 2.x compiler has been detected, and
611 should NOT be used. You should probably specify a newer compiler.\n\n";
612 yesno(CHANGE_COMPILER,"Do you want to change the compiler?");
613 if ($config{CHANGE_COMPILER} =~ /y/i) {
614 print "What command do you want to use to invoke your compiler?\n";
615 print "[\033[1;32m$config{CC}\033[0m] -> ";
616 chomp($config{CC} = <STDIN>);
617 if ($config{CC} eq "") {
620 chomp($foo = `$config{CC} -dumpversion | cut -c 1`);
622 chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change compilers
623 print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
624 if ($config{GCCVER} < 3) {
625 print "\033[1;32mGCC 2.x WILL NOT WORK!\033[0m. Let's try that again, shall we?\n";
629 print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n";
636 # Directory Settings..
637 my $tmpbase = $config{BASE_DIR};
638 dir_check("do you wish to install the InspIRCd base", "BASE_DIR");
639 if ($tmpbase ne $config{BASE_DIR}) {
640 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Dir
641 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
642 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
643 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
646 dir_check("are the configuration files", "CONFIG_DIR");
647 dir_check("are the modules to be compiled to", "MODULE_DIR");
648 dir_check("is the IRCd binary to be placed", "BINARY_DIR");
649 dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
652 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?");
656 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?");
660 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?");
663 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y") || ($config{USE_PORTS} eq "y"));
664 if (!$chose_hiperf) {
665 print "No high-performance socket engines are available, or you chose\n";
666 print "not to enable one. Defaulting to select() engine.\n\n";
669 yesno(IPV6,"Would you like to build InspIRCd with IPv6 support?");
672 if ($config{IPV6} eq "y") {
673 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";
674 $config{SUPPORT_IP6LINKS} = "y";
676 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)");
680 if (($config{HAS_GNUTLS} eq "y") && ($config{HAS_OPENSSL} eq "y")) {
681 print "I have detected both \033[1;32mGnuTLS\033[0m and \033[1;32mOpenSSL\033[0m on your system.\n";
682 print "I will default to GnuTLS. If you wish to use OpenSSL\n";
683 print "instead, you should enable the OpenSSL module yourself\n";
684 print "by copying it from src/modules/extra to src/modules.\n\n";
685 print "Detected GnuTLS version: \033[1;32m" . $gnutls_ver . "\033[0m\n";
686 print "Detected OpenSSL version: \033[1;32m" . $openssl_ver . "\033[0m\n\n";
689 if ($config{HAS_GNUTLS} eq "y") {
690 yesno(USE_GNUTLS, "Would you like to enable SSL Support?");
691 if ($config{USE_GNUTLS} eq "y") {
692 print "\nUsing GnuTLS SSL module.\n";
694 } elsif ($config{HAS_OPENSSL} eq "y") {
695 yesno(USE_OPENSSL, "Would you like to enable SSL Support?");
696 if ($config{USE_OPENSSL} eq "y") {
697 print "\nUsing OpenSSL SSL module.\nYou will get better performance if you move to GnuTLS in the future.\n";
701 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";
704 print "\nThe following questions will ask you for various figures relating\n";
705 print "To your IRCd install. Please note that these should usually be left\n";
706 print "as defaults unless you have a real reason to change them. If they\n";
707 print "changed, then the values must be identical on all servers on your\n";
708 print "network, or malfunctions and/or crashes may occur, with the exception\n";
709 print "of the 'maximum number of clients' setting which may be different on\n";
710 print "different servers on the network.\n\n";
712 # File Descriptor Settings..
713 promptnumeric("number of clients at any one time", "MAX_CLIENT_T");
714 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
715 $config{MAX_DESCRIPTORS} = $config{MAX_CLIENT_T};
717 promptnumeric("length of nicknames", "NICK_LENGT");
718 promptnumeric("length of channel names", "CHAN_LENGT");
719 promptnumeric("number of mode changes in one line", "MAXI_MODES");
720 promptnumeric("length of an ident (username)", "MAX_IDENT");
721 promptnumeric("length of a quit message", "MAX_QUIT");
722 promptnumeric("length of a channel topic", "MAX_TOPIC");
723 promptnumeric("length of a kick message", "MAX_KICK");
724 promptnumeric("length of a GECOS (real name)", "MAX_GECOS");
725 promptnumeric("length of an away message", "MAX_AWAY");
730 if (($config{USE_GNUTLS} eq "y") && ($config{HAS_GNUTLS} ne "y"))
732 print "Sorry, but i couldn't detect gnutls. Make sure gnutls-config is in your path.\n";
735 if (($config{USE_OPENSSL} eq "y") && ($config{HAS_OPENSSL} ne "y"))
737 print "Sorry, but i couldn't detect openssl. Make sure openssl is in your path.\n";
741 if ($config{USE_GNUTLS} eq "y") {
743 open(TMP, "<src/modules/m_ssl_gnutls.cpp") or $failed = 1;
746 print "Symlinking src/modules/m_ssl_gnutls.cpp from extra/\n";
747 chdir("src/modules");
748 system("ln -s extra/m_ssl_gnutls.cpp");
755 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
757 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
760 print "SSL Certificates Not found, Generating.. \n\n
761 *************************************************************
762 * Generating the Private Key may take some time, go grab a *
763 * Coffee. Even better, to generate some more entropy if it *
764 * is taking a while, open another console and type du / a *
765 * few times and get that HD going :) Then answer the *
766 * Questions which follow. If you are unsure, just hit enter *
767 *************************************************************\n\n";
768 $failed = make_gnutls_cert();
770 print "\n\033[1;32mCertificate generation failed!\033[0m\n\n";
772 print "\nCertificate generation complete, copying to config directory... ";
773 system("mv key.pem $config{CONFIG_DIR}/key.pem");
774 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
779 print "SSL Certificates found, skipping.\n\n";
784 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
786 } elsif ($config{USE_OPENSSL} eq "y") {
788 open(TMP, "<src/modules/m_ssl_openssl.cpp") or $failed = 1;
791 print "Symlinking src/modules/m_ssl_openssl.cpp from extra/\n";
792 chdir("src/modules");
793 system("ln -s extra/m_ssl_openssl.cpp");
800 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
802 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
805 print "SSL Certificates Not found, Generating.. \n\n
806 *************************************************************
807 * Generating the certificates may take some time, go grab a *
808 * coffee, or something. *
809 *************************************************************\n\n";
811 print "\nCertificate generation complete, copying to config directory... ";
812 system("mv key.pem $config{CONFIG_DIR}/key.pem");
813 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
814 system("mv dhparams.pem $config{CONFIG_DIR}/dhparams.pem");
817 print "SSL Certificates found, skipping.\n\n"
822 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
825 if (($config{USE_GNUTLS} eq "n") && ($config{USE_OPENSSL} eq "n")) {
826 print "Skipping SSL Certificate generation, SSL support is not available.\n\n";
834 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
835 if (($config{USE_GNUTLS} eq "y") || ($config{USE_OPENSSL} eq "y")) {
836 print "Please remember that to enable \033[1;32mSSL support\033[0m you must\n";
837 print "load the required modules in your config. This configure process\n";
838 print "has just prepared these modules to be compiled for you, and has not\n";
839 print "configured them to be compiled into the core of the ircd.\n";
841 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
842 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
843 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";
846 if ($config{GCCVER} < "3") {
848 \033[1;32mWARNING!\033[0m You are attempting to compile InspIRCd on GCC 2.x!
849 GCC 2.x series compilers only had partial (read as broken) C++ support, and
850 your compile will most likely fail horribly! If you have any problems, do NOT
851 report them to the bugtracker or forums without first upgrading your compiler
852 to a newer 3.x or 4.x (or whatever is available currently) version.
856 ################################################################################
858 ################################################################################
860 # Retrieves the .config.cache file, and loads values into the main config hash.
861 open(CACHE, ".config.cache") or return 0;
864 # Ignore Blank lines, and comments..
867 my ($key, $value) = split("=", $_, 2);
868 $value =~ /^\"(.*)\"$/;
869 # Do something with data here!
877 # Dump the contents of %config
878 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
879 open(FILEHANDLE, ">.config.cache");
880 foreach $key (keys %config) {
881 print FILEHANDLE "$key=\"$config{$key}\"\n";
887 my ($desc, $hash_key) = @_;
890 print "In what directory $desc?\n";
891 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
892 chomp($var = <STDIN>);
894 $var = $config{$hash_key};
896 if ($var =~ /^\~\/(.+)$/) {
897 # Convert it to a full path..
898 $var = resolve_directory($ENV{HOME} . "/" . $1);
900 elsif ((($config{OSNAME} =~ /MINGW32/i) and ($var !~ /^[A-Z]{1}:\\.*/)) and (substr($var,0,1) ne "/"))
902 # Assume relative Path was given.. fill in the rest.
903 $var = $this . "/$var";
906 $var = resolve_directory($var);
908 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
909 chomp($tmp = <STDIN>);
910 if (($tmp eq "") || ($tmp =~ /^y/i)) {
911 # Attempt to Create the Dir..
913 system("mkdir -p \"$var\" >> /dev/null 2>&1");
914 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
916 print "Unable to create directory. ($var)\n\n";
921 # They said they don't want to create, and we can't install there.
927 # Target exists, but is not a directory.
928 print "File $var exists, but is not a directory.\n\n";
932 # Either Dir Exists, or was created fine.
933 $config{$hash_key} = $var;
941 $config{LDLIBS} = "-lstdc++";
942 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}";
943 $config{DEVELOPER} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated -g";
944 $SHARED = "-Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared";
945 $config{MAKEPROG} = "make";
947 if ($config{OSNAME} =~ /darwin/i) {
948 $config{FLAGS} = "-DDARWIN -frtti -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}";
949 $SHARED = "-bundle -twolevel_namespace -undefined dynamic_lookup";
950 $config{LDLIBS} = "-ldl -lstdc++";
953 if ($config{OSNAME} =~ /OpenBSD/i) {
954 $config{MAKEPROG} = "gmake";
955 chomp($foo = `eg++ -dumpversion | cut -c 1`);
956 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
957 # if theyre not running this, configure lets the build continue but they probably wont manage to
958 # compile as this standard version is 2.95.3!
960 $config{CC} = "eg++";
961 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change the compiler path
966 if ($config{OSNAME} =~ /Linux/i) {
967 $config{LDLIBS} = "-ldl -lstdc++";
968 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}";
969 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
970 $config{LDLIBS} .= " " . $ENV{LDLIBS} if exists($ENV{LDLIBS});
971 $config{MAKEPROG} = "make";
974 if ($config{OSNAME} =~ /FreeBSD/i) {
975 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
976 $config{LDLIBS} .= " " . $ENV{LDLIBS} if exists($ENV{LDLIBS});
979 if ($config{OSNAME} =~ /SunOS/i or $config{OSNAME} =~ /solaris/i)
981 # solaris/sunos needs these
982 # socket = bsd sockets api
984 # rt = POSIX realtime extensions
985 # resolv = inet_aton only (why isnt this in nsl?!)
986 $config{MAKEPROG} = "gmake";
987 $config{LDLIBS} .= " -lsocket -lnsl -lrt -lresolv";
991 if($config{OSNAME} =~ /MINGW32/i)
993 # All code is position-independent on windows
994 $config{FLAGS} =~ s/-fPIC //;
998 return $config{OSNAME};
1002 my($writeheader) = @_;
1003 # First File.. inspircd_config.h
1004 chomp(my $incos = `uname -n -s -r`);
1005 chomp($version = `sh src/version.sh`);
1006 chomp(my $revision2 = getrevision());
1007 if ($writeheader == 1)
1009 print "Writing \033[1;32minspircd_config.h\033[0m\n";
1010 open(FILEHANDLE, ">include/inspircd_config.h");
1011 my $NL = $config{NICK_LENGT}+1;
1012 my $CL = $config{CHAN_LENGT}+1;
1013 print FILEHANDLE <<EOF;
1014 /* Auto generated by configure, do not modify! */
1015 #ifndef __CONFIGURATION_AUTO__
1016 #define __CONFIGURATION_AUTO__
1018 /* this is for windows support. */
1019 #define CoreExport /**/
1020 #define DllExport /**/
1022 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
1023 #define MOD_PATH "$config{MODULE_DIR}"
1024 #define VERSION "$version"
1025 #define REVISION "$revision2"
1026 #define MAXCLIENTS $config{MAX_CLIENT}
1027 #define MAXCLIENTS_S "$config{MAX_CLIENT}"
1028 #define SOMAXCONN_S "$config{_SOMAXCONN}"
1029 #define MAX_DESCRIPTORS $config{MAX_DESCRIPTORS}
1032 #define MAXMODES $config{MAXI_MODES}
1033 #define IDENTMAX $config{MAX_IDENT}
1034 #define MAXQUIT $config{MAX_QUIT}
1035 #define MAXTOPIC $config{MAX_TOPIC}
1036 #define MAXKICK $config{MAX_KICK}
1037 #define MAXGECOS $config{MAX_GECOS}
1038 #define MAXAWAY $config{MAX_AWAY}
1039 #define OPTIMISATION $config{OPTIMITEMP}
1040 #define LIBRARYDIR "$config{LIBRARY_DIR}"
1041 #define SYSTEM "$incos"
1043 print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n";
1045 if ($config{OSNAME} =~ /SunOS/i) {
1046 print FILEHANDLE "#define IS_SOLARIS\n";
1048 if ($config{OSNAME} =~ /MINGW32/i) {
1049 print FILEHANDLE "#define IS_MINGW\n";
1051 if ($config{GCCVER} >= 3) {
1052 print FILEHANDLE "#define GCC3\n";
1054 if ($config{HAS_STRLCPY} eq "true") {
1055 print FILEHANDLE "#define HAS_STRLCPY\n";
1057 if ($config{HAS_STDINT} eq "true") {
1058 print FILEHANDLE "#define HAS_STDINT\n";
1060 if ($config{IPV6} =~ /y/i) {
1061 print FILEHANDLE "#define IPV6\n";
1063 if ($config{SUPPORT_IP6LINKS} =~ /y/i) {
1064 print FILEHANDLE "#define SUPPORT_IP6LINKS\n";
1067 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1068 print FILEHANDLE "#define USE_KQUEUE\n";
1069 $se = "socketengine_kqueue";
1072 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1073 print FILEHANDLE "#define USE_EPOLL\n";
1074 $se = "socketengine_epoll";
1077 if (($has_ports) && ($config{USE_PORTS} eq "y")) {
1078 print FILEHANDLE "#define USE_PORTS\n";
1079 $se = "socketengine_ports";
1082 # user didn't choose either epoll or select for their OS.
1083 # default them to USE_SELECT (ewwy puke puke)
1085 print FILEHANDLE "#define USE_SELECT\n";
1086 $se = "socketengine_select";
1088 print FILEHANDLE "\n#endif\n";
1094 open(FILEHANDLE, ">include/inspircd_se_config.h");
1095 print FILEHANDLE <<EOF;
1096 /* Auto generated by configure, do not modify or commit to svn! */
1097 #ifndef __CONFIGURATION_SOCKETENGINE__
1098 #define __CONFIGURATION_SOCKETENGINE__
1108 # Create a Modules List..
1110 foreach $i (@modlist)
1112 $modules .= "m_".$i.".so ";
1114 chomp($modules); # Remove Redundant whitespace..
1116 opendir(DIRHANDLE, "src/modules");
1117 foreach $name (sort readdir(DIRHANDLE)) {
1118 if ($name =~ /^m_(.+?)$/) {
1119 if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
1120 closedir(MDIRHANDLE);
1121 $modules .= "$name.so ";
1125 closedir(DIRHANDLE);
1128 # Write all .in files.
1131 my $exe = "inspircd";
1133 opendir(DIRHANDLE, $this);
1135 # Do this once here, and cache it in the .*.inc files,
1136 # rather than attempting to read src/version.sh from
1137 # compiled code -- we might not have the source to hand.
1138 # Fix for bug#177 by Brain.
1140 chomp(my $version = `sh ./src/version.sh`);
1141 chomp(my $revision = getrevision());
1142 $version = "$version(r$revision)";
1145 if ($config{IS_DARWIN} eq "YES")
1149 # We can actually parse any file starting with . and ending with .inc,
1150 # but right now we only parse .inspircd.inc to form './inspircd'
1152 foreach $name (sort readdir(DIRHANDLE)) {
1153 if ($name =~ /^\.(.+)\.inc$/) {
1156 # Bug #353, omit this on non-darwin
1157 next if (($config{OSNAME} !~ /darwin/) && ($file eq "org.inspircd.plist"));
1159 # All .name.inc files need parsing!
1161 open(FILEHANDLE, ".$file.inc");
1162 while (<FILEHANDLE>) {
1167 $tmp =~ s/\@CC\@/$config{CC}/;
1168 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
1169 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
1170 $tmp =~ s/\@DEVELOPER\@/$config{DEVELOPER}/;
1171 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
1172 $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/;
1173 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
1174 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
1175 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
1176 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
1177 $tmp =~ s/\@LIBRARY_EXT\@/$LIBEXT/;
1178 $tmp =~ s/\@MODULES\@/$modules/;
1179 $tmp =~ s/\@STARTSCRIPT\@/$config{STARTSCRIPT}/;
1180 $tmp =~ s/\@DESTINATION\@/$config{DESTINATION}/;
1181 $tmp =~ s/\@EXTRA_DIR\@/$config{EXTRA_DIR}/;
1182 $tmp =~ s/\@EXECUTABLE\@/$exe/;
1183 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
1184 $tmp =~ s/\@VERSION\@/$version/;
1186 print "Writing \033[1;32m$file\033[0m\n";
1187 open(FILEHANDLE, ">$file");
1188 print FILEHANDLE $tmp;
1191 closedir(DIRHANDLE);
1193 # Make inspircd executable!
1194 chmod 0744, 'inspircd';
1196 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
1197 write_dynamic_makefile();
1198 write_dynamic_modules_makefile();
1201 sub write_dynamic_modules_makefile {
1202 # Modules Makefile..
1203 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1204 open(FILEHANDLE, ">src/modules/Makefile");
1207 # Module Makefile Header
1209 print FILEHANDLE <<EOF;
1210 ###################################################
1211 # Copyright 2002-2007 The InspIRCd Development Team
1212 # http://www.inspircd.org/wiki/index.php/Credits
1214 # Thanks to Andrew Church <achurch\@achurch.org>
1215 # for assisting with making this work right.
1217 # Automatically Generated by ./configure to add a
1218 # modules please run ./configure -modupdate
1219 ###################################################
1225 # End Module Makefile Header
1228 # Create a Modules List..
1234 foreach $i (@modlist) {
1236 # Write Entry to the MakeFile
1238 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1239 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1240 $deps = getdependencies("src/modules/m_".$i.".cpp");
1242 #print "file: $i: cmflags=$cmflags; liflags=$liflags; deps=$deps\n";
1244 print FILEHANDLE <<EOCHEESE;
1245 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
1246 \$(CC) -pipe -I../../include \$(FLAGS) $cmflags -export-dynamic -c m_$i.cpp
1249 if ($config{OSNAME} =~ /darwin/) {
1250 print FILEHANDLE <<EOCHEESE;
1251 \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle $liflags -o m_$i.so m_$i.o
1255 print FILEHANDLE <<EOCHEESE;
1256 \$(CC) -pipe \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o
1260 $crud = $crud . " install -m \$(INSTMODE) m_$i.so \$(MODPATH)\n";
1262 # End Write Entry to the MakeFile
1266 opendir(DIRHANDLE, "src/modules");
1267 foreach $name (sort readdir(DIRHANDLE)) {
1268 if ($name =~ /^m_(.+?)$/) {
1272 # A module made of multiple files, in a dir, e.g. src/modules/m_spanningtree/
1273 if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
1275 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";
1276 foreach $fname (sort readdir(MDIRHANDLE)) {
1277 if ($fname =~ /\.cpp$/) {
1278 $cmflags = getcompilerflags("src/modules/$name/$fname");
1279 $mliflags = $mliflags . " " . getlinkerflags("src/modules/$name/$fname");
1280 $deps = getdependencies("src/modules/$name/$fname");
1282 $oname =~ s/\.cpp$/.o/g;
1283 print FILEHANDLE " $name/$oname";
1284 $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";
1285 $crapola = $crapola . " \$(CC) -pipe -I../../include -I. \$(FLAGS) $cmflags -export-dynamic -o $name/$oname -c $name/$fname\n\n";
1286 $crap3 = $crap3 . " $name/$oname";
1290 print "Composing Makefile rules for directory \033[1;32m$name\033[0m... (\033[1;32m$i files found\033[0m)\n";
1291 if ($config{IS_DARWIN} eq "YES") {
1292 print FILEHANDLE "\n \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle -o $name.so $crap3\n";
1294 print FILEHANDLE "\n \$(CC) -pipe \$(FLAGS) -shared $mliflags -o $name.so $crap3\n";
1296 print FILEHANDLE "\n$crapola\n";
1297 closedir(MDIRHANDLE);
1298 $crud = $crud . " install -m \$(INSTMODE) $name.so \$(MODPATH)\n";
1302 closedir(DIRHANDLE);
1304 print FILEHANDLE "modinst:\n \@echo \"Installing modules...\"\n" . $crud;
1307 sub write_dynamic_makefile {
1311 opendir(DIRHANDLE, "src");
1312 foreach $name (sort readdir(DIRHANDLE)) {
1313 if ($name =~ /^cmd_(.+)\.cpp$/) {
1314 $cmdlist[$i++] = $1;
1317 closedir(DIRHANDLE);
1321 foreach my $cmd (@cmdlist) {
1322 $cmdobjs = $cmdobjs . "cmd_$cmd.so ";
1323 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1326 $se = "socketengine_select";
1327 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1328 $se = "socketengine_kqueue";
1330 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1331 $se = "socketengine_epoll";
1333 elsif (($has_ports) && ($config{USE_PORTS} eq "y")) {
1334 $se = "socketengine_ports";
1337 $freebsd4libs = $config{CRAQ};
1339 open(FH,">src/Makefile") or die("Could not write src/Makefile");
1341 ###################################################
1342 # Copyright 2002-2007 The InspIRCd Development Team
1343 # http://www.inspircd.org/wiki/index.php/Credits
1345 # Thanks to Andrew Church <achurch\@achurch.org>
1346 # for assisting with making this work right.
1348 # This file is automagically generated by configure
1349 # Any changes made will be lost on ./configure
1350 ###################################################
1352 CC = im a cheezeball
1354 CXXFLAGS = -I../include \${FLAGS}
1355 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1356 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1360 if ($config{IS_DARWIN} eq "YES") {
1362 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
1364 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
1365 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd.cpp
1366 \$(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
1368 libIRCDsocketengine.dylib: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1369 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp
1370 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c $se.cpp
1371 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsocketengine.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsocketengine.dylib socketengine.o $se.o
1373 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
1374 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1375 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsnomasks.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsnomasks.dylib snomasks.o
1377 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
1378 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1379 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcommand_parse.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcommand_parse.dylib command_parse.o
1381 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
1382 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1383 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcull_list.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcull_list.dylib cull_list.o
1385 libIRCDuserprocess.dylib: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1386 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1387 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDuserprocess.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDuserprocess.dylib userprocess.o
1389 libIRCDhash.dylib: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1390 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1391 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDhash.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDhash.dylib hashcomp.o
1393 libIRCDhelper.dylib: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1394 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1395 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDhelper.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDhelper.dylib helperfuncs.o
1397 libIRCDchannels.dylib: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1398 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1399 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDchannels.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDchannels.dylib channels.o
1401 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)
1402 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1403 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1404 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDmode.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDmode.dylib mode.o modes/modeclasses.a
1406 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
1407 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1408 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDxline.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDxline.dylib xline.o
1410 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
1411 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1412 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDstring.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDstring.dylib inspstring.o
1414 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
1415 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1416 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDasyncdns.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDasyncdns.dylib dns.o
1418 libIRCDbase.dylib: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1419 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1420 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDbase.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDbase.dylib base.o
1422 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
1423 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1424 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDconfigreader.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDconfigreader.dylib configreader.o
1426 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
1427 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1428 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcommands.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcommands.dylib commands.o
1430 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
1431 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1432 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDdynamic.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDdynamic.dylib dynamic.o
1434 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
1435 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1436 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDusers.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDusers.dylib users.o
1438 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
1439 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1440 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDmodules.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDmodules.dylib modules.o
1442 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
1443 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1444 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDwildcard.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDwildcard.dylib wildcard.o
1446 libIRCDsocket.dylib: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1447 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1448 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsocket.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsocket.dylib socket.o
1450 libIRCDinspsocket.dylib: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1451 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1452 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDinspsocket.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDinspsocket.dylib inspsocket.o
1454 libIRCDtimer.dylib: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1455 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1456 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDtimer.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDtimer.dylib timer.o
1458 libIRCDserver.dylib: server.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1459 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c server.cpp
1460 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDserver.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDserver.dylib server.o
1462 libIRCDfilelogger.dylib: filelogger.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1463 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c filelogger.cpp
1464 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDfilelogger.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDfilelogger.dylib filelogger.o
1471 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
1473 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
1474 \$(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
1476 libIRCDsocketengine.so: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1477 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1478 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocketengine.so socketengine.o $se.o
1480 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
1481 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1482 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsnomasks.so snomasks.o
1484 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
1485 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1486 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommand_parse.so command_parse.o
1488 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
1489 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1490 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcull_list.so cull_list.o
1492 libIRCDuserprocess.so: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1493 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1494 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDuserprocess.so userprocess.o
1496 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1497 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1498 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhash.so hashcomp.o
1500 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1501 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1502 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhelper.so helperfuncs.o
1504 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1505 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1506 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDchannels.so channels.o
1508 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)
1509 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1510 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1511 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmode.so mode.o modes/modeclasses.a
1513 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
1514 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1515 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDxline.so xline.o
1517 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
1518 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1519 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDstring.so inspstring.o
1521 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
1522 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1523 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDasyncdns.so dns.o
1525 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1526 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1527 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDbase.so base.o
1529 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
1530 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1531 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDconfigreader.so configreader.o
1533 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
1534 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1535 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommands.so commands.o
1537 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
1538 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1539 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDdynamic.so dynamic.o
1541 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
1542 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1543 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDusers.so users.o
1545 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
1546 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1547 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmodules.so modules.o
1549 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
1550 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1551 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDwildcard.so wildcard.o
1553 libIRCDsocket.so: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1554 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1555 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocket.so socket.o
1557 libIRCDinspsocket.so: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1558 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1559 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDinspsocket.so inspsocket.o
1561 libIRCDtimer.so: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1562 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1563 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDtimer.so timer.o
1565 libIRCDserver.so: server.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1566 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c server.cpp
1567 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDserver.so server.o
1569 libIRCDfilelogger.so: filelogger.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1570 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c filelogger.cpp
1571 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDfilelogger.so filelogger.o
1575 foreach my $cmd (@cmdlist) {
1577 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
1578 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1579 \$(CC) -pipe $SHARED -o cmd_$cmd.so cmd_$cmd.o