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-maxbuf=i' => \$opt_maxbuf,
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_maxbuf) ||
100 (defined $opt_use_gnutls)
102 my $interactive = !$non_interactive;
105 chomp($topdir = getcwd());
106 $this = resolve_directory($topdir); # PWD, Regardless.
107 @modlist = (); # Declare for Module List..
108 %config = (); # Initiate Configuration Hash..
109 $config{ME} = resolve_directory($topdir); # Present Working Directory
111 $config{BASE_DIR} = $config{ME};
113 if (defined $opt_base_dir)
115 $config{BASE_DIR} = $opt_base_dir;
118 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Directory
119 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
120 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
121 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
123 if (defined $opt_config_dir)
125 $config{CONFIG_DIR} = $opt_config_dir;
127 if (defined $opt_module_dir)
129 $config{MODULE_DIR} = $opt_module_dir;
131 if (defined $opt_binary_dir)
133 $config{BINARY_DIR} = $opt_binary_dir;
135 if (defined $opt_library_dir)
137 $config{LIBRARY_DIR} = $opt_library_dir;
139 chomp($config{HAS_GNUTLS} = `libgnutls-config --version 2>/dev/null | cut -c 1,2,3`); # GNUTLS Version.
140 chomp($config{HAS_OPENSSL} = `pkg-config --modversion openssl 2>/dev/null`); # Openssl version
141 chomp($gnutls_ver = $config{HAS_GNUTLS});
142 chomp($openssl_ver = $config{HAS_OPENSSL});
143 $config{USE_GNUTLS} = "n";
144 if (defined $opt_use_gnutls)
146 $config{USE_GNUTLS} = "y"; # Use gnutls.
148 $config{USE_OPENSSL} = "n"; # Use openssl.
149 if (defined $opt_use_openssl)
151 $config{USE_OPENSSL} = "y";
154 # no, let's not change these.
155 $config{OPTIMITEMP} = "0"; # Default Optimisation Value
156 if (!defined $opt_disable_debug)
158 $config{OPTIMISATI} = "-g1"; # Optimisation Flag
162 $config{OPTIMISATI} = "-O2"; # DEBUGGING OFF!
165 $config{NICK_LENGT} = "31"; # Default Nick Length
166 if (defined $opt_nick_length)
168 $config{NICK_LENGT} = $opt_nick_length;
170 $config{CHAN_LENGT} = "64"; # Default Channel Name Length
171 if (defined $opt_chan_length)
173 $config{CHAN_LENGT} = $opt_chan_length;
175 $config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once.
176 if (defined $opt_modes)
178 $config{MAXI_MODES} = $opt_modes;
180 $config{HAS_STRLCPY} = "false"; # strlcpy Check.
181 $config{HAS_STDINT} = "false"; # stdint.h check
182 $config{USE_KQUEUE} = "y"; # kqueue enabled
183 if (defined $opt_kqueue)
185 $config{USE_KQUEUE} = "y";
187 if (defined $opt_nokqueue)
189 $config{USE_KQUEUE} = "n";
191 $config{USE_EPOLL} = "y"; # epoll enabled
192 if (defined $opt_epoll)
194 $config{USE_EPOLL} = "y";
196 if (defined $opt_noepoll)
198 $config{USE_EPOLL} = "n";
200 $config{USE_PORTS} = "y"; # epoll enabled
201 if (defined $opt_ports)
203 $config{USE_PORTS} = "y";
205 if (defined $opt_noports)
207 $config{USE_PORTS} = "n";
209 $config{IPV6} = "n"; # IPv6 support (experimental)
210 if (defined $opt_ipv6)
214 $config{SUPPORT_IP6LINKS} = "y"; # IPv4 supporting IPv6 links (experimental)
215 if (defined $opt_ipv6links)
217 $config{SUPPORT_IP6LINKS} = "y";
219 if (defined $opt_noipv6links)
221 $config{SUPPORT_IP6LINKS} = "n";
223 $config{STATIC_LINK} = "no"; # are doing static modules?
224 chomp($config{MAX_CLIENT_T} = `sh -c \"ulimit -n\"`); # FD Limit
225 chomp($config{MAX_DESCRIPTORS} = `sh -c \"ulimit -n\"`); # Hard FD Limit
226 chomp($config{GCCVER} = `g++ -dumpversion | cut -c 1`); # Major GCC Version
227 $config{_SOMAXCONN} = SOMAXCONN; # Max connections in accept queue
228 $config{OSNAME} = $^O; # Operating System Name
229 $config{IS_DARWIN} = "NO"; # Is OSX?
230 if ($config{OSNAME} =~ /darwin/i)
232 $config{IS_DARWIN} = "YES";
234 $config{CC} = "g++"; # C++ compiler
237 $config{CC} = $opt_cc;
239 $exec = $config{CC} . " -dumpversion | cut -c 1";
240 chomp($config{GCCVER} = `$exec`); # Major GCC Version
241 $config{MAKEORDER} = "ircd mods"; # build order
242 $config{STATICLIBS} = ""; # library archive path
243 $config{MAX_IDENT} = "12"; # max ident size
244 $config{MAX_QUIT} = "255"; # max quit message size
245 $config{MAX_TOPIC} = "307"; # max topic size
246 $config{MAX_KICK} = "255"; # max kick message size
247 $config{MAX_GECOS} = "128"; # max GECOS size
248 $config{MAX_AWAY} = "200"; # max AWAY size
249 $config{MAXBUF} = "512"; # Max buffer size
250 if (defined $opt_ident)
252 $config{MAX_IDENT} = $opt_ident;
254 if (defined $opt_quit)
256 $config{MAX_QUIT} = $opt_quit;
258 if (defined $opt_topic)
260 $config{MAX_TOPIC} = $opt_topic;
262 if (defined $opt_kick)
264 $config{MAX_KICK} = $opt_kick;
266 if (defined $opt_gecos)
268 $config{MAX_GECOS} = $opt_gecos;
270 if (defined $opt_away)
272 $config{MAX_AWAY} = $opt_away;
275 $config{HAS_OPENSSL} =~ /^([-[:digit:].]+)([a-z])?(\-[a-z][0-9])?$/;
276 $config{HAS_OPENSSL} = $1;
278 if ($config{GCCVER} eq "") {
279 print $config{CC} . " was not found! You require g++ (the GNU C++ compiler, part of GCC) to build InspIRCd!\n";
283 # Minihack! Convert Cygwin to 'Cyg-Static' so i can
284 # Keep my dynamic module experiments here for later
287 if ($config{OSNAME} =~ /CYGWIN/i)
289 $config{OSNAME} = "CYG-STATIC";
292 if (!$config{MAX_CLIENT_T}) {
293 $config{MAX_CLIENT_T} = 1024; # Set a reasonable 'Default'
294 $fd_scan_fail = "true"; # Used Later
297 # Get and Set some important vars..
302 system("rm -rf .config.cache");
308 chomp($topdir = getcwd());
309 $this = resolve_directory($topdir); # PWD, Regardless.
311 # Does the cache file exist?
313 # No, No it doesn't.. *BASH*
314 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
317 # We've Loaded the cache file and all our variables..
318 print "Updating Files..\n";
320 if ($opt_disable_debug == 1)
322 print "Disabling debug information (-g).\n";
323 $config{OPTIMISATI} = "";
326 $has_epoll = $config{HAS_EPOLL};
327 $has_ports = $config{HAS_PORTS};
328 $has_kqueue = $config{HAS_KQUEUE};
337 print "Configure update failed: $@\n";
345 chomp($topdir = getcwd());
346 $this = resolve_directory($topdir); # PWD, Regardless.
348 # Does the cache file exist?
350 # No, No it doesn't.. *BASH*
351 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
354 # We've Loaded the cache file and all our variables..
355 print "Updating Files..\n";
357 $has_epoll = $config{HAS_EPOLL};
358 $has_ports = $config{HAS_PORTS};
359 $has_kqueue = $config{HAS_KQUEUE};
368 print "Module update failed: $@\n";
378 open(FH,"<.svn/entries") or $fail = 1;
380 print "This is not an SVN copy of InspIRCd.\n";
387 system("svn update");
388 system("perl configure -update");
389 if (defined $opt_rebuild) {
390 system("make install");
395 print "Running non-interactive configure...\n" unless $interactive;
396 print "Checking for cache from previous configure... ";
397 print ((getcache() eq "true") ? "found\n" : "not found\n");
398 print "Checking operating system version... ";
399 print getosflags() . "\n";
401 if (defined $opt_maxclients)
403 $config{MAX_CLIENT} = $opt_maxclients;
406 if (!$config{MAX_CLIENT}) {
407 # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this
408 # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go
409 # higher than the found value" :))
410 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
413 printf "Checking if stdint.h exists... ";
414 $config{HAS_STDINT} = "true";
416 open(STDINT, "</usr/include/stdint.h") or $config{HAS_STDINT} = "false";
417 if ($config{HAS_STDINT} eq "true") {
420 print "yes\n" if $config{HAS_STDINT} eq "true";
421 print "no\n" if $config{HAS_STDINT} eq "false";
424 printf "Checking if strlcpy exists... ";
425 # Perform the strlcpy() test..
426 $config{HAS_STRLCPY} = "false";
428 open(STRLCPY, "</usr/include/string.h") or $fail = 1;
430 while (chomp($line = <STRLCPY>)) {
431 # try and find the delcaration of:
432 # size_t strlcpy(...)
433 if ($line =~ /size_t(\0x9|\s)+strlcpy/) {
434 $config{HAS_STRLCPY} = "true";
439 print "yes\n" if $config{HAS_STRLCPY} eq "true";
440 print "no\n" if $config{HAS_STRLCPY} eq "false";
443 printf "Checking if kqueue exists... ";
446 open(KQUEUE, "</usr/include/sys/event.h") or $fail = 1;
448 while (chomp($line = <KQUEUE>)) {
449 # try and find the delcaration of:
451 if ($line =~ /int(\0x9|\s)+kqueue/) {
457 print "yes\n" if $has_kqueue == 1;
458 print "no\n" if $has_kqueue == 0;
460 printf "Checking if epoll exists... ";
463 open(EPOLL, "</usr/include/sys/epoll.h") or $fail = 1;
469 my $kernel = `uname -r`;
471 if (($kernel =~ /^2\.0\./) || ($kernel =~ /^2\.2\./) || ($kernel =~ /^2\.4\./)) {
475 print "yes\n" if $has_epoll == 1;
476 print "no\n" if $has_epoll == 0;
478 printf "Checking if Solaris I/O completion ports are available... ";
480 my $system = `uname -s`;
482 $has_ports = 1 if ($system eq "SunOS");
485 my $kernel = `uname -r`;
487 if (($kernel !~ /^5\.10/)) {
491 print "yes\n" if $has_ports == 1;
492 print "no\n" if $has_ports == 0;
494 if (($config{OSNAME} =~ /CYGWIN/) || ($config{OSNAME} eq "CYG-STATIC")) {
495 $config{HAS_STRLCPY} = "true";
498 $config{HAS_EPOLL} = $has_epoll;
499 $config{HAS_KQUEUE} = $has_kqueue;
501 printf "Checking for libgnutls... ";
502 if (($config{HAS_GNUTLS}) && (($config{HAS_GNUTLS} >= 1.2) || ($config{HAS_GNUTLS} eq "y"))) {
504 $config{HAS_GNUTLS} = "y";
507 $config{HAS_GNUTLS} = "n";
510 printf "Checking for openssl... ";
511 if (($config{HAS_OPENSSL}) && (($config{HAS_OPENSSL} >= 0.8) || ($config{HAS_OPENSSL} eq "y"))) {
513 $config{HAS_OPENSSL} = "y";
516 $config{HAS_OPENSSL} = "n";
519 ################################################################################
520 # BEGIN INTERACTIVE PART #
521 ################################################################################
529 my $rev = getrevision();
530 # Display Introduction Message..
532 Welcome to the \033[1mInspIRCd\033[0m Configuration program! (\033[1minteractive mode\033[0m)
533 \033[1mPackage maintainers: Type ./configure --help for non-interactive help\033[0m
535 *** If you are unsure of any of these values, leave it blank for ***
536 *** standard settings that will work, and your server will run ***
537 *** using them. Please consult your IRC network admin if in doubt. ***
539 Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter
540 a new value. Please note: You will \033[1mHAVE\033[0m to read the docs
541 dir, otherwise you won't have a config file!
543 Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos)
544 Maximum file descriptors: \033[1;32m$config{MAX_CLIENT_T}\033[0m
545 Your InspIRCd revision ID is \033[1;32mr$rev\033[0m";
547 print " (Non-SVN build)";
551 $config{CHANGE_COMPILER} = "n";
552 print "I have detected the following compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
554 while (($config{GCCVER} < 3) || ($config{GCCVER} eq "")) {
555 print "\033[1;32mIMPORTANT!\033[0m A GCC 2.x compiler has been detected, and
556 should NOT be used. You should probably specify a newer compiler.\n\n";
557 yesno(CHANGE_COMPILER,"Do you want to change the compiler?");
558 if ($config{CHANGE_COMPILER} =~ /y/i) {
559 print "What command do you want to use to invoke your compiler?\n";
560 print "[\033[1;32m$config{CC}\033[0m] -> ";
561 chomp($config{CC} = <STDIN>);
562 if ($config{CC} eq "") {
565 chomp($foo = `$config{CC} -dumpversion | cut -c 1`);
567 chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change compilers
568 print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
569 if ($config{GCCVER} < 3) {
570 print "\033[1;32mGCC 2.x WILL NOT WORK!\033[0m. Let's try that again, shall we?\n";
574 print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n";
581 # Directory Settings..
582 my $tmpbase = $config{BASE_DIR};
583 dir_check("do you wish to install the InspIRCd base", "BASE_DIR");
584 if ($tmpbase ne $config{BASE_DIR}) {
585 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Dir
586 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
587 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
588 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
591 dir_check("are the configuration files", "CONFIG_DIR");
592 dir_check("are the modules to be compiled to", "MODULE_DIR");
593 dir_check("is the IRCd binary to be placed", "BINARY_DIR");
594 dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
597 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?");
601 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?");
605 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?");
608 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y") || ($config{USE_PORTS} eq "y"));
609 if (!$chose_hiperf) {
610 print "No high-performance socket engines are available, or you chose\n";
611 print "not to enable one. Defaulting to select() engine.\n\n";
614 yesno(IPV6,"Would you like to build InspIRCd with IPv6 support?");
617 if ($config{IPV6} eq "y") {
618 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";
619 $config{SUPPORT_IP6LINKS} = "y";
621 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)");
625 if (($config{HAS_GNUTLS} eq "y") && ($config{HAS_OPENSSL} eq "y")) {
626 print "I have detected both \033[1;32mGnuTLS\033[0m and \033[1;32mOpenSSL\033[0m on your system.\n";
627 print "I will default to GnuTLS. If you wish to use OpenSSL\n";
628 print "instead, you should enable the OpenSSL module yourself\n";
629 print "by copying it from src/modules/extra to src/modules.\n\n";
630 print "Detected GnuTLS version: \033[1;32m" . $gnutls_ver . "\033[0m\n";
631 print "Detected OpenSSL version: \033[1;32m" . $openssl_ver . "\033[0m\n\n";
634 if ($config{HAS_GNUTLS} eq "y") {
635 yesno(USE_GNUTLS, "Would you like to enable SSL Support?");
636 if ($config{USE_GNUTLS} eq "y") {
637 print "\nUsing GnuTLS SSL module.\n";
639 } elsif ($config{HAS_OPENSSL} eq "y") {
640 yesno(USE_OPENSSL, "Would you like to enable SSL Support?");
641 if ($config{USE_OPENSSL} eq "y") {
642 print "\nUsing OpenSSL SSL module.\nYou will get better performance if you move to GnuTLS in the future.\n";
646 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";
649 print "\nThe following questions will ask you for various figures relating\n";
650 print "To your IRCd install. Please note that these should usually be left\n";
651 print "as defaults unless you have a real reason to change them. If they\n";
652 print "changed, then the values must be identical on all servers on your\n";
653 print "network, or malfunctions and/or crashes may occur, with the exception\n";
654 print "of the 'maximum number of clients' setting which may be different on\n";
655 print "different servers on the network.\n\n";
657 # File Descriptor Settings..
658 promptnumeric("number of clients at any one time", "MAX_CLIENT_T");
659 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
660 $config{MAX_DESCRIPTORS} = $config{MAX_CLIENT_T};
662 promptnumeric("length of nicknames", "NICK_LENGT");
663 promptnumeric("length of channel names", "CHAN_LENGT");
664 promptnumeric("number of mode changes in one line", "MAXI_MODES");
665 promptnumeric("length of an ident (username)", "MAX_IDENT");
666 promptnumeric("length of a quit message", "MAX_QUIT");
667 promptnumeric("length of a channel topic", "MAX_TOPIC");
668 promptnumeric("length of a kick message", "MAX_KICK");
669 promptnumeric("length of a GECOS (real name)", "MAX_GECOS");
670 promptnumeric("length of an away message", "MAX_AWAY");
675 if (($config{USE_GNUTLS} eq "y") && ($config{HAS_GNUTLS} ne "y"))
677 print "Sorry, but i couldn't detect gnutls. Make sure gnutls-config is in your path.\n";
680 if (($config{USE_OPENSSL} eq "y") && ($config{HAS_OPENSSL} ne "y"))
682 print "Sorry, but i couldn't detect openssl. Make sure openssl is in your path.\n";
686 if ($config{USE_GNUTLS} eq "y") {
688 open(TMP, "<src/modules/m_ssl_gnutls.cpp") or $failed = 1;
691 print "Symlinking src/modules/m_ssl_gnutls.cpp from extra/\n";
692 chdir("src/modules");
693 system("ln -s extra/m_ssl_gnutls.cpp");
700 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
702 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
705 print "SSL Certificates Not found, Generating.. \n\n
706 *************************************************************
707 * Generating the Private Key may take some time, go grab a *
708 * Coffee. Even better, to generate some more entropy if it *
709 * is taking a while, open another console and type du / a *
710 * few times and get that HD going :) Then answer the *
711 * Questions which follow. If you are unsure, just hit enter *
712 *************************************************************\n\n";
714 print "\nCertificate generation complete, copying to config directory... ";
715 system("mv key.pem $config{CONFIG_DIR}/key.pem");
716 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
719 print "SSL Certificates found, skipping.\n\n"
724 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
726 } elsif ($config{USE_OPENSSL} eq "y") {
728 open(TMP, "<src/modules/m_ssl_openssl.cpp") or $failed = 1;
731 print "Symlinking src/modules/m_ssl_openssl.cpp from extra/\n";
732 chdir("src/modules");
733 system("ln -s extra/m_ssl_openssl.cpp");
740 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
742 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
745 print "SSL Certificates Not found, Generating.. \n\n
746 *************************************************************
747 * Generating the certificates may take some time, go grab a *
748 * coffee, or something. *
749 *************************************************************\n\n";
751 print "\nCertificate generation complete, copying to config directory... ";
752 system("mv key.pem $config{CONFIG_DIR}/key.pem");
753 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
754 system("mv dhparams.pem $config{CONFIG_DIR}/dhparams.pem");
757 print "SSL Certificates found, skipping.\n\n"
762 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
765 if (($config{USE_GNUTLS} eq "n") && ($config{USE_OPENSSL} eq "n")) {
766 print "Skipping SSL Certificate generation, SSL support is not available.\n\n";
774 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
775 if (($config{USE_GNUTLS} eq "y") || ($config{USE_OPENSSL} eq "y")) {
776 print "Please remember that to enable \033[1;32mSSL support\033[0m you must\n";
777 print "load the required modules in your config. This configure process\n";
778 print "has just prepared these modules to be compiled for you, and has not\n";
779 print "configured them to be compiled into the core of the ircd.\n";
781 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
782 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
783 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";
786 if ($config{GCCVER} < "3") {
788 \033[1;32mWARNING!\033[0m You are attempting to compile InspIRCd on GCC 2.x!
789 GCC 2.x series compilers only had partial (read as broken) C++ support, and
790 your compile will most likely fail horribly! If you have any problems, do NOT
791 report them to the bugtracker or forums without first upgrading your compiler
792 to a newer 3.x or 4.x (or whatever is available currently) version.
796 ################################################################################
798 ################################################################################
800 # Retrieves the .config.cache file, and loads values into the main config hash.
801 open(CACHE, ".config.cache") or return undef;
804 # Ignore Blank lines, and comments..
807 my ($key, $value) = split("=", $_, 2);
808 $value =~ /^\"(.*)\"$/;
809 # Do something with data here!
817 # Dump the contents of %config
818 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
819 open(FILEHANDLE, ">.config.cache");
820 foreach $key (keys %config) {
821 print FILEHANDLE "$key=\"$config{$key}\"\n";
827 my ($desc, $hash_key) = @_;
830 print "In what directory $desc?\n";
831 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
832 chomp($var = <STDIN>);
834 $var = $config{$hash_key};
836 if ($var =~ /^\~\/(.+)$/) {
837 # Convert it to a full path..
838 $var = resolve_directory($ENV{HOME} . "/" . $1);
840 elsif ((($config{OSNAME} =~ /MINGW32/i) and ($var !~ /^[A-Z]{1}:\\.*/)) and (substr($var,0,1) ne "/"))
842 # Assume relative Path was given.. fill in the rest.
843 $var = $this . "/$var";
846 $var = resolve_directory($var);
848 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
849 chomp($tmp = <STDIN>);
850 if (($tmp eq "") || ($tmp =~ /^y/i)) {
851 # Attempt to Create the Dir..
853 system("mkdir -p \"$var\" >> /dev/null 2>&1");
854 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
856 print "Unable to create directory. ($var)\n\n";
861 # They said they don't want to create, and we can't install there.
867 # Target exists, but is not a directory.
868 print "File $var exists, but is not a directory.\n\n";
872 # Either Dir Exists, or was created fine.
873 $config{$hash_key} = $var;
881 $config{LDLIBS} = "-lstdc++";
882 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}";
883 $config{DEVELOPER} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -g";
884 $SHARED = "-Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared";
885 $config{MAKEPROG} = "make";
887 if ($config{OSNAME} =~ /darwin/i) {
888 $config{FLAGS} = "-DDARWIN -frtti -fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}";
889 $SHARED = "-bundle -twolevel_namespace -undefined dynamic_lookup";
890 $config{LDLIBS} = "-ldl -lstdc++";
893 if ($config{OSNAME} =~ /OpenBSD/i) {
894 $config{MAKEPROG} = "gmake";
895 chomp($foo = `eg++ -dumpversion | cut -c 1`);
896 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
897 # if theyre not running this, configure lets the build continue but they probably wont manage to
898 # compile as this standard version is 2.95.3!
900 $config{CC} = "eg++";
901 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change the compiler path
906 if ($config{OSNAME} =~ /Linux/i) {
907 $config{LDLIBS} = "-ldl -lstdc++";
908 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}";
909 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
910 $config{MAKEPROG} = "make";
911 if ($config{OSNAME} =~ /CYGWIN/) {
912 $config{FLAGS} = "-fno-strict-aliasing -Wall -Woverloaded-virtual $config{OPTIMISATI}";
913 $config{LDLIBS} = "";
914 $config{MAKEPROG} = "/usr/bin/make";
915 $config{MAKEORDER} = "ircd mods";
917 } elsif ($config{OSNAME} eq "CYG-STATIC") {
918 $config{FLAGS} = "-fno-strict-aliasing -Wall -Woverloaded-virtual $config{OPTIMISATI}";
919 $config{LDLIBS} = "";
920 $config{MAKEPROG} = "/usr/bin/make";
921 $config{MAKEORDER} = "mods ircd";
922 $config{STATICLIBS} = "modules/mods.a";
923 $config{STATIC_LINK} = "yes";
924 return "Cygwin-Static";
926 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
929 if ($config{OSNAME} =~ /SunOS/i)
931 # solaris/sunos needs these
932 # socket = bsd sockets api
934 # rt = POSIX realtime extensions
935 # resolv = inet_aton only (why isnt this in nsl?!)
936 $config{MAKEPROG} = "gmake";
937 $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv";
941 if($config{OSNAME} =~ /MINGW32/i)
943 # All code is position-independent on windows
944 $config{FLAGS} =~ s/-fPIC //;
948 return $config{OSNAME};
952 my($writeheader) = @_;
953 # First File.. inspircd_config.h
954 chomp(my $incos = `uname -n -s -r`);
955 chomp($version = `sh src/version.sh`);
956 chomp(my $revision2 = getrevision());
957 if ($writeheader == 1)
959 print "Writing \033[1;32minspircd_config.h\033[0m\n";
960 open(FILEHANDLE, ">include/inspircd_config.h");
961 my $NL = $config{NICK_LENGT}+1;
962 my $CL = $config{CHAN_LENGT}+1;
963 print FILEHANDLE <<EOF;
964 /* Auto generated by configure, do not modify! */
965 #ifndef __CONFIGURATION_AUTO__
966 #define __CONFIGURATION_AUTO__
968 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
969 #define MOD_PATH "$config{MODULE_DIR}"
970 #define VERSION "$version"
971 #define REVISION "$revision2"
972 #define MAXCLIENTS $config{MAX_CLIENT}
973 #define MAXCLIENTS_S "$config{MAX_CLIENT}"
974 #define SOMAXCONN_S "$config{_SOMAXCONN}"
975 #define MAX_DESCRIPTORS $config{MAX_DESCRIPTORS}
978 #define MAXMODES $config{MAXI_MODES}
979 #define IDENTMAX $config{MAX_IDENT}
980 #define MAXQUIT $config{MAX_QUIT}
981 #define MAXTOPIC $config{MAX_TOPIC}
982 #define MAXKICK $config{MAX_KICK}
983 #define MAXGECOS $config{MAX_GECOS}
984 #define MAXAWAY $config{MAX_AWAY}
985 #define OPTIMISATION $config{OPTIMITEMP}
986 #define LIBRARYDIR "$config{LIBRARY_DIR}"
987 #define SYSTEM "$incos"
989 print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n";
991 if ($config{OSNAME} =~ /SunOS/i) {
992 print FILEHANDLE "#define IS_SOLARIS\n";
994 if ($config{OSNAME} =~ /CYGWIN/i) {
995 print FILEHANDLE "#define IS_CYGWIN\n";
996 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
998 if ($config{OSNAME} =~ /MINGW32/i) {
999 print FILEHANDLE "#define IS_MINGW\n";
1001 if ($config{OSNAME} =~ /CYG-STATIC/i) {
1002 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
1004 if ($config{STATIC_LINK} eq "yes") {
1005 print FILEHANDLE "#define STATIC_LINK\n";
1007 if ($config{GCCVER} >= 3) {
1008 print FILEHANDLE "#define GCC3\n";
1010 if ($config{HAS_STRLCPY} eq "true") {
1011 print FILEHANDLE "#define HAS_STRLCPY\n";
1013 if ($config{HAS_STDINT} eq "true") {
1014 print FILEHANDLE "#define HAS_STDINT\n";
1016 if ($config{IPV6} =~ /y/i) {
1017 print FILEHANDLE "#define IPV6\n";
1019 if ($config{SUPPORT_IP6LINKS} =~ /y/i) {
1020 print FILEHANDLE "#define SUPPORT_IP6LINKS\n";
1023 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1024 print FILEHANDLE "#define USE_KQUEUE\n";
1025 $se = "socketengine_kqueue";
1028 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1029 print FILEHANDLE "#define USE_EPOLL\n";
1030 $se = "socketengine_epoll";
1033 if (($has_ports) && ($config{USE_PORTS} eq "y")) {
1034 print FILEHANDLE "#define USE_PORTS\n";
1035 $se = "socketengine_ports";
1038 # user didn't choose either epoll or select for their OS.
1039 # default them to USE_SELECT (ewwy puke puke)
1041 print FILEHANDLE "#define USE_SELECT\n";
1042 $se = "socketengine_select";
1044 print FILEHANDLE "\n#endif\n";
1050 open(FILEHANDLE, ">include/inspircd_se_config.h");
1051 print FILEHANDLE <<EOF;
1052 /* Auto generated by configure, do not modify or commit to svn! */
1053 #ifndef __CONFIGURATION_SOCKETENGINE__
1054 #define __CONFIGURATION_SOCKETENGINE__
1064 # Create a Modules List..
1066 foreach $i (@modlist)
1068 if ($config{STATIC_LINK} eq "yes") {
1069 $modules .= "m_".$i.".o ";
1072 $modules .= "m_".$i.".so ";
1075 chomp($modules); # Remove Redundant whitespace..
1077 opendir(DIRHANDLE, "src/modules");
1078 foreach $name (sort readdir(DIRHANDLE)) {
1079 if ($name =~ /^m_(.+?)$/) {
1080 if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
1081 closedir(MDIRHANDLE);
1082 $modules .= "$name.so ";
1086 closedir(DIRHANDLE);
1089 # Write all .in files.
1092 my $exe = "inspircd";
1094 if ($config{OSNAME} =~ /CYGWIN/i) {
1095 $exe = "inspircd.exe";
1098 opendir(DIRHANDLE, $this);
1100 # Do this once here, and cache it in the .*.inc files,
1101 # rather than attempting to read src/version.sh from
1102 # compiled code -- we might not have the source to hand.
1103 # Fix for bug#177 by Brain.
1105 chomp(my $version = `sh ./src/version.sh`);
1106 chomp(my $revision = getrevision());
1107 $version = "$version(r$revision)";
1110 if ($config{IS_DARWIN} eq "YES")
1114 # We can actually parse any file starting with . and ending with .inc,
1115 # but right now we only parse .inspircd.inc to form './inspircd'
1117 foreach $name (sort readdir(DIRHANDLE)) {
1118 if ($name =~ /^\.(.+)\.inc$/) {
1120 # All .name.inc files need parsing!
1122 open(FILEHANDLE, ".$file.inc");
1123 while (<FILEHANDLE>) {
1128 $tmp =~ s/\@CC\@/$config{CC}/;
1129 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
1130 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
1131 $tmp =~ s/\@DEVELOPER\@/$config{DEVELOPER}/;
1132 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
1133 $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/;
1134 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
1135 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
1136 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
1137 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
1138 $tmp =~ s/\@LIBRARY_EXT\@/$LIBEXT/;
1139 $tmp =~ s/\@MODULES\@/$modules/;
1140 $tmp =~ s/\@EXECUTABLE\@/$exe/;
1141 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
1142 $tmp =~ s/\@STATICLIBS\@/$config{STATICLIBS}/;
1143 $tmp =~ s/\@VERSION\@/$version/;
1145 print "Writing \033[1;32m$file\033[0m\n";
1146 open(FILEHANDLE, ">$file");
1147 print FILEHANDLE $tmp;
1150 closedir(DIRHANDLE);
1152 # Make inspircd executable!
1153 chmod 0744, 'inspircd';
1155 if ($config{STATIC_LINK} eq "yes") {
1156 print "Writing static-build \033[1;32msrc/Makefile\033[0m\n";
1157 write_static_makefile();
1158 write_static_modules_makefile();
1159 } elsif ($config{OSNAME} =~ /CYGWIN/i) {
1160 print "Writing cygwin-build \033[1;32msrc/Makefile\033[0m\n";
1161 write_static_makefile();
1162 write_dynamic_modules_makefile();
1164 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
1165 write_dynamic_makefile();
1166 write_dynamic_modules_makefile();
1170 sub write_static_modules_makefile {
1171 # Modules Makefile..
1172 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1173 open(FILEHANDLE, ">src/modules/Makefile");
1176 # Module Makefile Header
1178 print FILEHANDLE <<EOF;
1179 # (C) ChatSpike development team
1180 # Makefile by <Craig\@ChatSpike.net>
1181 # Many Thanks to Andrew Church <achurch\@achurch.org>
1182 # for assisting with making this work right.
1184 # Automatically Generated by ./configure to add a modules
1185 # please run ./configure --update
1191 # End Module Makefile Header
1194 # Create a Modules List..
1199 open(MODLIST,">include/modlist.h");
1202 # Include File Header
1204 print MODLIST <<HEADER;
1205 // Generated automatically by configure. DO NOT EDIT!
1207 #ifndef __SYMBOLS__H_CONFIGURED__
1208 #define __SYMBOLS__H_CONFIGURED__
1212 # End Include File Header
1215 # Place Module List into Include
1216 foreach $i (@modlist) {
1217 if ($i !~ /_static$/) {
1218 print MODLIST "extern \"C\" void * $i\_init (void);\n";
1221 print MODLIST "\nstruct {const char *name; initfunc *value; } modsyms[] = {\n";
1226 foreach $i (@modlist)
1228 if ($i !~ /_static$/) {
1229 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1230 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1231 $deps = getdependencies("src/modules/m_".$i.".cpp");
1233 #print "file: $i: cmflags=$cmflags; liflags=$liflags; deps=$deps\n";
1236 # Write Entry to the Makefile
1238 print FILEHANDLE <<EOCHEESE;
1239 m_$i.o: .m_$i\_static.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h $deps
1240 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c .m_$i\_static.cpp
1241 mv .m_$i\_static.o ../m_$i.o
1245 # End Write Entry to the MakeFile
1247 print "Configuring module [\033[1;32mm_$i.so\033[0m] for static linking... ";
1248 open(MODULE,"<src/modules/m_".$i.".cpp") or die("Could not open m_".$i.".cpp");
1249 open(MUNGED,">src/modules/.m_".$i."_static.cpp") or die("Could not create .m_".$i."_static.cpp");
1250 while (chomp($a = <MODULE>)) {
1251 $a =~ s/init_module/$i\_init/g;
1252 print MUNGED "$a\n";
1256 print MODLIST <<EOENT;
1257 {"m_$i.so",\&$i\_init},
1263 print MODLIST "{0}};\n\n#endif\n";
1267 sub write_dynamic_modules_makefile {
1268 # Modules Makefile..
1269 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1270 open(FILEHANDLE, ">src/modules/Makefile");
1273 if ($config{OSNAME} =~ /CYGWIN/i) {
1274 $extra = "../inspircd.dll.a";
1278 # Module Makefile Header
1280 print FILEHANDLE <<EOF;
1281 # (C) ChatSpike development team
1282 # Makefile by <Craig\@ChatSpike.net>
1283 # Many Thanks to Andrew Church <achurch\@achurch.org>
1284 # for assisting with making this work right.
1286 # Automatically Generated by ./configure to add a modules
1287 # please run ./configure -update or ./configure -modupdate
1293 # End Module Makefile Header
1296 # Create a Modules List..
1302 foreach $i (@modlist) {
1304 # Write Entry to the MakeFile
1306 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1307 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1308 $deps = getdependencies("src/modules/m_".$i.".cpp");
1310 #print "file: $i: cmflags=$cmflags; liflags=$liflags; deps=$deps\n";
1312 print FILEHANDLE <<EOCHEESE;
1313 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
1314 \$(CC) -pipe -I../../include \$(FLAGS) $cmflags -export-dynamic -c m_$i.cpp
1317 if ($config{OSNAME} =~ /darwin/) {
1318 print FILEHANDLE <<EOCHEESE;
1319 \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle $liflags -o m_$i.so m_$i.o $extra
1323 print FILEHANDLE <<EOCHEESE;
1324 \$(CC) -pipe \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o $extra
1328 $crud = $crud . " install -m \$(INSTMODE) m_$i.so \$(MODPATH)\n";
1330 # End Write Entry to the MakeFile
1334 opendir(DIRHANDLE, "src/modules");
1335 foreach $name (sort readdir(DIRHANDLE)) {
1336 if ($name =~ /^m_(.+?)$/) {
1339 # A module made of multiple files, in a dir, e.g. src/modules/m_spanningtree/
1340 if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
1341 print "Composing Makefile rules for directory \033[1;32m$name\033[0m... ";
1343 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";
1344 foreach $fname (sort readdir(MDIRHANDLE)) {
1345 if ($fname =~ /\.cpp$/) {
1346 $cmflags = getcompilerflags("src/modules/$name/$fname");
1347 $liflags = getlinkerflags("src/modules/$name/$fname");
1348 $deps = getdependencies("src/modules/$name/$fname");
1350 $oname =~ s/\.cpp$/.o/g;
1351 print FILEHANDLE " $name/$oname";
1352 $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";
1353 $crapola = $crapola . " \$(CC) -pipe -I../../include -I. \$(FLAGS) $cmflags -export-dynamic -o $name/$oname -c $name/$fname\n\n";
1354 $crap3 = $crap3 . " $name/$oname";
1358 print "(\033[1;32m$i files found\033[0m)\n";
1359 if ($config{IS_DARWIN} eq "YES") {
1360 print FILEHANDLE "\n \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle -o $name.so $crap3\n";
1362 print FILEHANDLE "\n \$(CC) -pipe \$(FLAGS) -shared $liflags -o $name.so $crap3\n";
1364 print FILEHANDLE "\n$crapola\n";
1365 closedir(MDIRHANDLE);
1366 $crud = $crud . " install -m \$(INSTMODE) $name.so \$(MODPATH)\n";
1370 closedir(DIRHANDLE);
1372 print FILEHANDLE "modinst:\n \@echo \"Installing modules...\"\n" . $crud;
1376 sub write_static_makefile {
1377 open(FH,">src/Makefile") or die("Could not write src/Makefile!");
1380 opendir(DIRHANDLE, "src");
1381 foreach $name (sort readdir(DIRHANDLE)) {
1382 if ($name =~ /^cmd_(.+)\.cpp$/) {
1383 $cmdlist[$i++] = $1;
1386 closedir(DIRHANDLE);
1389 foreach my $cmd (@cmdlist) {
1390 $cmdobjs = $cmdobjs . "cmd_$cmd.o ";
1391 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1396 # (C) ChatSpike development team
1397 # Makefile by <Craig\@ChatSpike.net>
1398 # Makefile version 2 (statically linked core) by <brain\@inspircd.org>
1401 CC = im a cheezeball
1403 CXXFLAGS = -I../include \${FLAGS}
1404 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1405 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1409 $se = "socketengine_select";
1410 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1411 $se = "socketengine_kqueue";
1413 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1414 $se = "socketengine_epoll";
1416 elsif (($has_ports) && ($config{USE_PORTS} eq "y")) {
1417 $se = "socketengine_ports";
1421 # This next section is for cygwin dynamic module builds.
1422 # Basically, what we do, is build the inspircd core as a library
1423 # then the main executable uses that. the library is capable of
1424 # loading / unloading the modules dynamically :)
1425 # Massive thanks to the guys on #cygwin @ irc.freenode.net for helping
1429 if ($config{OSNAME} =~ /CYGWIN/i) {
1431 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
1433 inspircd.exe: inspircd.dll.a
1436 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
1437 \$(CC) -shared -Wl,--out-implib=inspircd.dll.a -o inspircd.dll \$^
1441 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
1443 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
1444 \$(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)
1450 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
1451 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1453 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
1454 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1456 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
1457 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1459 userprocess.o: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1460 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1462 socketengine.o: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1463 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1465 hashcomp.o: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1466 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1468 helperfuncs.o: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1469 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1471 channels.o: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1472 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1474 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
1475 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS)
1476 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1478 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
1479 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1481 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
1482 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1484 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
1485 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1487 base.o: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1488 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1490 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
1491 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1493 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
1494 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp $cmdobjs
1496 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
1497 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1499 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
1500 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1502 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
1503 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1505 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
1506 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1508 socket.o: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1509 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1511 inspsocket.o: inspsocket.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 inspsocket.cpp
1514 timer.o: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1515 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1518 foreach my $cmd (@cmdlist) {
1520 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
1521 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1527 sub write_dynamic_makefile {
1531 opendir(DIRHANDLE, "src");
1532 foreach $name (sort readdir(DIRHANDLE)) {
1533 if ($name =~ /^cmd_(.+)\.cpp$/) {
1534 $cmdlist[$i++] = $1;
1537 closedir(DIRHANDLE);
1541 foreach my $cmd (@cmdlist) {
1542 $cmdobjs = $cmdobjs . "cmd_$cmd.so ";
1543 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1546 $se = "socketengine_select";
1547 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1548 $se = "socketengine_kqueue";
1550 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1551 $se = "socketengine_epoll";
1553 elsif (($has_ports) && ($config{USE_PORTS} eq "y")) {
1554 $se = "socketengine_ports";
1557 open(FH,">src/Makefile") or die("Could not write src/Makefile");
1561 # (C) ChatSpike development team
1562 # Makefile by <Craig\@ChatSpike.net>
1563 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
1566 CC = im a cheezeball
1568 CXXFLAGS = -I../include \${FLAGS}
1569 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1570 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1574 if ($config{IS_DARWIN} eq "YES") {
1576 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
1578 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
1579 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd.cpp
1580 \$(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
1582 libIRCDsocketengine.dylib: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1583 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp
1584 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c $se.cpp
1585 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsocketengine.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsocketengine.dylib socketengine.o $se.o
1587 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
1588 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1589 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsnomasks.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsnomasks.dylib snomasks.o
1591 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
1592 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1593 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcommand_parse.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcommand_parse.dylib command_parse.o
1595 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
1596 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1597 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcull_list.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcull_list.dylib cull_list.o
1599 libIRCDuserprocess.dylib: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1600 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1601 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDuserprocess.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDuserprocess.dylib userprocess.o
1603 libIRCDhash.dylib: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1604 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1605 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDhash.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDhash.dylib hashcomp.o
1607 libIRCDhelper.dylib: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1608 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1609 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDhelper.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDhelper.dylib helperfuncs.o
1611 libIRCDchannels.dylib: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1612 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1613 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDchannels.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDchannels.dylib channels.o
1615 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)
1616 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1617 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1618 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDmode.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDmode.dylib mode.o modes/modeclasses.a
1620 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
1621 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1622 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDxline.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDxline.dylib xline.o
1624 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
1625 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1626 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDstring.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDstring.dylib inspstring.o
1628 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
1629 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1630 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDasyncdns.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDasyncdns.dylib dns.o
1632 libIRCDbase.dylib: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1633 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1634 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDbase.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDbase.dylib base.o
1636 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
1637 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1638 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDconfigreader.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDconfigreader.dylib configreader.o
1640 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
1641 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1642 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDcommands.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDcommands.dylib commands.o
1644 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
1645 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1646 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDdynamic.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDdynamic.dylib dynamic.o
1648 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
1649 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1650 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDusers.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDusers.dylib users.o
1652 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
1653 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1654 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDmodules.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDmodules.dylib modules.o
1656 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
1657 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1658 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDwildcard.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDwildcard.dylib wildcard.o
1660 libIRCDsocket.dylib: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1661 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1662 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDsocket.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDsocket.dylib socket.o
1664 libIRCDinspsocket.dylib: inspsocket.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 inspsocket.cpp
1666 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDinspsocket.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDinspsocket.dylib inspsocket.o
1668 libIRCDtimer.dylib: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1669 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1670 \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDtimer.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDtimer.dylib timer.o
1677 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
1679 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
1680 \$(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
1682 libIRCDsocketengine.so: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1683 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1684 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocketengine.so socketengine.o $se.o
1686 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
1687 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1688 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsnomasks.so snomasks.o
1690 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
1691 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1692 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommand_parse.so command_parse.o
1694 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
1695 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1696 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcull_list.so cull_list.o
1698 libIRCDuserprocess.so: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1699 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1700 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDuserprocess.so userprocess.o
1702 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1703 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1704 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhash.so hashcomp.o
1706 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1707 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1708 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhelper.so helperfuncs.o
1710 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1711 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1712 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDchannels.so channels.o
1714 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)
1715 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1716 \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1717 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmode.so mode.o modes/modeclasses.a
1719 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
1720 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1721 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDxline.so xline.o
1723 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
1724 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1725 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDstring.so inspstring.o
1727 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
1728 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1729 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDasyncdns.so dns.o
1731 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1732 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1733 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDbase.so base.o
1735 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
1736 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1737 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDconfigreader.so configreader.o
1739 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
1740 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1741 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommands.so commands.o
1743 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
1744 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1745 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDdynamic.so dynamic.o
1747 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
1748 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1749 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDusers.so users.o
1751 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
1752 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1753 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmodules.so modules.o
1755 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
1756 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1757 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDwildcard.so wildcard.o
1759 libIRCDsocket.so: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1760 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1761 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocket.so socket.o
1763 libIRCDinspsocket.so: inspsocket.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 inspsocket.cpp
1765 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDinspsocket.so inspsocket.o
1767 libIRCDtimer.so: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/timer.h
1768 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1769 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDtimer.so timer.o
1773 foreach my $cmd (@cmdlist) {
1775 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
1776 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1777 \$(CC) -pipe $SHARED -o cmd_$cmd.so cmd_$cmd.o