X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=configure;h=fdfcb5e7aa0f68ae94d5609c0671f43d1670a95e;hb=5784c4396975b75809613b9cddb93dafc22a5517;hp=1217fb07e5ced572980450c555fa56c6ac2a8b12;hpb=955d378db3db1e5d62b64f92a90038b7231ea613;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/configure b/configure index 1217fb07e..fdfcb5e7a 100755 --- a/configure +++ b/configure @@ -2,7 +2,7 @@ # InspIRCd Configuration Script # -# Copyright 2002-2006 The ChatSpike Development Team +# Copyright 2002-2007 The ChatSpike Development Team # # # @@ -14,9 +14,14 @@ 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, @@ -25,7 +30,7 @@ GetOptions ( '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, + 'with-max-clients=i' => \$opt_maxclients, 'enable-epoll' => \$opt_epoll, 'enable-kqueue' => \$opt_kqueue, 'disable-epoll' => \$opt_noepoll, @@ -209,6 +214,7 @@ $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{CC} = "g++"; # C++ compiler if (defined $opt_cc) @@ -250,8 +256,6 @@ if (defined $opt_away) $config{MAX_AWAY} = $opt_away; } -$no_svn = 0; - $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; @@ -262,7 +266,7 @@ 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/i) { @@ -279,9 +283,7 @@ getmodules(); sub clean { - if ($arg eq "-clean") { - system("rm -rf .config.cache"); - } + system("rm -rf .config.cache"); } sub update @@ -307,6 +309,7 @@ sub update $has_epoll = $config{HAS_EPOLL}; $has_kqueue = $config{HAS_KQUEUE}; writefiles(1); + makecache(); print "Complete.\n"; exit; } @@ -329,6 +332,7 @@ sub modupdate $has_epoll = $config{HAS_EPOLL}; $has_kqueue = $config{HAS_KQUEUE}; writefiles(0); + makecache(); print "Complete.\n"; exit; } @@ -428,7 +432,7 @@ if (!$fail) { 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; } } @@ -590,262 +594,24 @@ 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_fail 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; - $config{MAX_DESCRIPTORS} = $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"); } -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"; -# and not echo it out so we don't get some ricer fuck complaining -#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"; +dumphash(); if (($config{USE_GNUTLS} eq "y") && ($config{HAS_GNUTLS} ne "y")) { @@ -946,8 +712,8 @@ if (($config{USE_GNUTLS} eq "n") && ($config{USE_OPENSSL} eq "n")) { } getosflags(); -makecache(); writefiles(1); +makecache(); print "\n\n"; print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n"; @@ -1119,55 +885,6 @@ sub getosflags { return $config{OSNAME}; } -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; -} - sub writefiles { my($writeheader) = @_; # First File.. inspircd_config.h @@ -1192,6 +909,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 @@ -1290,6 +1009,17 @@ 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 = ""; @@ -1365,64 +1095,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 getdependencies { - my ($file) = @_; - open(FLAGS, $file); - while () { - if ($_ =~ /^\/\* \$ModDep: (.+) \*\/$/) { - close(FLAGS); - return $1; - } - } - close(FLAGS); - return undef; -} - -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"; @@ -1486,6 +1158,8 @@ HEADER $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 ### @@ -1513,6 +1187,7 @@ EOENT print "done\n"; } } + print MODLIST "{0}};\n\n#endif\n"; close(MODLIST); } @@ -1553,23 +1228,61 @@ 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"); - $deps = getdependencies("src/modules/m_".$i.".cpp"); - print FILEHANDLE <