X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=configure;h=4f6cf9a35b7da7a5940ecd2a3890d468fc173465;hb=bf65e9dc25b9e52dc1f84a6e24157bdaf8d39d5c;hp=8cc7c78559c54aa785473b4ae3eb48bc7b25bde3;hpb=32c1599c2180214e8c4d1684633b2e48f069a273;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/configure b/configure index 8cc7c7855..4f6cf9a35 100755 --- a/configure +++ b/configure @@ -2,7 +2,7 @@ # InspIRCd Configuration Script # -# Copyright 2003 The ChatSpike Development Team +# Copyright 2002-2007 The ChatSpike Development Team # # # @@ -12,18 +12,25 @@ # ######################################## + +require 5.6.0; +use Socket; use Cwd; use Getopt::Long; +# Utility functions for our buildsystem +use make::utilities; +use make::configure; + GetOptions ( 'enable-gnutls' => \$opt_use_gnutls, '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-channels=i' => \$opt_maxchans, 'with-max-oper-channels=i' => \$opt_opermaxchans, - 'with-max-clients' => \$opt_maxclients, - 'enable-optimization' => \$opt_optimise, + 'with-max-clients=i' => \$opt_maxclients, 'enable-epoll' => \$opt_epoll, 'enable-kqueue' => \$opt_kqueue, 'disable-epoll' => \$opt_noepoll, @@ -44,9 +51,10 @@ GetOptions ( '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 { update(); }, - 'update' => sub { modupdate(); }, + 'modupdate' => sub { modupdate(); }, + 'update' => sub { update(); }, 'svnupdate' => sub { svnupdate(); }, 'clean' => sub { clean(); }, ); @@ -58,6 +66,7 @@ my $non_interactive = ( (defined $opt_module_dir) || (defined $opt_base_dir) || (defined $opt_binary_dir) || + (defined $opt_nointeractive) || (defined $opt_away) || (defined $opt_gecos) || (defined $opt_kick) || @@ -76,7 +85,6 @@ my $non_interactive = ( (defined $opt_opermaxchans) || (defined $opt_chan_length) || (defined $opt_nick_length) || - (defined $opt_optimise) || (defined $opt_use_openssl) || (defined $opt_nokqueue) || (defined $opt_noepoll) || @@ -131,13 +139,18 @@ if (defined $opt_use_openssl) { $config{USE_OPENSSL} = "y"; } + +# no, let's not change these. $config{OPTIMITEMP} = "0"; # Default Optimisation Value -$config{OPTIMISATI} = "-g"; # Optimisation Flag -if (defined $opt_optimise) +if (!defined $opt_disable_debug) { - $config{OPTIMISATI} = "-O" . $opt_optimise; - $config{OPTIMITEMP} = $opt_optimise; + $config{OPTIMISATI} = "-g"; # Optimisation Flag } +else +{ + $config{OPTIMISATI} = ""; # DEBUGGING OFF! +} + $config{NICK_LENGT} = "31"; # Default Nick Length if (defined $opt_nick_length) { @@ -201,7 +214,8 @@ $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 -chomp($config{OSNAME} = `uname`); # Operating System Name +$config{_SOMAXCONN} = SOMAXCONN; # Max connections in accept queue +$config{OSNAME} = $^O; # Operating System Name $config{CC} = "g++"; # C++ compiler if (defined $opt_cc) { @@ -242,9 +256,7 @@ if (defined $opt_away) $config{MAX_AWAY} = $opt_away; } -$no_svn = 0; - -$config{HAS_OPENSSL} =~ /OpenSSL ([-[:digit:].]+)([a-z])? (\w{3}|[0-9]+) (\w{3}|[0-9]+) [0-9]{4}/; +$config{HAS_OPENSSL} =~ /OpenSSL ([-[:digit:].]+)([a-z])?(\-[a-z][0-9])? (\w{3}|[0-9]+) (\w{3}|[0-9]+) [0-9]{4}/; $config{HAS_OPENSSL} = $1; if ($config{GCCVER} eq "") { @@ -254,25 +266,12 @@ if ($config{GCCVER} eq "") { # Minihack! Convert Cygwin to 'Cyg-Static' so i can # Keep my dynamic module experiments here for later -# concideration! +# consideration! -if ($config{OSNAME} =~ /CYGWIN/) +if ($config{OSNAME} =~ /CYGWIN/i) { $config{OSNAME} = "CYG-STATIC"; } -elsif($config{OSNAME} =~ /^MINGW32/) -{ - $config{OSNAME} = "MINGW32"; -} -elsif ((!$config{OSNAME}) || ($config{OSNAME} eq "")) -{ - chomp($config{OSNAME} = `/usr/bin/uname`); - - if((!$config{OSNAME}) || ($config{OSNAME} eq "")) - { - $config{OSNAME} = "Unknown"; - } -} if (!$config{MAX_CLIENT_T}) { $config{MAX_CLIENT_T} = 1024; # Set a reasonable 'Default' @@ -284,13 +283,14 @@ getmodules(); sub clean { - if ($arg eq "-clean") { - system("rm -rf .config.cache"); - } + system("rm -rf .config.cache"); } sub update { + chomp($topdir = getcwd()); + $this = resolve_directory($topdir); # PWD, Regardless. + getmodules(); # Does the cache file exist? if (!getcache()) { # No, No it doesn't.. *BASH* @@ -300,6 +300,12 @@ sub update # 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_kqueue = $config{HAS_KQUEUE}; writefiles(1); @@ -310,6 +316,9 @@ sub update sub modupdate { + chomp($topdir = getcwd()); + $this = resolve_directory($topdir); # PWD, Regardless. + getmodules(); # Does the cache file exist? if (!getcache()) { # No, No it doesn't.. *BASH* @@ -346,11 +355,10 @@ sub svnupdate } print "Running non-interactive configure...\n" unless $interactive; - -print "Checking for cache from previous configure...\n"; -getcache(); -print "Checking operating system version...\n"; -getosflags(); +print "Checking for cache from previous configure... "; +print ((getcache() eq "true") ? "found\n" : "not found\n"); +print "Checking operating system version... "; +print getosflags() . "\n"; if (defined $opt_maxclients) { @@ -462,26 +470,24 @@ if (($config{HAS_OPENSSL}) && (($config{HAS_OPENSSL} >= 0.8) || ($config{HAS_OPE if ($interactive) { system("clear"); - # Display Splash Logo.. - show_splash(); - chomp($wholeos = `uname -mnr`); + $wholeos = $^O; my $rev = getrevision(); # Display Introduction Message.. print " -Welcome to the InspIRCd Configuration program! +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} +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)"; @@ -586,291 +592,35 @@ should NOT be used. You should probably specify a newer compiler.\n\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"; - } - } + 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}; - $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"; - } - } + promptnumeric("length of nicknames", "NICK_LENGT"); + promptnumeric("length of channel names", "CHAN_LENGT"); + promptnumeric("number of channels a normal user may join at any one time", "MAX_CHANNE"); + promptnumeric("number of channels an oper may join at any one time", "MAX_OPERCH"); + 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"); +} - # 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}; - } +dumphash(); - 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"; - } +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); +} +if (($config{USE_OPENSSL} eq "y") && ($config{HAS_OPENSSL} ne "y")) +{ + print "Sorry, but i couldn't detect openssl. Make sure openssl is in your path.\n"; + exit(0); } - -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}\033[0m\n"; -print "\033[0mConfig path:\033[1;32m\t\t\t$config{CONFIG_DIR}\033[0m\n"; -print "\033[0mModule path:\033[1;32m\t\t\t$config{MODULE_DIR}\033[0m\n"; -print "\033[0mLibrary path:\033[1;32m\t\t\t$config{LIBRARY_DIR}\033[0m\n"; -print "\033[0mMax connections:\033[1;32m\t\t$config{MAX_CLIENT}\033[0m\n"; -print "\033[0mMax User Channels:\033[1;32m\t\t$config{MAX_CHANNE}\033[0m\n"; -print "\033[0mMax Oper Channels:\033[1;32m\t\t$config{MAX_OPERCH}\033[0m\n"; -print "\033[0mMax nickname length:\033[1;32m\t\t$config{NICK_LENGT}\033[0m\n"; -print "\033[0mMax channel length:\033[1;32m\t\t$config{CHAN_LENGT}\033[0m\n"; -print "\033[0mMax mode length:\033[1;32m\t\t$config{MAXI_MODES}\033[0m\n"; -print "\033[0mMax ident length:\033[1;32m\t\t$config{MAX_IDENT}\033[0m\n"; -print "\033[0mMax quit length:\033[1;32m\t\t$config{MAX_QUIT}\033[0m\n"; -print "\033[0mMax topic length:\033[1;32m\t\t$config{MAX_TOPIC}\033[0m\n"; -print "\033[0mMax kick length:\033[1;32m\t\t$config{MAX_KICK}\033[0m\n"; -print "\033[0mMax name length:\033[1;32m\t\t$config{MAX_GECOS}\033[0m\n"; -print "\033[0mMax away length:\033[1;32m\t\t$config{MAX_AWAY}\033[0m\n"; -print "\033[0mGCC Version Found:\033[1;32m\t\t$config{GCCVER}.x\033[0m\n"; -print "\033[0mOptimization 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[0mIPv6 Support:\033[1;32m\t\t\t$config{IPV6}\033[0m\n"; -print "\033[0mIPv6 to IPv4 Links:\033[1;32m\t\t$config{SUPPORT_IP6LINKS}\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"; if ($config{USE_GNUTLS} eq "y") { $failed = 0; @@ -1030,7 +780,7 @@ sub dir_check { # Convert it to a full path.. $var = resolve_directory($ENV{HOME} . "/" . $1); } - elsif ((($config{OSNAME} == "MINGW32") and ($var !~ /^[A-Z]{1}:\\.*/)) and (substr($var,0,1) ne "/")) + 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"; @@ -1070,103 +820,67 @@ sub dir_check { } sub getosflags { - if ($config{OSNAME} =~ /BSD$/) { - $config{LDLIBS} = "-lstdc++"; - $config{FLAGS} = "-fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}"; + + $config{LDLIBS} = "-lstdc++"; + $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}"; + $config{MAKEPROG} = "make"; + + if ($config{OSNAME} =~ /OpenBSD/i) { $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 the compiler path - } + 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 } - } else { + return "OpenBSD"; + } + + if ($config{OSNAME} =~ /Linux/i) { $config{LDLIBS} = "-ldl -lstdc++"; - $config{FLAGS} = "-fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}"; + $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}"; + $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS}); $config{MAKEPROG} = "make"; if ($config{OSNAME} =~ /CYGWIN/) { - $config{FLAGS} = "-Wall -Woverloaded-virtual $config{OPTIMISATI}"; + $config{FLAGS} = "-fno-strict-aliasing -Wall -Woverloaded-virtual $config{OPTIMISATI}"; $config{LDLIBS} = ""; $config{MAKEPROG} = "/usr/bin/make"; $config{MAKEORDER} = "ircd mods"; + return "Cygwin"; } elsif ($config{OSNAME} eq "CYG-STATIC") { - $config{FLAGS} = "-Wall -Woverloaded-virtual $config{OPTIMISATI}"; + $config{FLAGS} = "-fno-strict-aliasing -Wall -Woverloaded-virtual $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"; } + $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS}); } - if ($config{OSNAME} =~ /SunOS/) + if ($config{OSNAME} =~ /SunOS/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} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv"; + return "Solaris"; } - if($config{OSNAME} eq "MINGW32") + if($config{OSNAME} =~ /MINGW32/i) { # All code is position-independent on windows $config{FLAGS} =~ s/-fPIC //; + return "MinGW"; } -} - -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; - print "Detecting modules "; - opendir(DIRHANDLE, "src/modules"); - foreach $name (sort readdir(DIRHANDLE)) { - if ($name =~ /^m_(.+)\.cpp$/) - { - $mod = $1; - if ($mod !~ /_static$/) { - $modlist[$i++] = $mod; - print "."; - } - } - } - closedir(DIRHANDLE); - print "\nOk, $i modules.\n"; -} -sub getrevision { - if ($no_svn) { - return "0"; - } - my $data = `svn info`; - - if ($data eq "") { - $no_svn = 1; - $rev = "0"; - return $rev; - } - $data =~ /Revision: (\d+)/; - my $rev = $1; - if (!defined($rev)) { - $rev = "0"; - } - return $rev; + return $config{OSNAME}; } sub writefiles { @@ -1193,6 +907,8 @@ sub writefiles { #define VERSION "$version" #define REVISION "$revision2" #define MAXCLIENTS $config{MAX_CLIENT} +#define MAXCLIENTS_S "$config{MAX_CLIENT}" +#define SOMAXCONN_S "$config{_SOMAXCONN}" #define MAX_DESCRIPTORS $config{MAX_DESCRIPTORS} #define NICKMAX $NL #define CHANMAX $CL @@ -1210,17 +926,17 @@ sub writefiles { #define SYSTEM "$incos" #define MAXBUF 514 EOF - if ($config{OSNAME} =~ /SunOS/) { + if ($config{OSNAME} =~ /SunOS/i) { print FILEHANDLE "#define IS_SOLARIS\n"; } - if ($config{OSNAME} =~ /CYGWIN/) { + 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} eq "MINGW32") { + if ($config{OSNAME} =~ /MINGW32/i) { print FILEHANDLE "#define IS_MINGW\n"; } - if ($config{OSNAME} eq "CYG-STATIC") { + 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") { @@ -1291,18 +1007,41 @@ EOF } chomp($modules); # Remove Redundant whitespace.. + opendir(DIRHANDLE, "src/modules"); + foreach $name (sort readdir(DIRHANDLE)) { + if ($name =~ /^m_(.+?)$/) { + if (opendir(MDIRHANDLE, "src/modules/$name") != 0) { + closedir(MDIRHANDLE); + $modules .= "$name.so "; + } + } + } + closedir(DIRHANDLE); + # Write all .in files. my $tmp = ""; my $file = ""; my $exe = "inspircd"; - if ($config{OSNAME} =~ /CYGWIN/) { + if ($config{OSNAME} =~ /CYGWIN/i) { $exe = "inspircd.exe"; } opendir(DIRHANDLE, $this); + # Do this once here, and cache it in the .*.inc files, + # rather than attempting to read src/version.sh from + # compiled code -- we might not have the source to hand. + # Fix for bug#177 by Brain. + + chomp(my $version = `sh ./src/version.sh`); + chomp(my $revision = getrevision()); + $version = "$version(r$revision)"; + + # We can actually parse any file starting with . and ending with .inc, + # but right now we only parse .inspircd.inc to form './inspircd' + foreach $name (sort readdir(DIRHANDLE)) { if ($name =~ /^\.(.+)\.inc$/) { $file = $1; @@ -1327,6 +1066,7 @@ EOF $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"); @@ -1342,7 +1082,7 @@ EOF print "Writing static-build \033[1;32msrc/Makefile\033[0m\n"; write_static_makefile(); write_static_modules_makefile(); - } elsif ($config{OSNAME} =~ /CYGWIN/) { + } elsif ($config{OSNAME} =~ /CYGWIN/i) { print "Writing cygwin-build \033[1;32msrc/Makefile\033[0m\n"; write_static_makefile(); write_dynamic_modules_makefile(); @@ -1353,62 +1093,6 @@ EOF } } -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"; - } else { - $config{$flag} = "n"; - } - return; -} - sub write_static_modules_makefile { # Modules Makefile.. print "Writing \033[1;32msrc/modules/Makefile\033[0m\n"; @@ -1470,12 +1154,15 @@ HEADER if ($i !~ /_static$/) { $cmflags = getcompilerflags("src/modules/m_".$i.".cpp"); $liflags = getlinkerflags("src/modules/m_".$i.".cpp"); + $deps = getdependencies("src/modules/m_".$i.".cpp"); + + #print "file: $i: cmflags=$cmflags; liflags=$liflags; deps=$deps\n"; ### # Write Entry to the Makefile ### print FILEHANDLE <src/modules/Makefile"); my $extra = ""; - if ($config{OSNAME} =~ /CYGWIN/) { + if ($config{OSNAME} =~ /CYGWIN/i) { $extra = "../inspircd.dll.a"; } @@ -1538,22 +1226,60 @@ EOF my $crud = ""; foreach $i (@modlist) { - ### - # Write Entry to the MakeFile - ### - $cmflags = getcompilerflags("src/modules/m_".$i.".cpp"); - $liflags = getlinkerflags("src/modules/m_".$i.".cpp"); - print FILEHANDLE <