X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=configure;h=67e5b7aab44bd327b29653cfeea35375ed3bd7ad;hb=b5944899a98a6cc0bae7bff0fe195b7e550e26bb;hp=841f56b7de3089eb139719c152ab194260af599a;hpb=7b78e73fdbd38c0aa1f711d95a3026652a05ca8b;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/configure b/configure index 841f56b7d..67e5b7aab 100755 --- a/configure +++ b/configure @@ -1,151 +1,439 @@ #!/usr/bin/perl +################################################### # InspIRCd Configuration Script # -# Copyright 2003 The ChatSpike Development Team -# -# +# Copyright 2002-2007 The InspIRCd Development Team +# http://www.inspircd.org/wiki/index.php/Credits # -# [14:21] Brain: i know perl-fu! +# Licensed under GPL, please see the COPYING file +# for more information # # $Id$ # -######################################## - -chomp($topdir = `pwd`); +################################################### + +require 5.6.0; +use Socket; +use Cwd; +use Getopt::Long; + +# Utility functions for our buildsystem +use make::utilities; +use make::configure; +use make::gnutlscert; +use make::opensslcert; + +GetOptions ( + 'enable-gnutls' => \$opt_use_gnutls, + 'rebuild' => \$opt_rebuild, + 'enable-openssl' => \$opt_use_openssl, + 'disable-interactive' => \$opt_nointeractive, + 'with-nick-length=i' => \$opt_nick_length, + 'with-channel-length=i' => \$opt_chan_length, + 'with-max-clients=i' => \$opt_maxclients, + 'enable-ports' => \$opt_ports, + 'enable-epoll' => \$opt_epoll, + 'enable-kqueue' => \$opt_kqueue, + 'disable-ports' => \$opt_noports, + 'disable-epoll' => \$opt_noepoll, + 'disable-kqueue' => \$opt_nokqueue, + 'enable-ipv6' => \$opt_ipv6, + 'enable-remote-ipv6' => \$opt_ipv6links, + 'disable-remote-ipv6' => \$opt_noipv6links, + 'with-cc=s' => \$opt_cc, + 'with-ident-length=i' => \$opt_ident, + 'with-quit-length=i' => \$opt_quit, + 'with-topic-length=i' => \$opt_topic, + 'with-maxbuf=i' => \$opt_maxbuf, + 'with-kick-length=i' => \$opt_kick, + 'with-gecos-length=i' => \$opt_gecos, + 'with-away-length=i' => \$opt_away, + 'with-max-modes=i' => \$opt_modes, + 'prefix=s' => \$opt_base_dir, + 'config-dir=s' => \$opt_config_dir, + 'module-dir=s' => \$opt_module_dir, + 'binary-dir=s' => \$opt_binary_dir, + 'library-dir=s' => \$opt_library_dir, + 'disable-debuginfo' => sub { $opt_disable_debug = 1 }, + 'help' => sub { showhelp(); }, + 'modupdate' => sub { modupdate(); }, + 'update' => sub { update(); }, + 'svnupdate' => sub { svnupdate(); }, + 'clean' => sub { clean(); }, +); + +my $non_interactive = ( + (defined $opt_library_dir) || + (defined $opt_base_dir) || + (defined $opt_config_dir) || + (defined $opt_module_dir) || + (defined $opt_base_dir) || + (defined $opt_binary_dir) || + (defined $opt_nointeractive) || + (defined $opt_away) || + (defined $opt_gecos) || + (defined $opt_kick) || + (defined $opt_maxclients) || + (defined $opt_modes) || + (defined $opt_topic) || + (defined $opt_quit) || + (defined $opt_ident) || + (defined $opt_cc) || + (defined $opt_ipv6) || + (defined $opt_ipv6links) || + (defined $opt_noipv6links) || + (defined $opt_kqueue) || + (defined $opt_epoll) || + (defined $opt_ports) || + (defined $opt_maxchans) || + (defined $opt_opermaxchans) || + (defined $opt_chan_length) || + (defined $opt_nick_length) || + (defined $opt_use_openssl) || + (defined $opt_nokqueue) || + (defined $opt_noepoll) || + (defined $opt_noports) || + (defined $opt_maxbuf) || + (defined $opt_use_gnutls) +); +my $interactive = !$non_interactive; + + +chomp($topdir = getcwd()); $this = resolve_directory($topdir); # PWD, Regardless. -@modlist = (); # Declare for Module List.. -%config = (); # Initiate Configuration Hash.. -$config{ME} = resolve_directory($topdir); # Present Working Directory -$config{BASE_DIR} = $config{ME}; # Use CWD as 'Base' Directory. -$config{CONFIG_DIR} = resolve_directory($config{ME}."/conf"); # Configuration Directory -$config{MODULE_DIR} = resolve_directory($config{ME}."/modules"); # Modules Directory -$config{BINARY_DIR} = resolve_directory($config{ME}."/bin"); # Binary Directory -$config{LIBRARY_DIR} = resolve_directory($config{ME}."/lib"); # Library Directory +@modlist = (); # Declare for Module List.. +%config = (); # Initiate Configuration Hash.. +$config{ME} = resolve_directory($topdir); # Present Working Directory + +$config{BASE_DIR} = $config{ME}; + +if (defined $opt_base_dir) +{ + $config{BASE_DIR} = $opt_base_dir; +} + +$config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Directory +$config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory +$config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory +$config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory + +if (defined $opt_config_dir) +{ + $config{CONFIG_DIR} = $opt_config_dir; +} +if (defined $opt_module_dir) +{ + $config{MODULE_DIR} = $opt_module_dir; +} +if (defined $opt_binary_dir) +{ + $config{BINARY_DIR} = $opt_binary_dir; +} +if (defined $opt_library_dir) +{ + $config{LIBRARY_DIR} = $opt_library_dir; +} chomp($config{HAS_GNUTLS} = `libgnutls-config --version 2>/dev/null | cut -c 1,2,3`); # GNUTLS Version. -chomp($config{HAS_OPENSSL} = `openssl version 2>/dev/null`); # Openssl version -$config{USE_GNUTLS} = "n"; # Use gnutls. -$config{USE_OPENSSL} = "n"; # Use openssl. -$config{OPTIMITEMP} = "0"; # Default Optimisation Value -$config{OPTIMISATI} = "-g"; # Optimisation Flag -$config{NICK_LENGT} = "31"; # Default Nick Length -$config{CHAN_LENGT} = "64"; # Default Channel Name Length -$config{MAX_CHANNE} = "20"; # Default Max. Channels per user -$config{MAX_OPERCH} = "60"; # Default Max. Channels per oper -$config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once. -$config{HAS_STRLCPY} = "false"; # strlcpy Check. -$config{USE_KQUEUE} = "y"; # kqueue enabled -$config{USE_EPOLL} = "y"; # epoll enabled -$config{THREADED_DNS} = "n"; # threaded dns (experimental) -$config{STATIC_LINK} = "no"; # are doing static modules? -chomp($config{MAX_CLIENT_T} = `sh -c \"ulimit -n\"`); # FD Limit -chomp($config{MAX_DESCRIPTORS} = `sh -c \"ulimit -n\"`); # Hard FD Limit -chomp($config{GCCVER} = `gcc -dumpversion | cut -c 1`); # Major GCC Version -chomp($config{GCC34} = `gcc -dumpversion | cut -c 3`); # Minor GCC Version -chomp($config{OSNAME} = `/bin/uname`); # Operating System Name +chomp($config{HAS_OPENSSL} = `pkg-config --modversion openssl 2>/dev/null`); # Openssl version +chomp($gnutls_ver = $config{HAS_GNUTLS}); +chomp($openssl_ver = $config{HAS_OPENSSL}); +$config{USE_GNUTLS} = "n"; +if (defined $opt_use_gnutls) +{ + $config{USE_GNUTLS} = "y"; # Use gnutls. +} +$config{USE_OPENSSL} = "n"; # Use openssl. +if (defined $opt_use_openssl) +{ + $config{USE_OPENSSL} = "y"; +} + +# no, let's not change these. +$config{OPTIMITEMP} = "0"; # Default Optimisation Value +if (!defined $opt_disable_debug) +{ + $config{OPTIMISATI} = "-g1"; # Optimisation Flag +} +else +{ + $config{OPTIMISATI} = "-O2"; # DEBUGGING OFF! +} + +$config{NICK_LENGT} = "31"; # Default Nick Length +if (defined $opt_nick_length) +{ + $config{NICK_LENGT} = $opt_nick_length; +} +$config{CHAN_LENGT} = "64"; # Default Channel Name Length +if (defined $opt_chan_length) +{ + $config{CHAN_LENGT} = $opt_chan_length; +} +$config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once. +if (defined $opt_modes) +{ + $config{MAXI_MODES} = $opt_modes; +} +$config{HAS_STRLCPY} = "false"; # strlcpy Check. +$config{HAS_STDINT} = "false"; # stdint.h check +$config{USE_KQUEUE} = "y"; # kqueue enabled +if (defined $opt_kqueue) +{ + $config{USE_KQUEUE} = "y"; +} +if (defined $opt_nokqueue) +{ + $config{USE_KQUEUE} = "n"; +} +$config{USE_EPOLL} = "y"; # epoll enabled +if (defined $opt_epoll) +{ + $config{USE_EPOLL} = "y"; +} +if (defined $opt_noepoll) +{ + $config{USE_EPOLL} = "n"; +} +$config{USE_PORTS} = "y"; # epoll enabled +if (defined $opt_ports) +{ + $config{USE_PORTS} = "y"; +} +if (defined $opt_noports) +{ + $config{USE_PORTS} = "n"; +} +$config{IPV6} = "n"; # IPv6 support (experimental) +if (defined $opt_ipv6) +{ + $config{IPV6} = "y"; +} +$config{SUPPORT_IP6LINKS} = "y"; # IPv4 supporting IPv6 links (experimental) +if (defined $opt_ipv6links) +{ + $config{SUPPORT_IP6LINKS} = "y"; +} +if (defined $opt_noipv6links) +{ + $config{SUPPORT_IP6LINKS} = "n"; +} +$config{STATIC_LINK} = "no"; # are doing static modules? +chomp($config{MAX_CLIENT_T} = `sh -c \"ulimit -n\"`); # FD Limit +chomp($config{MAX_DESCRIPTORS} = `sh -c \"ulimit -n\"`); # Hard FD Limit +chomp($config{GCCVER} = `g++ -dumpversion | cut -c 1`); # Major GCC Version +$config{_SOMAXCONN} = SOMAXCONN; # Max connections in accept queue +$config{OSNAME} = $^O; # Operating System Name +$config{IS_DARWIN} = "NO"; # Is OSX? +$config{STARTSCRIPT} = "inspircd"; # start script? +$config{DESTINATION} = "BASE"; # Is target path. +$config{EXTRA_DIR} = ""; # Is empty. +if ($config{OSNAME} =~ /darwin/i) +{ + $config{IS_DARWIN} = "YES"; + $config{STARTSCRIPT} = "org.inspircd.plist"; # start script for OSX. + $config{DESTINATION} = "LAUNCHDPATH"; # Is OSX target. + $config{EXTRA_DIR} = " launchd_dir"; # Is OSX specific path. +} $config{CC} = "g++"; # C++ compiler -$config{MAKEORDER} = "ircd mods config bininst"; # build order -$config{STATICLIBS} = ""; # library archive path -$config{MAX_IDENT} = "12"; # max ident size -$config{MAX_QUIT} = "255"; # max quit message size -$config{MAX_TOPIC} = "307"; # max topic size -$config{MAX_KICK} = "255"; # max kick message size -$config{MAX_GECOS} = "128"; # max GECOS size -$config{MAX_AWAY} = "200"; # max AWAY size - -$config{HAS_OPENSSL} =~ /OpenSSL (\S+) \d+ \S+ \d{4}/; +if (defined $opt_cc) +{ + $config{CC} = $opt_cc; +} +$exec = $config{CC} . " -dumpversion | cut -c 1"; +chomp($config{GCCVER} = `$exec`); # Major GCC Version +$config{MAKEORDER} = "ircd mods"; # build order +$config{STATICLIBS} = ""; # library archive path +$config{MAX_IDENT} = "12"; # max ident size +$config{MAX_QUIT} = "255"; # max quit message size +$config{MAX_TOPIC} = "307"; # max topic size +$config{MAX_KICK} = "255"; # max kick message size +$config{MAX_GECOS} = "128"; # max GECOS size +$config{MAX_AWAY} = "200"; # max AWAY size +$config{MAXBUF} = "512"; # Max buffer size +if (defined $opt_ident) +{ + $config{MAX_IDENT} = $opt_ident; +} +if (defined $opt_quit) +{ + $config{MAX_QUIT} = $opt_quit; +} +if (defined $opt_topic) +{ + $config{MAX_TOPIC} = $opt_topic; +} +if (defined $opt_kick) +{ + $config{MAX_KICK} = $opt_kick; +} +if (defined $opt_gecos) +{ + $config{MAX_GECOS} = $opt_gecos; +} +if (defined $opt_away) +{ + $config{MAX_AWAY} = $opt_away; +} + +$config{HAS_OPENSSL} =~ /^([-[:digit:].]+)([a-z])?(\-[a-z][0-9])?$/; $config{HAS_OPENSSL} = $1; +if ($config{GCCVER} eq "") { + print $config{CC} . " was not found! You require g++ (the GNU C++ compiler, part of GCC) to build InspIRCd!\n"; + exit; +} + # Minihack! Convert Cygwin to 'Cyg-Static' so i can # Keep my dynamic module experiments here for later -# concideration! - -if ($config{OSNAME} =~ /CYGWIN/) { - $config{OSNAME} = "CYG-STATIC"; -} +# consideration! -if ((!$config{OSNAME}) || ($config{OSNAME} eq "")) { - chomp($config{OSNAME} = `/usr/bin/uname`); - if ((!$config{OSNAME}) || ($config{OSNAME} eq "")){ - $config{OSNAME} = "Unknown"; - } +if ($config{OSNAME} =~ /CYGWIN/i) +{ + $config{OSNAME} = "CYG-STATIC"; } if (!$config{MAX_CLIENT_T}) { - $config{MAX_CLIENT_T} = 1024; # Set a reasonable 'Default' - $fd_scan_fail = "true"; # Used Later + $config{MAX_CLIENT_T} = 1024; # Set a reasonable 'Default' + $fd_scan_fail = "true"; # Used Later } # Get and Set some important vars.. getmodules(); -my $arg = $ARGV[0]; # Do Some Argument Checks.. -if ($arg eq "-clean") { `rm -rf .config.cache`; } # Remove the config.cache file. - -if ($arg eq "-update") { - # Does the cache file exist? - if (!getcache()) { - # No, No it doesn't.. *BASH* - print "You have not run ./configure before. Please do this before trying to run the update script.\n"; - exit 0; - } else { - # We've Loaded the cache file and all our variables.. - print "Updating Files..\n"; - getosflags(); - $has_epoll = $config{HAS_EPOLL}; - $has_kqueue = $config{HAS_KQUEUE}; - writefiles(); - print "Complete.\n"; - exit; - } -} - -if ($arg eq "-modupdate") { - # Does the cache file exist? - if (!getcache()) { - # No, No it doesn't.. *BASH* - print "You have not run ./configure before. Please do this before trying to run the update script.\n"; - exit 0; - } else { - # We've Loaded the cache file and all our variables.. - print "Updating Files..\n"; - getosflags(); - $has_epoll = $config{HAS_EPOLL}; - $has_kqueue = $config{HAS_KQUEUE}; - if ($config{STATIC_LINK} == "yes") { - write_static_modules_makefile(); - } else { - write_dynamic_modules_makefile(); - } - print "Complete.\n"; - exit; - } -} - -print "Checking for cache from previous configure...\n"; -getcache(); -print "Checking operating system version...\n"; -getosflags(); +sub clean +{ + system("rm -rf .config.cache"); +} + +sub update +{ + eval { + chomp($topdir = getcwd()); + $this = resolve_directory($topdir); # PWD, Regardless. + getmodules(); + # Does the cache file exist? + if (!getcache()) { + # No, No it doesn't.. *BASH* + print "You have not run ./configure before. Please do this before trying to run the update script.\n"; + exit 0; + } else { + # We've Loaded the cache file and all our variables.. + print "Updating Files..\n"; + getosflags(); + if ($opt_disable_debug == 1) + { + print "Disabling debug information (-g).\n"; + $config{OPTIMISATI} = ""; + getosflags(); + } + $has_epoll = $config{HAS_EPOLL}; + $has_ports = $config{HAS_PORTS}; + $has_kqueue = $config{HAS_KQUEUE}; + writefiles(1); + makecache(); + print "Complete.\n"; + exit; + } + }; + if ($@) + { + print "Configure update failed: $@\n"; + } + exit; +} + +sub modupdate +{ + eval { + chomp($topdir = getcwd()); + $this = resolve_directory($topdir); # PWD, Regardless. + getmodules(); + # Does the cache file exist? + if (!getcache()) { + # No, No it doesn't.. *BASH* + print "You have not run ./configure before. Please do this before trying to run the update script.\n"; + exit 0; + } else { + # We've Loaded the cache file and all our variables.. + print "Updating Files..\n"; + getosflags(); + $has_epoll = $config{HAS_EPOLL}; + $has_ports = $config{HAS_PORTS}; + $has_kqueue = $config{HAS_KQUEUE}; + writefiles(0); + makecache(); + print "Complete.\n"; + exit; + } + }; + if ($@) + { + print "Module update failed: $@\n"; + } + exit; +} + + + +sub svnupdate +{ + my $fail = 0; + open(FH,"<.svn/entries") or $fail = 1; + if ($fail) { + print "This is not an SVN copy of InspIRCd.\n"; + exit; + } + else + { + close(FH); + } + system("svn update"); + system("perl configure -update"); + if (defined $opt_rebuild) { + system("make install"); + } + exit; +} + +print "Running non-interactive configure...\n" unless $interactive; +print "Checking for cache from previous configure... "; +print ((!getcache()) ? "not found\n" : "found\n"); +print "Checking operating system version... "; +print getosflags() . "\n"; + +if (defined $opt_maxclients) +{ + $config{MAX_CLIENT} = $opt_maxclients; +} if (!$config{MAX_CLIENT}) { - # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this - # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go - # higher than the found value" :)) - $config{MAX_CLIENT} = $config{MAX_CLIENT_T}; + # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this + # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go + # higher than the found value" :)) + $config{MAX_CLIENT} = $config{MAX_CLIENT_T}; } +printf "Checking if stdint.h exists... "; +$config{HAS_STDINT} = "true"; +my $fail = 0; +open(STDINT, ")) - { +if (!$fail) { + while (chomp($line = )) { # try and find the delcaration of: # size_t strlcpy(...) - if ($line =~ /size_t(\0x9|\s)+strlcpy/) - { + if ($line =~ /size_t(\0x9|\s)+strlcpy/) { $config{HAS_STRLCPY} = "true"; } } @@ -154,18 +442,16 @@ if (!$fail) print "yes\n" if $config{HAS_STRLCPY} eq "true"; print "no\n" if $config{HAS_STRLCPY} eq "false"; + printf "Checking if kqueue exists... "; $has_kqueue = 0; $fail = 0; open(KQUEUE, ")) - { - # try and find the delcaration of: +if (!$fail) { + while (chomp($line = )) { + # try and find the delcaration of: # int kqueue(void); - if ($line =~ /int(\0x9|\s)+kqueue/) - { + if ($line =~ /int(\0x9|\s)+kqueue/) { $has_kqueue = 1; } } @@ -178,30 +464,71 @@ printf "Checking if epoll exists... "; $has_epoll = 0; $fail = 0; open(EPOLL, ")) - { - # try and find the declaration of: - # extern int epoll_create (int __size) __THROW; - if (($line =~ /int(\0x9|\s)+epoll_create(\0x9|\s)+\(/) || ($line =~ /int(\0x9|\s)+epoll_create\(/)) - { - $has_epoll = 1; - } - } +if (!$fail) { + $has_epoll = 1; close(EPOLL); } if ($has_epoll) { my $kernel = `uname -r`; chomp($kernel); - if (($kernel =~ /2\.0/) || ($kernel =~ /2\.2/) || ($kernel =~ /2\.4/)) { + if (($kernel =~ /^2\.0\./) || ($kernel =~ /^2\.2\./) || ($kernel =~ /^2\.4\./)) { $has_epoll = 0; } + else + { + # Suggestion from nenolod, weed out odd systems which have glibc built + # against 2.4 kernels (ick) + + $libcv = 0.0; + $kernelv = 0.0; + open (FH,"/lib/libc.so.6|") or $has_epoll = 0; + if ($has_epoll) + { + while (chomp($line = )) + { + if ($line =~ /GNU C Library .* version (.*?) /) + { + $libcv = $1; + } + elsif ($line =~ /Compiled on a Linux (.*?\..*?)\.* system/) + { + $kernelv = $1; + } + } + close FH; + if ($libcv < 2.3) + { + $has_epoll = 0; + printf "libc too old: $libcv... "; + } + if ($kernelv < 2.6) + { + $has_epoll = 0; + printf "libc built against older kernel $kernelv... "; + } + } + } } print "yes\n" if $has_epoll == 1; print "no\n" if $has_epoll == 0; -if (($config{OSNAME} =~ /CYGWIN/) || ($config{OSNAME} == "CYG-STATIC")) { +printf "Checking if Solaris I/O completion ports are available... "; +$has_ports = 0; +my $system = `uname -s`; +chomp ($system); +$has_ports = 1 if ($system eq "SunOS"); + +if ($has_ports) { + my $kernel = `uname -r`; + chomp($kernel); + if (($kernel !~ /^5\.1./)) { + $has_ports = 0; + } +} +print "yes\n" if $has_ports == 1; +print "no\n" if $has_ports == 0; + +if (($config{OSNAME} =~ /CYGWIN/) || ($config{OSNAME} eq "CYG-STATIC")) { $config{HAS_STRLCPY} = "true"; } @@ -227,387 +554,192 @@ if (($config{HAS_OPENSSL}) && (($config{HAS_OPENSSL} >= 0.8) || ($config{HAS_OPE } ################################################################################ -# BEGIN INTERACTIVE PART # +# BEGIN INTERACTIVE PART # ################################################################################ # Clear the Screen.. -system("clear"); -# Display Splash Logo.. -show_splash(); -chomp($wholeos = `uname -mnr`); +if ($interactive) +{ + system("clear"); + $wholeos = $^O; -# Display Introduction Message.. -print " -Welcome to the InspIRCd Configuration program! + my $rev = getrevision(); + # Display Introduction Message.. + print " +Welcome to the \033[1mInspIRCd\033[0m Configuration program! (\033[1minteractive mode\033[0m) +\033[1mPackage maintainers: Type ./configure --help for non-interactive help\033[0m *** If you are unsure of any of these values, leave it blank for *** *** standard settings that will work, and your server will run *** -*** using them. If you are running this server as part of a *** -*** larger network, you must consult with your network admins *** -*** for the proper values to use, or server links will be unstable! *** +*** using them. Please consult your IRC network admin if in doubt. *** Press \033[1m\033[0m to accept the default for any option, or enter a new value. Please note: You will \033[1mHAVE\033[0m to read the docs dir, otherwise you won't have a config file! -Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos), fdmax: $config{MAX_CLIENT_T}\n\n"; +Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos) +Maximum file descriptors: \033[1;32m$config{MAX_CLIENT_T}\033[0m +Your InspIRCd revision ID is \033[1;32mr$rev\033[0m"; + if ($rev eq "r0") { + print " (Non-SVN build)"; + } + print ".\n\n"; + + $config{CHANGE_COMPILER} = "n"; + print "I have detected the following compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n"; + + while (($config{GCCVER} < 3) || ($config{GCCVER} eq "")) { + print "\033[1;32mIMPORTANT!\033[0m A GCC 2.x compiler has been detected, and +should NOT be used. You should probably specify a newer compiler.\n\n"; + yesno(CHANGE_COMPILER,"Do you want to change the compiler?"); + if ($config{CHANGE_COMPILER} =~ /y/i) { + print "What command do you want to use to invoke your compiler?\n"; + print "[\033[1;32m$config{CC}\033[0m] -> "; + chomp($config{CC} = ); + if ($config{CC} eq "") { + $config{CC} = "g++"; + } + chomp($foo = `$config{CC} -dumpversion | cut -c 1`); + if ($foo ne "") { + chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change compilers + print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.x\033[0m)\n"; + if ($config{GCCVER} < 3) { + print "\033[1;32mGCC 2.x WILL NOT WORK!\033[0m. Let's try that again, shall we?\n"; + } + } + else { + print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n"; + } + } + } -$config{CHANGE_COMPILER} = "n"; -print "I have detected the following compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.$config{GCC34}\033[0m)\n"; + print "\n"; -if ($config{GCCVER} < 3) -{ - print "\033[1;32mIMPORTANT!\033[0m A GCC 2.x compiler has been detected, and -should NOT be used. You should probably specify a newer compiler.\n"; -} -yesno(CHANGE_COMPILER,"Do you want to change the compiler?"); -if ($config{CHANGE_COMPILER} =~ /y/i) -{ - print "What command do you want to use to invoke your compiler?\n"; - print "[\033[1;32m$config{CC}\033[0m] -> "; - chomp($config{CC} = ); - if ($config{CC} eq "") { $config{CC} = "g++"; } - chomp($foo = `$config{CC} -dumpversion | cut -c 1`); - if ($foo ne "") { - chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change - chomp($config{GCC34} = `$config{CC} -dumpversion | cut -c 3`); # the compiler path - print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.$config{GCC34}\033[0m)\n"; - } - else - { - print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n"; - } -} - -print "\n"; - -# Directory Settings.. -my $tmpbase = $config{BASE_DIR}; -dir_check("do you wish to install the InspIRCd base", "BASE_DIR"); -if ($tmpbase ne $config{BASE_DIR}) { - $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Directory - $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory - $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory - $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory -} - -dir_check("are the configuration files", "CONFIG_DIR"); -dir_check("are the modules to be compiled to", "MODULE_DIR"); -dir_check("is the IRCd binary to be placed", "BINARY_DIR"); -dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR"); - -if ($has_kqueue) { - 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?"); + # Directory Settings.. + my $tmpbase = $config{BASE_DIR}; + dir_check("do you wish to install the InspIRCd base", "BASE_DIR"); + if ($tmpbase ne $config{BASE_DIR}) { + $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Dir + $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory + $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory + $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory + } + + dir_check("are the configuration files", "CONFIG_DIR"); + dir_check("are the modules to be compiled to", "MODULE_DIR"); + dir_check("is the IRCd binary to be placed", "BINARY_DIR"); + dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR"); + + if ($has_kqueue) { + 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?"); + print "\n"; + } + if ($has_epoll) { + 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?"); + print "\n"; + } + if ($has_ports) { + yesno(USE_PORTS,"You are running Solaris 10.\nWould you like to enable I/O completion ports support?\nThis is likely to increase performance.\nIf you are unsure, answer yes.\n\nEnable support for I/O completion ports?"); + print "\n"; + } + $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y") || ($config{USE_PORTS} eq "y")); + if (!$chose_hiperf) { + print "No high-performance socket engines are available, or you chose\n"; + print "not to enable one. Defaulting to select() engine.\n\n"; + } + + yesno(IPV6,"Would you like to build InspIRCd with IPv6 support?"); print "\n"; + + if ($config{IPV6} eq "y") { + print "You have chosen to build an \033[1;32mIPV6-enabled\033[0m server.\nTo accept IPV4 users, you can still use IPV4 addresses\nin your port bindings..\n\n"; + $config{SUPPORT_IP6LINKS} = "y"; + } else { + yesno(SUPPORT_IP6LINKS,"You have chosen to build an \033[1;32mIPV4-only\033[0m server.\nWould you like to enable support for linking to IPV6-enabled\nInspIRCd servers?\nIf you are using a recent operating\nsystem and are unsure, answer yes.\nIf you answer 'no' here, your InspIRCd server will be unable\nto parse IPV6 addresses (e.g. for CIDR bans)"); + print "\n"; + } + + if (($config{HAS_GNUTLS} eq "y") && ($config{HAS_OPENSSL} eq "y")) { + print "I have detected both \033[1;32mGnuTLS\033[0m and \033[1;32mOpenSSL\033[0m on your system.\n"; + print "I will default to GnuTLS. If you wish to use OpenSSL\n"; + print "instead, you should enable the OpenSSL module yourself\n"; + print "by copying it from src/modules/extra to src/modules.\n\n"; + print "Detected GnuTLS version: \033[1;32m" . $gnutls_ver . "\033[0m\n"; + print "Detected OpenSSL version: \033[1;32m" . $openssl_ver . "\033[0m\n\n"; + } + + if ($config{HAS_GNUTLS} eq "y") { + yesno(USE_GNUTLS, "Would you like to enable SSL Support?"); + if ($config{USE_GNUTLS} eq "y") { + print "\nUsing GnuTLS SSL module.\n"; + } + } elsif ($config{HAS_OPENSSL} eq "y") { + yesno(USE_OPENSSL, "Would you like to enable SSL Support?"); + if ($config{USE_OPENSSL} eq "y") { + print "\nUsing OpenSSL SSL module.\nYou will get better performance if you move to GnuTLS in the future.\n"; + } + } + else { + print "\nCould not detect OpenSSL or GnuTLS. Make sure pkg-config is installed if\nyou intend to use OpenSSL, or that GnuTLS is in your path if you intend\nto use GnuTLS.\n\n"; + } + + print "\nThe following questions will ask you for various figures relating\n"; + print "To your IRCd install. Please note that these should usually be left\n"; + print "as defaults unless you have a real reason to change them. If they\n"; + print "changed, then the values must be identical on all servers on your\n"; + print "network, or malfunctions and/or crashes may occur, with the exception\n"; + print "of the 'maximum number of clients' setting which may be different on\n"; + print "different servers on the network.\n\n"; + + # File Descriptor Settings.. + promptnumeric("number of clients at any one time", "MAX_CLIENT_T"); + $config{MAX_CLIENT} = $config{MAX_CLIENT_T}; + $config{MAX_DESCRIPTORS} = $config{MAX_CLIENT_T}; + + promptnumeric("length of nicknames", "NICK_LENGT"); + promptnumeric("length of channel names", "CHAN_LENGT"); + promptnumeric("number of mode changes in one line", "MAXI_MODES"); + promptnumeric("length of an ident (username)", "MAX_IDENT"); + promptnumeric("length of a quit message", "MAX_QUIT"); + promptnumeric("length of a channel topic", "MAX_TOPIC"); + promptnumeric("length of a kick message", "MAX_KICK"); + promptnumeric("length of a GECOS (real name)", "MAX_GECOS"); + promptnumeric("length of an away message", "MAX_AWAY"); } -if ($has_epoll) { - 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?"); - print "\n"; + +dumphash(); + +if (($config{USE_GNUTLS} eq "y") && ($config{HAS_GNUTLS} ne "y")) +{ + print "Sorry, but i couldn't detect gnutls. Make sure gnutls-config is in your path.\n"; + exit(0); } -$chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y")); -if (!$chose_hiperf) +if (($config{USE_OPENSSL} eq "y") && ($config{HAS_OPENSSL} ne "y")) { - print "No high-performance socket engines are available, or you chose\n"; - print "not to enable one. Defaulting to select() engine.\n\n"; -} - -yesno(THREADED_DNS,"Would you like to enable the experimental multi-threaded DNS lookup?"); -print "\n"; - -if (($config{HAS_GNUTLS} eq "y") && ($config{HAS_OPENSSL} eq "y")) { - print "I have detected both GnuTLS and OpenSSL on your system.\n"; - print "I will default to GnuTLS. If you wish to use OpenSSL\n"; - print "instead, you should enable the OpenSSL module yourself\n"; - print "by copying it from src/modules/extra to src/modules.\n\n"; -} - -if ($config{HAS_GNUTLS} eq "y") { - yesno(USE_GNUTLS, "Would you like to enable SSL Support?"); - print "\nUsing GnuTLS SSL module.\n"; -} elsif ($config{HAS_OPENSSL} eq "y") { - yesno(USE_OPENSSL, "Would you like to enable SSL Support?"); - print "\nUsing OpenSSL SSL module.\nYou will get better performance if you move to GnuTLS in the future.\n"; -} - -print "\nThe following questions will ask you for various figures relating\n"; -print "To your IRCd install. Please note that these should usually be left\n"; -print "as defaults unless you have a real reason to change them. If they\n"; -print "changed, then the values must be identical on all servers on your\n"; -print "network, or malfunctions and/or crashes may occur, with the exception\n"; -print "of the 'maximum number of clients' setting which may be different on\n"; -print "different servers on the network.\n\n"; - -# File Descriptor Settings.. -my $continue = 0; -while (!$continue) { - print "Maximum number of clients at any one time ($config{MAX_CLIENT_T})\n"; - print "[\033[1;32m$config{MAX_CLIENT}\033[0m] -> "; - chomp($var = ); - if ($var eq "") { $var = $config{MAX_CLIENT}; } - if ($var =~ /^\d+$/) { - if (($var > $config{MAX_CLIENT_T}) && ($fd_scan_failed ne true)) { - # Client has entered a larger number than the 'discovered' value - # Confirm. - print "WARNING: Our scans have indicated that you are attempting -to use more sockets than there are avaliable. Are you sure -you wish to do this? It may cause the IRCd to malfunction [y/n] -[\033[1;32mn\033[0m] -> $c"; - chomp($tmp = ); - if ($tmp ne "y") { - print "Please enter the correct value.\n\n"; - next; - } - } - } else { - print "You must enter a number in this field. Please try again.\n\n"; - next; - } - # If we get here, we should be good to go. - $config{MAX_CLIENT} = $var; - $continue = 1; - print "\n"; -} - -my $continue = 0; -while (!$continue) { - print "What is the maximum length of nicknames?\n"; - print "[\033[1;32m$config{NICK_LENGT}\033[0m] -> "; - chomp($var = ); - if ($var eq "") { $var = $config{NICK_LENGT}; } - if ($var =~ /^\d+$/) { - # We don't care what the number is, set it and be on our way. - $config{NICK_LENGT} = $var; - $continue = 1; - print "\n"; - } else { - print "You must enter a number in this field. Please try again.\n\n"; - } -} - -$continue = 0; -while (!$continue) { - print "What is the maximum length of channel names?\n"; - print "[\033[1;32m$config{CHAN_LENGT}\033[0m] -> "; - chomp($var = ); - if ($var eq "") { $var = $config{CHAN_LENGT}; } - if ($var =~ /^\d+$/) { - # We don't care what the number is, set it and be on our way. - $config{CHAN_LENGT} = $var; - $continue = 1; - print "\n"; - } else { - print "You must enter a number in this field. Please try again.\n\n"; - } -} - -$continue = 0; -while (!$continue) { - print "What is the maximum number of channels a normal user may join at any one time?\n"; - print "[\033[1;32m$config{MAX_CHANNE}\033[0m] -> "; - chomp($var = ); - if ($var eq "") { $var = $config{MAX_CHANNE}; } - if ($var =~ /^\d+$/) { - # We don't care what the number is, set it and be on our way. - $config{MAX_CHANNE} = $var; - $continue = 1; - print "\n"; - } else { - print "You must enter a number in this field. Please try again.\n\n"; - } -} - -$continue = 0; -while (!$continue) { - print "What is the maximum number of channels an oper may join at any one time?\n"; - print "[\033[1;32m$config{MAX_OPERCH}\033[0m] -> "; - chomp($var = ); - if ($var eq "") { $var = $config{MAX_OPERCH}; } - if ($var =~ /^\d+$/) { - # We don't care what the number is, set it and be on our way. - $config{MAX_OPERCH} = $var; - $continue = 1; - print "\n"; - } -} - -$continue = 0; -while (!$continue) { - print "What is the maximum number of mode changes in one line?\n"; - print "[\033[1;32m$config{MAXI_MODES}\033[0m] -> "; - chomp($var = ); - if ($var eq "") { $var = $config{MAXI_MODES}; } - if ($var =~ /^\d+$/) { - # We don't care what the number is, set it and be on our way. - $config{MAXI_MODES} = $var; - $continue = 1; - print "\n"; - } else { - print "You must enter a number in this field. Please try again.\n\n"; - } -} - -$continue = 0; -while (!$continue) { - print "What is the maximum length of an ident (username)?\n"; - print "[\033[1;32m$config{MAX_IDENT}\033[0m] -> "; - chomp($var = ); - if ($var eq "") { $var = $config{MAX_IDENT}; } - if ($var =~ /^\d+$/) { - # We don't care what the number is, set it and be on our way. - $config{MAX_IDENT} = $var; - $continue = 1; - print "\n"; - } else { - print "You must enter a number in this field. Please try again.\n\n"; - } -} - -$continue = 0; -while (!$continue) { - print "What is the maximum length of a quit message?\n"; - print "[\033[1;32m$config{MAX_QUIT}\033[0m] -> "; - chomp($var = ); - if ($var eq "") { $var = $config{MAX_QUIT}; } - if ($var =~ /^\d+$/) { - # We don't care what the number is, set it and be on our way. - $config{MAX_QUIT} = $var; - $continue = 1; - print "\n"; - } else { - print "You must enter a number in this field. Please try again.\n\n"; - } -} - -$continue = 0; -while (!$continue) { - print "What is the maximum length of a channel topic?\n"; - print "[\033[1;32m$config{MAX_TOPIC}\033[0m] -> "; - chomp($var = ); - if ($var eq "") { $var = $config{MAX_TOPIC}; } - if ($var =~ /^\d+$/) { - # We don't care what the number is, set it and be on our way. - $config{MAX_TOPIC} = $var; - $continue = 1; - print "\n"; - } else { - print "You must enter a number in this field. Please try again.\n\n"; - } -} - -$continue = 0; -while (!$continue) { - print "What is the maximum length of a kick message?\n"; - print "[\033[1;32m$config{MAX_KICK}\033[0m] -> "; - chomp($var = ); - if ($var eq "") { $var = $config{MAX_KICK}; } - if ($var =~ /^\d+$/) { - # We don't care what the number is, set it and be on our way. - $config{MAX_KICK} = $var; - $continue = 1; - print "\n"; - } else { - print "You must enter a number in this field. Please try again.\n\n"; - } -} - -$continue = 0; -while (!$continue) { - print "What is the maximum length of a GECOS (real name) field?\n"; - print "[\033[1;32m$config{MAX_GECOS}\033[0m] -> "; - chomp($var = ); - if ($var eq "") { $var = $config{MAX_GECOS}; } - if ($var =~ /^\d+$/) { - # We don't care what the number is, set it and be on our way. - $config{MAX_GECOS} = $var; - $continue = 1; - print "\n"; - } else { - print "You must enter a number in this field. Please try again.\n\n"; - } -} - -$continue = 0; -while (!$continue) { - print "What is the maximum length of an away message?\n"; - print "[\033[1;32m$config{MAX_AWAY}\033[0m] -> "; - chomp($var = ); - if ($var eq "") { $var = $config{MAX_AWAY}; } - if ($var =~ /^\d+$/) { - # We don't care what the number is, set it and be on our way. - $config{MAX_AWAY} = $var; - $continue = 1; - print "\n"; - } else { - print "You must enter a number in this field. Please try again.\n\n"; - } -} - -# Code Optimisation -print "Enter the Level Of Binary optimisation. This is a number between 0 and 3. -The InspIRCd Team will NOT support any bug reports above 0. Also note, -the IRCd behaviour will be different depending on this value. Please -read the documentation for more information. - -The higher the number, the more optimised your binary will be. This -value will default to 0 if you either don't enter a number, or enter -a value outside the range. - -As always, if you are unsure, just press enter and accept the default.\n\n"; -print "[\033[1;32m$config{OPTIMITEMP}\033[0m] -> "; -chomp($var = ); -if ($var eq "") { - $var = $config{OPTIMITEMP}; -} - -if ($var eq "1") { - $config{OPTIMITEMP} = 1; - $config{OPTIMISATI} = "-O"; -} elsif ($var eq "2") { - $config{OPTIMITEMP} = 2; - $config{OPTIMISATI} = "-O2"; -} elsif ($var eq "3") { - $config{OPTIMITEMP} = 3; - $config{OPTIMISATI} = "-O3"; -} else { - $config{OPTIMITEMP} = 0; - $config{OPTIMISATI} = "-g"; -} - -print "\n\033[1;32mPre-build configuration is complete!\033[0m\n\n"; -print "\033[0mBase install path:\033[1;32m\t\t$config{BASE_DIR}\n"; -print "\033[0mConfig path:\033[1;32m\t\t\t$config{CONFIG_DIR}\n"; -print "\033[0mModule path:\033[1;32m\t\t\t$config{MODULE_DIR}\n"; -print "\033[0mLibrary path:\033[1;32m\t\t\t$config{LIBRARY_DIR}\n"; -print "\033[0mMax connections:\033[1;32m\t\t$config{MAX_CLIENT}\n"; -print "\033[0mMax User Channels:\033[1;32m\t\t$config{MAX_CHANNE}\n"; -print "\033[0mMax Oper Channels:\033[1;32m\t\t$config{MAX_OPERCH}\n"; -print "\033[0mMax nickname length:\033[1;32m\t\t$config{NICK_LENGT}\n"; -print "\033[0mMax channel length:\033[1;32m\t\t$config{CHAN_LENGT}\n"; -print "\033[0mMax mode length:\033[1;32m\t\t$config{MAXI_MODES}\n"; -print "\033[0mMax ident length:\033[1;32m\t\t$config{MAX_IDENT}\n"; -print "\033[0mMax quit length:\033[1;32m\t\t$config{MAX_QUIT}\n"; -print "\033[0mMax topic length:\033[1;32m\t\t$config{MAX_TOPIC}\n"; -print "\033[0mMax kick length:\033[1;32m\t\t$config{MAX_KICK}\n"; -print "\033[0mMax name length:\033[1;32m\t\t$config{MAX_GECOS}\n"; -print "\033[0mMax away length:\033[1;32m\t\t$config{MAX_AWAY}\n"; -print "\033[0mGCC Version Found:\033[1;32m\t\t$config{GCCVER}.$config{GCC34}\n"; -print "\033[0mOptimatizaton Flag:\033[1;32m\t\t$config{OPTIMISATI}\033[0m\n"; -print "\033[0mCompiler program:\033[1;32m\t\t$config{CC}\033[0m\n"; -print "\033[0mStatic modules:\033[1;32m\t\t\t$config{STATIC_LINK}\033[0m\n"; -print "\033[0mMultithread DNS:\033[1;32m\t\t$config{THREADED_DNS}\033[0m\n"; -print "\033[0mGnuTLS Support:\033[1;32m\t\t\t$config{USE_GNUTLS}\033[0m\n"; -print "\033[0mOpenSSL Support:\033[1;32m\t\t$config{USE_OPENSSL}\033[0m\n\n"; + print "Sorry, but i couldn't detect openssl. Make sure openssl is in your path.\n"; + exit(0); +} if ($config{USE_GNUTLS} eq "y") { - system("cp src/modules/extra/m_ssl_gnutls.cpp src/modules/m_ssl_gnutls.cpp"); - getmodules(); $failed = 0; - open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1; - close(TMP); - open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1; + open(TMP, ") { - chomp; - - # Ignore Blank lines, and comments.. - next if /^\s*$/; - next if /^\s*#/; - - my ($key, $value) = split("=", $_); - $value =~ /^\"(.*)\"$/; - # Do something with data here! - $config{$key} = $1; - } - close(CONFIG); - return "true"; + # Retrieves the .config.cache file, and loads values into the main config hash. + open(CACHE, ".config.cache") or return 0; + while () { + chomp; + # Ignore Blank lines, and comments.. + next if /^\s*$/; + next if /^\s*#/; + my ($key, $value) = split("=", $_, 2); + $value =~ /^\"(.*)\"$/; + # Do something with data here! + $config{$key} = $1; + } + close(CONFIG); + return 1; } sub makecache { - # Dump the contents of %config - print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n"; - open(FILEHANDLE, ">.config.cache"); - foreach $key (keys %config) - { - print FILEHANDLE "$key=\"$config{$key}\"\n"; - } - close(FILEHANDLE); + # Dump the contents of %config + print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n"; + open(FILEHANDLE, ">.config.cache"); + foreach $key (keys %config) { + print FILEHANDLE "$key=\"$config{$key}\"\n"; + } + close(FILEHANDLE); } sub dir_check { - my ($desc, $hash_key) = @_; - my $complete = 0; - while (!$complete) { - print "In what directory $desc?\n"; - print "[\033[1;32m$config{$hash_key}\033[0m] -> "; - chomp($var = ); - if ($var eq "") { $var = $config{$hash_key}; } - if ($var =~ /^\~\/(.+)$/) { - # Convert it to a full path.. - $var = resolve_directory($ENV{HOME} . "/" . $1); - } - if (substr($var,0,1) ne "/") - { - # Assume relative Path was given.. fill in the rest. - $var = $this . "/$var"; - } - $var = resolve_directory($var); - if (! -e $var) { - print "$var does not exist. Create it?\n[\033[1;32my\033[0m] "; - chomp($tmp = ); - if (($tmp eq "") || ($tmp =~ /^y/i)) { - # Attempt to Create the Dir.. - $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256; - if ($chk != 0) { - print "Unable to create directory. ($var)\n\n"; - # Restart Loop.. - next; - } - } else { - # They said they don't want to create, and we can't install there. - print "\n\n"; - next; - } - } else { - if (!is_dir($var)) { - # Target exists, but is not a directory. - print "File $var exists, but is not a directory.\n\n"; - next; - } - } - # Either Dir Exists, or was created fine. - $config{$hash_key} = $var; - $complete = 1; - print "\n"; - } + my ($desc, $hash_key) = @_; + my $complete = 0; + while (!$complete) { + print "In what directory $desc?\n"; + print "[\033[1;32m$config{$hash_key}\033[0m] -> "; + chomp($var = ); + if ($var eq "") { + $var = $config{$hash_key}; + } + if ($var =~ /^\~\/(.+)$/) { + # Convert it to a full path.. + $var = resolve_directory($ENV{HOME} . "/" . $1); + } + elsif ((($config{OSNAME} =~ /MINGW32/i) and ($var !~ /^[A-Z]{1}:\\.*/)) and (substr($var,0,1) ne "/")) + { + # Assume relative Path was given.. fill in the rest. + $var = $this . "/$var"; + } + + $var = resolve_directory($var); + if (! -e $var) { + print "$var does not exist. Create it?\n[\033[1;32my\033[0m] "; + chomp($tmp = ); + if (($tmp eq "") || ($tmp =~ /^y/i)) { + # Attempt to Create the Dir.. + + system("mkdir -p \"$var\" >> /dev/null 2>&1"); + $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256; + if ($chk != 0) { + print "Unable to create directory. ($var)\n\n"; + # Restart Loop.. + next; + } + } else { + # They said they don't want to create, and we can't install there. + print "\n\n"; + next; + } + } else { + if (!is_dir($var)) { + # Target exists, but is not a directory. + print "File $var exists, but is not a directory.\n\n"; + next; + } + } + # Either Dir Exists, or was created fine. + $config{$hash_key} = $var; + $complete = 1; + print "\n"; + } } sub getosflags { - if ($config{OSNAME} =~ /BSD$/) { - $config{LDLIBS} = "-Ldl -lstdc++"; - $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Wall -Woverloaded-virtual $config{OPTIMISATI}"; - $config{MAKEPROG} = "gmake"; - if ($config{OSNAME} eq "OpenBSD") { - chomp($foo = `eg++ -dumpversion | cut -c 1`); - # theyre running the package version of gcc (eg++)... detect it and set up its version numbers. - # if theyre not running this, configure lets the build continue but they probably wont manage to - # compile as this standard version is 2.95.3! - if ($foo ne "") { - $config{CC} = "eg++"; - chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change - chomp($config{GCC34} = `eg++ -dumpversion | cut -c 3`); # the compiler path + + $config{LDLIBS} = "-lstdc++"; + $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}"; + $config{DEVELOPER} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated -g"; + $SHARED = "-Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared"; + $config{MAKEPROG} = "make"; + + if ($config{OSNAME} =~ /darwin/i) { + $config{FLAGS} = "-DDARWIN -frtti -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}"; + $SHARED = "-bundle -twolevel_namespace -undefined dynamic_lookup"; + $config{LDLIBS} = "-ldl -lstdc++"; + } + + if ($config{OSNAME} =~ /OpenBSD/i) { + $config{MAKEPROG} = "gmake"; + chomp($foo = `eg++ -dumpversion | cut -c 1`); + # theyre running the package version of gcc (eg++)... detect it and set up its version numbers. + # if theyre not running this, configure lets the build continue but they probably wont manage to + # compile as this standard version is 2.95.3! + if ($foo ne "") { + $config{CC} = "eg++"; + chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change the compiler path + } + return "OpenBSD"; + } + + if ($config{OSNAME} =~ /Linux/i) { + $config{LDLIBS} = "-ldl -lstdc++"; + $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}"; + $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS}); + $config{LDLIBS} .= " " . $ENV{LDLIBS} if exists($ENV{LDLIBS}); + $config{MAKEPROG} = "make"; + if ($config{OSNAME} =~ /CYGWIN/) { + $config{FLAGS} = "-fno-strict-aliasing -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}"; + $config{LDLIBS} = ""; + $config{MAKEPROG} = "/usr/bin/make"; + $config{MAKEORDER} = "ircd mods"; + return "Cygwin"; + } elsif ($config{OSNAME} eq "CYG-STATIC") { + $config{FLAGS} = "-fno-strict-aliasing -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}"; + $config{LDLIBS} = ""; + $config{MAKEPROG} = "/usr/bin/make"; + $config{MAKEORDER} = "mods ircd"; + $config{STATICLIBS} = "modules/mods.a"; + $config{STATIC_LINK} = "yes"; + return "Cygwin-Static"; + } + } + + if ($config{OSNAME} =~ /FreeBSD/i) { + $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS}); + $config{LDLIBS} .= " " . $ENV{LDLIBS} if exists($ENV{LDLIBS}); } - } - } else { - $config{LDLIBS} = "-ldl -lstdc++"; - $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Wall -Woverloaded-virtual $config{OPTIMISATI}"; - $config{MAKEPROG} = "make"; - if ($config{OSNAME} =~ /CYGWIN/) { - $config{FLAGS} = "-frtti $OPTIMISATI -Wall -Woverloaded-virtual $config{OPTIMISATI}"; - $config{LDLIBS} = ""; - $config{MAKEPROG} = "/usr/bin/make"; - $config{MAKEORDER} = "ircd mods config bininst"; - } elsif ($config{OSNAME} == "CYG-STATIC") { - $config{FLAGS} = "-frtti $OPTIMISATI -Wall -Woverloaded-virtual $config{OPTIMISATI}"; - $config{LDLIBS} = ""; - $config{MAKEPROG} = "/usr/bin/make"; - $config{MAKEORDER} = "mods ircd config bininst"; - $config{STATICLIBS} = "modules/mods.a"; - $config{STATIC_LINK} = "yes"; - } - } - if ($config{OSNAME} =~ /SunOS/) { - # solaris/sunos needs these - # socket = bsd sockets api - # nsl = dns stuff - # rt = POSIX realtime extensions - # resolv = inet_aton only (why isnt this in nsl?!) - $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv"; - } -} - -sub is_dir { - my ($path) = @_; - if (chdir($path)) { - chdir($this); - return 1; - } else { - # Just in case.. - chdir($this); - return 0; - } -} - -sub getmodules { - my $i = 0; - opendir(DIRHANDLE, "src/modules"); - foreach $name (sort readdir(DIRHANDLE)) { - if ($name =~ /^m_(.+)\.cpp$/) - { - $mod = $1; - if ($mod !~ /_static$/) { - $modlist[$i++] = $mod; - } - } - } - closedir(DIRHANDLE); + + if ($config{OSNAME} =~ /SunOS/i or $config{OSNAME} =~ /solaris/i) + { + # solaris/sunos needs these + # socket = bsd sockets api + # nsl = dns stuff + # rt = POSIX realtime extensions + # resolv = inet_aton only (why isnt this in nsl?!) + $config{MAKEPROG} = "gmake"; + $config{LDLIBS} .= " -lsocket -lnsl -lrt -lresolv"; + return "Solaris"; + } + + if($config{OSNAME} =~ /MINGW32/i) + { + # All code is position-independent on windows + $config{FLAGS} =~ s/-fPIC //; + return "MinGW"; + } + + return $config{OSNAME}; } sub writefiles { - - print "Writing \033[1;32minspircd_config.h\033[0m\n"; - # First File.. inspircd_config.h - chomp(my $incos = `uname -n -s -r`); - chomp(my $version = `sh ./src/version.sh`); - open(FILEHANDLE, ">include/inspircd_config.h"); - my $NL = $config{NICK_LENGT}+1; - my $CL = $config{CHAN_LENGT}+1; - print FILEHANDLE <include/inspircd_config.h"); + my $NL = $config{NICK_LENGT}+1; + my $CL = $config{CHAN_LENGT}+1; + print FILEHANDLE < 3) { - print FILEHANDLE "#define GCC3\n"; - print FILEHANDLE "#define GCC34\n"; - } - else - { - if ($config{GCCVER} == 3) { - print FILEHANDLE "#define GCC3\n"; - if ($config{GCC34} > 3) { - print FILEHANDLE "#define GCC34\n"; - } - } - } - if ($config{HAS_STRLCPY} eq "true") { - print FILEHANDLE "#define HAS_STRLCPY\n"; - } - if ($config{THREADED_DNS} =~ /y/i) { - print FILEHANDLE "#define THREADED_DNS\n"; - } - my $use_hiperf = 0; - if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) { - print FILEHANDLE "#define USE_KQUEUE\n"; - $use_hiperf = 1; - } - if (($has_epoll) && ($config{USE_EPOLL} eq "y")) { - print FILEHANDLE "#define USE_EPOLL\n"; - $use_hiperf = 1; - } - # user didn't choose either epoll or select for their OS. - # default them to USE_SELECT (ewwy puke puke) - if (!$use_hiperf) { - print FILEHANDLE "#define USE_SELECT\n"; - } - print FILEHANDLE "\n#endif\n"; - close(FILEHANDLE); - - # Create a Modules List.. - my $modules = ""; - foreach $i (@modlist) - { - if ($config{STATIC_LINK} eq "yes") { - $modules .= "m_".$i.".o "; - } - else { - $modules .= "m_".$i.".so "; - } - } - chomp($modules); # Remove Redundant whitespace.. - - - # Write all .in files. - my $tmp = ""; - my $file = ""; - my $exe = "inspircd"; - - if ($config{OSNAME} =~ /CYGWIN/) { - $exe = "inspircd.exe"; - } - - opendir(DIRHANDLE, $this); - if ($config{THREADED_DNS} =~ /y/i) { - $config{LDLIBS} = $config{LDLIBS} . " -pthread"; - } - foreach $name (sort readdir(DIRHANDLE)) { - if ($name =~ /^\.(.+)\.inc$/) - { - $file = $1; - # All .name.inc files need parsing! - $tmp = ""; - open(FILEHANDLE, ".$file.inc"); - while () { - $tmp .= $_; - } - close(FILEHANDLE); - - $tmp =~ s/\@CC\@/$config{CC}/; - $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/; - $tmp =~ s/\@FLAGS\@/$config{FLAGS}/; - $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/; - $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/; - $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/; - $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/; - $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/; - $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/; - $tmp =~ s/\@MODULES\@/$modules/; - $tmp =~ s/\@EXECUTABLE\@/$exe/; - $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/; - $tmp =~ s/\@STATICLIBS\@/$config{STATICLIBS}/; - - print "Writing \033[1;32m$file\033[0m\n"; - open(FILEHANDLE, ">$file"); - print FILEHANDLE $tmp; - } - } - closedir(DIRHANDLE); - - # Make inspircd executable! - chmod 0744, 'inspircd'; - - if ($config{STATIC_LINK} eq "yes") { - print "Writing static-build \033[1;32msrc/Makefile\033[0m\n"; - write_static_makefile(); - write_static_modules_makefile(); - } elsif ($config{OSNAME} =~ /CYGWIN/) { - print "Writing cygwin-build \033[1;32msrc/Makefile\033[0m\n"; - write_static_makefile(); - write_dynamic_modules_makefile(); - } else { - print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n"; - write_dynamic_makefile(); - write_dynamic_modules_makefile(); - } -} - -sub getcompilerflags { - my ($file) = @_; - open(FLAGS, $file); - while () { - if ($_ =~ /^\/\* \$CompileFlags: (.+) \*\/$/) { - close(FLAGS); - return $1; - } - } - close(FLAGS); - return undef; -} - -sub getlinkerflags { - my ($file) = @_; - open(FLAGS, $file); - while () { - if ($_ =~ /^\/\* \$LinkerFlags: (.+) \*\/$/) { - close(FLAGS); - return $1; - } - } - close(FLAGS); - return undef; -} - -sub show_splash { - print "'\033[1;33m####\033[0m:'\033[1;33m##\033[0m::: \033[1;33m##\033[0m::'\033[1;33m######\033[0m::'\033[1;33m########\033[0m::'\033[1;33m####\033[0m:'\033[1;33m########\033[0m:::'\033[1;33m######\033[0m::'\033[1;33m########\033[0m::\n"; - print ". \033[1;33m##\033[0m:: \033[1;33m###\033[0m:: \033[1;33m##\033[0m:'\033[1;33m##\033[0m... \033[1;33m##\033[0m: \033[1;33m##\033[0m.... \033[1;33m##\033[0m:. \033[1;33m##\033[0m:: \033[1;33m##\033[0m.... \033[1;33m##\033[0m:'\033[1;33m##\033[0m... \033[1;33m##\033[0m: \033[1;33m##\033[0m.... \033[1;33m##\033[0m:\n"; - print ": \033[1;33m##\033[0m:: \033[1;33m####\033[0m: \033[1;33m##\033[0m: \033[1;33m##\033[0m:::..:: \033[1;33m##\033[0m:::: \033[1;33m##\033[0m:: \033[1;33m##\033[0m:: \033[1;33m##\033[0m:::: \033[1;33m##\033[0m: \033[1;33m##\033[0m:::..:: \033[1;33m##\033[0m:::: \033[1;33m##\033[0m:\n"; - print ": \033[1;33m##\033[0m:: \033[1;33m##\033[0m \033[1;33m##\033[0m \033[1;33m##\033[0m:. \033[1;33m######\033[0m:: \033[1;33m########\033[0m::: \033[1;33m##\033[0m:: \033[1;33m########\033[0m:: \033[1;33m##\033[0m::::::: \033[1;33m##\033[0m:::: \033[1;33m##\033[0m:\n"; - print ": \033[1;33m##\033[0m:: \033[1;33m##\033[0m. \033[1;33m####\033[0m::..... \033[1;33m##\033[0m: \033[1;33m##\033[0m.....:::: \033[1;33m##\033[0m:: \033[1;33m##\033[0m.. \033[1;33m##\033[0m::: \033[1;33m##\033[0m::::::: \033[1;33m##\033[0m:::: \033[1;33m##\033[0m:\n"; - print ": \033[1;33m##\033[0m:: \033[1;33m##\033[0m:. \033[1;33m###\033[0m:'\033[1;33m##\033[0m::: \033[1;33m##\033[0m: \033[1;33m##\033[0m::::::::: \033[1;33m##\033[0m:: \033[1;33m##\033[0m::. \033[1;33m##\033[0m:: \033[1;33m##\033[0m::: \033[1;33m##\033[0m: \033[1;33m##\033[0m:::: \033[1;33m##\033[0m:\n"; - print "'\033[1;33m####\033[0m: \033[1;33m##\033[0m::. \033[1;33m##\033[0m:. \033[1;33m######\033[0m:: \033[1;33m##\033[0m::::::::'\033[1;33m####\033[0m: \033[1;33m##\033[0m:::. \033[1;33m##\033[0m:. \033[1;33m######\033[0m:: \033[1;33m########\033[0m::\n"; - print "\033[0m\033[0m....::..::::..:::......:::..:::::::::....::..:::::..:::......:::........:::\n\n"; -} - -sub resolve_directory { - use File::Spec; - return File::Spec->rel2abs($_[0]); -} - -sub yesno { - my ($flag,$prompt) = @_; - print "$prompt [\033[1;32m$config{$flag}\033[0m] -> "; - chomp($tmp = ); - if ($tmp eq "") { $tmp = $config{$flag} } - - if (($tmp eq "") || ($tmp =~ /^y/i)) { - $config{$flag} = "y"; + if ($config{OSNAME} =~ /SunOS/i) { + print FILEHANDLE "#define IS_SOLARIS\n"; + } + if ($config{OSNAME} =~ /CYGWIN/i) { + print FILEHANDLE "#define IS_CYGWIN\n"; + print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n"; + } + if ($config{OSNAME} =~ /MINGW32/i) { + print FILEHANDLE "#define IS_MINGW\n"; + } + if ($config{OSNAME} =~ /CYG-STATIC/i) { + print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n"; + } + if ($config{STATIC_LINK} eq "yes") { + print FILEHANDLE "#define STATIC_LINK\n"; + } + if ($config{GCCVER} >= 3) { + print FILEHANDLE "#define GCC3\n"; + } + if ($config{HAS_STRLCPY} eq "true") { + print FILEHANDLE "#define HAS_STRLCPY\n"; + } + if ($config{HAS_STDINT} eq "true") { + print FILEHANDLE "#define HAS_STDINT\n"; + } + if ($config{IPV6} =~ /y/i) { + print FILEHANDLE "#define IPV6\n"; + } + if ($config{SUPPORT_IP6LINKS} =~ /y/i) { + print FILEHANDLE "#define SUPPORT_IP6LINKS\n"; + } + my $use_hiperf = 0; + if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) { + print FILEHANDLE "#define USE_KQUEUE\n"; + $se = "socketengine_kqueue"; + $use_hiperf = 1; + } + if (($has_epoll) && ($config{USE_EPOLL} eq "y")) { + print FILEHANDLE "#define USE_EPOLL\n"; + $se = "socketengine_epoll"; + $use_hiperf = 1; + } + if (($has_ports) && ($config{USE_PORTS} eq "y")) { + print FILEHANDLE "#define USE_PORTS\n"; + $se = "socketengine_ports"; + $use_hiperf = 1; + } + # user didn't choose either epoll or select for their OS. + # default them to USE_SELECT (ewwy puke puke) + if (!$use_hiperf) { + print FILEHANDLE "#define USE_SELECT\n"; + $se = "socketengine_select"; + } + print FILEHANDLE "\n#endif\n"; + close(FILEHANDLE); + } + + if ($writeheader) + { + open(FILEHANDLE, ">include/inspircd_se_config.h"); + print FILEHANDLE <) { + $tmp .= $_; + } + close(FILEHANDLE); + + $tmp =~ s/\@CC\@/$config{CC}/; + $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/; + $tmp =~ s/\@FLAGS\@/$config{FLAGS}/; + $tmp =~ s/\@DEVELOPER\@/$config{DEVELOPER}/; + $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/; + $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/; + $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/; + $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/; + $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/; + $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/; + $tmp =~ s/\@LIBRARY_EXT\@/$LIBEXT/; + $tmp =~ s/\@MODULES\@/$modules/; + $tmp =~ s/\@STARTSCRIPT\@/$config{STARTSCRIPT}/; + $tmp =~ s/\@DESTINATION\@/$config{DESTINATION}/; + $tmp =~ s/\@EXTRA_DIR\@/$config{EXTRA_DIR}/; + $tmp =~ s/\@EXECUTABLE\@/$exe/; + $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/; + $tmp =~ s/\@STATICLIBS\@/$config{STATICLIBS}/; + $tmp =~ s/\@VERSION\@/$version/; + + print "Writing \033[1;32m$file\033[0m\n"; + open(FILEHANDLE, ">$file"); + print FILEHANDLE $tmp; + } + } + closedir(DIRHANDLE); + + # Make inspircd executable! + chmod 0744, 'inspircd'; + + if ($config{STATIC_LINK} eq "yes") { + print "Writing static-build \033[1;32msrc/Makefile\033[0m\n"; + write_static_makefile(); + write_static_modules_makefile(); + } elsif ($config{OSNAME} =~ /CYGWIN/i) { + print "Writing cygwin-build \033[1;32msrc/Makefile\033[0m\n"; + write_static_makefile(); + write_dynamic_modules_makefile(); } else { - $config{$flag} = "n"; - } - return; + print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n"; + write_dynamic_makefile(); + write_dynamic_modules_makefile(); + } } sub write_static_modules_makefile { - # Modules Makefile.. - print "Writing \033[1;32msrc/modules/Makefile\033[0m\n"; - open(FILEHANDLE, ">src/modules/Makefile"); + # Modules Makefile.. + print "Writing \033[1;32msrc/modules/Makefile\033[0m\n"; + open(FILEHANDLE, ">src/modules/Makefile"); -### -# Module Makefile Header -### - print FILEHANDLE < -# Many Thanks to Andrew Church -# for assisting with making this work right. + ### + # Module Makefile Header + ### + print FILEHANDLE < +# for assisting with making this work right. +# +# Automatically Generated by ./configure to add a +# modules please run ./configure --modupdate +################################################### all: \$(MODULES) EOF -### -# End Module Makefile Header -### + ### + # End Module Makefile Header + ### -# Create a Modules List.. -my $modules = ""; -my $cmflags = ""; -my $liflags = ""; + # Create a Modules List.. + my $modules = ""; + my $cmflags = ""; + my $liflags = ""; -open(MODLIST,">include/modlist.h"); + open(MODLIST,">include/modlist.h"); -### -# Include File Header -### -print MODLIST <src/modules/m_".$i."_static.cpp") or die("Could not create m_".$i."_static.cpp"); - while (chomp($a = )) { - $a =~ s/init_module/$i\_init/g; - $a =~ s/Srv/$i\Srv/g; - print MUNGED "$a\n"; - } - close(MODULE); - close(MUNGED); - print MODLIST <src/modules/.m_".$i."_static.cpp") or die("Could not create .m_".$i."_static.cpp"); + while (chomp($a = )) { + $a =~ s/init_module/$i\_init/g; + print MUNGED "$a\n"; + } + close(MODULE); + close(MUNGED); + print MODLIST <src/modules/Makefile"); - my $extra = ""; + # Modules Makefile.. + print "Writing \033[1;32msrc/modules/Makefile\033[0m\n"; + open(FILEHANDLE, ">src/modules/Makefile"); + my $extra = ""; - if ($config{OSNAME} =~ /CYGWIN/) { - $extra = "../inspircd.dll.a"; - } + if ($config{OSNAME} =~ /CYGWIN/i) { + $extra = "../inspircd.dll.a"; + } ### # Module Makefile Header ### - print FILEHANDLE < -# Many Thanks to Andrew Church -# for assisting with making this work right. + print FILEHANDLE < +# for assisting with making this work right. # -# Automatically Generated by ./configure to add a modules -# please run ./configure -update or ./configure -modupdate +# Automatically Generated by ./configure to add a +# modules please run ./configure -modupdate +################################################### all: \$(MODULES) EOF -### -# End Module Makefile Header -### - -# Create a Modules List.. -my $modules = ""; -my $cmflags = ""; -my $liflags = ""; - -foreach $i (@modlist) { ### - # Write Entry to the MakeFile + # End Module Makefile Header ### - $cmflags = getcompilerflags("src/modules/m_".$i.".cpp"); - $liflags = getlinkerflags("src/modules/m_".$i.".cpp"); - print FILEHANDLE <src/Makefile") or die("Could not write src/Makefile!"); - my $i = 0; - my @cmdlist = (); - opendir(DIRHANDLE, "src"); - foreach $name (sort readdir(DIRHANDLE)) { - if ($name =~ /^cmd_(.+)\.cpp$/) { - $cmdlist[$i++] = $1; - } - } - closedir(DIRHANDLE); - my $cmdobjs = ""; + my $i = 0; + my @cmdlist = (); + opendir(DIRHANDLE, "src"); + foreach $name (sort readdir(DIRHANDLE)) { + if ($name =~ /^cmd_(.+)\.cpp$/) { + $cmdlist[$i++] = $1; + } + } + closedir(DIRHANDLE); + my $cmdobjs = ""; my $srcobjs = ""; - foreach my $cmd (@cmdlist) { - $cmdobjs = $cmdobjs . "cmd_$cmd.o "; - $srcobjs = $srcobjs . "cmd_$cmd.cpp "; + foreach my $cmd (@cmdlist) { + $cmdobjs = $cmdobjs . "cmd_$cmd.o "; + $srcobjs = $srcobjs . "cmd_$cmd.cpp "; } print FH < -# Makefile version 2 (statically linked core) by +# Thanks to Andrew Church +# for assisting with making this work right. # +# This file is automagically generated by configure +# Any changes made will be lost on ./configure +################################################### CC = im a cheezeball CXXFLAGS = -I../include \${FLAGS} +CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn) +RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn) EOM -### -# This next section is for cygwin dynamic module builds. -# Basically, what we do, is build the inspircd core as a library -# then the main executable uses that. the library is capable of -# loading / unloading the modules dynamically :) -# Massive thanks to the guys on #cygwin @ irc.freenode.net for helping -# make this work :) -### -if ($config{OSNAME} =~ /CYGWIN/) { - print FH <src/Makefile") or die("Could not write src/Makefile"); print FH < -# Makefile version 2 (dynamically linked core) by +# Thanks to Andrew Church +# for assisting with making this work right. # +# This file is automagically generated by configure +# Any changes made will be lost on ./configure +################################################### CC = im a cheezeball CXXFLAGS = -I../include \${FLAGS} +CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn) +RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn) -all: 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 libIRCDio.so libIRCDmessage.so $cmdobjs libIRCDcommands.so libIRCDdnsqueue.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDcommand_parse.so inspircd +EOM + +if ($config{IS_DARWIN} eq "YES") { + print FH <