3 # InspIRCd Configuration Script
5 # Copyright 2002-2007 The ChatSpike Development Team
6 # <brain@chatspike.net>
7 # <Craig@chatspike.net>
9 # Licensed under GPL, please see the COPYING file
10 # for more information
12 # [14:21] Brain: <matrix impression> i know perl-fu!
16 ########################################
24 # Utility functions for our buildsystem
28 use make::opensslcert;
31 'enable-gnutls' => \$opt_use_gnutls,
32 'rebuild' => \$opt_rebuild,
33 'enable-openssl' => \$opt_use_openssl,
34 'disable-interactive' => \$opt_nointeractive,
35 'with-nick-length=i' => \$opt_nick_length,
36 'with-channel-length=i' => \$opt_chan_length,
37 'with-max-clients=i' => \$opt_maxclients,
38 'enable-ports' => \$opt_ports,
39 'enable-epoll' => \$opt_epoll,
40 'enable-kqueue' => \$opt_kqueue,
41 'disable-ports' => \$opt_noports,
42 'disable-epoll' => \$opt_noepoll,
43 'disable-kqueue' => \$opt_nokqueue,
44 'enable-ipv6' => \$opt_ipv6,
45 'enable-remote-ipv6' => \$opt_ipv6links,
46 'disable-remote-ipv6' => \$opt_noipv6links,
47 'with-cc=s' => \$opt_cc,
48 'with-ident-length=i' => \$opt_ident,
49 'with-quit-length=i' => \$opt_quit,
50 'with-topic-length=i' => \$opt_topic,
51 'with-kick-length=i' => \$opt_kick,
52 'with-gecos-length=i' => \$opt_gecos,
53 'with-away-length=i' => \$opt_away,
54 'with-max-modes=i' => \$opt_modes,
55 'prefix=s' => \$opt_base_dir,
56 'config-dir=s' => \$opt_config_dir,
57 'module-dir=s' => \$opt_module_dir,
58 'binary-dir=s' => \$opt_binary_dir,
59 'library-dir=s' => \$opt_library_dir,
60 'disable-debuginfo' => sub { $opt_disable_debug = 1 },
61 'help' => sub { showhelp(); },
62 'modupdate' => sub { modupdate(); },
63 'update' => sub { update(); },
64 'svnupdate' => sub { svnupdate(); },
65 'clean' => sub { clean(); },
68 my $non_interactive = (
69 (defined $opt_library_dir) ||
70 (defined $opt_base_dir) ||
71 (defined $opt_config_dir) ||
72 (defined $opt_module_dir) ||
73 (defined $opt_base_dir) ||
74 (defined $opt_binary_dir) ||
75 (defined $opt_nointeractive) ||
76 (defined $opt_away) ||
77 (defined $opt_gecos) ||
78 (defined $opt_kick) ||
79 (defined $opt_maxclients) ||
80 (defined $opt_modes) ||
81 (defined $opt_topic) ||
82 (defined $opt_quit) ||
83 (defined $opt_ident) ||
85 (defined $opt_ipv6) ||
86 (defined $opt_ipv6links) ||
87 (defined $opt_noipv6links) ||
88 (defined $opt_kqueue) ||
89 (defined $opt_epoll) ||
90 (defined $opt_ports) ||
91 (defined $opt_maxchans) ||
92 (defined $opt_opermaxchans) ||
93 (defined $opt_chan_length) ||
94 (defined $opt_nick_length) ||
95 (defined $opt_use_openssl) ||
96 (defined $opt_nokqueue) ||
97 (defined $opt_noepoll) ||
98 (defined $opt_noports) ||
99 (defined $opt_use_gnutls)
101 my $interactive = !$non_interactive;
104 chomp($topdir = getcwd());
105 $this = resolve_directory($topdir); # PWD, Regardless.
106 @modlist = (); # Declare for Module List..
107 %config = (); # Initiate Configuration Hash..
108 $config{ME} = resolve_directory($topdir); # Present Working Directory
110 $config{BASE_DIR} = $config{ME};
112 if (defined $opt_base_dir)
114 $config{BASE_DIR} = $opt_base_dir;
117 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Directory
118 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
119 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
120 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
122 if (defined $opt_config_dir)
124 $config{CONFIG_DIR} = $opt_config_dir;
126 if (defined $opt_module_dir)
128 $config{MODULE_DIR} = $opt_module_dir;
130 if (defined $opt_binary_dir)
132 $config{BINARY_DIR} = $opt_binary_dir;
134 if (defined $opt_library_dir)
136 $config{LIBRARY_DIR} = $opt_library_dir;
138 chomp($config{HAS_GNUTLS} = `libgnutls-config --version 2>/dev/null | cut -c 1,2,3`); # GNUTLS Version.
139 chomp($config{HAS_OPENSSL} = `pkg-config --modversion openssl 2>/dev/null`); # Openssl version
140 chomp($gnutls_ver = $config{HAS_GNUTLS});
141 chomp($openssl_ver = $config{HAS_OPENSSL});
142 $config{USE_GNUTLS} = "n";
143 if (defined $opt_use_gnutls)
145 $config{USE_GNUTLS} = "y"; # Use gnutls.
147 $config{USE_OPENSSL} = "n"; # Use openssl.
148 if (defined $opt_use_openssl)
150 $config{USE_OPENSSL} = "y";
153 # no, let's not change these.
154 $config{OPTIMITEMP} = "0"; # Default Optimisation Value
155 if (!defined $opt_disable_debug)
157 $config{OPTIMISATI} = "-g1"; # Optimisation Flag
161 $config{OPTIMISATI} = "-O2"; # DEBUGGING OFF!
164 $config{NICK_LENGT} = "31"; # Default Nick Length
165 if (defined $opt_nick_length)
167 $config{NICK_LENGT} = $opt_nick_length;
169 $config{CHAN_LENGT} = "64"; # Default Channel Name Length
170 if (defined $opt_chan_length)
172 $config{CHAN_LENGT} = $opt_chan_length;
174 $config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once.
175 if (defined $opt_modes)
177 $config{MAXI_MODES} = $opt_modes;
179 $config{HAS_STRLCPY} = "false"; # strlcpy Check.
180 $config{HAS_STDINT} = "false"; # stdint.h check
181 $config{USE_KQUEUE} = "y"; # kqueue enabled
182 if (defined $opt_kqueue)
184 $config{USE_KQUEUE} = "y";
186 if (defined $opt_nokqueue)
188 $config{USE_KQUEUE} = "n";
190 $config{USE_EPOLL} = "y"; # epoll enabled
191 if (defined $opt_epoll)
193 $config{USE_EPOLL} = "y";
195 if (defined $opt_noepoll)
197 $config{USE_EPOLL} = "n";
199 $config{USE_PORTS} = "y"; # epoll enabled
200 if (defined $opt_ports)
202 $config{USE_PORTS} = "y";
204 if (defined $opt_noports)
206 $config{USE_PORTS} = "n";
208 $config{IPV6} = "n"; # IPv6 support (experimental)
209 if (defined $opt_ipv6)
213 $config{SUPPORT_IP6LINKS} = "y"; # IPv4 supporting IPv6 links (experimental)
214 if (defined $opt_ipv6links)
216 $config{SUPPORT_IP6LINKS} = "y";
218 if (defined $opt_noipv6links)
220 $config{SUPPORT_IP6LINKS} = "n";
222 $config{STATIC_LINK} = "no"; # are doing static modules?
223 chomp($config{MAX_CLIENT_T} = `sh -c \"ulimit -n\"`); # FD Limit
224 chomp($config{MAX_DESCRIPTORS} = `sh -c \"ulimit -n\"`); # Hard FD Limit
225 chomp($config{GCCVER} = `g++ -dumpversion | cut -c 1`); # Major GCC Version
226 $config{_SOMAXCONN} = SOMAXCONN; # Max connections in accept queue
227 $config{OSNAME} = $^O; # Operating System Name
228 $config{IS_DARWIN} = "NO"; # Is OSX?
229 if ($config{OSNAME} =~ /darwin/i)
231 $config{IS_DARWIN} = "YES";
233 $config{CC} = "g++"; # C++ compiler
236 $config{CC} = $opt_cc;
238 $exec = $config{CC} . " -dumpversion | cut -c 1";
239 chomp($config{GCCVER} = `$exec`); # Major GCC Version
240 $config{MAKEORDER} = "ircd mods"; # build order
241 $config{STATICLIBS} = ""; # library archive path
242 $config{MAX_IDENT} = "12"; # max ident size
243 $config{MAX_QUIT} = "255"; # max quit message size
244 $config{MAX_TOPIC} = "307"; # max topic size
245 $config{MAX_KICK} = "255"; # max kick message size
246 $config{MAX_GECOS} = "128"; # max GECOS size
247 $config{MAX_AWAY} = "200"; # max AWAY size
248 if (defined $opt_ident)
250 $config{MAX_IDENT} = $opt_ident;
252 if (defined $opt_quit)
254 $config{MAX_QUIT} = $opt_quit;
256 if (defined $opt_topic)
258 $config{MAX_TOPIC} = $opt_topic;
260 if (defined $opt_kick)
262 $config{MAX_KICK} = $opt_kick;
264 if (defined $opt_gecos)
266 $config{MAX_GECOS} = $opt_gecos;
268 if (defined $opt_away)
270 $config{MAX_AWAY} = $opt_away;
273 $config{HAS_OPENSSL} =~ /^([-[:digit:].]+)([a-z])?(\-[a-z][0-9])?$/;
274 $config{HAS_OPENSSL} = $1;
276 if ($config{GCCVER} eq "") {
277 print $config{CC} . " was not found! You require g++ (the GNU C++ compiler, part of GCC) to build InspIRCd!\n";
281 # Minihack! Convert Cygwin to 'Cyg-Static' so i can
282 # Keep my dynamic module experiments here for later
285 if ($config{OSNAME} =~ /CYGWIN/i)
287 $config{OSNAME} = "CYG-STATIC";
290 if (!$config{MAX_CLIENT_T}) {
291 $config{MAX_CLIENT_T} = 1024; # Set a reasonable 'Default'
292 $fd_scan_fail = "true"; # Used Later
295 # Get and Set some important vars..
300 system("rm -rf .config.cache");
306 chomp($topdir = getcwd());
307 $this = resolve_directory($topdir); # PWD, Regardless.
309 # Does the cache file exist?
311 # No, No it doesn't.. *BASH*
312 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
315 # We've Loaded the cache file and all our variables..
316 print "Updating Files..\n";
318 if ($opt_disable_debug == 1)
320 print "Disabling debug information (-g).\n";
321 $config{OPTIMISATI} = "";
324 $has_epoll = $config{HAS_EPOLL};
325 $has_ports = $config{HAS_PORTS};
326 $has_kqueue = $config{HAS_KQUEUE};
335 print "Configure update failed: $@\n";
343 chomp($topdir = getcwd());
344 $this = resolve_directory($topdir); # PWD, Regardless.
346 # Does the cache file exist?
348 # No, No it doesn't.. *BASH*
349 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
352 # We've Loaded the cache file and all our variables..
353 print "Updating Files..\n";
355 $has_epoll = $config{HAS_EPOLL};
356 $has_ports = $config{HAS_PORTS};
357 $has_kqueue = $config{HAS_KQUEUE};
366 print "Module update failed: $@\n";
376 open(FH,"<.svn/entries") or $fail = 1;
378 print "This is not an SVN copy of InspIRCd.\n";
385 system("svn update");
386 system("perl configure -update");
387 if (defined $opt_rebuild) {
388 system("make install");
393 print "Running non-interactive configure...\n" unless $interactive;
394 print "Checking for cache from previous configure... ";
395 print ((getcache() eq "true") ? "found\n" : "not found\n");
396 print "Checking operating system version... ";
397 print getosflags() . "\n";
399 if (defined $opt_maxclients)
401 $config{MAX_CLIENT} = $opt_maxclients;
404 if (!$config{MAX_CLIENT}) {
405 # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this
406 # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go
407 # higher than the found value" :))
408 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
411 printf "Checking if stdint.h exists... ";
412 $config{HAS_STDINT} = "true";
414 open(STDINT, "</usr/include/stdint.h") or $config{HAS_STDINT} = "false";
415 if ($config{HAS_STDINT} eq "true") {
418 print "yes\n" if $config{HAS_STDINT} eq "true";
419 print "no\n" if $config{HAS_STDINT} eq "false";
422 printf "Checking if strlcpy exists... ";
423 # Perform the strlcpy() test..
424 $config{HAS_STRLCPY} = "false";
426 open(STRLCPY, "</usr/include/string.h") or $fail = 1;
428 while (chomp($line = <STRLCPY>)) {
429 # try and find the delcaration of:
430 # size_t strlcpy(...)
431 if ($line =~ /size_t(\0x9|\s)+strlcpy/) {
432 $config{HAS_STRLCPY} = "true";
437 print "yes\n" if $config{HAS_STRLCPY} eq "true";
438 print "no\n" if $config{HAS_STRLCPY} eq "false";
441 printf "Checking if kqueue exists... ";
444 open(KQUEUE, "</usr/include/sys/event.h") or $fail = 1;
446 while (chomp($line = <KQUEUE>)) {
447 # try and find the delcaration of:
449 if ($line =~ /int(\0x9|\s)+kqueue/) {
455 print "yes\n" if $has_kqueue == 1;
456 print "no\n" if $has_kqueue == 0;
458 printf "Checking if epoll exists... ";
461 open(EPOLL, "</usr/include/sys/epoll.h") or $fail = 1;
467 my $kernel = `uname -r`;
469 if (($kernel =~ /^2\.0\./) || ($kernel =~ /^2\.2\./) || ($kernel =~ /^2\.4\./)) {
473 print "yes\n" if $has_epoll == 1;
474 print "no\n" if $has_epoll == 0;
476 printf "Checking if Solaris I/O completion ports are available... ";
478 my $system = `uname -s`;
480 $has_ports = 1 if ($system eq "SunOS");
483 my $kernel = `uname -r`;
485 if (($kernel !~ /^5\.10/)) {
489 print "yes\n" if $has_ports == 1;
490 print "no\n" if $has_ports == 0;
492 if (($config{OSNAME} =~ /CYGWIN/) || ($config{OSNAME} eq "CYG-STATIC")) {
493 $config{HAS_STRLCPY} = "true";
496 $config{HAS_EPOLL} = $has_epoll;
497 $config{HAS_KQUEUE} = $has_kqueue;
499 printf "Checking for libgnutls... ";
500 if (($config{HAS_GNUTLS}) && (($config{HAS_GNUTLS} >= 1.2) || ($config{HAS_GNUTLS} eq "y"))) {
502 $config{HAS_GNUTLS} = "y";
505 $config{HAS_GNUTLS} = "n";
508 printf "Checking for openssl... ";
509 if (($config{HAS_OPENSSL}) && (($config{HAS_OPENSSL} >= 0.8) || ($config{HAS_OPENSSL} eq "y"))) {
511 $config{HAS_OPENSSL} = "y";
514 $config{HAS_OPENSSL} = "n";
517 ################################################################################
518 # BEGIN INTERACTIVE PART #
519 ################################################################################
527 my $rev = getrevision();
528 # Display Introduction Message..
530 Welcome to the \033[1mInspIRCd\033[0m Configuration program! (\033[1minteractive mode\033[0m)
531 \033[1mPackage maintainers: Type ./configure --help for non-interactive help\033[0m
533 *** If you are unsure of any of these values, leave it blank for ***
534 *** standard settings that will work, and your server will run ***
535 *** using them. Please consult your IRC network admin if in doubt. ***
537 Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter
538 a new value. Please note: You will \033[1mHAVE\033[0m to read the docs
539 dir, otherwise you won't have a config file!
541 Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos)
542 Maximum file descriptors: \033[1;32m$config{MAX_CLIENT_T}\033[0m
543 Your InspIRCd revision ID is \033[1;32mr$rev\033[0m";
545 print " (Non-SVN build)";
549 $config{CHANGE_COMPILER} = "n";
550 print "I have detected the following compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
552 while (($config{GCCVER} < 3) || ($config{GCCVER} eq "")) {
553 print "\033[1;32mIMPORTANT!\033[0m A GCC 2.x compiler has been detected, and
554 should NOT be used. You should probably specify a newer compiler.\n\n";
555 yesno(CHANGE_COMPILER,"Do you want to change the compiler?");
556 if ($config{CHANGE_COMPILER} =~ /y/i) {
557 print "What command do you want to use to invoke your compiler?\n";
558 print "[\033[1;32m$config{CC}\033[0m] -> ";
559 chomp($config{CC} = <STDIN>);
560 if ($config{CC} eq "") {
563 chomp($foo = `$config{CC} -dumpversion | cut -c 1`);
565 chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change compilers
566 print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
567 if ($config{GCCVER} < 3) {
568 print "\033[1;32mGCC 2.x WILL NOT WORK!\033[0m. Let's try that again, shall we?\n";
572 print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n";
579 # Directory Settings..
580 my $tmpbase = $config{BASE_DIR};
581 dir_check("do you wish to install the InspIRCd base", "BASE_DIR");
582 if ($tmpbase ne $config{BASE_DIR}) {
583 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Dir
584 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
585 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
586 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
589 dir_check("are the configuration files", "CONFIG_DIR");
590 dir_check("are the modules to be compiled to", "MODULE_DIR");
591 dir_check("is the IRCd binary to be placed", "BINARY_DIR");
592 dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
595 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?");
599 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?");
603 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?");
606 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y") || ($config{USE_PORTS} eq "y"));
607 if (!$chose_hiperf) {
608 print "No high-performance socket engines are available, or you chose\n";
609 print "not to enable one. Defaulting to select() engine.\n\n";
612 yesno(IPV6,"Would you like to build InspIRCd with IPv6 support?");
615 if ($config{IPV6} eq "y") {
616 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";
617 $config{SUPPORT_IP6LINKS} = "y";
619 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)");
623 if (($config{HAS_GNUTLS} eq "y") && ($config{HAS_OPENSSL} eq "y")) {
624 print "I have detected both \033[1;32mGnuTLS\033[0m and \033[1;32mOpenSSL\033[0m on your system.\n";
625 print "I will default to GnuTLS. If you wish to use OpenSSL\n";
626 print "instead, you should enable the OpenSSL module yourself\n";
627 print "by copying it from src/modules/extra to src/modules.\n\n";
628 print "Detected GnuTLS version: \033[1;32m" . $gnutls_ver . "\033[0m\n";
629 print "Detected OpenSSL version: \033[1;32m" . $openssl_ver . "\033[0m\n\n";
632 if ($config{HAS_GNUTLS} eq "y") {
633 yesno(USE_GNUTLS, "Would you like to enable SSL Support?");
634 if ($config{USE_GNUTLS} eq "y") {
635 print "\nUsing GnuTLS SSL module.\n";
637 } elsif ($config{HAS_OPENSSL} eq "y") {
638 yesno(USE_OPENSSL, "Would you like to enable SSL Support?");
639 if ($config{USE_OPENSSL} eq "y") {
640 print "\nUsing OpenSSL SSL module.\nYou will get better performance if you move to GnuTLS in the future.\n";
644 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";
647 print "\nThe following questions will ask you for various figures relating\n";
648 print "To your IRCd install. Please note that these should usually be left\n";
649 print "as defaults unless you have a real reason to change them. If they\n";
650 print "changed, then the values must be identical on all servers on your\n";
651 print "network, or malfunctions and/or crashes may occur, with the exception\n";
652 print "of the 'maximum number of clients' setting which may be different on\n";
653 print "different servers on the network.\n\n";
655 # File Descriptor Settings..
656 promptnumeric("number of clients at any one time", "MAX_CLIENT_T");
657 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
658 $config{MAX_DESCRIPTORS} = $config{MAX_CLIENT_T};
660 promptnumeric("length of nicknames", "NICK_LENGT");
661 promptnumeric("length of channel names", "CHAN_LENGT");
662 promptnumeric("number of mode changes in one line", "MAXI_MODES");
663 promptnumeric("length of an ident (username)", "MAX_IDENT");
664 promptnumeric("length of a quit message", "MAX_QUIT");
665 promptnumeric("length of a channel topic", "MAX_TOPIC");
666 promptnumeric("length of a kick message", "MAX_KICK");
667 promptnumeric("length of a GECOS (real name)", "MAX_GECOS");
668 promptnumeric("length of an away message", "MAX_AWAY");
673 if (($config{USE_GNUTLS} eq "y") && ($config{HAS_GNUTLS} ne "y"))
675 print "Sorry, but i couldn't detect gnutls. Make sure gnutls-config is in your path.\n";
678 if (($config{USE_OPENSSL} eq "y") && ($config{HAS_OPENSSL} ne "y"))
680 print "Sorry, but i couldn't detect openssl. Make sure openssl is in your path.\n";
684 if ($config{USE_GNUTLS} eq "y") {
686 open(TMP, "<src/modules/m_ssl_gnutls.cpp") or $failed = 1;
689 print "Symlinking src/modules/m_ssl_gnutls.cpp from extra/\n";
690 chdir("src/modules");
691 system("ln -s extra/m_ssl_gnutls.cpp");
698 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
700 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
703 print "SSL Certificates Not found, Generating.. \n\n
704 *************************************************************
705 * Generating the Private Key may take some time, go grab a *
706 * Coffee. Even better, to generate some more entropy if it *
707 * is taking a while, open another console and type du / a *
708 * few times and get that HD going :) Then answer the *
709 * Questions which follow. If you are unsure, just hit enter *
710 *************************************************************\n\n";
712 print "\nCertificate generation complete, copying to config directory... ";
713 system("mv key.pem $config{CONFIG_DIR}/key.pem");
714 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
717 print "SSL Certificates found, skipping.\n\n"
722 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
724 } elsif ($config{USE_OPENSSL} eq "y") {
726 open(TMP, "<src/modules/m_ssl_openssl.cpp") or $failed = 1;
729 print "Symlinking src/modules/m_ssl_openssl.cpp from extra/\n";
730 chdir("src/modules");
731 system("ln -s extra/m_ssl_openssl.cpp");
738 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
740 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
743 print "SSL Certificates Not found, Generating.. \n\n
744 *************************************************************
745 * Generating the certificates may take some time, go grab a *
746 * coffee, or something. *
747 *************************************************************\n\n";
749 print "\nCertificate generation complete, copying to config directory... ";
750 system("mv key.pem $config{CONFIG_DIR}/key.pem");
751 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
752 system("mv dhparams.pem $config{CONFIG_DIR}/dhparams.pem");
755 print "SSL Certificates found, skipping.\n\n"
760 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
763 if (($config{USE_GNUTLS} eq "n") && ($config{USE_OPENSSL} eq "n")) {
764 print "Skipping SSL Certificate generation, SSL support is not available.\n\n";
772 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
773 if (($config{USE_GNUTLS} eq "y") || ($config{USE_OPENSSL} eq "y")) {
774 print "Please remember that to enable \033[1;32mSSL support\033[0m you must\n";
775 print "load the required modules in your config. This configure process\n";
776 print "has just prepared these modules to be compiled for you, and has not\n";
777 print "configured them to be compiled into the core of the ircd.\n";
779 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
780 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
781 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";
784 if ($config{GCCVER} < "3") {
786 \033[1;32mWARNING!\033[0m You are attempting to compile InspIRCd on GCC 2.x!
787 GCC 2.x series compilers only had partial (read as broken) C++ support, and
788 your compile will most likely fail horribly! If you have any problems, do NOT
789 report them to the bugtracker or forums without first upgrading your compiler
790 to a newer 3.x or 4.x (or whatever is available currently) version.
794 ################################################################################
796 ################################################################################
798 # Retrieves the .config.cache file, and loads values into the main config hash.
799 open(CACHE, ".config.cache") or return undef;
802 # Ignore Blank lines, and comments..
805 my ($key, $value) = split("=", $_, 2);
806 $value =~ /^\"(.*)\"$/;
807 # Do something with data here!
815 # Dump the contents of %config
816 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
817 open(FILEHANDLE, ">.config.cache");
818 foreach $key (keys %config) {
819 print FILEHANDLE "$key=\"$config{$key}\"\n";
825 my ($desc, $hash_key) = @_;
828 print "In what directory $desc?\n";
829 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
830 chomp($var = <STDIN>);
832 $var = $config{$hash_key};
834 if ($var =~ /^\~\/(.+)$/) {
835 # Convert it to a full path..
836 $var = resolve_directory($ENV{HOME} . "/" . $1);
838 elsif ((($config{OSNAME} =~ /MINGW32/i) and ($var !~ /^[A-Z]{1}:\\.*/)) and (substr($var,0,1) ne "/"))
840 # Assume relative Path was given.. fill in the rest.
841 $var = $this . "/$var";
844 $var = resolve_directory($var);
846 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
847 chomp($tmp = <STDIN>);
848 if (($tmp eq "") || ($tmp =~ /^y/i)) {
849 # Attempt to Create the Dir..
851 system("mkdir -p \"$var\" >> /dev/null 2>&1");
852 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
854 print "Unable to create directory. ($var)\n\n";
859 # They said they don't want to create, and we can't install there.
865 # Target exists, but is not a directory.
866 print "File $var exists, but is not a directory.\n\n";
870 # Either Dir Exists, or was created fine.
871 $config{$hash_key} = $var;
879 $config{LDLIBS} = "-lstdc++";
880 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}";
881 $config{DEVELOPER} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -g";
882 $SHARED = "-Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared";
883 $config{MAKEPROG} = "make";
885 if ($config{OSNAME} =~ /darwin/i) {
886 $config{FLAGS} = "-DDARWIN -frtti -fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}";
887 $SHARED = "-bundle -twolevel_namespace -undefined dynamic_lookup";
888 $config{LDLIBS} = "-ldl -lstdc++";
891 if ($config{OSNAME} =~ /OpenBSD/i) {
892 $config{MAKEPROG} = "gmake";
893 chomp($foo = `eg++ -dumpversion | cut -c 1`);
894 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
895 # if theyre not running this, configure lets the build continue but they probably wont manage to
896 # compile as this standard version is 2.95.3!
898 $config{CC} = "eg++";
899 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change the compiler path
904 if ($config{OSNAME} =~ /Linux/i) {
905 $config{LDLIBS} = "-ldl -lstdc++";
906 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}";
907 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
908 $config{MAKEPROG} = "make";
909 if ($config{OSNAME} =~ /CYGWIN/) {
910 $config{FLAGS} = "-fno-strict-aliasing -Wall -Woverloaded-virtual $config{OPTIMISATI}";
911 $config{LDLIBS} = "";
912 $config{MAKEPROG} = "/usr/bin/make";
913 $config{MAKEORDER} = "ircd mods";
915 } elsif ($config{OSNAME} eq "CYG-STATIC") {
916 $config{FLAGS} = "-fno-strict-aliasing -Wall -Woverloaded-virtual $config{OPTIMISATI}";
917 $config{LDLIBS} = "";
918 $config{MAKEPROG} = "/usr/bin/make";
919 $config{MAKEORDER} = "mods ircd";
920 $config{STATICLIBS} = "modules/mods.a";
921 $config{STATIC_LINK} = "yes";
922 return "Cygwin-Static";
924 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
927 if ($config{OSNAME} =~ /SunOS/i)
929 # solaris/sunos needs these
930 # socket = bsd sockets api
932 # rt = POSIX realtime extensions
933 # resolv = inet_aton only (why isnt this in nsl?!)
934 $config{MAKEPROG} = "gmake";
935 $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv";
939 if($config{OSNAME} =~ /MINGW32/i)
941 # All code is position-independent on windows
942 $config{FLAGS} =~ s/-fPIC //;
946 return $config{OSNAME};
950 my($writeheader) = @_;
951 # First File.. inspircd_config.h
952 chomp(my $incos = `uname -n -s -r`);
953 chomp($version = `sh src/version.sh`);
954 chomp(my $revision2 = getrevision());
955 if ($writeheader == 1)
957 print "Writing \033[1;32minspircd_config.h\033[0m\n";
958 open(FILEHANDLE, ">include/inspircd_config.h");
959 my $NL = $config{NICK_LENGT}+1;
960 my $CL = $config{CHAN_LENGT}+1;
961 print FILEHANDLE <<EOF;
962 /* Auto generated by configure, do not modify! */
963 #ifndef __CONFIGURATION_AUTO__
964 #define __CONFIGURATION_AUTO__
966 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
967 #define MOD_PATH "$config{MODULE_DIR}"
968 #define VERSION "$version"
969 #define REVISION "$revision2"
970 #define MAXCLIENTS $config{MAX_CLIENT}
971 #define MAXCLIENTS_S "$config{MAX_CLIENT}"
972 #define SOMAXCONN_S "$config{_SOMAXCONN}"
973 #define MAX_DESCRIPTORS $config{MAX_DESCRIPTORS}
976 #define MAXMODES $config{MAXI_MODES}
977 #define IDENTMAX $config{MAX_IDENT}
978 #define MAXQUIT $config{MAX_QUIT}
979 #define MAXTOPIC $config{MAX_TOPIC}
980 #define MAXKICK $config{MAX_KICK}
981 #define MAXGECOS $config{MAX_GECOS}
982 #define MAXAWAY $config{MAX_AWAY}
983 #define OPTIMISATION $config{OPTIMITEMP}
984 #define LIBRARYDIR "$config{LIBRARY_DIR}"
985 #define SYSTEM "$incos"
988 if ($config{OSNAME} =~ /SunOS/i) {
989 print FILEHANDLE "#define IS_SOLARIS\n";
991 if ($config{OSNAME} =~ /CYGWIN/i) {
992 print FILEHANDLE "#define IS_CYGWIN\n";
993 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
995 if ($config{OSNAME} =~ /MINGW32/i) {
996 print FILEHANDLE "#define IS_MINGW\n";
998 if ($config{OSNAME} =~ /CYG-STATIC/i) {
999 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
1001 if ($config{STATIC_LINK} eq "yes") {
1002 print FILEHANDLE "#define STATIC_LINK\n";
1004 if ($config{GCCVER} >= 3) {
1005 print FILEHANDLE "#define GCC3\n";
1007 if ($config{HAS_STRLCPY} eq "true") {
1008 print FILEHANDLE "#define HAS_STRLCPY\n";
1010 if ($config{HAS_STDINT} eq "true") {
1011 print FILEHANDLE "#define HAS_STDINT\n";
1013 if ($config{IPV6} =~ /y/i) {
1014 print FILEHANDLE "#define IPV6\n";
1016 if ($config{SUPPORT_IP6LINKS} =~ /y/i) {
1017 print FILEHANDLE "#define SUPPORT_IP6LINKS\n";
1020 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1021 print FILEHANDLE "#define USE_KQUEUE\n";
1022 $se = "socketengine_kqueue";
1025 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1026 print FILEHANDLE "#define USE_EPOLL\n";
1027 $se = "socketengine_epoll";
1030 if (($has_ports) && ($config{USE_PORTS} eq "y")) {
1031 print FILEHANDLE "#define USE_PORTS\n";
1032 $se = "socketengine_ports";
1035 # user didn't choose either epoll or select for their OS.
1036 # default them to USE_SELECT (ewwy puke puke)
1038 print FILEHANDLE "#define USE_SELECT\n";
1039 $se = "socketengine_select";
1041 print FILEHANDLE "\n#endif\n";
1047 open(FILEHANDLE, ">include/inspircd_se_config.h");
1048 print FILEHANDLE <<EOF;
1049 /* Auto generated by configure, do not modify or commit to svn! */
1050 #ifndef __CONFIGURATION_SOCKETENGINE__
1051 #define __CONFIGURATION_SOCKETENGINE__
1061 # Create a Modules List..
1063 foreach $i (@modlist)
1065 if ($config{STATIC_LINK} eq "yes") {
1066 $modules .= "m_".$i.".o ";
1069 $modules .= "m_".$i.".so ";
1072 chomp($modules); # Remove Redundant whitespace..
1074 opendir(DIRHANDLE, "src/modules");
1075 foreach $name (sort readdir(DIRHANDLE)) {
1076 if ($name =~ /^m_(.+?)$/) {
1077 if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
1078 closedir(MDIRHANDLE);
1079 $modules .= "$name.so ";
1083 closedir(DIRHANDLE);
1086 # Write all .in files.
1089 my $exe = "inspircd";
1091 if ($config{OSNAME} =~ /CYGWIN/i) {
1092 $exe = "inspircd.exe";
1095 opendir(DIRHANDLE, $this);
1097 # Do this once here, and cache it in the .*.inc files,
1098 # rather than attempting to read src/version.sh from
1099 # compiled code -- we might not have the source to hand.
1100 # Fix for bug#177 by Brain.
1102 chomp(my $version = `sh ./src/version.sh`);
1103 chomp(my $revision = getrevision());
1104 $version = "$version(r$revision)";
1107 if ($config{IS_DARWIN} eq "YES")
1111 # We can actually parse any file starting with . and ending with .inc,
1112 # but right now we only parse .inspircd.inc to form './inspircd'
1114 foreach $name (sort readdir(DIRHANDLE)) {
1115 if ($name =~ /^\.(.+)\.inc$/) {
1117 # All .name.inc files need parsing!
1119 open(FILEHANDLE, ".$file.inc");
1120 while (<FILEHANDLE>) {
1125 $tmp =~ s/\@CC\@/$config{CC}/;
1126 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
1127 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
1128 $tmp =~ s/\@DEVELOPER\@/$config{DEVELOPER}/;
1129 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
1130 $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/;
1131 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
1132 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
1133 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
1134 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
1135 $tmp =~ s/\@LIBRARY_EXT\@/$LIBEXT/;
1136 $tmp =~ s/\@MODULES\@/$modules/;
1137 $tmp =~ s/\@EXECUTABLE\@/$exe/;
1138 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
1139 $tmp =~ s/\@STATICLIBS\@/$config{STATICLIBS}/;
1140 $tmp =~ s/\@VERSION\@/$version/;
1142 print "Writing \033[1;32m$file\033[0m\n";
1143 open(FILEHANDLE, ">$file");
1144 print FILEHANDLE $tmp;
1147 closedir(DIRHANDLE);
1149 # Make inspircd executable!
1150 chmod 0744, 'inspircd';
1152 if ($config{STATIC_LINK} eq "yes") {
1153 print "Writing static-build \033[1;32msrc/Makefile\033[0m\n";
1154 write_static_makefile();
1155 write_static_modules_makefile();
1156 } elsif ($config{OSNAME} =~ /CYGWIN/i) {
1157 print "Writing cygwin-build \033[1;32msrc/Makefile\033[0m\n";
1158 write_static_makefile();
1159 write_dynamic_modules_makefile();
1161 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
1162 write_dynamic_makefile();
1163 write_dynamic_modules_makefile();
1167 sub write_static_modules_makefile {
1168 # Modules Makefile..
1169 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1170 open(FILEHANDLE, ">src/modules/Makefile");
1173 # Module Makefile Header
1175 print FILEHANDLE <<EOF;
1176 # (C) ChatSpike development team
1177 # Makefile by <Craig\@ChatSpike.net>
1178 # Many Thanks to Andrew Church <achurch\@achurch.org>
1179 # for assisting with making this work right.
1181 # Automatically Generated by ./configure to add a modules
1182 # please run ./configure --update
1188 # End Module Makefile Header
1191 # Create a Modules List..
1196 open(MODLIST,">include/modlist.h");
1199 # Include File Header
1201 print MODLIST <<HEADER;
1202 // Generated automatically by configure. DO NOT EDIT!
1204 #ifndef __SYMBOLS__H_CONFIGURED__
1205 #define __SYMBOLS__H_CONFIGURED__
1209 # End Include File Header
1212 # Place Module List into Include
1213 foreach $i (@modlist) {
1214 if ($i !~ /_static$/) {
1215 print MODLIST "extern \"C\" void * $i\_init (void);\n";
1218 print MODLIST "\nstruct {const char *name; initfunc *value; } modsyms[] = {\n";
1223 foreach $i (@modlist)
1225 if ($i !~ /_static$/) {
1226 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1227 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1228 $deps = getdependencies("src/modules/m_".$i.".cpp");
1230 #print "file: $i: cmflags=$cmflags; liflags=$liflags; deps=$deps\n";
1233 # Write Entry to the Makefile
1235 print FILEHANDLE <<EOCHEESE;
1236 m_$i.o: .m_$i\_static.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h $deps
1237 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c .m_$i\_static.cpp
1238 mv .m_$i\_static.o ../m_$i.o
1242 # End Write Entry to the MakeFile
1244 print "Configuring module [\033[1;32mm_$i.so\033[0m] for static linking... ";
1245 open(MODULE,"<src/modules/m_".$i.".cpp") or die("Could not open m_".$i.".cpp");
1246 open(MUNGED,">src/modules/.m_".$i."_static.cpp") or die("Could not create .m_".$i."_static.cpp");
1247 while (chomp($a = <MODULE>)) {
1248 $a =~ s/init_module/$i\_init/g;
1249 print MUNGED "$a\n";
1253 print MODLIST <<EOENT;
1254 {"m_$i.so",\&$i\_init},
1260 print MODLIST "{0}};\n\n#endif\n";
1264 sub write_dynamic_modules_makefile {
1265 # Modules Makefile..
1266 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1267 open(FILEHANDLE, ">src/modules/Makefile");
1270 if ($config{OSNAME} =~ /CYGWIN/i) {
1271 $extra = "../inspircd.dll.a";
1275 # Module Makefile Header
1277 print FILEHANDLE <<EOF;
1278 # (C) ChatSpike development team
1279 # Makefile by <Craig\@ChatSpike.net>
1280 # Many Thanks to Andrew Church <achurch\@achurch.org>
1281 # for assisting with making this work right.
1283 # Automatically Generated by ./configure to add a modules
1284 # please run ./configure -update or ./configure -modupdate
1290 # End Module Makefile Header
1293 # Create a Modules List..
1299 foreach $i (@modlist) {
1301 # Write Entry to the MakeFile
1303 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1304 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1305 $deps = getdependencies("src/modules/m_".$i.".cpp");
1307 #print "file: $i: cmflags=$cmflags; liflags=$liflags; deps=$deps\n";
1309 print FILEHANDLE <<EOCHEESE;
1310 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
1311 \$(CC) -pipe -I../../include \$(FLAGS) $cmflags -export-dynamic -c m_$i.cpp
1314 if ($config{OSNAME} =~ /darwin/) {
1315 print FILEHANDLE <<EOCHEESE;
1316 \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle $liflags -o m_$i.so m_$i.o $extra
1320 print FILEHANDLE <<EOCHEESE;
1321 \$(CC) -pipe \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o $extra
1325 $crud = $crud . " install -m \$(INSTMODE) m_$i.so \$(MODPATH)\n";
1327 # End Write Entry to the MakeFile
1331 opendir(DIRHANDLE, "src/modules");
1332 foreach $name (sort readdir(DIRHANDLE)) {
1333 if ($name =~ /^m_(.+?)$/) {
1336 # A module made of multiple files, in a dir, e.g. src/modules/m_spanningtree/
1337 if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
1338 print "Composing Makefile rules for directory \033[1;32m$name\033[0m... ";
1340 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";
1341 foreach $fname (sort readdir(MDIRHANDLE)) {
1342 if ($fname =~ /\.cpp$/) {
1343 $cmflags = getcompilerflags("src/modules/$name/$fname");
1344 $liflags = getlinkerflags("src/modules/$name/$fname");
1345 $deps = getdependencies("src/modules/$name/$fname");
1347 $oname =~ s/\.cpp$/.o/g;
1348 print FILEHANDLE " $name/$oname";
1349 $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";
1350 $crapola = $crapola . " \$(CC) -pipe -I../../include -I. \$(FLAGS) $cmflags -export-dynamic -o $name/$oname -c $name/$fname\n\n";
1351 $crap3 = $crap3 . " $name/$oname";
1355 print "(\033[1;32m$i files found\033[0m)\n";
1356 if ($config{IS_DARWIN} eq "YES") {
1357 print FILEHANDLE "\n \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle -o $name.so $crap3\n";
1359 print FILEHANDLE "\n \$(CC) -pipe \$(FLAGS) -shared $liflags -o $name.so $crap3\n";
1361 print FILEHANDLE "\n$crapola\n";
1362 closedir(MDIRHANDLE);
1363 $crud = $crud . " install -m \$(INSTMODE) $name.so \$(MODPATH)\n";
1367 closedir(DIRHANDLE);
1369 print FILEHANDLE "modinst:\n \@echo \"Installing modules...\"\n" . $crud;
1373 sub write_static_makefile {
1374 open(FH,">src/Makefile") or die("Could not write src/Makefile!");
1377 opendir(DIRHANDLE, "src");
1378 foreach $name (sort readdir(DIRHANDLE)) {
1379 if ($name =~ /^cmd_(.+)\.cpp$/) {
1380 $cmdlist[$i++] = $1;
1383 closedir(DIRHANDLE);
1386 foreach my $cmd (@cmdlist) {
1387 $cmdobjs = $cmdobjs . "cmd_$cmd.o ";
1388 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1393 # (C) ChatSpike development team
1394 # Makefile by <Craig\@ChatSpike.net>
1395 # Makefile version 2 (statically linked core) by <brain\@inspircd.org>
1398 CC = im a cheezeball
1400 CXXFLAGS = -I../include \${FLAGS}
1401 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1402 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1406 $se = "socketengine_select";
1407 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1408 $se = "socketengine_kqueue";
1410 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1411 $se = "socketengine_epoll";
1413 elsif (($has_ports) && ($config{USE_PORTS} eq "y")) {
1414 $se = "socketengine_ports";
1418 # This next section is for cygwin dynamic module builds.
1419 # Basically, what we do, is build the inspircd core as a library
1420 # then the main executable uses that. the library is capable of
1421 # loading / unloading the modules dynamically :)
1422 # Massive thanks to the guys on #cygwin @ irc.freenode.net for helping
1426 if ($config{OSNAME} =~ /CYGWIN/i) {
1428 all: timer.o command_parse.o cull_list.o userprocess.o socketengine.o socket.o hashcomp.o channels.o mode.o xline.o inspstring.o dns.o base.o configreader.o inspsocket.o $cmdobjs commands.o dynamic.o users.o modules.o wildcard.o helperfuncs.o snomasks.o inspircd.exe
1430 inspircd.exe: inspircd.dll.a
1433 inspircd.dll inspircd.dll.a: inspircd.o channels.o mode.o xline.o inspstring.o dns.o base.o configreader.o inspsocket.o $cmdobjs commands.o dynamic.o users.o modules.o wildcard.o helperfuncs.o hashcomp.o socket.o socketengine.o userprocess.o cull_list.o command_parse.o timer.o snomasks.o
1434 \$(CC) -shared -Wl,--out-implib=inspircd.dll.a -o inspircd.dll \$^
1438 all: timer.o command_parse.o cull_list.o userprocess.o socketengine.o socket.o hashcomp.o channels.o mode.o xline.o inspstring.o dns.o base.o configreader.o inspsocket.o $cmdobjs commands.o dynamic.o users.o modules.o wildcard.o helperfuncs.o snomasks.o \$(MODULES) inspircd.exe
1440 inspircd.exe: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h ../include/base.h
1441 \$(CC) -I../include \$(FLAGS) inspircd.cpp -o inspircd.exe \$(LDLIBS) channels.o mode.o xline.o inspstring.o dns.o base.o inspsocket.o configreader.o $cmdobjs commands.o dynamic.o users.o modules.o wildcard.o helperfuncs.o hashcomp.o socket.o socketengine.o userprocess.o cull_list.o command_parse.o timer.o snomasks.o modes/modeclasses.a \$(MODULES)
1447 cull_list.o: cull_list.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/users.h ../include/channels.h
1448 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1450 snomasks.o: snomasks.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/channels.h
1451 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1453 command_parse.o: command_parse.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1454 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1456 userprocess.o: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1457 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1459 socketengine.o: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1460 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1462 hashcomp.o: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1463 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1465 helperfuncs.o: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1466 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1468 channels.o: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1469 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1471 mode.o: 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) modes/modeclasses.a
1472 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS)
1473 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1475 xline.o: xline.cpp ../include/base.h ../include/xline.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1476 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1478 inspstring.o: inspstring.cpp ../include/base.h ../include/inspstring.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1479 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1481 dns.o: 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
1482 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1484 base.o: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1485 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1487 configreader.o: configreader.cpp ../include/base.h ../include/configreader.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1488 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1490 commands.o: commands.cpp ../include/base.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h $srcobjs
1491 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp $cmdobjs
1493 dynamic.o: dynamic.cpp ../include/base.h ../include/dynamic.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1494 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1496 users.o: 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
1497 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1499 modules.o: 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
1500 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1502 wildcard.o: wildcard.cpp ../include/base.h ../include/wildcard.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1503 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1505 socket.o: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1506 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1508 inspsocket.o: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1509 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1511 timer.o: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1512 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1515 foreach my $cmd (@cmdlist) {
1517 cmd_$cmd.o: 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
1518 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1524 sub write_dynamic_makefile {
1528 opendir(DIRHANDLE, "src");
1529 foreach $name (sort readdir(DIRHANDLE)) {
1530 if ($name =~ /^cmd_(.+)\.cpp$/) {
1531 $cmdlist[$i++] = $1;
1534 closedir(DIRHANDLE);
1538 foreach my $cmd (@cmdlist) {
1539 $cmdobjs = $cmdobjs . "cmd_$cmd.so ";
1540 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1543 $se = "socketengine_select";
1544 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1545 $se = "socketengine_kqueue";
1547 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1548 $se = "socketengine_epoll";
1550 elsif (($has_ports) && ($config{USE_PORTS} eq "y")) {
1551 $se = "socketengine_ports";
1554 open(FH,">src/Makefile") or die("Could not write src/Makefile");
1558 # (C) ChatSpike development team
1559 # Makefile by <Craig\@ChatSpike.net>
1560 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
1563 CC = im a cheezeball
1565 CXXFLAGS = -I../include \${FLAGS}
1566 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1567 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1571 if ($config{IS_DARWIN} eq "YES") {
1573 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 inspircd
1575 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
1576 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd.cpp
1577 \$(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
1579 libIRCDsocketengine.dylib: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1580 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp
1581 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c $se.cpp
1582 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsocketengine.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsocketengine.dylib socketengine.o $se.o
1584 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
1585 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1586 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsnomasks.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsnomasks.dylib snomasks.o
1588 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
1589 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1590 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcommand_parse.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcommand_parse.dylib command_parse.o
1592 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
1593 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1594 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcull_list.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcull_list.dylib cull_list.o
1596 libIRCDuserprocess.dylib: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1597 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1598 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDuserprocess.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDuserprocess.dylib userprocess.o
1600 libIRCDhash.dylib: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1601 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1602 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDhash.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDhash.dylib hashcomp.o
1604 libIRCDhelper.dylib: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1605 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1606 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDhelper.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDhelper.dylib helperfuncs.o
1608 libIRCDchannels.dylib: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1609 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1610 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDchannels.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDchannels.dylib channels.o
1612 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)
1613 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1614 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1615 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDmode.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDmode.dylib mode.o modes/modeclasses.a
1617 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
1618 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1619 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDxline.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDxline.dylib xline.o
1621 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
1622 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1623 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDstring.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDstring.dylib inspstring.o
1625 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
1626 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1627 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDasyncdns.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDasyncdns.dylib dns.o
1629 libIRCDbase.dylib: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1630 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1631 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDbase.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDbase.dylib base.o
1633 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
1634 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1635 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDconfigreader.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDconfigreader.dylib configreader.o
1637 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
1638 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1639 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcommands.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcommands.dylib commands.o
1641 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
1642 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1643 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDdynamic.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDdynamic.dylib dynamic.o
1645 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
1646 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1647 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDusers.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDusers.dylib users.o
1649 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
1650 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1651 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDmodules.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDmodules.dylib modules.o
1653 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
1654 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1655 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDwildcard.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDwildcard.dylib wildcard.o
1657 libIRCDsocket.dylib: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1658 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1659 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsocket.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsocket.dylib socket.o
1661 libIRCDinspsocket.dylib: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1662 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1663 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDinspsocket.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDinspsocket.dylib inspsocket.o
1665 libIRCDtimer.dylib: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1666 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1667 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDtimer.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDtimer.dylib timer.o
1674 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 inspircd
1676 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
1677 \$(CC) -pipe -I../include $extra -Wl,--rpath -Wl,$config{LIBRARY_DIR} \$(FLAGS) -rdynamic -L. inspircd.cpp -o inspircd \$(LDLIBS) libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDconfigreader.so libIRCDinspsocket.so libIRCDcommands.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDhash.so libIRCDsocket.so libIRCDsocketengine.so libIRCDuserprocess.so libIRCDcull_list.so libIRCDcommand_parse.so libIRCDtimer.so libIRCDsnomasks.so
1679 libIRCDsocketengine.so: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1680 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1681 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocketengine.so socketengine.o $se.o
1683 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
1684 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1685 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsnomasks.so snomasks.o
1687 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
1688 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1689 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommand_parse.so command_parse.o
1691 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
1692 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1693 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcull_list.so cull_list.o
1695 libIRCDuserprocess.so: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1696 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1697 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDuserprocess.so userprocess.o
1699 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1700 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1701 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhash.so hashcomp.o
1703 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1704 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1705 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhelper.so helperfuncs.o
1707 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1708 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1709 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDchannels.so channels.o
1711 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)
1712 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1713 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1714 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmode.so mode.o modes/modeclasses.a
1716 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
1717 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1718 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDxline.so xline.o
1720 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
1721 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1722 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDstring.so inspstring.o
1724 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
1725 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1726 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDasyncdns.so dns.o
1728 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1729 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1730 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDbase.so base.o
1732 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
1733 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1734 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDconfigreader.so configreader.o
1736 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
1737 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1738 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommands.so commands.o
1740 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
1741 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1742 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDdynamic.so dynamic.o
1744 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
1745 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1746 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDusers.so users.o
1748 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
1749 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1750 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmodules.so modules.o
1752 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
1753 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1754 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDwildcard.so wildcard.o
1756 libIRCDsocket.so: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1757 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1758 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocket.so socket.o
1760 libIRCDinspsocket.so: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1761 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1762 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDinspsocket.so inspsocket.o
1764 libIRCDtimer.so: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1765 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1766 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDtimer.so timer.o
1770 foreach my $cmd (@cmdlist) {
1772 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
1773 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1774 \$(CC) -pipe $SHARED -o cmd_$cmd.so cmd_$cmd.o