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 chomp($foo = `eg++ -dumpversion | cut -c 1`);
964 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
965 # if theyre not running this, configure lets the build continue but they probably wont manage to
966 # compile as this standard version is 2.95.3!
968 $config{CC} = "eg++";
969 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change the compiler path
974 if ($config{OSNAME} =~ /Linux/i) {
975 $config{LDLIBS} = "-ldl -lstdc++";
976 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}";
977 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
978 $config{LDLIBS} .= " " . $ENV{LDLIBS} if exists($ENV{LDLIBS});
979 $config{MAKEPROG} = "make";
982 if ($config{OSNAME} =~ /FreeBSD/i) {
983 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
984 $config{LDLIBS} .= " " . $ENV{LDLIBS} if exists($ENV{LDLIBS});
987 if ($config{OSNAME} =~ /SunOS/i or $config{OSNAME} =~ /solaris/i)
989 # solaris/sunos needs these
990 # socket = bsd sockets api
992 # rt = POSIX realtime extensions
993 # resolv = inet_aton only (why isnt this in nsl?!)
994 $config{MAKEPROG} = "gmake";
995 $config{LDLIBS} .= " -lsocket -lnsl -lrt -lresolv";
999 if($config{OSNAME} =~ /MINGW32/i)
1001 # All code is position-independent on windows
1002 $config{FLAGS} =~ s/-fPIC //;
1006 return $config{OSNAME};
1010 my($writeheader) = @_;
1011 # First File.. inspircd_config.h
1012 chomp(my $incos = `uname -n -s -r`);
1013 chomp($version = `sh src/version.sh`);
1014 chomp(my $revision2 = getrevision());
1015 if ($writeheader == 1)
1017 print "Writing \033[1;32minspircd_config.h\033[0m\n";
1018 open(FILEHANDLE, ">include/inspircd_config.h");
1019 my $NL = $config{NICK_LENGT}+1;
1020 my $CL = $config{CHAN_LENGT}+1;
1021 print FILEHANDLE <<EOF;
1022 /* Auto generated by configure, do not modify! */
1023 #ifndef __CONFIGURATION_AUTO__
1024 #define __CONFIGURATION_AUTO__
1026 /* this is for windows support. */
1027 #define CoreExport /**/
1028 #define DllExport /**/
1030 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
1031 #define MOD_PATH "$config{MODULE_DIR}"
1032 #define VERSION "$version"
1033 #define REVISION "$revision2"
1034 #define MAXCLIENTS $config{MAX_CLIENT}
1035 #define MAXCLIENTS_S "$config{MAX_CLIENT}"
1036 #define SOMAXCONN_S "$config{_SOMAXCONN}"
1037 #define MAX_DESCRIPTORS $config{MAX_DESCRIPTORS}
1040 #define MAXMODES $config{MAXI_MODES}
1041 #define IDENTMAX $config{MAX_IDENT}
1042 #define MAXQUIT $config{MAX_QUIT}
1043 #define MAXTOPIC $config{MAX_TOPIC}
1044 #define MAXKICK $config{MAX_KICK}
1045 #define MAXGECOS $config{MAX_GECOS}
1046 #define MAXAWAY $config{MAX_AWAY}
1047 #define OPTIMISATION $config{OPTIMITEMP}
1048 #define LIBRARYDIR "$config{LIBRARY_DIR}"
1049 #define SYSTEM "$incos"
1051 print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n";
1053 if ($config{OSNAME} =~ /SunOS/i) {
1054 print FILEHANDLE "#define IS_SOLARIS\n";
1056 if ($config{OSNAME} =~ /MINGW32/i) {
1057 print FILEHANDLE "#define IS_MINGW\n";
1059 if ($config{GCCVER} >= 3) {
1060 print FILEHANDLE "#define GCC3\n";
1062 if ($config{HAS_STRLCPY} eq "true") {
1063 print FILEHANDLE "#define HAS_STRLCPY\n";
1065 if ($config{HAS_STDINT} eq "true") {
1066 print FILEHANDLE "#define HAS_STDINT\n";
1068 if ($config{IPV6} =~ /y/i) {
1069 print FILEHANDLE "#define IPV6\n";
1071 if ($config{SUPPORT_IP6LINKS} =~ /y/i) {
1072 print FILEHANDLE "#define SUPPORT_IP6LINKS\n";
1075 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1076 print FILEHANDLE "#define USE_KQUEUE\n";
1077 $se = "socketengine_kqueue";
1080 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1081 print FILEHANDLE "#define USE_EPOLL\n";
1082 $se = "socketengine_epoll";
1085 if (($has_ports) && ($config{USE_PORTS} eq "y")) {
1086 print FILEHANDLE "#define USE_PORTS\n";
1087 $se = "socketengine_ports";
1090 # user didn't choose either epoll or select for their OS.
1091 # default them to USE_SELECT (ewwy puke puke)
1093 print FILEHANDLE "#define USE_SELECT\n";
1094 $se = "socketengine_select";
1096 print FILEHANDLE "\n#endif\n";
1102 open(FILEHANDLE, ">include/inspircd_se_config.h");
1103 print FILEHANDLE <<EOF;
1104 /* Auto generated by configure, do not modify or commit to svn! */
1105 #ifndef __CONFIGURATION_SOCKETENGINE__
1106 #define __CONFIGURATION_SOCKETENGINE__
1116 # Create a Modules List..
1118 foreach $i (@modlist)
1120 $modules .= "m_".$i.".so ";
1122 chomp($modules); # Remove Redundant whitespace..
1124 opendir(DIRHANDLE, "src/modules");
1125 foreach $name (sort readdir(DIRHANDLE)) {
1126 if ($name =~ /^m_(.+?)$/) {
1127 if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
1128 closedir(MDIRHANDLE);
1129 $modules .= "$name.so ";
1133 closedir(DIRHANDLE);
1136 # Write all .in files.
1139 my $exe = "inspircd";
1141 opendir(DIRHANDLE, $this);
1143 # Do this once here, and cache it in the .*.inc files,
1144 # rather than attempting to read src/version.sh from
1145 # compiled code -- we might not have the source to hand.
1146 # Fix for bug#177 by Brain.
1148 chomp(my $version = `sh ./src/version.sh`);
1149 chomp(my $revision = getrevision());
1150 $version = "$version(r$revision)";
1153 if ($config{IS_DARWIN} eq "YES")
1157 # We can actually parse any file starting with . and ending with .inc,
1158 # but right now we only parse .inspircd.inc to form './inspircd'
1160 foreach $name (sort readdir(DIRHANDLE)) {
1161 if ($name =~ /^\.(.+)\.inc$/) {
1164 # Bug #353, omit this on non-darwin
1165 next if (($config{OSNAME} !~ /darwin/) && ($file eq "org.inspircd.plist"));
1167 # All .name.inc files need parsing!
1169 open(FILEHANDLE, ".$file.inc");
1170 while (<FILEHANDLE>) {
1175 $tmp =~ s/\@CC\@/$config{CC}/;
1176 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
1177 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
1178 $tmp =~ s/\@DEVELOPER\@/$config{DEVELOPER}/;
1179 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
1180 $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/;
1181 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
1182 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
1183 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
1184 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
1185 $tmp =~ s/\@LIBRARY_EXT\@/$LIBEXT/;
1186 $tmp =~ s/\@MODULES\@/$modules/;
1187 $tmp =~ s/\@STARTSCRIPT\@/$config{STARTSCRIPT}/;
1188 $tmp =~ s/\@DESTINATION\@/$config{DESTINATION}/;
1189 $tmp =~ s/\@EXTRA_DIR\@/$config{EXTRA_DIR}/;
1190 $tmp =~ s/\@EXECUTABLE\@/$exe/;
1191 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
1192 $tmp =~ s/\@VERSION\@/$version/;
1194 print "Writing \033[1;32m$file\033[0m\n";
1195 open(FILEHANDLE, ">$file");
1196 print FILEHANDLE $tmp;
1199 closedir(DIRHANDLE);
1201 # Make inspircd executable!
1202 chmod 0744, 'inspircd';
1204 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
1205 write_dynamic_makefile();
1206 write_dynamic_modules_makefile();
1209 sub write_dynamic_modules_makefile {
1210 # Modules Makefile..
1211 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1212 open(FILEHANDLE, ">src/modules/Makefile");
1215 # Module Makefile Header
1217 print FILEHANDLE <<EOF;
1218 ###################################################
1219 # Copyright 2002-2007 The InspIRCd Development Team
1220 # http://www.inspircd.org/wiki/index.php/Credits
1222 # Thanks to Andrew Church <achurch\@achurch.org>
1223 # for assisting with making this work right.
1225 # Automatically Generated by ./configure to add a
1226 # modules please run ./configure -modupdate
1227 ###################################################
1233 # End Module Makefile Header
1236 # Create a Modules List..
1242 foreach $i (@modlist) {
1244 # Write Entry to the MakeFile
1246 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1247 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1248 $deps = getdependencies("src/modules/m_".$i.".cpp");
1250 #print "file: $i: cmflags=$cmflags; liflags=$liflags; deps=$deps\n";
1252 print FILEHANDLE <<EOCHEESE;
1253 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
1254 \$(CC) -pipe -I../../include \$(FLAGS) $cmflags -export-dynamic -c m_$i.cpp
1257 if ($config{OSNAME} =~ /darwin/) {
1258 print FILEHANDLE <<EOCHEESE;
1259 \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle $liflags -o m_$i.so m_$i.o
1263 print FILEHANDLE <<EOCHEESE;
1264 \$(CC) -pipe \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o
1268 $crud = $crud . " install -m \$(INSTMODE) m_$i.so \$(MODPATH)\n";
1270 # End Write Entry to the MakeFile
1274 opendir(DIRHANDLE, "src/modules");
1275 foreach $name (sort readdir(DIRHANDLE)) {
1276 if ($name =~ /^m_(.+?)$/) {
1281 # A module made of multiple files, in a dir, e.g. src/modules/m_spanningtree/
1282 if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
1283 read_module_directory("src/modules/$name", $name);
1284 print "Composing Makefile rules for directory \033[1;32m$name\033[0m... (\033[1;32m$mfcount files found\033[0m)\n";
1285 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";
1286 if ($config{IS_DARWIN} eq "YES") {
1287 print FILEHANDLE " \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) $mliflags -bundle -o $name.so $mobjs\n";
1289 print FILEHANDLE " \$(CC) -pipe \$(FLAGS) -shared $mliflags -o $name.so $mobjs\n";
1291 print FILEHANDLE "\n$mfrules\n";
1292 closedir(MDIRHANDLE);
1293 $crud = $crud . " install -m \$(INSTMODE) $name.so \$(MODPATH)\n";
1297 closedir(DIRHANDLE);
1299 print FILEHANDLE "modinst:\n \@echo \"Installing modules...\"\n" . $crud;
1302 sub read_module_directory {
1303 my ($dpath, $reldpath) = @_;
1305 if (opendir(MDIRHANDLE, $dpath) == 0) {
1309 foreach $fname (sort readdir(MDIRHANDLE)) {
1310 if ($fname =~ /\.cpp$/) {
1311 $cmflags = getcompilerflags("$dpath/$fname");
1312 $mliflags = $mliflags . " " . getlinkerflags("$dpath/$fname");
1313 $deps = getdependencies("$dpath/$fname");
1315 $oname =~ s/\.cpp$/.o/g;
1316 $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";
1317 $mfrules = $mfrules . " \$(CC) -pipe -I../../include -I. \$(FLAGS) $cmflags -export-dynamic -o $reldpath/$oname -c $reldpath/$fname\n\n";
1318 $mobjs = $mobjs . " $reldpath/$oname";
1321 elsif ((-d "$dpath/$fname") && !($fname eq ".") && !($fname eq "..")) {
1322 read_module_directory($dpath."/".$fname, $reldpath."/".$fname);
1327 sub write_dynamic_makefile {
1331 opendir(DIRHANDLE, "src");
1332 foreach $name (sort readdir(DIRHANDLE)) {
1333 if ($name =~ /^cmd_(.+)\.cpp$/) {
1334 $cmdlist[$i++] = $1;
1337 closedir(DIRHANDLE);
1341 foreach my $cmd (@cmdlist) {
1342 $cmdobjs = $cmdobjs . "cmd_$cmd.so ";
1343 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1346 $se = "socketengine_select";
1347 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1348 $se = "socketengine_kqueue";
1350 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1351 $se = "socketengine_epoll";
1353 elsif (($has_ports) && ($config{USE_PORTS} eq "y")) {
1354 $se = "socketengine_ports";
1357 $freebsd4libs = $config{CRAQ};
1359 open(FH,">src/Makefile") or die("Could not write src/Makefile");
1361 ###################################################
1362 # Copyright 2002-2007 The InspIRCd Development Team
1363 # http://www.inspircd.org/wiki/index.php/Credits
1365 # Thanks to Andrew Church <achurch\@achurch.org>
1366 # for assisting with making this work right.
1368 # This file is automagically generated by configure
1369 # Any changes made will be lost on ./configure
1370 ###################################################
1372 CC = im a cheezeball
1374 CXXFLAGS = -I../include \${FLAGS}
1375 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1376 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1380 if ($config{IS_DARWIN} eq "YES") {
1382 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
1384 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
1385 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd.cpp
1386 \$(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
1388 libIRCDsocketengine.dylib: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1389 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp
1390 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c $se.cpp
1391 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsocketengine.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsocketengine.dylib socketengine.o $se.o
1393 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
1394 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1395 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsnomasks.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsnomasks.dylib snomasks.o
1397 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
1398 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1399 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcommand_parse.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcommand_parse.dylib command_parse.o
1401 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
1402 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1403 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcull_list.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcull_list.dylib cull_list.o
1405 libIRCDuserprocess.dylib: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1406 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1407 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDuserprocess.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDuserprocess.dylib userprocess.o
1409 libIRCDhash.dylib: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1410 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1411 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDhash.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDhash.dylib hashcomp.o
1413 libIRCDhelper.dylib: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1414 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1415 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDhelper.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDhelper.dylib helperfuncs.o
1417 libIRCDchannels.dylib: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1418 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1419 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDchannels.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDchannels.dylib channels.o
1421 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)
1422 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1423 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1424 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDmode.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDmode.dylib mode.o modes/modeclasses.a
1426 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
1427 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1428 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDxline.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDxline.dylib xline.o
1430 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
1431 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1432 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDstring.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDstring.dylib inspstring.o
1434 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
1435 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1436 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDasyncdns.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDasyncdns.dylib dns.o
1438 libIRCDbase.dylib: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1439 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1440 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDbase.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDbase.dylib base.o
1442 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
1443 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1444 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDconfigreader.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDconfigreader.dylib configreader.o
1446 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
1447 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1448 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcommands.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcommands.dylib commands.o
1450 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
1451 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1452 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDdynamic.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDdynamic.dylib dynamic.o
1454 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
1455 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1456 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDusers.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDusers.dylib users.o
1458 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
1459 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1460 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDmodules.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDmodules.dylib modules.o
1462 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
1463 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1464 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDwildcard.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDwildcard.dylib wildcard.o
1466 libIRCDsocket.dylib: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1467 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1468 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsocket.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsocket.dylib socket.o
1470 libIRCDinspsocket.dylib: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1471 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1472 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDinspsocket.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDinspsocket.dylib inspsocket.o
1474 libIRCDtimer.dylib: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1475 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1476 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDtimer.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDtimer.dylib timer.o
1478 libIRCDserver.dylib: server.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1479 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c server.cpp
1480 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDserver.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDserver.dylib server.o
1482 libIRCDfilelogger.dylib: filelogger.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1483 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c filelogger.cpp
1484 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDfilelogger.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDfilelogger.dylib filelogger.o
1491 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
1493 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
1494 \$(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
1496 libIRCDsocketengine.so: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1497 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1498 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocketengine.so socketengine.o $se.o
1500 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
1501 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1502 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsnomasks.so snomasks.o
1504 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
1505 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1506 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommand_parse.so command_parse.o
1508 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
1509 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1510 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcull_list.so cull_list.o
1512 libIRCDuserprocess.so: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1513 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1514 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDuserprocess.so userprocess.o
1516 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1517 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1518 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhash.so hashcomp.o
1520 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1521 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1522 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhelper.so helperfuncs.o
1524 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1525 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1526 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDchannels.so channels.o
1528 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)
1529 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1530 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1531 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmode.so mode.o modes/modeclasses.a
1533 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
1534 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1535 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDxline.so xline.o
1537 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
1538 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1539 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDstring.so inspstring.o
1541 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
1542 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1543 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDasyncdns.so dns.o
1545 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1546 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1547 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDbase.so base.o
1549 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
1550 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1551 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDconfigreader.so configreader.o
1553 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
1554 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1555 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommands.so commands.o
1557 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
1558 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1559 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDdynamic.so dynamic.o
1561 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
1562 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1563 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDusers.so users.o
1565 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
1566 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1567 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmodules.so modules.o
1569 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
1570 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1571 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDwildcard.so wildcard.o
1573 libIRCDsocket.so: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1574 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1575 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocket.so socket.o
1577 libIRCDinspsocket.so: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1578 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1579 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDinspsocket.so inspsocket.o
1581 libIRCDtimer.so: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1582 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1583 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDtimer.so timer.o
1585 libIRCDserver.so: server.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1586 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c server.cpp
1587 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDserver.so server.o
1589 libIRCDfilelogger.so: filelogger.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1590 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c filelogger.cpp
1591 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDfilelogger.so filelogger.o
1595 foreach my $cmd (@cmdlist) {
1597 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
1598 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1599 \$(CC) -pipe $SHARED -o cmd_$cmd.so cmd_$cmd.o