3 # InspIRCd Configuration Script
5 # Copyright 2003 The ChatSpike Development Team
6 # <brain@chatspike.net>
7 # <Craig@chatspike.net>
9 # [14:21] Brain: <matrix impression> i know perl-fu!
13 ########################################
20 'enable-gnutls' => \$opt_use_gnutls,
21 'enable-openssl' => \$opt_use_openssl,
22 'disable-interactive' => \$opt_nointeractive,
23 'with-nick-length=i' => \$opt_nick_length,
24 'with-channel-length=i' => \$opt_chan_length,
25 'with-max-channels=i' => \$opt_maxchans,
26 'with-max-oper-channels=i' => \$opt_opermaxchans,
27 'with-max-clients' => \$opt_maxclients,
28 'enable-optimization' => \$opt_optimise,
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 'help' => sub { showhelp(); },
50 'modupdate' => sub { update(); },
51 'update' => sub { modupdate(); },
52 'svnupdate' => sub { svnupdate(); },
53 'clean' => sub { clean(); },
56 my $non_interactive = (
57 (defined $opt_library_dir) ||
58 (defined $opt_base_dir) ||
59 (defined $opt_config_dir) ||
60 (defined $opt_module_dir) ||
61 (defined $opt_base_dir) ||
62 (defined $opt_binary_dir) ||
63 (defined $opt_nointeractive) ||
64 (defined $opt_away) ||
65 (defined $opt_gecos) ||
66 (defined $opt_kick) ||
67 (defined $opt_maxclients) ||
68 (defined $opt_modes) ||
69 (defined $opt_topic) ||
70 (defined $opt_quit) ||
71 (defined $opt_ident) ||
73 (defined $opt_ipv6) ||
74 (defined $opt_ipv6links) ||
75 (defined $opt_noipv6links) ||
76 (defined $opt_kqueue) ||
77 (defined $opt_epoll) ||
78 (defined $opt_maxchans) ||
79 (defined $opt_opermaxchans) ||
80 (defined $opt_chan_length) ||
81 (defined $opt_nick_length) ||
82 (defined $opt_optimise) ||
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";
137 $config{OPTIMITEMP} = "0"; # Default Optimisation Value
138 $config{OPTIMISATI} = "-g"; # Optimisation Flag
139 if (defined $opt_optimise)
141 $config{OPTIMISATI} = "-O" . $opt_optimise;
142 $config{OPTIMITEMP} = $opt_optimise;
144 $config{NICK_LENGT} = "31"; # Default Nick Length
145 if (defined $opt_nick_length)
147 $config{NICK_LENGT} = $opt_nick_length;
149 $config{CHAN_LENGT} = "64"; # Default Channel Name Length
150 if (defined $opt_chan_length)
152 $config{CHAN_LENGT} = $opt_chan_length;
154 $config{MAX_CHANNE} = "20"; # Default Max. Channels per user
155 if (defined $opt_maxchans)
157 $config{MAX_CHANNE} = $opt_maxchans;
159 $config{MAX_OPERCH} = "60"; # Default Max. Channels per oper
160 if (defined $opt_opermaxchans)
162 $config{MAX_OPERCH} = $opt_opermaxchans;
164 $config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once.
165 if (defined $opt_modes)
167 $config{MAXI_MODES} = $opt_modes;
169 $config{HAS_STRLCPY} = "false"; # strlcpy Check.
170 $config{HAS_STDINT} = "false"; # stdint.h check
171 $config{USE_KQUEUE} = "y"; # kqueue enabled
172 if (defined $opt_kqueue)
174 $config{USE_KQUEUE} = "y";
176 if (defined $opt_nokqueue)
178 $config{USE_KQUEUE} = "n";
180 $config{USE_EPOLL} = "y"; # epoll enabled
181 if (defined $opt_epoll)
183 $config{USE_EPOLL} = "y";
185 if (defined $opt_noepoll)
187 $config{USE_EPOLL} = "n";
189 $config{IPV6} = "n"; # IPv6 support (experimental)
190 if (defined $opt_ipv6)
194 $config{SUPPORT_IP6LINKS} = "y"; # IPv4 supporting IPv6 links (experimental)
195 if (defined $opt_ipv6links)
197 $config{SUPPORT_IP6LINKS} = "y";
199 if (defined $opt_noipv6links)
201 $config{SUPPORT_IP6LINKS} = "n";
203 $config{STATIC_LINK} = "no"; # are doing static modules?
204 chomp($config{MAX_CLIENT_T} = `sh -c \"ulimit -n\"`); # FD Limit
205 chomp($config{MAX_DESCRIPTORS} = `sh -c \"ulimit -n\"`); # Hard FD Limit
206 chomp($config{GCCVER} = `g++ -dumpversion | cut -c 1`); # Major GCC Version
207 chomp($config{OSNAME} = `uname`); # Operating System Name
208 $config{CC} = "g++"; # C++ compiler
211 $config{CC} = $opt_cc;
213 $exec = $config{CC} . " -dumpversion | cut -c 1";
214 chomp($config{GCCVER} = `$exec`); # Major GCC Version
215 $config{MAKEORDER} = "ircd mods"; # build order
216 $config{STATICLIBS} = ""; # library archive path
217 $config{MAX_IDENT} = "12"; # max ident size
218 $config{MAX_QUIT} = "255"; # max quit message size
219 $config{MAX_TOPIC} = "307"; # max topic size
220 $config{MAX_KICK} = "255"; # max kick message size
221 $config{MAX_GECOS} = "128"; # max GECOS size
222 $config{MAX_AWAY} = "200"; # max AWAY size
223 if (defined $opt_ident)
225 $config{MAX_IDENT} = $opt_ident;
227 if (defined $opt_quit)
229 $config{MAX_QUIT} = $opt_quit;
231 if (defined $opt_topic)
233 $config{MAX_TOPIC} = $opt_topic;
235 if (defined $opt_kick)
237 $config{MAX_KICK} = $opt_kick;
239 if (defined $opt_gecos)
241 $config{MAX_GECOS} = $opt_gecos;
243 if (defined $opt_away)
245 $config{MAX_AWAY} = $opt_away;
250 $config{HAS_OPENSSL} =~ /OpenSSL ([-[:digit:].]+)([a-z])? (\w{3}|[0-9]+) (\w{3}|[0-9]+) [0-9]{4}/;
251 $config{HAS_OPENSSL} = $1;
253 if ($config{GCCVER} eq "") {
254 print $config{CC} . " was not found! You require g++ (the GNU C++ compiler, part of GCC) to build InspIRCd!\n";
258 # Minihack! Convert Cygwin to 'Cyg-Static' so i can
259 # Keep my dynamic module experiments here for later
262 if ($config{OSNAME} =~ /CYGWIN/)
264 $config{OSNAME} = "CYG-STATIC";
266 elsif($config{OSNAME} =~ /^MINGW32/)
268 $config{OSNAME} = "MINGW32";
270 elsif ((!$config{OSNAME}) || ($config{OSNAME} eq ""))
272 chomp($config{OSNAME} = `/usr/bin/uname`);
274 if((!$config{OSNAME}) || ($config{OSNAME} eq ""))
276 $config{OSNAME} = "Unknown";
280 if (!$config{MAX_CLIENT_T}) {
281 $config{MAX_CLIENT_T} = 1024; # Set a reasonable 'Default'
282 $fd_scan_fail = "true"; # Used Later
285 # Get and Set some important vars..
290 if ($arg eq "-clean") {
291 system("rm -rf .config.cache");
297 # Does the cache file exist?
299 # No, No it doesn't.. *BASH*
300 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
303 # We've Loaded the cache file and all our variables..
304 print "Updating Files..\n";
306 $has_epoll = $config{HAS_EPOLL};
307 $has_kqueue = $config{HAS_KQUEUE};
316 # Does the cache file exist?
318 # No, No it doesn't.. *BASH*
319 print "You have not run ./configure before. Please do this before trying to run the update script.\n";
322 # We've Loaded the cache file and all our variables..
323 print "Updating Files..\n";
325 $has_epoll = $config{HAS_EPOLL};
326 $has_kqueue = $config{HAS_KQUEUE};
338 open(FH,"<.svn/entries") or $fail = 1;
340 print "This is not an SVN copy of InspIRCd.\n";
343 system("svn update");
344 system("perl configure -update");
345 if ($ARGV[1] eq "rebuild") {
346 system("make install");
351 print "Running non-interactive configure...\n" unless $interactive;
353 print "Checking for cache from previous configure...\n";
355 print "Checking operating system version...\n";
358 if (defined $opt_maxclients)
360 $config{MAX_CLIENT} = $opt_maxclients;
363 if (!$config{MAX_CLIENT}) {
364 # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this
365 # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go
366 # higher than the found value" :))
367 $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
370 printf "Checking if stdint.h exists... ";
371 $config{HAS_STDINT} = "true";
373 open(STDINT, "</usr/include/stdint.h") or $config{HAS_STDINT} = "false";
374 if ($config{HAS_STDINT} eq "true") {
377 print "yes\n" if $config{HAS_STDINT} eq "true";
378 print "no\n" if $config{HAS_STDINT} eq "false";
381 printf "Checking if strlcpy exists... ";
382 # Perform the strlcpy() test..
383 $config{HAS_STRLCPY} = "false";
385 open(STRLCPY, "</usr/include/string.h") or $fail = 1;
387 while (chomp($line = <STRLCPY>)) {
388 # try and find the delcaration of:
389 # size_t strlcpy(...)
390 if ($line =~ /size_t(\0x9|\s)+strlcpy/) {
391 $config{HAS_STRLCPY} = "true";
396 print "yes\n" if $config{HAS_STRLCPY} eq "true";
397 print "no\n" if $config{HAS_STRLCPY} eq "false";
400 printf "Checking if kqueue exists... ";
403 open(KQUEUE, "</usr/include/sys/event.h") or $fail = 1;
405 while (chomp($line = <KQUEUE>)) {
406 # try and find the delcaration of:
408 if ($line =~ /int(\0x9|\s)+kqueue/) {
414 print "yes\n" if $has_kqueue == 1;
415 print "no\n" if $has_kqueue == 0;
417 printf "Checking if epoll exists... ";
420 open(EPOLL, "</usr/include/sys/epoll.h") or $fail = 1;
426 my $kernel = `uname -r`;
428 if (($kernel =~ /2\.0/) || ($kernel =~ /2\.2/) || ($kernel =~ /2\.4/)) {
432 print "yes\n" if $has_epoll == 1;
433 print "no\n" if $has_epoll == 0;
435 if (($config{OSNAME} =~ /CYGWIN/) || ($config{OSNAME} eq "CYG-STATIC")) {
436 $config{HAS_STRLCPY} = "true";
439 $config{HAS_EPOLL} = $has_epoll;
440 $config{HAS_KQUEUE} = $has_kqueue;
442 printf "Checking for libgnutls... ";
443 if (($config{HAS_GNUTLS}) && (($config{HAS_GNUTLS} >= 1.2) || ($config{HAS_GNUTLS} eq "y"))) {
445 $config{HAS_GNUTLS} = "y";
448 $config{HAS_GNUTLS} = "n";
451 printf "Checking for openssl... ";
452 if (($config{HAS_OPENSSL}) && (($config{HAS_OPENSSL} >= 0.8) || ($config{HAS_OPENSSL} eq "y"))) {
454 $config{HAS_OPENSSL} = "y";
457 $config{HAS_OPENSSL} = "n";
460 ################################################################################
461 # BEGIN INTERACTIVE PART #
462 ################################################################################
468 chomp($wholeos = `uname -sr`);
470 my $rev = getrevision();
471 # Display Introduction Message..
473 Welcome to the \033[1mInspIRCd\033[0m Configuration program! (\033[1minteractive mode\033[0m)
474 \033[1mPackage maintainers: Type ./configure --help for non-interactive help\033[0m
476 *** If you are unsure of any of these values, leave it blank for ***
477 *** standard settings that will work, and your server will run ***
478 *** using them. Please consult your IRC network admin if in doubt. ***
480 Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter
481 a new value. Please note: You will \033[1mHAVE\033[0m to read the docs
482 dir, otherwise you won't have a config file!
484 Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos)
485 Maximum file descriptors: \033[1;32m$config{MAX_CLIENT_T}\033[0m
486 Your InspIRCd revision ID is \033[1;32mr$rev\033[0m";
488 print " (Non-SVN build)";
492 $config{CHANGE_COMPILER} = "n";
493 print "I have detected the following compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
495 while (($config{GCCVER} < 3) || ($config{GCCVER} eq "")) {
496 print "\033[1;32mIMPORTANT!\033[0m A GCC 2.x compiler has been detected, and
497 should NOT be used. You should probably specify a newer compiler.\n\n";
498 yesno(CHANGE_COMPILER,"Do you want to change the compiler?");
499 if ($config{CHANGE_COMPILER} =~ /y/i) {
500 print "What command do you want to use to invoke your compiler?\n";
501 print "[\033[1;32m$config{CC}\033[0m] -> ";
502 chomp($config{CC} = <STDIN>);
503 if ($config{CC} eq "") {
506 chomp($foo = `$config{CC} -dumpversion | cut -c 1`);
508 chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change compilers
509 print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n";
510 if ($config{GCCVER} < 3) {
511 print "\033[1;32mGCC 2.x WILL NOT WORK!\033[0m. Let's try that again, shall we?\n";
515 print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n";
522 # Directory Settings..
523 my $tmpbase = $config{BASE_DIR};
524 dir_check("do you wish to install the InspIRCd base", "BASE_DIR");
525 if ($tmpbase ne $config{BASE_DIR}) {
526 $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Dir
527 $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
528 $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
529 $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
532 dir_check("are the configuration files", "CONFIG_DIR");
533 dir_check("are the modules to be compiled to", "MODULE_DIR");
534 dir_check("is the IRCd binary to be placed", "BINARY_DIR");
535 dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
538 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?");
542 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?");
545 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y"));
546 if (!$chose_hiperf) {
547 print "No high-performance socket engines are available, or you chose\n";
548 print "not to enable one. Defaulting to select() engine.\n\n";
551 yesno(IPV6,"Would you like to build InspIRCd with IPv6 support?");
554 if ($config{IPV6} eq "y") {
555 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";
556 $config{SUPPORT_IP6LINKS} = "y";
558 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.");
562 if (($config{HAS_GNUTLS} eq "y") && ($config{HAS_OPENSSL} eq "y")) {
563 print "I have detected both GnuTLS and OpenSSL on your system.\n";
564 print "I will default to GnuTLS. If you wish to use OpenSSL\n";
565 print "instead, you should enable the OpenSSL module yourself\n";
566 print "by copying it from src/modules/extra to src/modules.\n\n";
569 if ($config{HAS_GNUTLS} eq "y") {
570 yesno(USE_GNUTLS, "Would you like to enable SSL Support?");
571 if ($config{USE_GNUTLS} eq "y") {
572 print "\nUsing GnuTLS SSL module.\n";
574 } elsif ($config{HAS_OPENSSL} eq "y") {
575 yesno(USE_OPENSSL, "Would you like to enable SSL Support?");
576 if ($config{USE_OPENSSL} eq "y") {
577 print "\nUsing OpenSSL SSL module.\nYou will get better performance if you move to GnuTLS in the future.\n";
581 print "\nThe following questions will ask you for various figures relating\n";
582 print "To your IRCd install. Please note that these should usually be left\n";
583 print "as defaults unless you have a real reason to change them. If they\n";
584 print "changed, then the values must be identical on all servers on your\n";
585 print "network, or malfunctions and/or crashes may occur, with the exception\n";
586 print "of the 'maximum number of clients' setting which may be different on\n";
587 print "different servers on the network.\n\n";
589 # File Descriptor Settings..
592 print "Maximum number of clients at any one time ($config{MAX_CLIENT_T})\n";
593 print "[\033[1;32m$config{MAX_CLIENT}\033[0m] -> ";
594 chomp($var = <STDIN>);
596 $var = $config{MAX_CLIENT};
598 if ($var =~ /^\d+$/) {
599 if (($var > $config{MAX_CLIENT_T}) && ($fd_scan_failed ne true)) {
600 # Client has entered a larger number than the 'discovered' value
602 print "WARNING: Our scans have indicated that you are attempting
603 to use more sockets than there are avaliable. Are you sure
604 you wish to do this? It may cause the IRCd to malfunction [y/n]
605 [\033[1;32mn\033[0m] -> $c";
606 chomp($tmp = <STDIN>);
608 print "Please enter the correct value.\n\n";
613 print "You must enter a number in this field. Please try again.\n\n";
616 # If we get here, we should be good to go.
617 $config{MAX_CLIENT} = $var;
624 print "What is the maximum length of nicknames?\n";
625 print "[\033[1;32m$config{NICK_LENGT}\033[0m] -> ";
626 chomp($var = <STDIN>);
628 $var = $config{NICK_LENGT};
630 if ($var =~ /^\d+$/) {
631 # We don't care what the number is, set it and be on our way.
632 $config{NICK_LENGT} = $var;
636 print "You must enter a number in this field. Please try again.\n\n";
642 print "What is the maximum length of channel names?\n";
643 print "[\033[1;32m$config{CHAN_LENGT}\033[0m] -> ";
644 chomp($var = <STDIN>);
646 $var = $config{CHAN_LENGT};
648 if ($var =~ /^\d+$/) {
649 # We don't care what the number is, set it and be on our way.
650 $config{CHAN_LENGT} = $var;
654 print "You must enter a number in this field. Please try again.\n\n";
660 print "What is the maximum number of channels a normal user may join at any one time?\n";
661 print "[\033[1;32m$config{MAX_CHANNE}\033[0m] -> ";
662 chomp($var = <STDIN>);
664 $var = $config{MAX_CHANNE};
666 if ($var =~ /^\d+$/) {
667 # We don't care what the number is, set it and be on our way.
668 $config{MAX_CHANNE} = $var;
672 print "You must enter a number in this field. Please try again.\n\n";
678 print "What is the maximum number of channels an oper may join at any one time?\n";
679 print "[\033[1;32m$config{MAX_OPERCH}\033[0m] -> ";
680 chomp($var = <STDIN>);
682 $var = $config{MAX_OPERCH};
684 if ($var =~ /^\d+$/) {
685 # We don't care what the number is, set it and be on our way.
686 $config{MAX_OPERCH} = $var;
694 print "What is the maximum number of mode changes in one line?\n";
695 print "[\033[1;32m$config{MAXI_MODES}\033[0m] -> ";
696 chomp($var = <STDIN>);
698 $var = $config{MAXI_MODES};
700 if ($var =~ /^\d+$/) {
701 # We don't care what the number is, set it and be on our way.
702 $config{MAXI_MODES} = $var;
706 print "You must enter a number in this field. Please try again.\n\n";
712 print "What is the maximum length of an ident (username)?\n";
713 print "[\033[1;32m$config{MAX_IDENT}\033[0m] -> ";
714 chomp($var = <STDIN>);
716 $var = $config{MAX_IDENT};
718 if ($var =~ /^\d+$/) {
719 # We don't care what the number is, set it and be on our way.
720 $config{MAX_IDENT} = $var;
724 print "You must enter a number in this field. Please try again.\n\n";
730 print "What is the maximum length of a quit message?\n";
731 print "[\033[1;32m$config{MAX_QUIT}\033[0m] -> ";
732 chomp($var = <STDIN>);
734 $var = $config{MAX_QUIT};
736 if ($var =~ /^\d+$/) {
737 # We don't care what the number is, set it and be on our way.
738 $config{MAX_QUIT} = $var;
742 print "You must enter a number in this field. Please try again.\n\n";
748 print "What is the maximum length of a channel topic?\n";
749 print "[\033[1;32m$config{MAX_TOPIC}\033[0m] -> ";
750 chomp($var = <STDIN>);
752 $var = $config{MAX_TOPIC};
754 if ($var =~ /^\d+$/) {
755 # We don't care what the number is, set it and be on our way.
756 $config{MAX_TOPIC} = $var;
760 print "You must enter a number in this field. Please try again.\n\n";
766 print "What is the maximum length of a kick message?\n";
767 print "[\033[1;32m$config{MAX_KICK}\033[0m] -> ";
768 chomp($var = <STDIN>);
770 $var = $config{MAX_KICK};
772 if ($var =~ /^\d+$/) {
773 # We don't care what the number is, set it and be on our way.
774 $config{MAX_KICK} = $var;
778 print "You must enter a number in this field. Please try again.\n\n";
784 print "What is the maximum length of a GECOS (real name) field?\n";
785 print "[\033[1;32m$config{MAX_GECOS}\033[0m] -> ";
786 chomp($var = <STDIN>);
788 $var = $config{MAX_GECOS};
790 if ($var =~ /^\d+$/) {
791 # We don't care what the number is, set it and be on our way.
792 $config{MAX_GECOS} = $var;
796 print "You must enter a number in this field. Please try again.\n\n";
802 print "What is the maximum length of an away message?\n";
803 print "[\033[1;32m$config{MAX_AWAY}\033[0m] -> ";
804 chomp($var = <STDIN>);
806 $var = $config{MAX_AWAY};
808 if ($var =~ /^\d+$/) {
809 # We don't care what the number is, set it and be on our way.
810 $config{MAX_AWAY} = $var;
814 print "You must enter a number in this field. Please try again.\n\n";
819 print "Enter the Level Of Binary optimisation. This is a number between 0 and 3.
820 The InspIRCd Team will NOT support any bug reports above 0. Also note,
821 the IRCd behaviour will be different depending on this value. Please
822 read the documentation for more information.
824 The higher the number, the more optimised your binary will be. This
825 value will default to 0 if you either don't enter a number, or enter
826 a value outside the range.
828 As always, if you are unsure, just press enter and accept the default.\n\n";
829 print "[\033[1;32m$config{OPTIMITEMP}\033[0m] -> ";
830 chomp($var = <STDIN>);
832 $var = $config{OPTIMITEMP};
836 $config{OPTIMITEMP} = 1;
837 $config{OPTIMISATI} = "-O";
838 } elsif ($var eq "2") {
839 $config{OPTIMITEMP} = 2;
840 $config{OPTIMISATI} = "-O2";
841 } elsif ($var eq "3") {
842 $config{OPTIMITEMP} = 3;
843 $config{OPTIMISATI} = "-O3";
845 $config{OPTIMITEMP} = 0;
846 $config{OPTIMISATI} = "-g";
850 print "\n\033[1;32mPre-build configuration is complete!\033[0m\n\n";
851 print "\033[0mBase install path:\033[1;32m\t\t$config{BASE_DIR}\033[0m\n";
852 print "\033[0mConfig path:\033[1;32m\t\t\t$config{CONFIG_DIR}\033[0m\n";
853 print "\033[0mModule path:\033[1;32m\t\t\t$config{MODULE_DIR}\033[0m\n";
854 print "\033[0mLibrary path:\033[1;32m\t\t\t$config{LIBRARY_DIR}\033[0m\n";
855 print "\033[0mMax connections:\033[1;32m\t\t$config{MAX_CLIENT}\033[0m\n";
856 print "\033[0mMax User Channels:\033[1;32m\t\t$config{MAX_CHANNE}\033[0m\n";
857 print "\033[0mMax Oper Channels:\033[1;32m\t\t$config{MAX_OPERCH}\033[0m\n";
858 print "\033[0mMax nickname length:\033[1;32m\t\t$config{NICK_LENGT}\033[0m\n";
859 print "\033[0mMax channel length:\033[1;32m\t\t$config{CHAN_LENGT}\033[0m\n";
860 print "\033[0mMax mode length:\033[1;32m\t\t$config{MAXI_MODES}\033[0m\n";
861 print "\033[0mMax ident length:\033[1;32m\t\t$config{MAX_IDENT}\033[0m\n";
862 print "\033[0mMax quit length:\033[1;32m\t\t$config{MAX_QUIT}\033[0m\n";
863 print "\033[0mMax topic length:\033[1;32m\t\t$config{MAX_TOPIC}\033[0m\n";
864 print "\033[0mMax kick length:\033[1;32m\t\t$config{MAX_KICK}\033[0m\n";
865 print "\033[0mMax name length:\033[1;32m\t\t$config{MAX_GECOS}\033[0m\n";
866 print "\033[0mMax away length:\033[1;32m\t\t$config{MAX_AWAY}\033[0m\n";
867 print "\033[0mGCC Version Found:\033[1;32m\t\t$config{GCCVER}.x\033[0m\n";
868 print "\033[0mOptimization Flag:\033[1;32m\t\t$config{OPTIMISATI}\033[0m\n";
869 print "\033[0mCompiler program:\033[1;32m\t\t$config{CC}\033[0m\n";
870 print "\033[0mStatic modules:\033[1;32m\t\t\t$config{STATIC_LINK}\033[0m\n";
871 print "\033[0mIPv6 Support:\033[1;32m\t\t\t$config{IPV6}\033[0m\n";
872 print "\033[0mIPv6 to IPv4 Links:\033[1;32m\t\t$config{SUPPORT_IP6LINKS}\033[0m\n";
873 print "\033[0mGnuTLS Support:\033[1;32m\t\t\t$config{USE_GNUTLS}\033[0m\n";
874 print "\033[0mOpenSSL Support:\033[1;32m\t\t$config{USE_OPENSSL}\033[0m\n\n";
876 if ($config{USE_GNUTLS} eq "y") {
878 open(TMP, "<src/modules/m_ssl_gnutls.cpp") or $failed = 1;
881 print "Symlinking src/modules/m_ssl_gnutls.cpp from extra/\n";
882 chdir("src/modules");
883 system("ln -s extra/m_ssl_gnutls.cpp");
884 system("ln -s extra/ssl_cert.h");
891 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
893 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
896 print "SSL Certificates Not found, Generating.. \n\n
897 *************************************************************
898 * Generating the Private Key may take some time, go grab a *
899 * Coffee. Even better, to generate some more entropy if it *
900 * is taking a while, open another console and type du / a *
901 * few times and get that HD going :) Then answer the *
902 * Questions which follow. If you are unsure, just hit enter *
903 *************************************************************\n\n";
904 system("certtool --generate-privkey --outfile key.pem");
905 system("certtool --generate-self-signed --load-privkey key.pem --outfile cert.pem");
906 print "\nCertificate generation complete, copying to config directory... ";
907 system("mv key.pem $config{CONFIG_DIR}/key.pem");
908 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
911 print "SSL Certificates found, skipping.\n\n"
916 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
918 } elsif ($config{USE_OPENSSL} eq "y") {
920 open(TMP, "<src/modules/m_ssl_openssl.cpp") or $failed = 1;
923 print "Symlinking src/modules/m_ssl_openssl.cpp from extra/\n";
924 chdir("src/modules");
925 system("ln -s extra/m_ssl_openssl.cpp");
926 system("ln -s extra/ssl_cert.h");
933 open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
935 open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1;
938 print "SSL Certificates Not found, Generating.. \n\n
939 *************************************************************
940 * Generating the certificates may take some time, go grab a *
941 * coffee, or something. *
942 *************************************************************\n\n";
943 system("openssl req -x509 -nodes -newkey rsa:1024 -keyout key.pem -out cert.pem");
944 system("openssl dhparam -out dhparams.pem 1024");
945 print "\nCertificate generation complete, copying to config directory... ";
946 system("mv key.pem $config{CONFIG_DIR}/key.pem");
947 system("mv cert.pem $config{CONFIG_DIR}/cert.pem");
948 system("mv dhparams.pem $config{CONFIG_DIR}/dhparams.pem");
951 print "SSL Certificates found, skipping.\n\n"
956 print "Skipping SSL certificate generation\nin non-interactive mode.\n\n";
959 if (($config{USE_GNUTLS} eq "n") && ($config{USE_OPENSSL} eq "n")) {
960 print "Skipping SSL Certificate generation, SSL support is not available.\n\n";
968 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n";
969 if (($config{USE_GNUTLS} eq "y") || ($config{USE_OPENSSL} eq "y")) {
970 print "Please remember that to enable \033[1;32mSSL support\033[0m you must\n";
971 print "load the required modules in your config. This configure process\n";
972 print "has just prepared these modules to be compiled for you, and has not\n";
973 print "configured them to be compiled into the core of the ircd.\n";
975 print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n";
976 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
977 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";
980 if ($config{GCCVER} < "3") {
982 \033[1;32mWARNING!\033[0m You are attempting to compile InspIRCd on GCC 2.x!
983 GCC 2.x series compilers only had partial (read as broken) C++ support, and
984 your compile will most likely fail horribly! If you have any problems, do NOT
985 report them to the bugtracker or forums without first upgrading your compiler
986 to a newer 3.x or 4.x (or whatever is available currently) version.
990 ################################################################################
992 ################################################################################
994 # Retrieves the .config.cache file, and loads values into the main config hash.
995 open(CACHE, ".config.cache") or return undef;
998 # Ignore Blank lines, and comments..
1001 my ($key, $value) = split("=", $_);
1002 $value =~ /^\"(.*)\"$/;
1003 # Do something with data here!
1011 # Dump the contents of %config
1012 print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
1013 open(FILEHANDLE, ">.config.cache");
1014 foreach $key (keys %config) {
1015 print FILEHANDLE "$key=\"$config{$key}\"\n";
1021 my ($desc, $hash_key) = @_;
1023 while (!$complete) {
1024 print "In what directory $desc?\n";
1025 print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
1026 chomp($var = <STDIN>);
1028 $var = $config{$hash_key};
1030 if ($var =~ /^\~\/(.+)$/) {
1031 # Convert it to a full path..
1032 $var = resolve_directory($ENV{HOME} . "/" . $1);
1034 elsif ((($config{OSNAME} == "MINGW32") and ($var !~ /^[A-Z]{1}:\\.*/)) and (substr($var,0,1) ne "/"))
1036 # Assume relative Path was given.. fill in the rest.
1037 $var = $this . "/$var";
1040 $var = resolve_directory($var);
1042 print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
1043 chomp($tmp = <STDIN>);
1044 if (($tmp eq "") || ($tmp =~ /^y/i)) {
1045 # Attempt to Create the Dir..
1047 system("mkdir -p \"$var\" >> /dev/null 2>&1");
1048 $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
1050 print "Unable to create directory. ($var)\n\n";
1055 # They said they don't want to create, and we can't install there.
1060 if (!is_dir($var)) {
1061 # Target exists, but is not a directory.
1062 print "File $var exists, but is not a directory.\n\n";
1066 # Either Dir Exists, or was created fine.
1067 $config{$hash_key} = $var;
1074 if ($config{OSNAME} =~ /BSD$/) {
1075 $config{LDLIBS} = "-lstdc++";
1076 $config{FLAGS} = "-fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}";
1077 $config{MAKEPROG} = "gmake";
1078 if ($config{OSNAME} eq "OpenBSD") {
1079 chomp($foo = `eg++ -dumpversion | cut -c 1`);
1080 # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
1081 # if theyre not running this, configure lets the build continue but they probably wont manage to
1082 # compile as this standard version is 2.95.3!
1084 $config{CC} = "eg++";
1085 chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change the compiler path
1089 $config{LDLIBS} = "-ldl -lstdc++";
1090 $config{FLAGS} = "-fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}";
1091 $config{MAKEPROG} = "make";
1092 if ($config{OSNAME} =~ /CYGWIN/) {
1093 $config{FLAGS} = "-Wall -Woverloaded-virtual $config{OPTIMISATI}";
1094 $config{LDLIBS} = "";
1095 $config{MAKEPROG} = "/usr/bin/make";
1096 $config{MAKEORDER} = "ircd mods";
1097 } elsif ($config{OSNAME} eq "CYG-STATIC") {
1098 $config{FLAGS} = "-Wall -Woverloaded-virtual $config{OPTIMISATI}";
1099 $config{LDLIBS} = "";
1100 $config{MAKEPROG} = "/usr/bin/make";
1101 $config{MAKEORDER} = "mods ircd";
1102 $config{STATICLIBS} = "modules/mods.a";
1103 $config{STATIC_LINK} = "yes";
1107 if ($config{OSNAME} =~ /SunOS/)
1109 # solaris/sunos needs these
1110 # socket = bsd sockets api
1112 # rt = POSIX realtime extensions
1113 # resolv = inet_aton only (why isnt this in nsl?!)
1114 $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv";
1117 if($config{OSNAME} eq "MINGW32")
1119 # All code is position-independent on windows
1120 $config{FLAGS} =~ s/-fPIC //;
1138 print "Detecting modules ";
1139 opendir(DIRHANDLE, "src/modules");
1140 foreach $name (sort readdir(DIRHANDLE)) {
1141 if ($name =~ /^m_(.+)\.cpp$/)
1144 if ($mod !~ /_static$/) {
1145 $modlist[$i++] = $mod;
1150 closedir(DIRHANDLE);
1151 print "\nOk, $i modules.\n";
1158 my $data = `svn info`;
1165 $data =~ /Revision: (\d+)/;
1167 if (!defined($rev)) {
1174 my($writeheader) = @_;
1175 # First File.. inspircd_config.h
1176 chomp(my $incos = `uname -n -s -r`);
1177 chomp(my $version = `sh ./src/version.sh`);
1178 chomp(my $revision = getrevision());
1179 $version = "$version(r$revision)";
1180 chomp(my $revision2 = getrevision());
1181 if ($writeheader == 1)
1183 print "Writing \033[1;32minspircd_config.h\033[0m\n";
1184 open(FILEHANDLE, ">include/inspircd_config.h");
1185 my $NL = $config{NICK_LENGT}+1;
1186 my $CL = $config{CHAN_LENGT}+1;
1187 print FILEHANDLE <<EOF;
1188 /* Auto generated by configure, do not modify! */
1189 #ifndef __CONFIGURATION_AUTO__
1190 #define __CONFIGURATION_AUTO__
1192 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
1193 #define MOD_PATH "$config{MODULE_DIR}"
1194 #define VERSION "$version"
1195 #define REVISION "$revision2"
1196 #define MAXCLIENTS $config{MAX_CLIENT}
1197 #define MAX_DESCRIPTORS $config{MAX_DESCRIPTORS}
1200 #define MAXCHANS $config{MAX_CHANNE}
1201 #define OPERMAXCHANS $config{MAX_OPERCH}
1202 #define MAXMODES $config{MAXI_MODES}
1203 #define IDENTMAX $config{MAX_IDENT}
1204 #define MAXQUIT $config{MAX_QUIT}
1205 #define MAXTOPIC $config{MAX_TOPIC}
1206 #define MAXKICK $config{MAX_KICK}
1207 #define MAXGECOS $config{MAX_GECOS}
1208 #define MAXAWAY $config{MAX_AWAY}
1209 #define OPTIMISATION $config{OPTIMITEMP}
1210 #define LIBRARYDIR "$config{LIBRARY_DIR}"
1211 #define SYSTEM "$incos"
1214 if ($config{OSNAME} =~ /SunOS/) {
1215 print FILEHANDLE "#define IS_SOLARIS\n";
1217 if ($config{OSNAME} =~ /CYGWIN/) {
1218 print FILEHANDLE "#define IS_CYGWIN\n";
1219 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
1221 if ($config{OSNAME} eq "MINGW32") {
1222 print FILEHANDLE "#define IS_MINGW\n";
1224 if ($config{OSNAME} eq "CYG-STATIC") {
1225 print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n";
1227 if ($config{STATIC_LINK} eq "yes") {
1228 print FILEHANDLE "#define STATIC_LINK\n";
1230 if ($config{GCCVER} >= 3) {
1231 print FILEHANDLE "#define GCC3\n";
1233 if ($config{HAS_STRLCPY} eq "true") {
1234 print FILEHANDLE "#define HAS_STRLCPY\n";
1236 if ($config{HAS_STDINT} eq "true") {
1237 print FILEHANDLE "#define HAS_STDINT\n";
1239 if ($config{IPV6} =~ /y/i) {
1240 print FILEHANDLE "#define IPV6\n";
1242 if ($config{SUPPORT_IP6LINKS} =~ /y/i) {
1243 print FILEHANDLE "#define SUPPORT_IP6LINKS\n";
1246 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1247 print FILEHANDLE "#define USE_KQUEUE\n";
1248 $se = "socketengine_kqueue";
1251 if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1252 print FILEHANDLE "#define USE_EPOLL\n";
1253 $se = "socketengine_epoll";
1256 # user didn't choose either epoll or select for their OS.
1257 # default them to USE_SELECT (ewwy puke puke)
1259 print FILEHANDLE "#define USE_SELECT\n";
1260 $se = "socketengine_select";
1262 print FILEHANDLE "\n#endif\n";
1268 open(FILEHANDLE, ">include/inspircd_se_config.h");
1269 print FILEHANDLE <<EOF;
1270 /* Auto generated by configure, do not modify or commit to svn! */
1271 #ifndef __CONFIGURATION_SOCKETENGINE__
1272 #define __CONFIGURATION_SOCKETENGINE__
1282 # Create a Modules List..
1284 foreach $i (@modlist)
1286 if ($config{STATIC_LINK} eq "yes") {
1287 $modules .= "m_".$i.".o ";
1290 $modules .= "m_".$i.".so ";
1293 chomp($modules); # Remove Redundant whitespace..
1296 # Write all .in files.
1299 my $exe = "inspircd";
1301 if ($config{OSNAME} =~ /CYGWIN/) {
1302 $exe = "inspircd.exe";
1305 opendir(DIRHANDLE, $this);
1307 foreach $name (sort readdir(DIRHANDLE)) {
1308 if ($name =~ /^\.(.+)\.inc$/) {
1310 # All .name.inc files need parsing!
1312 open(FILEHANDLE, ".$file.inc");
1313 while (<FILEHANDLE>) {
1318 $tmp =~ s/\@CC\@/$config{CC}/;
1319 $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
1320 $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
1321 $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
1322 $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/;
1323 $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
1324 $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
1325 $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
1326 $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
1327 $tmp =~ s/\@MODULES\@/$modules/;
1328 $tmp =~ s/\@EXECUTABLE\@/$exe/;
1329 $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
1330 $tmp =~ s/\@STATICLIBS\@/$config{STATICLIBS}/;
1332 print "Writing \033[1;32m$file\033[0m\n";
1333 open(FILEHANDLE, ">$file");
1334 print FILEHANDLE $tmp;
1337 closedir(DIRHANDLE);
1339 # Make inspircd executable!
1340 chmod 0744, 'inspircd';
1342 if ($config{STATIC_LINK} eq "yes") {
1343 print "Writing static-build \033[1;32msrc/Makefile\033[0m\n";
1344 write_static_makefile();
1345 write_static_modules_makefile();
1346 } elsif ($config{OSNAME} =~ /CYGWIN/) {
1347 print "Writing cygwin-build \033[1;32msrc/Makefile\033[0m\n";
1348 write_static_makefile();
1349 write_dynamic_modules_makefile();
1351 print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
1352 write_dynamic_makefile();
1353 write_dynamic_modules_makefile();
1357 sub getcompilerflags {
1361 if ($_ =~ /^\/\* \$CompileFlags: (.+) \*\/$/) {
1370 sub getlinkerflags {
1374 if ($_ =~ /^\/\* \$LinkerFlags: (.+) \*\/$/) {
1383 sub resolve_directory {
1385 return File::Spec->rel2abs($_[0]);
1389 my ($flag,$prompt) = @_;
1390 print "$prompt [\033[1;32m$config{$flag}\033[0m] -> ";
1391 chomp($tmp = <STDIN>);
1392 if ($tmp eq "") { $tmp = $config{$flag} }
1394 if (($tmp eq "") || ($tmp =~ /^y/i)) {
1395 $config{$flag} = "y";
1397 $config{$flag} = "n";
1402 sub write_static_modules_makefile {
1403 # Modules Makefile..
1404 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1405 open(FILEHANDLE, ">src/modules/Makefile");
1408 # Module Makefile Header
1410 print FILEHANDLE <<EOF;
1411 # (C) ChatSpike development team
1412 # Makefile by <Craig\@ChatSpike.net>
1413 # Many Thanks to Andrew Church <achurch\@achurch.org>
1414 # for assisting with making this work right.
1416 # Automatically Generated by ./configure to add a modules
1417 # please run ./configure --update
1423 # End Module Makefile Header
1426 # Create a Modules List..
1431 open(MODLIST,">include/modlist.h");
1434 # Include File Header
1436 print MODLIST <<HEADER;
1437 // Generated automatically by configure. DO NOT EDIT!
1439 #ifndef __SYMBOLS__H_CONFIGURED__
1440 #define __SYMBOLS__H_CONFIGURED__
1444 # End Include File Header
1447 # Place Module List into Include
1448 foreach $i (@modlist) {
1449 if ($i !~ /_static$/) {
1450 print MODLIST "extern \"C\" void * $i\_init (void);\n";
1453 print MODLIST "\nstruct {const char *name; initfunc *value; } modsyms[] = {\n";
1458 foreach $i (@modlist)
1460 if ($i !~ /_static$/) {
1461 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1462 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1465 # Write Entry to the Makefile
1467 print FILEHANDLE <<EOCHEESE;
1468 m_$i.o: .m_$i\_static.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h
1469 \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c .m_$i\_static.cpp
1470 mv .m_$i\_static.o ../m_$i.o
1474 # End Write Entry to the MakeFile
1476 print "Configuring module [\033[1;32mm_$i.so\033[0m] for static linking... ";
1477 open(MODULE,"<src/modules/m_".$i.".cpp") or die("Could not open m_".$i.".cpp");
1478 open(MUNGED,">src/modules/.m_".$i."_static.cpp") or die("Could not create .m_".$i."_static.cpp");
1479 while (chomp($a = <MODULE>)) {
1480 $a =~ s/init_module/$i\_init/g;
1481 print MUNGED "$a\n";
1485 print MODLIST <<EOENT;
1486 {"m_$i.so",\&$i\_init},
1491 print MODLIST "{0}};\n\n#endif\n";
1495 sub write_dynamic_modules_makefile {
1496 # Modules Makefile..
1497 print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
1498 open(FILEHANDLE, ">src/modules/Makefile");
1501 if ($config{OSNAME} =~ /CYGWIN/) {
1502 $extra = "../inspircd.dll.a";
1506 # Module Makefile Header
1508 print FILEHANDLE <<EOF;
1509 # (C) ChatSpike development team
1510 # Makefile by <Craig\@ChatSpike.net>
1511 # Many Thanks to Andrew Church <achurch\@achurch.org>
1512 # for assisting with making this work right.
1514 # Automatically Generated by ./configure to add a modules
1515 # please run ./configure -update or ./configure -modupdate
1521 # End Module Makefile Header
1524 # Create a Modules List..
1530 foreach $i (@modlist) {
1532 # Write Entry to the MakeFile
1534 $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
1535 $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
1536 print FILEHANDLE <<EOCHEESE;
1537 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
1538 \$(CC) -pipe -I../../include \$(FLAGS) $cmflags -export-dynamic -c m_$i.cpp
1539 \$(CC) \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o $extra
1542 $crud = $crud . " install -m 0700 m_$i.so \$(MODPATH)\n";
1544 # End Write Entry to the MakeFile
1547 print FILEHANDLE "modinst:\n \@echo \"Installing modules...\"\n" . $crud;
1551 sub write_static_makefile {
1552 open(FH,">src/Makefile") or die("Could not write src/Makefile!");
1555 opendir(DIRHANDLE, "src");
1556 foreach $name (sort readdir(DIRHANDLE)) {
1557 if ($name =~ /^cmd_(.+)\.cpp$/) {
1558 $cmdlist[$i++] = $1;
1561 closedir(DIRHANDLE);
1564 foreach my $cmd (@cmdlist) {
1565 $cmdobjs = $cmdobjs . "cmd_$cmd.o ";
1566 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1571 # (C) ChatSpike development team
1572 # Makefile by <Craig\@ChatSpike.net>
1573 # Makefile version 2 (statically linked core) by <brain\@inspircd.org>
1576 CC = im a cheezeball
1578 CXXFLAGS = -I../include \${FLAGS}
1579 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1580 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1584 $se = "socketengine_select";
1585 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1586 $se = "socketengine_kqueue";
1588 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1589 $se = "socketengine_epoll";
1593 # This next section is for cygwin dynamic module builds.
1594 # Basically, what we do, is build the inspircd core as a library
1595 # then the main executable uses that. the library is capable of
1596 # loading / unloading the modules dynamically :)
1597 # Massive thanks to the guys on #cygwin @ irc.freenode.net for helping
1601 if ($config{OSNAME} =~ /CYGWIN/) {
1603 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
1605 inspircd.exe: inspircd.dll.a
1608 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
1609 \$(CC) -shared -Wl,--out-implib=inspircd.dll.a -o inspircd.dll \$^
1613 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
1615 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
1616 \$(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)
1622 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
1623 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1625 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
1626 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1628 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
1629 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1631 userprocess.o: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1632 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1634 socketengine.o: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1635 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1637 hashcomp.o: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1638 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1640 helperfuncs.o: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1641 \$(CC) -pipe -I/usr/local/include -L/usr/local/lib -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1643 channels.o: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1644 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1646 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
1647 \${MAKE} -C "modes" DIRNAME="src/modes" \$(MAKEARGS)
1648 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1650 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
1651 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1653 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
1654 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1656 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
1657 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1659 base.o: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1660 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1662 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
1663 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1665 commands.o: commands.cpp ../include/base.h ../include/commands.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h $srcobjs
1666 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp $cmdobjs
1668 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
1669 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1671 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
1672 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1674 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
1675 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1677 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
1678 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1680 socket.o: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1681 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1683 inspsocket.o: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1684 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1686 aes.o: aes.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1687 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c aes.cpp
1689 timer.o: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1690 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1693 foreach my $cmd (@cmdlist) {
1695 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
1696 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1702 sub write_dynamic_makefile {
1706 opendir(DIRHANDLE, "src");
1707 foreach $name (sort readdir(DIRHANDLE)) {
1708 if ($name =~ /^cmd_(.+)\.cpp$/) {
1709 $cmdlist[$i++] = $1;
1712 closedir(DIRHANDLE);
1716 foreach my $cmd (@cmdlist) {
1717 $cmdobjs = $cmdobjs . "cmd_$cmd.so ";
1718 $srcobjs = $srcobjs . "cmd_$cmd.cpp ";
1721 $se = "socketengine_select";
1722 if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
1723 $se = "socketengine_kqueue";
1725 elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
1726 $se = "socketengine_epoll";
1729 open(FH,">src/Makefile") or die("Could not write src/Makefile");
1733 # (C) ChatSpike development team
1734 # Makefile by <Craig\@ChatSpike.net>
1735 # Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
1738 CC = im a cheezeball
1740 CXXFLAGS = -I../include \${FLAGS}
1741 CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn)
1742 RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn)
1744 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
1746 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
1747 \$(CC) -I../include $extra -Wl,--rpath -Wl,/usr/local/lib -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
1749 libIRCDsocketengine.so: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
1750 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
1751 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocketengine.so socketengine.o $se.o
1753 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
1754 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c snomasks.cpp
1755 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsnomasks.so snomasks.o
1757 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
1758 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c command_parse.cpp
1759 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommand_parse.so command_parse.o
1761 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
1762 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp
1763 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcull_list.so cull_list.o
1765 libIRCDuserprocess.so: userprocess.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
1766 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c userprocess.cpp
1767 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDuserprocess.so userprocess.o
1769 libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1770 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
1771 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhash.so hashcomp.o
1773 libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1774 \$(CC) -pipe -I/usr/local/include -L/usr/local/lib -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
1775 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDhelper.so helperfuncs.o
1777 libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1778 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
1779 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDchannels.so channels.o
1781 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)
1782 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
1783 \${MAKE} -C "modes" DIRNAME="src/modes" \$(MAKEARGS) CPPFILES="\$(CPPFILES)"
1784 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmode.so mode.o modes/modeclasses.a
1786 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
1787 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
1788 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDxline.so xline.o
1790 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
1791 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
1792 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDstring.so inspstring.o
1794 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
1795 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
1796 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDasyncdns.so dns.o
1798 libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
1799 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
1800 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDbase.so base.o
1802 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
1803 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c configreader.cpp
1804 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDconfigreader.so configreader.o
1806 libIRCDcommands.so: commands.cpp ../include/base.h ../include/commands.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
1807 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
1808 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDcommands.so commands.o
1810 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
1811 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
1812 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDdynamic.so dynamic.o
1814 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
1815 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
1816 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDusers.so users.o
1818 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
1819 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
1820 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDmodules.so modules.o
1822 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
1823 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
1824 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDwildcard.so wildcard.o
1826 libIRCDsocket.so: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1827 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socket.cpp
1828 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDsocket.so socket.o
1830 libIRCDinspsocket.so: inspsocket.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1831 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspsocket.cpp
1832 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDinspsocket.so inspsocket.o
1834 libIRCDaes.so: aes.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1835 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c aes.cpp
1836 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDaes.so aes.o
1838 libIRCDtimer.so: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
1839 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
1840 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDtimer.so timer.o
1843 foreach my $cmd (@cmdlist) {
1845 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
1846 \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cmd_$cmd.cpp
1847 \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o cmd_$cmd.so cmd_$cmd.o
1856 chomp($PWD = `pwd`);
1857 print "Usage: configure [options]
1858 Options: [defaults in brackets after descriptions]
1860 When no options are specified, interactive
1861 configuration is started and you must specify
1862 any required values manually. If one or more
1863 options are specified, non-interactive configuration
1864 is started, and any omitted values are defaulted.
1866 Arguments with a single \"-\" symbol, as in
1867 InspIRCd 1.0.x, are also allowed.
1869 --disable-interactive Sets no options intself, but
1870 will disable any interactive prompting.
1871 --update Update makefiles and dependencies
1872 --modupdate Detect new modules and write makefiles
1873 --svnupdate {rebuild} Update working copy via subversion
1874 {and optionally rebuild it}
1875 --clean Remove .config.cache file and go interactive
1876 --enable-gnutls Enable GnuTLS module [no]
1877 --enable-openssl Enable OpenSSL module [no]
1878 --with-nick-length=[n] Specify max. nick length [32]
1879 --with-channel-length=[n] Specify max. channel length [64]
1880 --with-max-channels=[n] Specify max. number of channels
1881 a normal user may join [20]
1882 --with-max-oper-channels=[n] Specify max. number of channels
1883 an irc operator may join [60]
1884 --with-max-clients=[n] Specify maximum number of users
1885 which may connect locally
1886 --enable-optimization=[n] Optimize using -O[n] gcc flag
1887 --enable-epoll Enable epoll() where supported [set]
1888 --enable-kqueue Enable kqueue() where supported [set]
1889 --disable-epoll Do not enable epoll(), fall back
1890 to select() [not set]
1891 --disable-kqueue Do not enable kqueue(), fall back
1892 to select() [not set]
1893 --enable-ipv6 Build ipv6 native InspIRCd [no]
1894 --enable-remote-ipv6 Build with ipv6 support for remote
1895 servers on the network [yes]
1896 --disable-remote-ipv6 Do not allow remote ipv6 servers [not set]
1897 --with-cc=[filename] Use an alternative g++ binary to
1898 build InspIRCd [g++]
1899 --with-ident-length=[n] Specify max length of ident [12]
1900 --with-quit-length=[n] Specify max length of quit [200]
1901 --with-topic-length=[n] Specify max length of topic [350]
1902 --with-kick-length=[n] Specify max length of kick [200]
1903 --with-gecos-length=[n] Specify max length of gecos [150]
1904 --with-away-length=[n] Specify max length of away [150]
1905 --with-max-modes=[n] Specify max modes per line which
1906 have parameters [20]
1907 --prefix=[directory] Base directory to install into (if defined,
1908 can automatically define config, module, bin
1909 and library dirs as subdirectories of prefix)
1911 --config-dir=[directory] Config file directory for config and SSL certs
1913 --module-dir=[directory] Modules directory for loadable modules
1915 --binary-dir=[directory] Binaries directory for core binary
1917 --library-dir=[directory] Library directory for core libraries
1919 --help Show this help text and exit