3 # InspIRCd Configuration Script
5 # Copyright 2002-2006 The ChatSpike Development Team
6 # <brain@chatspike.net>
7 # <Craig@chatspike.net>
9 # [14:21] Brain: <matrix impression> i know perl-fu!
13 ########################################
21 'enable-gnutls' => \$opt_use_gnutls,
22 'enable-openssl' => \$opt_use_openssl,
23 'disable-interactive' => \$opt_nointeractive,
24 'with-nick-length=i' => \$opt_nick_length,
25 'with-channel-length=i' => \$opt_chan_length,
26 'with-max-channels=i' => \$opt_maxchans,
27 'with-max-oper-channels=i' => \$opt_opermaxchans,
28 'with-max-clients' => \$opt_maxclients,
29 'enable-epoll' => \$opt_epoll,
30 'enable-kqueue' => \$opt_kqueue,
31 'disable-epoll' => \$opt_noepoll,
32 'disable-kqueue' => \$opt_nokqueue,
33 'enable-ipv6' => \$opt_ipv6,
34 'enable-remote-ipv6' => \$opt_ipv6links,
35 'disable-remote-ipv6' => \$opt_noipv6links,
36 'with-cc=s' => \$opt_cc,
37 'with-ident-length=i' => \$opt_ident,
38 'with-quit-length=i' => \$opt_quit,
39 'with-topic-length=i' => \$opt_topic,
40 'with-kick-length=i' => \$opt_kick,
41 'with-gecos-length=i' => \$opt_gecos,
42 'with-away-length=i' => \$opt_away,
43 'with-max-modes=i' => \$opt_modes,
44 'prefix=s' => \$opt_base_dir,
45 'config-dir=s' => \$opt_config_dir,
46 'module-dir=s' => \$opt_module_dir,
47 'binary-dir=s' => \$opt_binary_dir,
48 'library-dir=s' => \$opt_library_dir,
49 'disable-debuginfo' => sub { $opt_disable_debug = 1 },
50 'help' => sub { showhelp(); },
51 'modupdate' => sub { modupdate(); },
52 'update' => sub { update(); },
53 'svnupdate' => sub { svnupdate(); },
54 'clean' => sub { clean(); },
57 my $non_interactive = (
58 (defined $opt_library_dir) ||
59 (defined $opt_base_dir) ||
60 (defined $opt_config_dir) ||
61 (defined $opt_module_dir) ||
62 (defined $opt_base_dir) ||
63 (defined $opt_binary_dir) ||
64 (defined $opt_nointeractive) ||
65 (defined $opt_away) ||
66 (defined $opt_gecos) ||
67 (defined $opt_kick) ||
68 (defined $opt_maxclients) ||
69 (defined $opt_modes) ||
70 (defined $opt_topic) ||
71 (defined $opt_quit) ||
72 (defined $opt_ident) ||
74 (defined $opt_ipv6) ||
75 (defined $opt_ipv6links) ||
76 (defined $opt_noipv6links) ||
77 (defined $opt_kqueue) ||
78 (defined $opt_epoll) ||
79 (defined $opt_maxchans) ||
80 (defined $opt_opermaxchans) ||
81 (defined $opt_chan_length) ||
82 (defined $opt_nick_length) ||
83 (defined $opt_use_openssl) ||
84 (defined $opt_nokqueue) ||
85 (defined $opt_noepoll) ||
86 (defined $opt_use_gnutls)
88 my $interactive = !$non_interactive;
91 chomp($topdir = getcwd());
92 $this = resolve_directory($topdir); # PWD, Regardless.
93 @modlist = (); # Declare for Module List..
94 %config = (); # Initiate Configuration Hash..
95 $config{ME} = resolve_directory($topdir); # Present Working Directory
97 $config{BASE_DIR} = $config{ME};
99 if (defined $opt_base_dir)
101 $config{BASE_DIR} = $opt_base_dir;
104 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Directory
105 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
106 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
107 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
109 if (defined $opt_config_dir)
111 $config{CONFIG_DIR} = $opt_config_dir;
113 if (defined $opt_module_dir)
115 $config{MODULE_DIR} = $opt_module_dir;
117 if (defined $opt_binary_dir)
119 $config{BINARY_DIR} = $opt_binary_dir;
121 if (defined $opt_library_dir)
123 $config{LIBRARY_DIR} = $opt_library_dir;
125 chomp($config{HAS_GNUTLS} = `libgnutls-config --version 2>/dev/null | cut -c 1,2,3`); # GNUTLS Version.
126 chomp($config{HAS_OPENSSL} = `openssl version 2>/dev/null`); # Openssl version
127 $config{USE_GNUTLS} = "n";
128 if (defined $opt_use_gnutls)
130 $config{USE_GNUTLS} = "y"; # Use gnutls.
132 $config{USE_OPENSSL} = "n"; # Use openssl.
133 if (defined $opt_use_openssl)
135 $config{USE_OPENSSL} = "y";
138 # no, let's not change these.
139 $config{OPTIMITEMP} = "0"; # Default Optimisation Value
140 if (!defined $opt_disable_debug)
142 $config{OPTIMISATI} = "-g"; # Optimisation Flag
146 $config{OPTIMISATI} = ""; # DEBUGGING OFF!
149 $config{NICK_LENGT} = "31"; # Default Nick Length
150 if (defined $opt_nick_length)
152 $config{NICK_LENGT} = $opt_nick_length;
154 $config{CHAN_LENGT} = "64"; # Default Channel Name Length
155 if (defined $opt_chan_length)
157 $config{CHAN_LENGT} = $opt_chan_length;
159 $config{MAX_CHANNE} = "20"; # Default Max. Channels per user
160 if (defined $opt_maxchans)
162 $config{MAX_CHANNE} = $opt_maxchans;
164 $config{MAX_OPERCH} = "60"; # Default Max. Channels per oper
165 if (defined $opt_opermaxchans)
167 $config{MAX_OPERCH} = $opt_opermaxchans;
169 $config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once.
170 if (defined $opt_modes)
172 $config{MAXI_MODES} = $opt_modes;
174 $config{HAS_STRLCPY} = "false"; # strlcpy Check.
175 $config{HAS_STDINT} = "false"; # stdint.h check
176 $config{USE_KQUEUE} = "y"; # kqueue enabled
177 if (defined $opt_kqueue)
179 $config{USE_KQUEUE} = "y";
181 if (defined $opt_nokqueue)
183 $config{USE_KQUEUE} = "n";
185 $config{USE_EPOLL} = "y"; # epoll enabled
186 if (defined $opt_epoll)
188 $config{USE_EPOLL} = "y";
190 if (defined $opt_noepoll)
192 $config{USE_EPOLL} = "n";
194 $config{IPV6} = "n"; # IPv6 support (experimental)
195 if (defined $opt_ipv6)
199 $config{SUPPORT_IP6LINKS} = "y"; # IPv4 supporting IPv6 links (experimental)
200 if (defined $opt_ipv6links)
202 $config{SUPPORT_IP6LINKS} = "y";
204 if (defined $opt_noipv6links)
206 $config{SUPPORT_IP6LINKS} = "n";
208 $config{STATIC_LINK} = "no"; # are doing static modules?
209 chomp($config{MAX_CLIENT_T} = `sh -c \"ulimit -n\"`); # FD Limit
210 chomp($config{MAX_DESCRIPTORS} = `sh -c \"ulimit -n\"`); # Hard FD Limit
211 chomp($config{GCCVER} = `g++ -dumpversion | cut -c 1`); # Major GCC Version
212 chomp($config{OSNAME} = `uname`); # Operating System Name
213 $config{CC} = "g++"; # C++ compiler
216 $config{CC} = $opt_cc;
218 $exec = $config{CC} . " -dumpversion | cut -c 1";
219 chomp($config{GCCVER} = `$exec`); # Major GCC Version
220 $config{MAKEORDER} = "ircd mods"; # build order
221 $config{STATICLIBS} = ""; # library archive path
222 $config{MAX_IDENT} = "12"; # max ident size
223 $config{MAX_QUIT} = "255"; # max quit message size
224 $config{MAX_TOPIC} = "307"; # max topic size
225 $config{MAX_KICK} = "255"; # max kick message size
226 $config{MAX_GECOS} = "128"; # max GECOS size
227 $config{MAX_AWAY} = "200"; # max AWAY size
228 if (defined $opt_ident)
230 $config{MAX_IDENT} = $opt_ident;
232 if (defined $opt_quit)
234 $config{MAX_QUIT} = $opt_quit;
236 if (defined $opt_topic)
238 $config{MAX_TOPIC} = $opt_topic;
240 if (defined $opt_kick)
242 $config{MAX_KICK} = $opt_kick;
244 if (defined $opt_gecos)
246 $config{MAX_GECOS} = $opt_gecos;
248 if (defined $opt_away)
250 $config{MAX_AWAY} = $opt_away;
255 $config{HAS_OPENSSL} =~ /OpenSSL ([-[:digit:].]+)([a-z])?(\-[a-z][0-9])? (\w{3}|[0-9]+) (\w{3}|[0-9]+) [0-9]{4}/;
256 $config{HAS_OPENSSL} = $1;
258 if ($config{GCCVER} eq "") {
259 print $config{CC} . " was not found! You require g++ (the GNU C++ compiler, part of GCC) to build InspIRCd!\n";
263 # Minihack! Convert Cygwin to 'Cyg-Static' so i can
264 # Keep my dynamic module experiments here for later
267 if ($config{OSNAME} =~ /CYGWIN/)
269 $config{OSNAME} = "CYG-STATIC";
271 elsif($config{OSNAME} =~ /^MINGW32/)
273 $config{OSNAME} = "MINGW32";
275 elsif ((!$config{OSNAME}) || ($config{OSNAME} eq ""))
277 chomp($config{OSNAME} = `/usr/bin/uname`);
279 if((!$config{OSNAME}) || ($config{OSNAME} eq ""))
281 $config{OSNAME} = "Unknown";
285 if (!$config{MAX_CLIENT_T}) {
286 $config{MAX_CLIENT_T} = 1024; # Set a reasonable 'Default'
287 $fd_scan_fail = "true"; # Used Later
290 # Get and Set some important vars..
295 if ($arg eq "-clean") {
296 system("rm -rf .config.cache");
302 chomp($topdir = getcwd());
303 $this = resolve_directory($topdir); # PWD, Regardless.
305 # Does the cache file exist?
307 # No, No it doesn't.. *BASH*
308 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
311 # We've Loaded the cache file and all our variables..
312 print "Updating Files..\n";
314 if ($opt_disable_debug == 1)
316 print "Disabling debug information (-g).\n";
317 $config{OPTIMISATI} = "";
320 $has_epoll = $config{HAS_EPOLL};
321 $has_kqueue = $config{HAS_KQUEUE};
330 chomp($topdir = getcwd());
331 $this = resolve_directory($topdir); # PWD, Regardless.
333 # Does the cache file exist?
335 # No, No it doesn't.. *BASH*
336 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
339 # We've Loaded the cache file and all our variables..
340 print "Updating Files..\n";
342 $has_epoll = $config{HAS_EPOLL};
343 $has_kqueue = $config{HAS_KQUEUE};
355 open(FH,"<.svn/entries") or $fail = 1;
357 print "This is not an SVN copy of InspIRCd.\n";
360 system("svn update");
361 system("perl configure -update");
362 if ($ARGV[1] eq "rebuild") {
363 system("make install");
368 print "Running non-interactive configure...\n" unless $interactive;
369 print "Checking for cache from previous configure... ";
370 print ((getcache() eq "true") ? "found\n" : "not found\n");
371 print "Checking operating system version... ";
372 print getosflags() . "\n";
374 if (defined $opt_maxclients)
376 $config{MAX_CLIENT} = $opt_maxclients;
379 if (!$config{MAX_CLIENT}) {
380 # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this
381 # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go
382 # higher than the found value" :))
383 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
386 printf "Checking if stdint.h exists... ";
387 $config{HAS_STDINT} = "true";
389 open(STDINT, "</usr/include/stdint.h") or $config{HAS_STDINT} = "false";
390 if ($config{HAS_STDINT} eq "true") {
393 print "yes\n" if $config{HAS_STDINT} eq "true";
394 print "no\n" if $config{HAS_STDINT} eq "false";
397 printf "Checking if strlcpy exists... ";
398 # Perform the strlcpy() test..
399 $config{HAS_STRLCPY} = "false";
401 open(STRLCPY, "</usr/include/string.h") or $fail = 1;
403 while (chomp($line = <STRLCPY>)) {
404 # try and find the delcaration of:
405 # size_t strlcpy(...)
406 if ($line =~ /size_t(\0x9|\s)+strlcpy/) {
407 $config{HAS_STRLCPY} = "true";
412 print "yes\n" if $config{HAS_STRLCPY} eq "true";
413 print "no\n" if $config{HAS_STRLCPY} eq "false";
416 printf "Checking if kqueue exists... ";
419 open(KQUEUE, "</usr/include/sys/event.h") or $fail = 1;
421 while (chomp($line = <KQUEUE>)) {
422 # try and find the delcaration of:
424 if ($line =~ /int(\0x9|\s)+kqueue/) {
430 print "yes\n" if $has_kqueue == 1;
431 print "no\n" if $has_kqueue == 0;
433 printf "Checking if epoll exists... ";
436 open(EPOLL, "</usr/include/sys/epoll.h") or $fail = 1;
442 my $kernel = `uname -r`;
444 if (($kernel =~ /2\.0/) || ($kernel =~ /2\.2/) || ($kernel =~ /2\.4/)) {
448 print "yes\n" if $has_epoll == 1;
449 print "no\n" if $has_epoll == 0;
451 if (($config{OSNAME} =~ /CYGWIN/) || ($config{OSNAME} eq "CYG-STATIC")) {
452 $config{HAS_STRLCPY} = "true";
455 $config{HAS_EPOLL} = $has_epoll;
456 $config{HAS_KQUEUE} = $has_kqueue;
458 printf "Checking for libgnutls... ";
459 if (($config{HAS_GNUTLS}) && (($config{HAS_GNUTLS} >= 1.2) || ($config{HAS_GNUTLS} eq "y"))) {
461 $config{HAS_GNUTLS} = "y";
464 $config{HAS_GNUTLS} = "n";
467 printf "Checking for openssl... ";
468 if (($config{HAS_OPENSSL}) && (($config{HAS_OPENSSL} >= 0.8) || ($config{HAS_OPENSSL} eq "y"))) {
470 $config{HAS_OPENSSL} = "y";
473 $config{HAS_OPENSSL} = "n";
476 ################################################################################
477 # BEGIN INTERACTIVE PART #
478 ################################################################################
484 chomp($wholeos = `uname -sr`);
486 my $rev = getrevision();
487 # Display Introduction Message..
489 Welcome to the \033[1mInspIRCd\033[0m Configuration program! (\033[1minteractive mode\033[0m)
490 \033[1mPackage maintainers: Type ./configure --help for non-interactive help\033[0m
492 *** If you are unsure of any of these values, leave it blank for ***
493 *** standard settings that will work, and your server will run ***
494 *** using them. Please consult your IRC network admin if in doubt. ***
496 Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter
497 a new value. Please note: You will \033[1mHAVE\033[0m to read the docs
498 dir, otherwise you won't have a config file!
500 Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos)
501 Maximum file descriptors: \033[1;32m$config{MAX_CLIENT_T}\033[0m
502 Your InspIRCd revision ID is \033[1;32mr$rev\033[0m";
504 print " (Non-SVN build)";
508 $config{CHANGE_COMPILER} = "n";
509 print "I have detected the following compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
511 while (($config{GCCVER} < 3) || ($config{GCCVER} eq "")) {
512 print "\033[1;32mIMPORTANT!\033[0m A GCC 2.x compiler has been detected, and
513 should NOT be used. You should probably specify a newer compiler.\n\n";
514 yesno(CHANGE_COMPILER,"Do you want to change the compiler?");
515 if ($config{CHANGE_COMPILER} =~ /y/i) {
516 print "What command do you want to use to invoke your compiler?\n";
517 print "[\033[1;32m$config{CC}\033[0m] -> ";
518 chomp($config{CC} = <STDIN>);
519 if ($config{CC} eq "") {
522 chomp($foo = `$config{CC} -dumpversion | cut -c 1`);
524 chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change compilers
525 print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
526 if ($config{GCCVER} < 3) {
527 print "\033[1;32mGCC 2.x WILL NOT WORK!\033[0m. Let's try that again, shall we?\n";
531 print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n";
538 # Directory Settings..
539 my $tmpbase = $config{BASE_DIR};
540 dir_check("do you wish to install the InspIRCd base", "BASE_DIR");
541 if ($tmpbase ne $config{BASE_DIR}) {
542 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Dir
543 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
544 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
545 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
548 dir_check("are the configuration files", "CONFIG_DIR");
549 dir_check("are the modules to be compiled to", "MODULE_DIR");
550 dir_check("is the IRCd binary to be placed", "BINARY_DIR");
551 dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
554 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?");
558 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?");
561 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y"));
562 if (!$chose_hiperf) {
563 print "No high-performance socket engines are available, or you chose\n";
564 print "not to enable one. Defaulting to select() engine.\n\n";
567 yesno(IPV6,"Would you like to build InspIRCd with IPv6 support?");
570 if ($config{IPV6} eq "y") {
571 print "You have chosen to build an \033[1;32mIPV6-only\033[0m server.\nTo accept IPV4 users, you must use the '::ffff:' notation of addresses.\n\n";
572 $config{SUPPORT_IP6LINKS} = "y";
574 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 which are using '::ffff:' notation?\nIf you are using a recent operating\nsystem and are unsure, answer yes.");
578 if (($config{HAS_GNUTLS} eq "y") && ($config{HAS_OPENSSL} eq "y")) {
579 print "I have detected both GnuTLS and OpenSSL on your system.\n";
580 print "I will default to GnuTLS. If you wish to use OpenSSL\n";
581 print "instead, you should enable the OpenSSL module yourself\n";
582 print "by copying it from src/modules/extra to src/modules.\n\n";
585 if ($config{HAS_GNUTLS} eq "y") {
586 yesno(USE_GNUTLS, "Would you like to enable SSL Support?");
587 if ($config{USE_GNUTLS} eq "y") {
588 print "\nUsing GnuTLS SSL module.\n";
590 } elsif ($config{HAS_OPENSSL} eq "y") {
591 yesno(USE_OPENSSL, "Would you like to enable SSL Support?");
592 if ($config{USE_OPENSSL} eq "y") {
593 print "\nUsing OpenSSL SSL module.\nYou will get better performance if you move to GnuTLS in the future.\n";
597 print "\nThe following questions will ask you for various figures relating\n";
598 print "To your IRCd install. Please note that these should usually be left\n";
599 print "as defaults unless you have a real reason to change them. If they\n";
600 print "changed, then the values must be identical on all servers on your\n";
601 print "network, or malfunctions and/or crashes may occur, with the exception\n";
602 print "of the 'maximum number of clients' setting which may be different on\n";
603 print "different servers on the network.\n\n";
605 # File Descriptor Settings..
608 print "Maximum number of clients at any one time ($config{MAX_CLIENT_T})\n";
609 print "[\033[1;32m$config{MAX_CLIENT}\033[0m] -> ";
610 chomp($var = <STDIN>);
612 $var = $config{MAX_CLIENT};
614 if ($var =~ /^\d+$/) {
615 if (($var > $config{MAX_CLIENT_T}) && ($fd_scan_fail ne "true")) {
616 # Client has entered a larger number than the 'discovered' value
618 print "WARNING: Our scans have indicated that you are attempting
619 to use more sockets than there are avaliable. Are you sure
620 you wish to do this? It may cause the IRCd to malfunction [y/n]
621 [\033[1;32mn\033[0m] -> $c";
622 chomp($tmp = <STDIN>);
624 print "Please enter the correct value.\n\n";
629 print "You must enter a number in this field. Please try again.\n\n";
632 # If we get here, we should be good to go.
633 $config{MAX_CLIENT} = $var;
634 $config{MAX_DESCRIPTORS} = $var;
641 print "What is the maximum length of nicknames?\n";
642 print "[\033[1;32m$config{NICK_LENGT}\033[0m] -> ";
643 chomp($var = <STDIN>);
645 $var = $config{NICK_LENGT};
647 if ($var =~ /^\d+$/) {
648 # We don't care what the number is, set it and be on our way.
649 $config{NICK_LENGT} = $var;
653 print "You must enter a number in this field. Please try again.\n\n";
659 print "What is the maximum length of channel names?\n";
660 print "[\033[1;32m$config{CHAN_LENGT}\033[0m] -> ";
661 chomp($var = <STDIN>);
663 $var = $config{CHAN_LENGT};
665 if ($var =~ /^\d+$/) {
666 # We don't care what the number is, set it and be on our way.
667 $config{CHAN_LENGT} = $var;
671 print "You must enter a number in this field. Please try again.\n\n";
677 print "What is the maximum number of channels a normal user may join at any one time?\n";
678 print "[\033[1;32m$config{MAX_CHANNE}\033[0m] -> ";
679 chomp($var = <STDIN>);
681 $var = $config{MAX_CHANNE};
683 if ($var =~ /^\d+$/) {
684 # We don't care what the number is, set it and be on our way.
685 $config{MAX_CHANNE} = $var;
689 print "You must enter a number in this field. Please try again.\n\n";
695 print "What is the maximum number of channels an oper may join at any one time?\n";
696 print "[\033[1;32m$config{MAX_OPERCH}\033[0m] -> ";
697 chomp($var = <STDIN>);
699 $var = $config{MAX_OPERCH};
701 if ($var =~ /^\d+$/) {
702 # We don't care what the number is, set it and be on our way.
703 $config{MAX_OPERCH} = $var;
711 print "What is the maximum number of mode changes in one line?\n";
712 print "[\033[1;32m$config{MAXI_MODES}\033[0m] -> ";
713 chomp($var = <STDIN>);
715 $var = $config{MAXI_MODES};
717 if ($var =~ /^\d+$/) {
718 # We don't care what the number is, set it and be on our way.
719 $config{MAXI_MODES} = $var;
723 print "You must enter a number in this field. Please try again.\n\n";
729 print "What is the maximum length of an ident (username)?\n";
730 print "[\033[1;32m$config{MAX_IDENT}\033[0m] -> ";
731 chomp($var = <STDIN>);
733 $var = $config{MAX_IDENT};
735 if ($var =~ /^\d+$/) {
736 # We don't care what the number is, set it and be on our way.
737 $config{MAX_IDENT} = $var;
741 print "You must enter a number in this field. Please try again.\n\n";
747 print "What is the maximum length of a quit message?\n";
748 print "[\033[1;32m$config{MAX_QUIT}\033[0m] -> ";
749 chomp($var = <STDIN>);
751 $var = $config{MAX_QUIT};
753 if ($var =~ /^\d+$/) {
754 # We don't care what the number is, set it and be on our way.
755 $config{MAX_QUIT} = $var;
759 print "You must enter a number in this field. Please try again.\n\n";
765 print "What is the maximum length of a channel topic?\n";
766 print "[\033[1;32m$config{MAX_TOPIC}\033[0m] -> ";
767 chomp($var = <STDIN>);
769 $var = $config{MAX_TOPIC};
771 if ($var =~ /^\d+$/) {
772 # We don't care what the number is, set it and be on our way.
773 $config{MAX_TOPIC} = $var;
777 print "You must enter a number in this field. Please try again.\n\n";
783 print "What is the maximum length of a kick message?\n";
784 print "[\033[1;32m$config{MAX_KICK}\033[0m] -> ";
785 chomp($var = <STDIN>);
787 $var = $config{MAX_KICK};
789 if ($var =~ /^\d+$/) {
790 # We don't care what the number is, set it and be on our way.
791 $config{MAX_KICK} = $var;
795 print "You must enter a number in this field. Please try again.\n\n";
801 print "What is the maximum length of a GECOS (real name) field?\n";
802 print "[\033[1;32m$config{MAX_GECOS}\033[0m] -> ";
803 chomp($var = <STDIN>);
805 $var = $config{MAX_GECOS};
807 if ($var =~ /^\d+$/) {
808 # We don't care what the number is, set it and be on our way.
809 $config{MAX_GECOS} = $var;
813 print "You must enter a number in this field. Please try again.\n\n";
819 print "What is the maximum length of an away message?\n";
820 print "[\033[1;32m$config{MAX_AWAY}\033[0m] -> ";
821 chomp($var = <STDIN>);
823 $var = $config{MAX_AWAY};
825 if ($var =~ /^\d+$/) {
826 # We don't care what the number is, set it and be on our way.
827 $config{MAX_AWAY} = $var;
831 print "You must enter a number in this field. Please try again.\n\n";
836 print "\n\033[1;32mPre-build configuration is complete!\033[0m\n\n";
837 print "\033[0mBase install path:\033[1;32m\t\t$config{BASE_DIR}\033[0m\n";
838 print "\033[0mConfig path:\033[1;32m\t\t\t$config{CONFIG_DIR}\033[0m\n";
839 print "\033[0mModule path:\033[1;32m\t\t\t$config{MODULE_DIR}\033[0m\n";
840 print "\033[0mLibrary path:\033[1;32m\t\t\t$config{LIBRARY_DIR}\033[0m\n";
841 print "\033[0mMax connections:\033[1;32m\t\t$config{MAX_CLIENT}\033[0m\n";
842 print "\033[0mMax User Channels:\033[1;32m\t\t$config{MAX_CHANNE}\033[0m\n";
843 print "\033[0mMax Oper Channels:\033[1;32m\t\t$config{MAX_OPERCH}\033[0m\n";
844 print "\033[0mMax nickname length:\033[1;32m\t\t$config{NICK_LENGT}\033[0m\n";
845 print "\033[0mMax channel length:\033[1;32m\t\t$config{CHAN_LENGT}\033[0m\n";
846 print "\033[0mMax mode length:\033[1;32m\t\t$config{MAXI_MODES}\033[0m\n";
847 print "\033[0mMax ident length:\033[1;32m\t\t$config{MAX_IDENT}\033[0m\n";
848 print "\033[0mMax quit length:\033[1;32m\t\t$config{MAX_QUIT}\033[0m\n";
849 print "\033[0mMax topic length:\033[1;32m\t\t$config{MAX_TOPIC}\033[0m\n";
850 print "\033[0mMax kick length:\033[1;32m\t\t$config{MAX_KICK}\033[0m\n";
851 print "\033[0mMax name length:\033[1;32m\t\t$config{MAX_GECOS}\033[0m\n";
852 print "\033[0mMax away length:\033[1;32m\t\t$config{MAX_AWAY}\033[0m\n";
853 print "\033[0mGCC Version Found:\033[1;32m\t\t$config{GCCVER}.x\033[0m\n";
854 # and not echo it out so we don't get some ricer fuck complaining
855 #print "\033[0mOptimization Flag:\033[1;32m\t\t$config{OPTIMISATI}\033[0m\n";
856 print "\033[0mCompiler program:\033[1;32m\t\t$config{CC}\033[0m\n";
857 print "\033[0mStatic modules:\033[1;32m\t\t\t$config{STATIC_LINK}\033[0m\n";
858 print "\033[0mIPv6 Support:\033[1;32m\t\t\t$config{IPV6}\033[0m\n";
859 print "\033[0mIPv6 to IPv4 Links:\033[1;32m\t\t$config{SUPPORT_IP6LINKS}\033[0m\n";
860 print "\033[0mGnuTLS Support:\033[1;32m\t\t\t$config{USE_GNUTLS}\033[0m\n";
861 print "\033[0mOpenSSL Support:\033[1;32m\t\t$config{USE_OPENSSL}\033[0m\n\n";
863 if (($config{USE_GNUTLS} eq "y") && ($config{HAS_GNUTLS} ne "y"))
865 print "Sorry, but i couldn't detect gnutls. Make sure gnutls-config is in your path.\n";
868 if (($config{USE_OPENSSL} eq "y") && ($config{HAS_OPENSSL} ne "y"))
870 print "Sorry, but i couldn't detect openssl. Make sure openssl is in your path.\n";
874 if ($config{USE_GNUTLS} eq "y") {
876 open(TMP, "<src/modules/m_ssl_gnutls.cpp") or $failed = 1;
879 print "Symlinking src/modules/m_ssl_gnutls.cpp from extra/\n";
880 chdir("src/modules");
881 system("ln -s extra/m_ssl_gnutls.cpp");
882 system("ln -s extra/ssl_cert.h");
889 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
891 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
894 print "SSL Certificates Not found, Generating.. \n\n
895 *************************************************************
896 * Generating the Private Key may take some time, go grab a *
897 * Coffee. Even better, to generate some more entropy if it *
898 * is taking a while, open another console and type du / a *
899 * few times and get that HD going :) Then answer the *
900 * Questions which follow. If you are unsure, just hit enter *
901 *************************************************************\n\n";
902 system("certtool --generate-privkey --outfile key.pem");
903 system("certtool --generate-self-signed --load-privkey key.pem --outfile cert.pem");
904 print "\nCertificate generation complete, copying to config directory... ";
905 system("mv key.pem $config{CONFIG_DIR}/key.pem");
906 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
909 print "SSL Certificates found, skipping.\n\n"
914 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
916 } elsif ($config{USE_OPENSSL} eq "y") {
918 open(TMP, "<src/modules/m_ssl_openssl.cpp") or $failed = 1;
921 print "Symlinking src/modules/m_ssl_openssl.cpp from extra/\n";
922 chdir("src/modules");
923 system("ln -s extra/m_ssl_openssl.cpp");
924 system("ln -s extra/ssl_cert.h");
931 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
933 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
936 print "SSL Certificates Not found, Generating.. \n\n
937 *************************************************************
938 * Generating the certificates may take some time, go grab a *
939 * coffee, or something. *
940 *************************************************************\n\n";
941 system("openssl req -x509 -nodes -newkey rsa:1024 -keyout key.pem -out cert.pem");
942 system("openssl dhparam -out dhparams.pem 1024");
943 print "\nCertificate generation complete, copying to config directory... ";
944 system("mv key.pem $config{CONFIG_DIR}/key.pem");
945 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
946 system("mv dhparams.pem $config{CONFIG_DIR}/dhparams.pem");
949 print "SSL Certificates found, skipping.\n\n"
954 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
957 if (($config{USE_GNUTLS} eq "n") && ($config{USE_OPENSSL} eq "n")) {
958 print "Skipping SSL Certificate generation, SSL support is not available.\n\n";
966 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
967 if (($config{USE_GNUTLS} eq "y") || ($config{USE_OPENSSL} eq "y")) {
968 print "Please remember that to enable \033[1;32mSSL support\033[0m you must\n";
969 print "load the required modules in your config. This configure process\n";
970 print "has just prepared these modules to be compiled for you, and has not\n";
971 print "configured them to be compiled into the core of the ircd.\n";
973 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
974 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
975 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";
978 if ($config{GCCVER} < "3") {
980 \033[1;32mWARNING!\033[0m You are attempting to compile InspIRCd on GCC 2.x!
981 GCC 2.x series compilers only had partial (read as broken) C++ support, and
982 your compile will most likely fail horribly! If you have any problems, do NOT
983 report them to the bugtracker or forums without first upgrading your compiler
984 to a newer 3.x or 4.x (or whatever is available currently) version.
988 ################################################################################
990 ################################################################################
992 # Retrieves the .config.cache file, and loads values into the main config hash.
993 open(CACHE, ".config.cache") or return undef;
996 # Ignore Blank lines, and comments..
999 my ($key, $value) = split("=", $_);
1000 $value =~ /^\"(.*)\"$/;
1001 # Do something with data here!
1009 # Dump the contents of %config
1010 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
1011 open(FILEHANDLE, ">.config.cache");
1012 foreach $key (keys %config) {
1013 print FILEHANDLE "$key=\"$config{$key}\"\n";
1019 my ($desc, $hash_key) = @_;
1021 while (!$complete) {
1022 print "In what directory $desc?\n";
1023 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
1024 chomp($var = <STDIN>);
1026 $var = $config{$hash_key};
1028 if ($var =~ /^\~\/(.+)$/) {
1029 # Convert it to a full path..
1030 $var = resolve_directory($ENV{HOME} . "/" . $1);
1032 elsif ((($config{OSNAME} == "MINGW32") and ($var !~ /^[A-Z]{1}:\\.*/)) and (substr($var,0,1) ne "/"))
1034 # Assume relative Path was given.. fill in the rest.
1035 $var = $this . "/$var";
1038 $var = resolve_directory($var);
1040 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
1041 chomp($tmp = <STDIN>);
1042 if (($tmp eq "") || ($tmp =~ /^y/i)) {
1043 # Attempt to Create the Dir..
1045 system("mkdir -p \"$var\" >> /dev/null 2>&1");
1046 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
1048 print "Unable to create directory. ($var)\n\n";
1053 # They said they don't want to create, and we can't install there.
1058 if (!is_dir($var)) {
1059 # Target exists, but is not a directory.
1060 print "File $var exists, but is not a directory.\n\n";
1064 # Either Dir Exists, or was created fine.
1065 $config{$hash_key} = $var;
1072 if ($config{OSNAME} =~ /BSD$/) {
1073 $config{LDLIBS} = "-lstdc++";
1074 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}";
1075 $config{MAKEPROG} = "gmake";
1076 if ($config{OSNAME} eq "OpenBSD") {
1077 chomp($foo = `eg++ -dumpversion | cut -c 1`);
1078 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
1079 # if theyre not running this, configure lets the build continue but they probably wont manage to
1080 # compile as this standard version is 2.95.3!
1082 $config{CC} = "eg++";
1083 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change the compiler path
1087 return $config{OSNAME};
1089 $config{LDLIBS} = "-ldl -lstdc++";
1090 $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}";
1091 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
1092 $config{MAKEPROG} = "make";
1093 if ($config{OSNAME} =~ /CYGWIN/) {
1094 $config{FLAGS} = "-fno-strict-aliasing -Wall -Woverloaded-virtual $config{OPTIMISATI}";
1095 $config{LDLIBS} = "";
1096 $config{MAKEPROG} = "/usr/bin/make";
1097 $config{MAKEORDER} = "ircd mods";
1099 } elsif ($config{OSNAME} eq "CYG-STATIC") {
1100 $config{FLAGS} = "-fno-strict-aliasing -Wall -Woverloaded-virtual $config{OPTIMISATI}";
1101 $config{LDLIBS} = "";
1102 $config{MAKEPROG} = "/usr/bin/make";
1103 $config{MAKEORDER} = "mods ircd";
1104 $config{STATICLIBS} = "modules/mods.a";
1105 $config{STATIC_LINK} = "yes";
1106 return "Cygwin-Static";
1108 $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
1112 if ($config{OSNAME} =~ /SunOS/)
1114 # solaris/sunos needs these
1115 # socket = bsd sockets api
1117 # rt = POSIX realtime extensions
1118 # resolv = inet_aton only (why isnt this in nsl?!)
1119 $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv";
1123 if($config{OSNAME} eq "MINGW32")
1125 # All code is position-independent on windows
1126 $config{FLAGS} =~ s/-fPIC //;
1145 print "Detecting modules ";
1146 opendir(DIRHANDLE, "src/modules");
1147 foreach $name (sort readdir(DIRHANDLE)) {
1148 if ($name =~ /^m_(.+)\.cpp$/)
1151 if ($mod !~ /_static$/) {
1152 $modlist[$i++] = $mod;
1157 closedir(DIRHANDLE);
1158 print "\nOk, $i modules.\n";
1165 my $data = `svn info`;
1172 $data =~ /Revision: (\d+)/;
1174 if (!defined($rev)) {
1181 my($writeheader) = @_;
1182 # First File.. inspircd_config.h
1183 chomp(my $incos = `uname -n -s -r`);
1184 chomp(my $version = `sh ./src/version.sh`);
1185 chomp(my $revision = getrevision());
1186 $version = "$version(r$revision)";
1187 chomp(my $revision2 = getrevision());
1188 if ($writeheader == 1)
1190 print "Writing \033[1;32minspircd_config.h\033[0m\n";
1191 open(FILEHANDLE, ">include/inspircd_config.h");
1192 my $NL = $config{NICK_LENGT}+1;
1193 my $CL = $config{CHAN_LENGT}+1;
1194 print FILEHANDLE <<EOF;
1195 /* Auto generated by configure, do not modify! */
1196 #ifndef __CONFIGURATION_AUTO__
1197 #define __CONFIGURATION_AUTO__
1199 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
1200 #define MOD_PATH "$config{MODULE_DIR}"
1201 #define VERSION "$version"
1202 #define REVISION "$revision2"
1203 #define MAXCLIENTS $config{MAX_CLIENT}
1204 #define MAX_DESCRIPTORS $config{MAX_DESCRIPTORS}
1207 #define MAXCHANS $config{MAX_CHANNE}
1208 #define OPERMAXCHANS $config{MAX_OPERCH}
1209 #define MAXMODES $config{MAXI_MODES}
1210 #define IDENTMAX $config{MAX_IDENT}
1211 #define MAXQUIT $config{MAX_QUIT}
1212 #define MAXTOPIC $config{MAX_TOPIC}
1213 #define MAXKICK $config{MAX_KICK}
1214 #define MAXGECOS $config{MAX_GECOS}
1215 #define MAXAWAY $config{MAX_AWAY}
1216 #define OPTIMISATION $config{OPTIMITEMP}
1217 #define LIBRARYDIR "$config{LIBRARY_DIR}"
1218 #define SYSTEM "$incos"
1221 if ($config{OSNAME} =~ /SunOS/) {
1222 print FILEHANDLE "#define IS_SOLARIS\n";
1224 if ($config{OSNAME} =~ /CYGWIN/) {
1225 print FILEHANDLE "#define IS_CYGWIN\n";
1226 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
1228 if ($config{OSNAME} eq "MINGW32") {
1229 print FILEHANDLE "#define IS_MINGW\n";
1231 if ($config{OSNAME} eq "CYG-STATIC") {
1232 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
1234 if ($config{STATIC_LINK} eq "yes") {
1235 print FILEHANDLE "#define STATIC_LINK\n";
1237 if ($config{GCCVER} >= 3) {
1238 print FILEHANDLE "#define GCC3\n";
1240 if ($config{HAS_STRLCPY} eq "true") {
1241 print FILEHANDLE "#define HAS_STRLCPY\n";
1243 if ($config{HAS_STDINT} eq "true") {
1244 print FILEHANDLE "#define HAS_STDINT\n";
1246 if ($config{IPV6} =~ /y/i) {
1247 print FILEHANDLE "#define IPV6\n";
1249 if ($config{SUPPORT_IP6LINKS} =~ /y/i) {
1250 print FILEHANDLE "#define SUPPORT_IP6LINKS\n";
1253 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1254 print FILEHANDLE "#define USE_KQUEUE\n";
1255 $se = "socketengine_kqueue";
1258 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1259 print FILEHANDLE "#define USE_EPOLL\n";
1260 $se = "socketengine_epoll";
1263 # user didn't choose either epoll or select for their OS.
1264 # default them to USE_SELECT (ewwy puke puke)
1266 print FILEHANDLE "#define USE_SELECT\n";
1267 $se = "socketengine_select";
1269 print FILEHANDLE "\n#endif\n";
1275 open(FILEHANDLE, ">include/inspircd_se_config.h");
1276 print FILEHANDLE <<EOF;
1277 /* Auto generated by configure, do not modify or commit to svn! */
1278 #ifndef __CONFIGURATION_SOCKETENGINE__
1279 #define __CONFIGURATION_SOCKETENGINE__
1289 # Create a Modules List..
1291 foreach $i (@modlist)
1293 if ($config{STATIC_LINK} eq "yes") {
1294 $modules .= "m_".$i.".o ";
1297 $modules .= "m_".$i.".so ";
1300 chomp($modules); # Remove Redundant whitespace..
1303 # Write all .in files.
1306 my $exe = "inspircd";
1308 if ($config{OSNAME} =~ /CYGWIN/) {
1309 $exe = "inspircd.exe";
1312 opendir(DIRHANDLE, $this);
1314 foreach $name (sort readdir(DIRHANDLE)) {
1315 if ($name =~ /^\.(.+)\.inc$/) {
1317 # All .name.inc files need parsing!
1319 open(FILEHANDLE, ".$file.inc");
1320 while (<FILEHANDLE>) {
1325 $tmp =~ s/\@CC\@/$config{CC}/;
1326 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
1327 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
1328 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
1329 $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/;
1330 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
1331 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
1332 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
1333 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
1334 $tmp =~ s/\@MODULES\@/$modules/;
1335 $tmp =~ s/\@EXECUTABLE\@/$exe/;
1336 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
1337 $tmp =~ s/\@STATICLIBS\@/$config{STATICLIBS}/;
1339 print "Writing \033[1;32m$file\033[0m\n";
1340 open(FILEHANDLE, ">$file");
1341 print FILEHANDLE $tmp;
1344 closedir(DIRHANDLE);
1346 # Make inspircd executable!
1347 chmod 0744, 'inspircd';
1349 if ($config{STATIC_LINK} eq "yes") {
1350 print "Writing static-build \033[1;32msrc/Makefile\033[0m\n";
1351 write_static_makefile();
1352 write_static_modules_makefile();
1353 } elsif ($config{OSNAME} =~ /CYGWIN/) {
1354 print "Writing cygwin-build \033[1;32msrc/Makefile\033[0m\n";
1355 write_static_makefile();
1356 write_dynamic_modules_makefile();
1358 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
1359 write_dynamic_makefile();
1360 write_dynamic_modules_makefile();
1364 sub getcompilerflags {
1368 if ($_ =~ /^\/\* \$CompileFlags: (.+) \*\/$/) {
1377 sub getlinkerflags {
1381 if ($_ =~ /^\/\* \$LinkerFlags: (.+) \*\/$/) {
1390 sub getdependencies {
1394 if ($_ =~ /^\/\* \$ModDep: (.+) \*\/$/) {
1403 sub resolve_directory {
1405 return File::Spec->rel2abs($_[0]);
1409 my ($flag,$prompt) = @_;
1410 print "$prompt [\033[1;32m$config{$flag}\033[0m] -> ";
1411 chomp($tmp = <STDIN>);
1412 if ($tmp eq "") { $tmp = $config{$flag} }
1414 if (($tmp eq "") || ($tmp =~ /^y/i)) {
1415 $config{$flag} = "y";
1417 $config{$flag} = "n";
1422 sub write_static_modules_makefile {
1423 # Modules Makefile..
1424 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1425 open(FILEHANDLE, ">src/modules/Makefile");
1428 # Module Makefile Header
1430 print FILEHANDLE <<EOF;
1431 # (C) ChatSpike development team
1432 # Makefile by <Craig\@ChatSpike.net>
1433 # Many Thanks to Andrew Church <achurch\@achurch.org>
1434 # for assisting with making this work right.
1436 # Automatically Generated by ./configure to add a modules
1437 # please run ./configure --update
1443 # End Module Makefile Header
1446 # Create a Modules List..
1451 open(MODLIST,">include/modlist.h");
1454 # Include File Header
1456 print MODLIST <<HEADER;
1457 // Generated automatically by configure. DO NOT EDIT!
1459 #ifndef __SYMBOLS__H_CONFIGURED__
1460 #define __SYMBOLS__H_CONFIGURED__
1464 # End Include File Header
1467 # Place Module List into Include
1468 foreach $i (@modlist) {
1469 if ($i !~ /_static$/) {
1470 print MODLIST "extern \"C\" void * $i\_init (void);\n";
1473 print MODLIST "\nstruct {const char *name; initfunc *value; } modsyms[] = {\n";
1478 foreach $i (@modlist)
1480 if ($i !~ /_static$/) {
1481 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1482 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1483 $deps = getdependencies("src/modules/m_".$i.".cpp");
1486 # Write Entry to the Makefile
1488 print FILEHANDLE <<EOCHEESE;
1489 m_$i.o: .m_$i\_static.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h $deps
1490 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c .m_$i\_static.cpp
1491 mv .m_$i\_static.o ../m_$i.o
1495 # End Write Entry to the MakeFile
1497 print "Configuring module [\033[1;32mm_$i.so\033[0m] for static linking... ";
1498 open(MODULE,"<src/modules/m_".$i.".cpp") or die("Could not open m_".$i.".cpp");
1499 open(MUNGED,">src/modules/.m_".$i."_static.cpp") or die("Could not create .m_".$i."_static.cpp");
1500 while (chomp($a = <MODULE>)) {
1501 $a =~ s/init_module/$i\_init/g;
1502 print MUNGED "$a\n";
1506 print MODLIST <<EOENT;
1507 {"m_$i.so",\&$i\_init},
1512 print MODLIST "{0}};\n\n#endif\n";
1516 sub write_dynamic_modules_makefile {
1517 # Modules Makefile..
1518 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1519 open(FILEHANDLE, ">src/modules/Makefile");
1522 if ($config{OSNAME} =~ /CYGWIN/) {
1523 $extra = "../inspircd.dll.a";
1527 # Module Makefile Header
1529 print FILEHANDLE <<EOF;
1530 # (C) ChatSpike development team
1531 # Makefile by <Craig\@ChatSpike.net>
1532 # Many Thanks to Andrew Church <achurch\@achurch.org>
1533 # for assisting with making this work right.
1535 # Automatically Generated by ./configure to add a modules
1536 # please run ./configure -update or ./configure -modupdate
1542 # End Module Makefile Header
1545 # Create a Modules List..
1551 foreach $i (@modlist) {
1553 # Write Entry to the MakeFile
1555 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1556 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1557 $deps = getdependencies("src/modules/m_".$i.".cpp");
1558 print FILEHANDLE <<EOCHEESE;
1559 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
1560 \$(CC) -pipe -I../../include \$(FLAGS) $cmflags -export-dynamic -c m_$i.cpp
1561 \$(CC) -pipe \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o $extra
1564 $crud = $crud . " install -m 0700 m_$i.so \$(MODPATH)\n";
1566 # End Write Entry to the MakeFile
1569 print FILEHANDLE "modinst:\n \@echo \"Installing modules...\"\n" . $crud;
1573 sub write_static_makefile {
1574 open(FH,">src/Makefile") or die("Could not write src/Makefile!");
1577 opendir(DIRHANDLE, "src");
1578 foreach $name (sort readdir(DIRHANDLE)) {
1579 if ($name =~ /^cmd_(.+)\.cpp$/) {
1580 $cmdlist[$i++] = $1;
1583 closedir(DIRHANDLE);
1586 foreach my $cmd (@cmdlist) {
1587 $cmdobjs = $cmdobjs . "cmd_$cmd.o ";
1588 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1593 # (C) ChatSpike development team
1594 # Makefile by <Craig\@ChatSpike.net>
1595 # Makefile version 2 (statically linked core) by <brain\@inspircd.org>
1598 CC = im a cheezeball
1600 CXXFLAGS = -I../include \${FLAGS}
1601 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1602 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1606 $se = "socketengine_select";
1607 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1608 $se = "socketengine_kqueue";
1610 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1611 $se = "socketengine_epoll";
1615 # This next section is for cygwin dynamic module builds.
1616 # Basically, what we do, is build the inspircd core as a library
1617 # then the main executable uses that. the library is capable of
1618 # loading / unloading the modules dynamically :)
1619 # Massive thanks to the guys on #cygwin @ irc.freenode.net for helping
1623 if ($config{OSNAME} =~ /CYGWIN/) {
1625 all: timer.o aes.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
1627 inspircd.exe: inspircd.dll.a
1630 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 aes.o timer.o snomasks.o
1631 \$(CC) -shared -Wl,--out-implib=inspircd.dll.a -o inspircd.dll \$^
1635 all: timer.o aes.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
1637 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
1638 \$(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 aes.o timer.o snomasks.o modes/modeclasses.a \$(MODULES)
1644 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
1645 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1647 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
1648 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1650 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
1651 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1653 userprocess.o: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1654 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1656 socketengine.o: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1657 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1659 hashcomp.o: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1660 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1662 helperfuncs.o: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1663 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1665 channels.o: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1666 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1668 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
1669 \${MAKE} -C "modes" DIRNAME="src/modes" \$(MAKEARGS)
1670 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1672 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
1673 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1675 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
1676 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1678 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
1679 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1681 base.o: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1682 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1684 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
1685 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1687 commands.o: commands.cpp ../include/base.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h $srcobjs
1688 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp $cmdobjs
1690 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
1691 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1693 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
1694 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1696 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
1697 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1699 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
1700 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1702 socket.o: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1703 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1705 inspsocket.o: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1706 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1708 aes.o: aes.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1709 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c aes.cpp
1711 timer.o: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1712 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1715 foreach my $cmd (@cmdlist) {
1717 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
1718 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1724 sub write_dynamic_makefile {
1728 opendir(DIRHANDLE, "src");
1729 foreach $name (sort readdir(DIRHANDLE)) {
1730 if ($name =~ /^cmd_(.+)\.cpp$/) {
1731 $cmdlist[$i++] = $1;
1734 closedir(DIRHANDLE);
1738 foreach my $cmd (@cmdlist) {
1739 $cmdobjs = $cmdobjs . "cmd_$cmd.so ";
1740 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1743 $se = "socketengine_select";
1744 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1745 $se = "socketengine_kqueue";
1747 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1748 $se = "socketengine_epoll";
1751 open(FH,">src/Makefile") or die("Could not write src/Makefile");
1755 # (C) ChatSpike development team
1756 # Makefile by <Craig\@ChatSpike.net>
1757 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
1760 CC = im a cheezeball
1762 CXXFLAGS = -I../include \${FLAGS}
1763 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1764 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1766 all: libIRCDtimer.so libIRCDaes.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
1768 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 libIRCDaes.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
1769 \$(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 libIRCDaes.so libIRCDtimer.so libIRCDsnomasks.so
1771 libIRCDsocketengine.so: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1772 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1773 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocketengine.so socketengine.o $se.o
1775 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
1776 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1777 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsnomasks.so snomasks.o
1779 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
1780 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1781 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommand_parse.so command_parse.o
1783 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
1784 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1785 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcull_list.so cull_list.o
1787 libIRCDuserprocess.so: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1788 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1789 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDuserprocess.so userprocess.o
1791 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1792 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1793 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhash.so hashcomp.o
1795 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1796 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1797 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhelper.so helperfuncs.o
1799 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1800 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1801 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDchannels.so channels.o
1803 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)
1804 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1805 \${MAKE} -C "modes" DIRNAME="src/modes" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1806 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmode.so mode.o modes/modeclasses.a
1808 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
1809 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1810 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDxline.so xline.o
1812 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
1813 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1814 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDstring.so inspstring.o
1816 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
1817 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1818 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDasyncdns.so dns.o
1820 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1821 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1822 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDbase.so base.o
1824 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
1825 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1826 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDconfigreader.so configreader.o
1828 libIRCDcommands.so: commands.cpp ../include/base.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1829 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1830 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommands.so commands.o
1832 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
1833 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1834 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDdynamic.so dynamic.o
1836 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
1837 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1838 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDusers.so users.o
1840 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
1841 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1842 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmodules.so modules.o
1844 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
1845 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1846 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDwildcard.so wildcard.o
1848 libIRCDsocket.so: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1849 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1850 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocket.so socket.o
1852 libIRCDinspsocket.so: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1853 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1854 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDinspsocket.so inspsocket.o
1856 libIRCDaes.so: aes.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1857 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c aes.cpp
1858 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDaes.so aes.o
1860 libIRCDtimer.so: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1861 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1862 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDtimer.so timer.o
1865 foreach my $cmd (@cmdlist) {
1867 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
1868 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1869 \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o cmd_$cmd.so cmd_$cmd.o
1878 chomp($PWD = `pwd`);
1879 print "Usage: configure [options]
1881 *** NOTE: NON-INTERACTIVE CONFIGURE IS *NOT* SUPPORTED BY THE ***
1882 *** INSPIRCD DEVELOPMENT TEAM. DO NOT ASK FOR HELP REGARDING ***
1883 *** NON-INTERACTIVE CONFIGURE ON THE FORUMS OR ON IRC! ***
1885 Options: [defaults in brackets after descriptions]
1887 When no options are specified, interactive
1888 configuration is started and you must specify
1889 any required values manually. If one or more
1890 options are specified, non-interactive configuration
1891 is started, and any omitted values are defaulted.
1893 Arguments with a single \"-\" symbol, as in
1894 InspIRCd 1.0.x, are also allowed.
1896 --disable-interactive Sets no options intself, but
1897 will disable any interactive prompting.
1898 --update Update makefiles and dependencies
1899 --modupdate Detect new modules and write makefiles
1900 --svnupdate {rebuild} Update working copy via subversion
1901 {and optionally rebuild it}
1902 --clean Remove .config.cache file and go interactive
1903 --enable-gnutls Enable GnuTLS module [no]
1904 --enable-openssl Enable OpenSSL module [no]
1905 --with-nick-length=[n] Specify max. nick length [32]
1906 --with-channel-length=[n] Specify max. channel length [64]
1907 --with-max-channels=[n] Specify max. number of channels
1908 a normal user may join [20]
1909 --with-max-oper-channels=[n] Specify max. number of channels
1910 an irc operator may join [60]
1911 --with-max-clients=[n] Specify maximum number of users
1912 which may connect locally
1913 --enable-optimization=[n] Optimize using -O[n] gcc flag
1914 --enable-epoll Enable epoll() where supported [set]
1915 --enable-kqueue Enable kqueue() where supported [set]
1916 --disable-epoll Do not enable epoll(), fall back
1917 to select() [not set]
1918 --disable-kqueue Do not enable kqueue(), fall back
1919 to select() [not set]
1920 --enable-ipv6 Build ipv6 native InspIRCd [no]
1921 --enable-remote-ipv6 Build with ipv6 support for remote
1922 servers on the network [yes]
1923 --disable-remote-ipv6 Do not allow remote ipv6 servers [not set]
1924 --with-cc=[filename] Use an alternative g++ binary to
1925 build InspIRCd [g++]
1926 --with-ident-length=[n] Specify max length of ident [12]
1927 --with-quit-length=[n] Specify max length of quit [200]
1928 --with-topic-length=[n] Specify max length of topic [350]
1929 --with-kick-length=[n] Specify max length of kick [200]
1930 --with-gecos-length=[n] Specify max length of gecos [150]
1931 --with-away-length=[n] Specify max length of away [150]
1932 --with-max-modes=[n] Specify max modes per line which
1933 have parameters [20]
1934 --prefix=[directory] Base directory to install into (if defined,
1935 can automatically define config, module, bin
1936 and library dirs as subdirectories of prefix)
1938 --config-dir=[directory] Config file directory for config and SSL certs
1940 --module-dir=[directory] Modules directory for loadable modules
1942 --binary-dir=[directory] Binaries directory for core binary
1944 --library-dir=[directory] Library directory for core libraries
1946 --help Show this help text and exit