X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=configure;h=67e5b7aab44bd327b29653cfeea35375ed3bd7ad;hb=b5944899a98a6cc0bae7bff0fe195b7e550e26bb;hp=0b1baf47f3b200d9f212eead3baab744e759b397;hpb=c8c8552683ae7fde9131b48b1dff47398e20f324;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/configure b/configure index 0b1baf47f..67e5b7aab 100755 --- a/configure +++ b/configure @@ -1,19 +1,16 @@ #!/usr/bin/perl - +################################################### # InspIRCd Configuration Script # -# Copyright 2002-2007 The ChatSpike Development Team -# -# +# Copyright 2002-2007 The InspIRCd Development Team +# http://www.inspircd.org/wiki/index.php/Credits # # Licensed under GPL, please see the COPYING file # for more information # -# [14:21] Brain: i know perl-fu! -# # $Id$ # -######################################## +################################################### require 5.6.0; use Socket; @@ -47,6 +44,7 @@ GetOptions ( '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, @@ -95,6 +93,7 @@ my $non_interactive = ( (defined $opt_nokqueue) || (defined $opt_noepoll) || (defined $opt_noports) || + (defined $opt_maxbuf) || (defined $opt_use_gnutls) ); my $interactive = !$non_interactive; @@ -102,9 +101,9 @@ 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 +@modlist = (); # Declare for Module List.. +%config = (); # Initiate Configuration Hash.. +$config{ME} = resolve_directory($topdir); # Present Working Directory $config{BASE_DIR} = $config{ME}; @@ -113,8 +112,8 @@ 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{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 @@ -135,13 +134,13 @@ 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} = `pkg-config --modversion openssl 2>/dev/null`); # Openssl version +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_GNUTLS} = "y"; # Use gnutls. } $config{USE_OPENSSL} = "n"; # Use openssl. if (defined $opt_use_openssl) @@ -150,14 +149,14 @@ if (defined $opt_use_openssl) } # no, let's not change these. -$config{OPTIMITEMP} = "0"; # Default Optimisation Value +$config{OPTIMITEMP} = "0"; # Default Optimisation Value if (!defined $opt_disable_debug) { $config{OPTIMISATI} = "-g1"; # Optimisation Flag } else { - $config{OPTIMISATI} = "-O2"; # DEBUGGING OFF! + $config{OPTIMISATI} = "-O2"; # DEBUGGING OFF! } $config{NICK_LENGT} = "31"; # Default Nick Length @@ -176,7 +175,7 @@ if (defined $opt_modes) $config{MAXI_MODES} = $opt_modes; } $config{HAS_STRLCPY} = "false"; # strlcpy Check. -$config{HAS_STDINT} = "false"; # stdint.h check +$config{HAS_STDINT} = "false"; # stdint.h check $config{USE_KQUEUE} = "y"; # kqueue enabled if (defined $opt_kqueue) { @@ -186,7 +185,7 @@ if (defined $opt_nokqueue) { $config{USE_KQUEUE} = "n"; } -$config{USE_EPOLL} = "y"; # epoll enabled +$config{USE_EPOLL} = "y"; # epoll enabled if (defined $opt_epoll) { $config{USE_EPOLL} = "y"; @@ -195,7 +194,7 @@ if (defined $opt_noepoll) { $config{USE_EPOLL} = "n"; } -$config{USE_PORTS} = "y"; # epoll enabled +$config{USE_PORTS} = "y"; # epoll enabled if (defined $opt_ports) { $config{USE_PORTS} = "y"; @@ -209,7 +208,7 @@ if (defined $opt_ipv6) { $config{IPV6} = "y"; } -$config{SUPPORT_IP6LINKS} = "y"; # IPv4 supporting IPv6 links (experimental) +$config{SUPPORT_IP6LINKS} = "y"; # IPv4 supporting IPv6 links (experimental) if (defined $opt_ipv6links) { $config{SUPPORT_IP6LINKS} = "y"; @@ -218,16 +217,22 @@ if (defined $opt_noipv6links) { $config{SUPPORT_IP6LINKS} = "n"; } -$config{STATIC_LINK} = "no"; # are doing static modules? +$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 +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{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 if (defined $opt_cc) @@ -235,15 +240,16 @@ 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 +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; @@ -391,7 +397,7 @@ sub svnupdate print "Running non-interactive configure...\n" unless $interactive; print "Checking for cache from previous configure... "; -print ((getcache() eq "true") ? "found\n" : "not found\n"); +print ((!getcache()) ? "not found\n" : "found\n"); print "Checking operating system version... "; print getosflags() . "\n"; @@ -468,6 +474,40 @@ if ($has_epoll) { 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; @@ -481,7 +521,7 @@ $has_ports = 1 if ($system eq "SunOS"); if ($has_ports) { my $kernel = `uname -r`; chomp($kernel); - if (($kernel !~ /^5\.10/)) { + if (($kernel !~ /^5\.1./)) { $has_ports = 0; } } @@ -707,13 +747,18 @@ if ($config{USE_GNUTLS} eq "y") { * few times and get that HD going :) Then answer the * * Questions which follow. If you are unsure, just hit enter * *************************************************************\n\n"; - make_gnutls_cert(); - print "\nCertificate generation complete, copying to config directory... "; - system("mv key.pem $config{CONFIG_DIR}/key.pem"); - system("mv cert.pem $config{CONFIG_DIR}/cert.pem"); - print "Done.\n\n"; - } else { - print "SSL Certificates found, skipping.\n\n" + $failed = make_gnutls_cert(); + if ($failed) { + print "\n\033[1;32mCertificate generation failed!\033[0m\n\n"; + } else { + print "\nCertificate generation complete, copying to config directory... "; + system("mv key.pem $config{CONFIG_DIR}/key.pem"); + system("mv cert.pem $config{CONFIG_DIR}/cert.pem"); + print "Done.\n\n"; + } + } + else { + print "SSL Certificates found, skipping.\n\n"; } } else @@ -795,7 +840,7 @@ FOO2 ################################################################################ sub getcache { # Retrieves the .config.cache file, and loads values into the main config hash. - open(CACHE, ".config.cache") or return undef; + open(CACHE, ".config.cache") or return 0; while () { chomp; # Ignore Blank lines, and comments.. @@ -807,7 +852,7 @@ sub getcache { $config{$key} = $1; } close(CONFIG); - return "true"; + return 1; } sub makecache { @@ -876,13 +921,13 @@ sub dir_check { sub getosflags { $config{LDLIBS} = "-lstdc++"; - $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}"; - $config{DEVELOPER} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -g"; + $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 $config{OPTIMISATI}"; + $config{FLAGS} = "-DDARWIN -frtti -fPIC -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}"; $SHARED = "-bundle -twolevel_namespace -undefined dynamic_lookup"; $config{LDLIBS} = "-ldl -lstdc++"; } @@ -902,17 +947,18 @@ sub getosflags { if ($config{OSNAME} =~ /Linux/i) { $config{LDLIBS} = "-ldl -lstdc++"; - $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}"; + $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 $config{OPTIMISATI}"; + $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 $config{OPTIMISATI}"; + $config{FLAGS} = "-fno-strict-aliasing -Wall -Woverloaded-virtual -Wno-deprecated $config{OPTIMISATI}"; $config{LDLIBS} = ""; $config{MAKEPROG} = "/usr/bin/make"; $config{MAKEORDER} = "mods ircd"; @@ -920,10 +966,14 @@ sub getosflags { $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}); } - - if ($config{OSNAME} =~ /SunOS/i) + + if ($config{OSNAME} =~ /SunOS/i or $config{OSNAME} =~ /solaris/i) { # solaris/sunos needs these # socket = bsd sockets api @@ -931,7 +981,7 @@ sub getosflags { # rt = POSIX realtime extensions # resolv = inet_aton only (why isnt this in nsl?!) $config{MAKEPROG} = "gmake"; - $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv"; + $config{LDLIBS} .= " -lsocket -lnsl -lrt -lresolv"; return "Solaris"; } @@ -962,6 +1012,10 @@ sub writefiles { #ifndef __CONFIGURATION_AUTO__ #define __CONFIGURATION_AUTO__ +/* this is for windows support. */ +#define CoreExport /**/ +#define DllExport /**/ + #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf" #define MOD_PATH "$config{MODULE_DIR}" #define VERSION "$version" @@ -982,8 +1036,9 @@ sub writefiles { #define OPTIMISATION $config{OPTIMITEMP} #define LIBRARYDIR "$config{LIBRARY_DIR}" #define SYSTEM "$incos" -#define MAXBUF 514 EOF +print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n"; + if ($config{OSNAME} =~ /SunOS/i) { print FILEHANDLE "#define IS_SOLARIS\n"; } @@ -1113,6 +1168,10 @@ EOF foreach $name (sort readdir(DIRHANDLE)) { if ($name =~ /^\.(.+)\.inc$/) { $file = $1; + + # Bug #353, omit this on non-darwin + next if (($config{OSNAME} !~ /darwin/) && ($file eq "org.inspircd.plist")); + # All .name.inc files need parsing! $tmp = ""; open(FILEHANDLE, ".$file.inc"); @@ -1133,6 +1192,9 @@ EOF $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}/; @@ -1172,13 +1234,16 @@ sub write_static_modules_makefile { # Module Makefile Header ### print FILEHANDLE < -# Many Thanks to Andrew Church -# for assisting with making this work right. +################################################### +# Copyright 2002-2007 The InspIRCd Development Team +# http://www.inspircd.org/wiki/index.php/Credits # -# Automatically Generated by ./configure to add a modules -# please run ./configure --update +# Thanks to Andrew Church +# for assisting with making this work right. +# +# Automatically Generated by ./configure to add a +# modules please run ./configure --modupdate +################################################### all: \$(MODULES) @@ -1274,13 +1339,16 @@ sub write_dynamic_modules_makefile { # Module Makefile Header ### print FILEHANDLE < -# Many Thanks to Andrew Church -# for assisting with making this work right. +################################################### +# Copyright 2002-2007 The InspIRCd Development Team +# http://www.inspircd.org/wiki/index.php/Credits +# +# Thanks to Andrew Church +# 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) @@ -1332,15 +1400,15 @@ EOCHEESE if ($name =~ /^m_(.+?)$/) { $crapola = ""; $crap3 = ""; + $mliflags = ""; # A module made of multiple files, in a dir, e.g. src/modules/m_spanningtree/ if (opendir(MDIRHANDLE, "src/modules/$name") != 0) { - print "Composing Makefile rules for directory \033[1;32m$name\033[0m... "; my $i = 0; print FILEHANDLE "$name.so: ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h ../../include/inspircd_config.h ../../include/inspircd.h ../../include/configreader.h"; foreach $fname (sort readdir(MDIRHANDLE)) { if ($fname =~ /\.cpp$/) { $cmflags = getcompilerflags("src/modules/$name/$fname"); - $liflags = getlinkerflags("src/modules/$name/$fname"); + $mliflags = $mliflags . " " . getlinkerflags("src/modules/$name/$fname"); $deps = getdependencies("src/modules/$name/$fname"); $oname = $fname; $oname =~ s/\.cpp$/.o/g; @@ -1351,11 +1419,11 @@ EOCHEESE $i++; } } - print "(\033[1;32m$i files found\033[0m)\n"; + print "Composing Makefile rules for directory \033[1;32m$name\033[0m... (\033[1;32m$i files found\033[0m)\n"; if ($config{IS_DARWIN} eq "YES") { print FILEHANDLE "\n \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle -o $name.so $crap3\n"; } else { - print FILEHANDLE "\n \$(CC) -pipe \$(FLAGS) -shared $liflags -o $name.so $crap3\n"; + print FILEHANDLE "\n \$(CC) -pipe \$(FLAGS) -shared $mliflags -o $name.so $crap3\n"; } print FILEHANDLE "\n$crapola\n"; closedir(MDIRHANDLE); @@ -1387,12 +1455,16 @@ sub write_static_makefile { $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 @@ -1552,12 +1624,16 @@ sub write_dynamic_makefile { open(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