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 ########################################
23 # Utility functions for our buildsystem
27 use make::opensslcert;
30 'enable-gnutls' => \$opt_use_gnutls,
31 'rebuild' => \$opt_rebuild,
32 'enable-openssl' => \$opt_use_openssl,
33 'disable-interactive' => \$opt_nointeractive,
34 'with-nick-length=i' => \$opt_nick_length,
35 'with-channel-length=i' => \$opt_chan_length,
36 'with-max-clients=i' => \$opt_maxclients,
37 'enable-ports' => \$opt_ports,
38 'enable-epoll' => \$opt_epoll,
39 'enable-kqueue' => \$opt_kqueue,
40 'disable-ports' => \$opt_noports,
41 'disable-epoll' => \$opt_noepoll,
42 'disable-kqueue' => \$opt_nokqueue,
43 'enable-ipv6' => \$opt_ipv6,
44 'enable-remote-ipv6' => \$opt_ipv6links,
45 'disable-remote-ipv6' => \$opt_noipv6links,
46 'with-cc=s' => \$opt_cc,
47 'with-ident-length=i' => \$opt_ident,
48 'with-quit-length=i' => \$opt_quit,
49 'with-topic-length=i' => \$opt_topic,
50 'with-kick-length=i' => \$opt_kick,
51 'with-gecos-length=i' => \$opt_gecos,
52 'with-away-length=i' => \$opt_away,
53 'with-max-modes=i' => \$opt_modes,
54 'prefix=s' => \$opt_base_dir,
55 'config-dir=s' => \$opt_config_dir,
56 'module-dir=s' => \$opt_module_dir,
57 'binary-dir=s' => \$opt_binary_dir,
58 'library-dir=s' => \$opt_library_dir,
59 'disable-debuginfo' => sub { $opt_disable_debug = 1 },
60 'help' => sub { showhelp(); },
61 'modupdate' => sub { modupdate(); },
62 'update' => sub { update(); },
63 'svnupdate' => sub { svnupdate(); },
64 'clean' => sub { clean(); },
67 my $non_interactive = (
68 (defined $opt_library_dir) ||
69 (defined $opt_base_dir) ||
70 (defined $opt_config_dir) ||
71 (defined $opt_module_dir) ||
72 (defined $opt_base_dir) ||
73 (defined $opt_binary_dir) ||
74 (defined $opt_nointeractive) ||
75 (defined $opt_away) ||
76 (defined $opt_gecos) ||
77 (defined $opt_kick) ||
78 (defined $opt_maxclients) ||
79 (defined $opt_modes) ||
80 (defined $opt_topic) ||
81 (defined $opt_quit) ||
82 (defined $opt_ident) ||
84 (defined $opt_ipv6) ||
85 (defined $opt_ipv6links) ||
86 (defined $opt_noipv6links) ||
87 (defined $opt_kqueue) ||
88 (defined $opt_epoll) ||
89 (defined $opt_ports) ||
90 (defined $opt_maxchans) ||
91 (defined $opt_opermaxchans) ||
92 (defined $opt_chan_length) ||
93 (defined $opt_nick_length) ||
94 (defined $opt_use_openssl) ||
95 (defined $opt_nokqueue) ||
96 (defined $opt_noepoll) ||
97 (defined $opt_noports) ||
98 (defined $opt_use_gnutls)
100 my $interactive = !$non_interactive;
103 chomp($topdir = getcwd());
104 $this = resolve_directory($topdir); # PWD, Regardless.
105 @modlist = (); # Declare for Module List..
106 %config = (); # Initiate Configuration Hash..
107 $config{ME} = resolve_directory($topdir); # Present Working Directory
109 $config{BASE_DIR} = $config{ME};
111 if (defined $opt_base_dir)
113 $config{BASE_DIR} = $opt_base_dir;
116 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Directory
117 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
118 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
119 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
121 if (defined $opt_config_dir)
123 $config{CONFIG_DIR} = $opt_config_dir;
125 if (defined $opt_module_dir)
127 $config{MODULE_DIR} = $opt_module_dir;
129 if (defined $opt_binary_dir)
131 $config{BINARY_DIR} = $opt_binary_dir;
133 if (defined $opt_library_dir)
135 $config{LIBRARY_DIR} = $opt_library_dir;
137 chomp($config{HAS_GNUTLS} = `libgnutls-config --version 2>/dev/null | cut -c 1,2,3`); # GNUTLS Version.
138 chomp($config{HAS_OPENSSL} = `pkg-config --modversion openssl 2>/dev/null`); # Openssl version
139 chomp($gnutls_ver = $config{HAS_GNUTLS});
140 chomp($openssl_ver = $config{HAS_OPENSSL});
141 $config{USE_GNUTLS} = "n";
142 if (defined $opt_use_gnutls)
144 $config{USE_GNUTLS} = "y"; # Use gnutls.
146 $config{USE_OPENSSL} = "n"; # Use openssl.
147 if (defined $opt_use_openssl)
149 $config{USE_OPENSSL} = "y";
152 # no, let's not change these.
153 $config{OPTIMITEMP} = "0"; # Default Optimisation Value
154 if (!defined $opt_disable_debug)
156 $config{OPTIMISATI} = "-g1"; # Optimisation Flag
160 $config{OPTIMISATI} = "-O2"; # DEBUGGING OFF!
163 $config{NICK_LENGT} = "31"; # Default Nick Length
164 if (defined $opt_nick_length)
166 $config{NICK_LENGT} = $opt_nick_length;
168 $config{CHAN_LENGT} = "64"; # Default Channel Name Length
169 if (defined $opt_chan_length)
171 $config{CHAN_LENGT} = $opt_chan_length;
173 $config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once.
174 if (defined $opt_modes)
176 $config{MAXI_MODES} = $opt_modes;
178 $config{HAS_STRLCPY} = "false"; # strlcpy Check.
179 $config{HAS_STDINT} = "false"; # stdint.h check
180 $config{USE_KQUEUE} = "y"; # kqueue enabled
181 if (defined $opt_kqueue)
183 $config{USE_KQUEUE} = "y";
185 if (defined $opt_nokqueue)
187 $config{USE_KQUEUE} = "n";
189 $config{USE_EPOLL} = "y"; # epoll enabled
190 if (defined $opt_epoll)
192 $config{USE_EPOLL} = "y";
194 if (defined $opt_noepoll)
196 $config{USE_EPOLL} = "n";
198 $config{USE_PORTS} = "y"; # epoll enabled
199 if (defined $opt_ports)
201 $config{USE_PORTS} = "y";
203 if (defined $opt_noports)
205 $config{USE_PORTS} = "n";
207 $config{IPV6} = "n"; # IPv6 support (experimental)
208 if (defined $opt_ipv6)
212 $config{SUPPORT_IP6LINKS} = "y"; # IPv4 supporting IPv6 links (experimental)
213 if (defined $opt_ipv6links)
215 $config{SUPPORT_IP6LINKS} = "y";
217 if (defined $opt_noipv6links)
219 $config{SUPPORT_IP6LINKS} = "n";
221 $config{STATIC_LINK} = "no"; # are doing static modules?
222 chomp($config{MAX_CLIENT_T} = `sh -c \"ulimit -n\"`); # FD Limit
223 chomp($config{MAX_DESCRIPTORS} = `sh -c \"ulimit -n\"`); # Hard FD Limit
224 chomp($config{GCCVER} = `g++ -dumpversion | cut -c 1`); # Major GCC Version
225 $config{_SOMAXCONN} = SOMAXCONN; # Max connections in accept queue
226 $config{OSNAME} = $^O; # Operating System Name
227 $config{IS_DARWIN} = "NO"; # Is OSX?
228 if ($config{OSNAME} =~ /darwin/i)
230 $config{IS_DARWIN} = "YES";
232 $config{CC} = "g++"; # C++ compiler
235 $config{CC} = $opt_cc;
237 $exec = $config{CC} . " -dumpversion | cut -c 1";
238 chomp($config{GCCVER} = `$exec`); # Major GCC Version
239 $config{MAKEORDER} = "ircd mods"; # build order
240 $config{STATICLIBS} = ""; # library archive path
241 $config{MAX_IDENT} = "12"; # max ident size
242 $config{MAX_QUIT} = "255"; # max quit message size
243 $config{MAX_TOPIC} = "307"; # max topic size
244 $config{MAX_KICK} = "255"; # max kick message size
245 $config{MAX_GECOS} = "128"; # max GECOS size
246 $config{MAX_AWAY} = "200"; # max AWAY size
247 if (defined $opt_ident)
249 $config{MAX_IDENT} = $opt_ident;
251 if (defined $opt_quit)
253 $config{MAX_QUIT} = $opt_quit;
255 if (defined $opt_topic)
257 $config{MAX_TOPIC} = $opt_topic;
259 if (defined $opt_kick)
261 $config{MAX_KICK} = $opt_kick;
263 if (defined $opt_gecos)
265 $config{MAX_GECOS} = $opt_gecos;
267 if (defined $opt_away)
269 $config{MAX_AWAY} = $opt_away;
272 $config{HAS_OPENSSL} =~ /^([-[:digit:].]+)([a-z])?(\-[a-z][0-9])?$/;
273 $config{HAS_OPENSSL} = $1;
275 if ($config{GCCVER} eq "") {
276 print $config{CC} . " was not found! You require g++ (the GNU C++ compiler, part of GCC) to build InspIRCd!\n";
280 # Minihack! Convert Cygwin to 'Cyg-Static' so i can
281 # Keep my dynamic module experiments here for later
284 if ($config{OSNAME} =~ /CYGWIN/i)
286 $config{OSNAME} = "CYG-STATIC";
289 if (!$config{MAX_CLIENT_T}) {
290 $config{MAX_CLIENT_T} = 1024; # Set a reasonable 'Default'
291 $fd_scan_fail = "true"; # Used Later
294 # Get and Set some important vars..
299 system("rm -rf .config.cache");
305 chomp($topdir = getcwd());
306 $this = resolve_directory($topdir); # PWD, Regardless.
308 # Does the cache file exist?
310 # No, No it doesn't.. *BASH*
311 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
314 # We've Loaded the cache file and all our variables..
315 print "Updating Files..\n";
317 if ($opt_disable_debug == 1)
319 print "Disabling debug information (-g).\n";
320 $config{OPTIMISATI} = "";
323 $has_epoll = $config{HAS_EPOLL};
324 $has_ports = $config{HAS_PORTS};
325 $has_kqueue = $config{HAS_KQUEUE};
334 print "Configure update failed: $@\n";
342 chomp($topdir = getcwd());
343 $this = resolve_directory($topdir); # PWD, Regardless.
345 # Does the cache file exist?
347 # No, No it doesn't.. *BASH*
348 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
351 # We've Loaded the cache file and all our variables..
352 print "Updating Files..\n";
354 $has_epoll = $config{HAS_EPOLL};
355 $has_ports = $config{HAS_PORTS};
356 $has_kqueue = $config{HAS_KQUEUE};
365 print "Module update failed: $@\n";
375 open(FH,"<.svn/entries") or $fail = 1;
377 print "This is not an SVN copy of InspIRCd.\n";
384 system("svn update");
385 system("perl configure -update");
386 if (defined $opt_rebuild) {
387 system("make install");
392 print "Running non-interactive configure...\n" unless $interactive;
393 print "Checking for cache from previous configure... ";
394 print ((getcache() eq "true") ? "found\n" : "not found\n");
395 print "Checking operating system version... ";
396 print getosflags() . "\n";
398 if (defined $opt_maxclients)
400 $config{MAX_CLIENT} = $opt_maxclients;
403 if (!$config{MAX_CLIENT}) {
404 # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this
405 # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go
406 # higher than the found value" :))
407 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
410 printf "Checking if stdint.h exists... ";
411 $config{HAS_STDINT} = "true";
413 open(STDINT, "</usr/include/stdint.h") or $config{HAS_STDINT} = "false";
414 if ($config{HAS_STDINT} eq "true") {
417 print "yes\n" if $config{HAS_STDINT} eq "true";
418 print "no\n" if $config{HAS_STDINT} eq "false";
421 printf "Checking if strlcpy exists... ";
422 # Perform the strlcpy() test..
423 $config{HAS_STRLCPY} = "false";
425 open(STRLCPY, "</usr/include/string.h") or $fail = 1;
427 while (chomp($line = <STRLCPY>)) {
428 # try and find the delcaration of:
429 # size_t strlcpy(...)
430 if ($line =~ /size_t(\0x9|\s)+strlcpy/) {
431 $config{HAS_STRLCPY} = "true";
436 print "yes\n" if $config{HAS_STRLCPY} eq "true";
437 print "no\n" if $config{HAS_STRLCPY} eq "false";
440 printf "Checking if kqueue exists... ";
443 open(KQUEUE, "</usr/include/sys/event.h") or $fail = 1;
445 while (chomp($line = <KQUEUE>)) {
446 # try and find the delcaration of:
448 if ($line =~ /int(\0x9|\s)+kqueue/) {
454 print "yes\n" if $has_kqueue == 1;
455 print "no\n" if $has_kqueue == 0;
457 printf "Checking if epoll exists... ";
460 open(EPOLL, "</usr/include/sys/epoll.h") or $fail = 1;
466 my $kernel = `uname -r`;
468 if (($kernel =~ /^2\.0\./) || ($kernel =~ /^2\.2\./) || ($kernel =~ /^2\.4\./)) {
472 print "yes\n" if $has_epoll == 1;
473 print "no\n" if $has_epoll == 0;
475 printf "Checking if Solaris I/O completion ports are available... ";
477 my $system = `uname -s`;
479 $has_ports = 1 if ($system eq "SunOS");
482 my $kernel = `uname -r`;
484 if (($kernel !~ /^5\.10/)) {
488 print "yes\n" if $has_ports == 1;
489 print "no\n" if $has_ports == 0;
491 if (($config{OSNAME} =~ /CYGWIN/) || ($config{OSNAME} eq "CYG-STATIC")) {
492 $config{HAS_STRLCPY} = "true";
495 $config{HAS_EPOLL} = $has_epoll;
496 $config{HAS_KQUEUE} = $has_kqueue;
498 printf "Checking for libgnutls... ";
499 if (($config{HAS_GNUTLS}) && (($config{HAS_GNUTLS} >= 1.2) || ($config{HAS_GNUTLS} eq "y"))) {
501 $config{HAS_GNUTLS} = "y";
504 $config{HAS_GNUTLS} = "n";
507 printf "Checking for openssl... ";
508 if (($config{HAS_OPENSSL}) && (($config{HAS_OPENSSL} >= 0.8) || ($config{HAS_OPENSSL} eq "y"))) {
510 $config{HAS_OPENSSL} = "y";
513 $config{HAS_OPENSSL} = "n";
516 ################################################################################
517 # BEGIN INTERACTIVE PART #
518 ################################################################################
526 my $rev = getrevision();
527 # Display Introduction Message..
529 Welcome to the \033[1mInspIRCd\033[0m Configuration program! (\033[1minteractive mode\033[0m)
530 \033[1mPackage maintainers: Type ./configure --help for non-interactive help\033[0m
532 *** If you are unsure of any of these values, leave it blank for ***
533 *** standard settings that will work, and your server will run ***
534 *** using them. Please consult your IRC network admin if in doubt. ***
536 Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter
537 a new value. Please note: You will \033[1mHAVE\033[0m to read the docs
538 dir, otherwise you won't have a config file!
540 Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos)
541 Maximum file descriptors: \033[1;32m$config{MAX_CLIENT_T}\033[0m
542 Your InspIRCd revision ID is \033[1;32mr$rev\033[0m";
544 print " (Non-SVN build)";
548 $config{CHANGE_COMPILER} = "n";
549 print "I have detected the following compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
551 while (($config{GCCVER} < 3) || ($config{GCCVER} eq "")) {
552 print "\033[1;32mIMPORTANT!\033[0m A GCC 2.x compiler has been detected, and
553 should NOT be used. You should probably specify a newer compiler.\n\n";
554 yesno(CHANGE_COMPILER,"Do you want to change the compiler?");
555 if ($config{CHANGE_COMPILER} =~ /y/i) {
556 print "What command do you want to use to invoke your compiler?\n";
557 print "[\033[1;32m$config{CC}\033[0m] -> ";
558 chomp($config{CC} = <STDIN>);
559 if ($config{CC} eq "") {
562 chomp($foo = `$config{CC} -dumpversion | cut -c 1`);
564 chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change compilers
565 print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
566 if ($config{GCCVER} < 3) {
567 print "\033[1;32mGCC 2.x WILL NOT WORK!\033[0m. Let's try that again, shall we?\n";
571 print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n";
578 # Directory Settings..
579 my $tmpbase = $config{BASE_DIR};
580 dir_check("do you wish to install the InspIRCd base", "BASE_DIR");
581 if ($tmpbase ne $config{BASE_DIR}) {
582 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Dir
583 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
584 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
585 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
588 dir_check("are the configuration files", "CONFIG_DIR");
589 dir_check("are the modules to be compiled to", "MODULE_DIR");
590 dir_check("is the IRCd binary to be placed", "BINARY_DIR");
591 dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
594 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?");
598 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?");
602 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?");
605 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y") || ($config{USE_PORTS} eq "y"));
606 if (!$chose_hiperf) {
607 print "No high-performance socket engines are available, or you chose\n";
608 print "not to enable one. Defaulting to select() engine.\n\n";
611 yesno(IPV6,"Would you like to build InspIRCd with IPv6 support?");
614 if ($config{IPV6} eq "y") {
615 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";
616 $config{SUPPORT_IP6LINKS} = "y";
618 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)");
622 if (($config{HAS_GNUTLS} eq "y") && ($config{HAS_OPENSSL} eq "y")) {
623 print "I have detected both \033[1;32mGnuTLS\033[0m and \033[1;32mOpenSSL\033[0m on your system.\n";
624 print "I will default to GnuTLS. If you wish to use OpenSSL\n";
625 print "instead, you should enable the OpenSSL module yourself\n";
626 print "by copying it from src/modules/extra to src/modules.\n\n";
627 print "Detected GnuTLS version: \033[1;32m" . $gnutls_ver . "\033[0m\n";
628 print "Detected OpenSSL version: \033[1;32m" . $openssl_ver . "\033[0m\n\n";
631 if ($config{HAS_GNUTLS} eq "y") {
632 yesno(USE_GNUTLS, "Would you like to enable SSL Support?");
633 if ($config{USE_GNUTLS} eq "y") {
634 print "\nUsing GnuTLS SSL module.\n";
636 } elsif ($config{HAS_OPENSSL} eq "y") {
637 yesno(USE_OPENSSL, "Would you like to enable SSL Support?");
638 if ($config{USE_OPENSSL} eq "y") {
639 print "\nUsing OpenSSL SSL module.\nYou will get better performance if you move to GnuTLS in the future.\n";
643 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";
646 print "\nThe following questions will ask you for various figures relating\n";
647 print "To your IRCd install. Please note that these should usually be left\n";
648 print "as defaults unless you have a real reason to change them. If they\n";
649 print "changed, then the values must be identical on all servers on your\n";
650 print "network, or malfunctions and/or crashes may occur, with the exception\n";
651 print "of the 'maximum number of clients' setting which may be different on\n";
652 print "different servers on the network.\n\n";
654 # File Descriptor Settings..
655 promptnumeric("number of clients at any one time", "MAX_CLIENT_T");
656 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
657 $config{MAX_DESCRIPTORS} = $config{MAX_CLIENT_T};
659 promptnumeric("length of nicknames", "NICK_LENGT");
660 promptnumeric("length of channel names", "CHAN_LENGT");
661 promptnumeric("number of mode changes in one line", "MAXI_MODES");
662 promptnumeric("length of an ident (username)", "MAX_IDENT");
663 promptnumeric("length of a quit message", "MAX_QUIT");
664 promptnumeric("length of a channel topic", "MAX_TOPIC");
665 promptnumeric("length of a kick message", "MAX_KICK");
666 promptnumeric("length of a GECOS (real name)", "MAX_GECOS");
667 promptnumeric("length of an away message", "MAX_AWAY");
672 if (($config{USE_GNUTLS} eq "y") && ($config{HAS_GNUTLS} ne "y"))
674 print "Sorry, but i couldn't detect gnutls. Make sure gnutls-config is in your path.\n";
677 if (($config{USE_OPENSSL} eq "y") && ($config{HAS_OPENSSL} ne "y"))
679 print "Sorry, but i couldn't detect openssl. Make sure openssl is in your path.\n";
683 if ($config{USE_GNUTLS} eq "y") {
685 open(TMP, "<src/modules/m_ssl_gnutls.cpp") or $failed = 1;
688 print "Symlinking src/modules/m_ssl_gnutls.cpp from extra/\n";
689 chdir("src/modules");
690 system("ln -s extra/m_ssl_gnutls.cpp");
697 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
699 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
702 print "SSL Certificates Not found, Generating.. \n\n
703 *************************************************************
704 * Generating the Private Key may take some time, go grab a *
705 * Coffee. Even better, to generate some more entropy if it *
706 * is taking a while, open another console and type du / a *
707 * few times and get that HD going :) Then answer the *
708 * Questions which follow. If you are unsure, just hit enter *
709 *************************************************************\n\n";
711 print "\nCertificate generation complete, copying to config directory... ";
712 system("mv key.pem $config{CONFIG_DIR}/key.pem");
713 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
716 print "SSL Certificates found, skipping.\n\n"
721 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
723 } elsif ($config{USE_OPENSSL} eq "y") {
725 open(TMP, "<src/modules/m_ssl_openssl.cpp") or $failed = 1;
728 print "Symlinking src/modules/m_ssl_openssl.cpp from extra/\n";
729 chdir("src/modules");
730 system("ln -s extra/m_ssl_openssl.cpp");
737 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
739 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
742 print "SSL Certificates Not found, Generating.. \n\n
743 *************************************************************
744 * Generating the certificates may take some time, go grab a *
745 * coffee, or something. *
746 *************************************************************\n\n";
748 print "\nCertificate generation complete, copying to config directory... ";
749 system("mv key.pem $config{CONFIG_DIR}/key.pem");
750 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
751 system("mv dhparams.pem $config{CONFIG_DIR}/dhparams.pem");
754 print "SSL Certificates found, skipping.\n\n"
759 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
762 if (($config{USE_GNUTLS} eq "n") && ($config{USE_OPENSSL} eq "n")) {
763 print "Skipping SSL Certificate generation, SSL support is not available.\n\n";
771 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
772 if (($config{USE_GNUTLS} eq "y") || ($config{USE_OPENSSL} eq "y")) {
773 print "Please remember that to enable \033[1;32mSSL support\033[0m you must\n";
774 print "load the required modules in your config. This configure process\n";
775 print "has just prepared these modules to be compiled for you, and has not\n";
776 print "configured them to be compiled into the core of the ircd.\n";
778 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
779 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
780 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";
783 if ($config{GCCVER} < "3") {
785 \033[1;32mWARNING!\033[0m You are attempting to compile InspIRCd on GCC 2.x!
786 GCC 2.x series compilers only had partial (read as broken) C++ support, and
787 your compile will most likely fail horribly! If you have any problems, do NOT
788 report them to the bugtracker or forums without first upgrading your compiler
789 to a newer 3.x or 4.x (or whatever is available currently) version.
793 ################################################################################
795 ################################################################################
797 # Retrieves the .config.cache file, and loads values into the main config hash.
798 open(CACHE, ".config.cache") or return undef;
801 # Ignore Blank lines, and comments..
804 my ($key, $value) = split("=", $_, 2);
805 $value =~ /^\"(.*)\"$/;
806 # Do something with data here!
814 # Dump the contents of %config
815 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
816 open(FILEHANDLE, ">.config.cache");
817 foreach $key (keys %config) {
818 print FILEHANDLE "$key=\"$config{$key}\"\n";
824 my ($desc, $hash_key) = @_;
827 print "In what directory $desc?\n";
828 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
829 chomp($var = <STDIN>);
831 $var = $config{$hash_key};
833 if ($var =~ /^\~\/(.+)$/) {
834 # Convert it to a full path..
835 $var = resolve_directory($ENV{HOME} . "/" . $1);
837 elsif ((($config{OSNAME} =~ /MINGW32/i) and ($var !~ /^[A-Z]{1}:\\.*/)) and (substr($var,0,1) ne "/"))
839 # Assume relative Path was given.. fill in the rest.
840 $var = $this . "/$var";
843 $var = resolve_directory($var);
845 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
846 chomp($tmp = <STDIN>);
847 if (($tmp eq "") || ($tmp =~ /^y/i)) {
848 # Attempt to Create the Dir..
850 system("mkdir -p \"$var\" >> /dev/null 2>&1");
851 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
853 print "Unable to create directory. ($var)\n\n";
858 # They said they don't want to create, and we can't install there.
864 # Target exists, but is not a directory.
865 print "File $var exists, but is not a directory.\n\n";
869 # Either Dir Exists, or was created fine.
870 $config{$hash_key} = $var;
878 $config{LDLIBS} = "-lstdc++";
879 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}";
880 $config{DEVELOPER} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -g";
881 $SHARED = "-Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared";
882 $config{MAKEPROG} = "make";
884 if ($config{OSNAME} =~ /darwin/i) {
885 $config{FLAGS} = "-DDARWIN -frtti -fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}";
886 $SHARED = "-bundle -twolevel_namespace -undefined dynamic_lookup";
887 $config{LDLIBS} = "-ldl -lstdc++";
890 if ($config{OSNAME} =~ /OpenBSD/i) {
891 $config{MAKEPROG} = "gmake";
892 chomp($foo = `eg++ -dumpversion | cut -c 1`);
893 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
894 # if theyre not running this, configure lets the build continue but they probably wont manage to
895 # compile as this standard version is 2.95.3!
897 $config{CC} = "eg++";
898 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change the compiler path
903 if ($config{OSNAME} =~ /Linux/i) {
904 $config{LDLIBS} = "-ldl -lstdc++";
905 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}";
906 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
907 $config{MAKEPROG} = "make";
908 if ($config{OSNAME} =~ /CYGWIN/) {
909 $config{FLAGS} = "-fno-strict-aliasing -Wall -Woverloaded-virtual $config{OPTIMISATI}";
910 $config{LDLIBS} = "";
911 $config{MAKEPROG} = "/usr/bin/make";
912 $config{MAKEORDER} = "ircd mods";
914 } elsif ($config{OSNAME} eq "CYG-STATIC") {
915 $config{FLAGS} = "-fno-strict-aliasing -Wall -Woverloaded-virtual $config{OPTIMISATI}";
916 $config{LDLIBS} = "";
917 $config{MAKEPROG} = "/usr/bin/make";
918 $config{MAKEORDER} = "mods ircd";
919 $config{STATICLIBS} = "modules/mods.a";
920 $config{STATIC_LINK} = "yes";
921 return "Cygwin-Static";
923 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
926 if ($config{OSNAME} =~ /SunOS/i)
928 # solaris/sunos needs these
929 # socket = bsd sockets api
931 # rt = POSIX realtime extensions
932 # resolv = inet_aton only (why isnt this in nsl?!)
933 $config{MAKEPROG} = "gmake";
934 $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv";
938 if($config{OSNAME} =~ /MINGW32/i)
940 # All code is position-independent on windows
941 $config{FLAGS} =~ s/-fPIC //;
945 return $config{OSNAME};
949 my($writeheader) = @_;
950 # First File.. inspircd_config.h
951 chomp(my $incos = `uname -n -s -r`);
952 chomp($version = `sh src/version.sh`);
953 chomp(my $revision2 = getrevision());
954 if ($writeheader == 1)
956 print "Writing \033[1;32minspircd_config.h\033[0m\n";
957 open(FILEHANDLE, ">include/inspircd_config.h");
958 my $NL = $config{NICK_LENGT}+1;
959 my $CL = $config{CHAN_LENGT}+1;
960 print FILEHANDLE <<EOF;
961 /* Auto generated by configure, do not modify! */
962 #ifndef __CONFIGURATION_AUTO__
963 #define __CONFIGURATION_AUTO__
965 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
966 #define MOD_PATH "$config{MODULE_DIR}"
967 #define VERSION "$version"
968 #define REVISION "$revision2"
969 #define MAXCLIENTS $config{MAX_CLIENT}
970 #define MAXCLIENTS_S "$config{MAX_CLIENT}"
971 #define SOMAXCONN_S "$config{_SOMAXCONN}"
972 #define MAX_DESCRIPTORS $config{MAX_DESCRIPTORS}
975 #define MAXMODES $config{MAXI_MODES}
976 #define IDENTMAX $config{MAX_IDENT}
977 #define MAXQUIT $config{MAX_QUIT}
978 #define MAXTOPIC $config{MAX_TOPIC}
979 #define MAXKICK $config{MAX_KICK}
980 #define MAXGECOS $config{MAX_GECOS}
981 #define MAXAWAY $config{MAX_AWAY}
982 #define OPTIMISATION $config{OPTIMITEMP}
983 #define LIBRARYDIR "$config{LIBRARY_DIR}"
984 #define SYSTEM "$incos"
987 if ($config{OSNAME} =~ /SunOS/i) {
988 print FILEHANDLE "#define IS_SOLARIS\n";
990 if ($config{OSNAME} =~ /CYGWIN/i) {
991 print FILEHANDLE "#define IS_CYGWIN\n";
992 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
994 if ($config{OSNAME} =~ /MINGW32/i) {
995 print FILEHANDLE "#define IS_MINGW\n";
997 if ($config{OSNAME} =~ /CYG-STATIC/i) {
998 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
1000 if ($config{STATIC_LINK} eq "yes") {
1001 print FILEHANDLE "#define STATIC_LINK\n";
1003 if ($config{GCCVER} >= 3) {
1004 print FILEHANDLE "#define GCC3\n";
1006 if ($config{HAS_STRLCPY} eq "true") {
1007 print FILEHANDLE "#define HAS_STRLCPY\n";
1009 if ($config{HAS_STDINT} eq "true") {
1010 print FILEHANDLE "#define HAS_STDINT\n";
1012 if ($config{IPV6} =~ /y/i) {
1013 print FILEHANDLE "#define IPV6\n";
1015 if ($config{SUPPORT_IP6LINKS} =~ /y/i) {
1016 print FILEHANDLE "#define SUPPORT_IP6LINKS\n";
1019 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1020 print FILEHANDLE "#define USE_KQUEUE\n";
1021 $se = "socketengine_kqueue";
1024 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1025 print FILEHANDLE "#define USE_EPOLL\n";
1026 $se = "socketengine_epoll";
1029 if (($has_ports) && ($config{USE_PORTS} eq "y")) {
1030 print FILEHANDLE "#define USE_PORTS\n";
1031 $se = "socketengine_ports";
1034 # user didn't choose either epoll or select for their OS.
1035 # default them to USE_SELECT (ewwy puke puke)
1037 print FILEHANDLE "#define USE_SELECT\n";
1038 $se = "socketengine_select";
1040 print FILEHANDLE "\n#endif\n";
1046 open(FILEHANDLE, ">include/inspircd_se_config.h");
1047 print FILEHANDLE <<EOF;
1048 /* Auto generated by configure, do not modify or commit to svn! */
1049 #ifndef __CONFIGURATION_SOCKETENGINE__
1050 #define __CONFIGURATION_SOCKETENGINE__
1060 # Create a Modules List..
1062 foreach $i (@modlist)
1064 if ($config{STATIC_LINK} eq "yes") {
1065 $modules .= "m_".$i.".o ";
1068 $modules .= "m_".$i.".so ";
1071 chomp($modules); # Remove Redundant whitespace..
1073 opendir(DIRHANDLE, "src/modules");
1074 foreach $name (sort readdir(DIRHANDLE)) {
1075 if ($name =~ /^m_(.+?)$/) {
1076 if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
1077 closedir(MDIRHANDLE);
1078 $modules .= "$name.so ";
1082 closedir(DIRHANDLE);
1085 # Write all .in files.
1088 my $exe = "inspircd";
1090 if ($config{OSNAME} =~ /CYGWIN/i) {
1091 $exe = "inspircd.exe";
1094 opendir(DIRHANDLE, $this);
1096 # Do this once here, and cache it in the .*.inc files,
1097 # rather than attempting to read src/version.sh from
1098 # compiled code -- we might not have the source to hand.
1099 # Fix for bug#177 by Brain.
1101 chomp(my $version = `sh ./src/version.sh`);
1102 chomp(my $revision = getrevision());
1103 $version = "$version(r$revision)";
1106 if ($config{IS_DARWIN} eq "YES")
1110 # We can actually parse any file starting with . and ending with .inc,
1111 # but right now we only parse .inspircd.inc to form './inspircd'
1113 foreach $name (sort readdir(DIRHANDLE)) {
1114 if ($name =~ /^\.(.+)\.inc$/) {
1116 # All .name.inc files need parsing!
1118 open(FILEHANDLE, ".$file.inc");
1119 while (<FILEHANDLE>) {
1124 $tmp =~ s/\@CC\@/$config{CC}/;
1125 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
1126 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
1127 $tmp =~ s/\@DEVELOPER\@/$config{DEVELOPER}/;
1128 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
1129 $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/;
1130 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
1131 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
1132 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
1133 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
1134 $tmp =~ s/\@LIBRARY_EXT\@/$LIBEXT/;
1135 $tmp =~ s/\@MODULES\@/$modules/;
1136 $tmp =~ s/\@EXECUTABLE\@/$exe/;
1137 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
1138 $tmp =~ s/\@STATICLIBS\@/$config{STATICLIBS}/;
1139 $tmp =~ s/\@VERSION\@/$version/;
1141 print "Writing \033[1;32m$file\033[0m\n";
1142 open(FILEHANDLE, ">$file");
1143 print FILEHANDLE $tmp;
1146 closedir(DIRHANDLE);
1148 # Make inspircd executable!
1149 chmod 0744, 'inspircd';
1151 if ($config{STATIC_LINK} eq "yes") {
1152 print "Writing static-build \033[1;32msrc/Makefile\033[0m\n";
1153 write_static_makefile();
1154 write_static_modules_makefile();
1155 } elsif ($config{OSNAME} =~ /CYGWIN/i) {
1156 print "Writing cygwin-build \033[1;32msrc/Makefile\033[0m\n";
1157 write_static_makefile();
1158 write_dynamic_modules_makefile();
1160 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
1161 write_dynamic_makefile();
1162 write_dynamic_modules_makefile();
1166 sub write_static_modules_makefile {
1167 # Modules Makefile..
1168 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1169 open(FILEHANDLE, ">src/modules/Makefile");
1172 # Module Makefile Header
1174 print FILEHANDLE <<EOF;
1175 # (C) ChatSpike development team
1176 # Makefile by <Craig\@ChatSpike.net>
1177 # Many Thanks to Andrew Church <achurch\@achurch.org>
1178 # for assisting with making this work right.
1180 # Automatically Generated by ./configure to add a modules
1181 # please run ./configure --update
1187 # End Module Makefile Header
1190 # Create a Modules List..
1195 open(MODLIST,">include/modlist.h");
1198 # Include File Header
1200 print MODLIST <<HEADER;
1201 // Generated automatically by configure. DO NOT EDIT!
1203 #ifndef __SYMBOLS__H_CONFIGURED__
1204 #define __SYMBOLS__H_CONFIGURED__
1208 # End Include File Header
1211 # Place Module List into Include
1212 foreach $i (@modlist) {
1213 if ($i !~ /_static$/) {
1214 print MODLIST "extern \"C\" void * $i\_init (void);\n";
1217 print MODLIST "\nstruct {const char *name; initfunc *value; } modsyms[] = {\n";
1222 foreach $i (@modlist)
1224 if ($i !~ /_static$/) {
1225 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1226 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1227 $deps = getdependencies("src/modules/m_".$i.".cpp");
1229 #print "file: $i: cmflags=$cmflags; liflags=$liflags; deps=$deps\n";
1232 # Write Entry to the Makefile
1234 print FILEHANDLE <<EOCHEESE;
1235 m_$i.o: .m_$i\_static.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h $deps
1236 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c .m_$i\_static.cpp
1237 mv .m_$i\_static.o ../m_$i.o
1241 # End Write Entry to the MakeFile
1243 print "Configuring module [\033[1;32mm_$i.so\033[0m] for static linking... ";
1244 open(MODULE,"<src/modules/m_".$i.".cpp") or die("Could not open m_".$i.".cpp");
1245 open(MUNGED,">src/modules/.m_".$i."_static.cpp") or die("Could not create .m_".$i."_static.cpp");
1246 while (chomp($a = <MODULE>)) {
1247 $a =~ s/init_module/$i\_init/g;
1248 print MUNGED "$a\n";
1252 print MODLIST <<EOENT;
1253 {"m_$i.so",\&$i\_init},
1259 print MODLIST "{0}};\n\n#endif\n";
1263 sub write_dynamic_modules_makefile {
1264 # Modules Makefile..
1265 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1266 open(FILEHANDLE, ">src/modules/Makefile");
1269 if ($config{OSNAME} =~ /CYGWIN/i) {
1270 $extra = "../inspircd.dll.a";
1274 # Module Makefile Header
1276 print FILEHANDLE <<EOF;
1277 # (C) ChatSpike development team
1278 # Makefile by <Craig\@ChatSpike.net>
1279 # Many Thanks to Andrew Church <achurch\@achurch.org>
1280 # for assisting with making this work right.
1282 # Automatically Generated by ./configure to add a modules
1283 # please run ./configure -update or ./configure -modupdate
1289 # End Module Makefile Header
1292 # Create a Modules List..
1298 foreach $i (@modlist) {
1300 # Write Entry to the MakeFile
1302 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1303 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1304 $deps = getdependencies("src/modules/m_".$i.".cpp");
1306 #print "file: $i: cmflags=$cmflags; liflags=$liflags; deps=$deps\n";
1308 print FILEHANDLE <<EOCHEESE;
1309 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
1310 \$(CC) -pipe -I../../include \$(FLAGS) $cmflags -export-dynamic -c m_$i.cpp
1313 if ($config{OSNAME} =~ /darwin/) {
1314 print FILEHANDLE <<EOCHEESE;
1315 \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle $liflags -o m_$i.so m_$i.o $extra
1319 print FILEHANDLE <<EOCHEESE;
1320 \$(CC) -pipe \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o $extra
1324 $crud = $crud . " install -m \$(INSTMODE) m_$i.so \$(MODPATH)\n";
1326 # End Write Entry to the MakeFile
1330 opendir(DIRHANDLE, "src/modules");
1331 foreach $name (sort readdir(DIRHANDLE)) {
1332 if ($name =~ /^m_(.+?)$/) {
1335 # A module made of multiple files, in a dir, e.g. src/modules/m_spanningtree/
1336 if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
1337 print "Composing Makefile rules for directory \033[1;32m$name\033[0m... ";
1339 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";
1340 foreach $fname (sort readdir(MDIRHANDLE)) {
1341 if ($fname =~ /\.cpp$/) {
1342 $cmflags = getcompilerflags("src/modules/$name/$fname");
1343 $liflags = getlinkerflags("src/modules/$name/$fname");
1344 $deps = getdependencies("src/modules/$name/$fname");
1346 $oname =~ s/\.cpp$/.o/g;
1347 print FILEHANDLE " $name/$oname";
1348 $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";
1349 $crapola = $crapola . " \$(CC) -pipe -I../../include -I. \$(FLAGS) $cmflags -export-dynamic -o $name/$oname -c $name/$fname\n\n";
1350 $crap3 = $crap3 . " $name/$oname";
1354 print "(\033[1;32m$i files found\033[0m)\n";
1355 if ($config{IS_DARWIN} eq "YES") {
1356 print FILEHANDLE "\n \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle -o $name.so $crap3\n";
1358 print FILEHANDLE "\n \$(CC) -pipe \$(FLAGS) -shared $liflags -o $name.so $crap3\n";
1360 print FILEHANDLE "\n$crapola\n";
1361 closedir(MDIRHANDLE);
1362 $crud = $crud . " install -m \$(INSTMODE) $name.so \$(MODPATH)\n";
1366 closedir(DIRHANDLE);
1368 print FILEHANDLE "modinst:\n \@echo \"Installing modules...\"\n" . $crud;
1372 sub write_static_makefile {
1373 open(FH,">src/Makefile") or die("Could not write src/Makefile!");
1376 opendir(DIRHANDLE, "src");
1377 foreach $name (sort readdir(DIRHANDLE)) {
1378 if ($name =~ /^cmd_(.+)\.cpp$/) {
1379 $cmdlist[$i++] = $1;
1382 closedir(DIRHANDLE);
1385 foreach my $cmd (@cmdlist) {
1386 $cmdobjs = $cmdobjs . "cmd_$cmd.o ";
1387 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1392 # (C) ChatSpike development team
1393 # Makefile by <Craig\@ChatSpike.net>
1394 # Makefile version 2 (statically linked core) by <brain\@inspircd.org>
1397 CC = im a cheezeball
1399 CXXFLAGS = -I../include \${FLAGS}
1400 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1401 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1405 $se = "socketengine_select";
1406 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1407 $se = "socketengine_kqueue";
1409 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1410 $se = "socketengine_epoll";
1412 elsif (($has_ports) && ($config{USE_PORTS} eq "y")) {
1413 $se = "socketengine_ports";
1417 # This next section is for cygwin dynamic module builds.
1418 # Basically, what we do, is build the inspircd core as a library
1419 # then the main executable uses that. the library is capable of
1420 # loading / unloading the modules dynamically :)
1421 # Massive thanks to the guys on #cygwin @ irc.freenode.net for helping
1425 if ($config{OSNAME} =~ /CYGWIN/i) {
1427 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
1429 inspircd.exe: inspircd.dll.a
1432 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
1433 \$(CC) -shared -Wl,--out-implib=inspircd.dll.a -o inspircd.dll \$^
1437 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
1439 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
1440 \$(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)
1446 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
1447 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1449 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
1450 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1452 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
1453 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1455 userprocess.o: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1456 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1458 socketengine.o: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1459 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1461 hashcomp.o: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1462 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1464 helperfuncs.o: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1465 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1467 channels.o: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1468 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1470 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
1471 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS)
1472 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1474 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
1475 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1477 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
1478 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1480 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
1481 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1483 base.o: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1484 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1486 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
1487 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1489 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
1490 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp $cmdobjs
1492 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
1493 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1495 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
1496 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1498 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
1499 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1501 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
1502 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1504 socket.o: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1505 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1507 inspsocket.o: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1508 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1510 timer.o: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1511 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1514 foreach my $cmd (@cmdlist) {
1516 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
1517 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1523 sub write_dynamic_makefile {
1527 opendir(DIRHANDLE, "src");
1528 foreach $name (sort readdir(DIRHANDLE)) {
1529 if ($name =~ /^cmd_(.+)\.cpp$/) {
1530 $cmdlist[$i++] = $1;
1533 closedir(DIRHANDLE);
1537 foreach my $cmd (@cmdlist) {
1538 $cmdobjs = $cmdobjs . "cmd_$cmd.so ";
1539 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1542 $se = "socketengine_select";
1543 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1544 $se = "socketengine_kqueue";
1546 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1547 $se = "socketengine_epoll";
1549 elsif (($has_ports) && ($config{USE_PORTS} eq "y")) {
1550 $se = "socketengine_ports";
1553 open(FH,">src/Makefile") or die("Could not write src/Makefile");
1557 # (C) ChatSpike development team
1558 # Makefile by <Craig\@ChatSpike.net>
1559 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
1562 CC = im a cheezeball
1564 CXXFLAGS = -I../include \${FLAGS}
1565 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1566 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1570 if ($config{IS_DARWIN} eq "YES") {
1572 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
1574 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
1575 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd.cpp
1576 \$(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
1578 libIRCDsocketengine.dylib: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1579 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp
1580 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c $se.cpp
1581 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsocketengine.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsocketengine.dylib socketengine.o $se.o
1583 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
1584 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1585 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsnomasks.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsnomasks.dylib snomasks.o
1587 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
1588 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1589 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcommand_parse.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcommand_parse.dylib command_parse.o
1591 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
1592 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1593 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcull_list.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcull_list.dylib cull_list.o
1595 libIRCDuserprocess.dylib: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1596 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1597 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDuserprocess.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDuserprocess.dylib userprocess.o
1599 libIRCDhash.dylib: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1600 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1601 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDhash.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDhash.dylib hashcomp.o
1603 libIRCDhelper.dylib: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1604 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1605 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDhelper.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDhelper.dylib helperfuncs.o
1607 libIRCDchannels.dylib: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1608 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1609 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDchannels.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDchannels.dylib channels.o
1611 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)
1612 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1613 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1614 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDmode.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDmode.dylib mode.o modes/modeclasses.a
1616 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
1617 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1618 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDxline.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDxline.dylib xline.o
1620 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
1621 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1622 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDstring.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDstring.dylib inspstring.o
1624 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
1625 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1626 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDasyncdns.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDasyncdns.dylib dns.o
1628 libIRCDbase.dylib: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1629 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1630 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDbase.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDbase.dylib base.o
1632 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
1633 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1634 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDconfigreader.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDconfigreader.dylib configreader.o
1636 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
1637 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1638 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcommands.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcommands.dylib commands.o
1640 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
1641 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1642 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDdynamic.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDdynamic.dylib dynamic.o
1644 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
1645 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1646 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDusers.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDusers.dylib users.o
1648 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
1649 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1650 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDmodules.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDmodules.dylib modules.o
1652 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
1653 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1654 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDwildcard.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDwildcard.dylib wildcard.o
1656 libIRCDsocket.dylib: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1657 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1658 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsocket.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsocket.dylib socket.o
1660 libIRCDinspsocket.dylib: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1661 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1662 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDinspsocket.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDinspsocket.dylib inspsocket.o
1664 libIRCDtimer.dylib: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1665 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1666 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDtimer.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDtimer.dylib timer.o
1673 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
1675 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
1676 \$(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
1678 libIRCDsocketengine.so: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1679 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1680 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocketengine.so socketengine.o $se.o
1682 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
1683 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1684 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsnomasks.so snomasks.o
1686 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
1687 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1688 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommand_parse.so command_parse.o
1690 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
1691 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1692 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcull_list.so cull_list.o
1694 libIRCDuserprocess.so: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1695 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1696 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDuserprocess.so userprocess.o
1698 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1699 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1700 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhash.so hashcomp.o
1702 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1703 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1704 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhelper.so helperfuncs.o
1706 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1707 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1708 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDchannels.so channels.o
1710 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)
1711 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1712 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1713 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmode.so mode.o modes/modeclasses.a
1715 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
1716 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1717 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDxline.so xline.o
1719 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
1720 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1721 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDstring.so inspstring.o
1723 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
1724 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1725 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDasyncdns.so dns.o
1727 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1728 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1729 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDbase.so base.o
1731 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
1732 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1733 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDconfigreader.so configreader.o
1735 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
1736 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1737 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommands.so commands.o
1739 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
1740 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1741 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDdynamic.so dynamic.o
1743 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
1744 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1745 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDusers.so users.o
1747 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
1748 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1749 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmodules.so modules.o
1751 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
1752 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1753 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDwildcard.so wildcard.o
1755 libIRCDsocket.so: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1756 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1757 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocket.so socket.o
1759 libIRCDinspsocket.so: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1760 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1761 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDinspsocket.so inspsocket.o
1763 libIRCDtimer.so: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1764 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1765 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDtimer.so timer.o
1769 foreach my $cmd (@cmdlist) {
1771 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
1772 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1773 \$(CC) -pipe $SHARED -o cmd_$cmd.so cmd_$cmd.o