X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=configure;h=7d16af9a309b4318233be49262fb5531cdca2811;hb=92fb37b10ffc5b0213ea8373bebb4418a2b44c4c;hp=964a4f19d5c57d243cde98f965f8837805f8d162;hpb=549ac33242cc201737290866159da702807e7f53;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/configure b/configure index 964a4f19d..7d16af9a3 100755 --- a/configure +++ b/configure @@ -2,8 +2,8 @@ ################################################### # InspIRCd Configuration Script # -# Copyright 2002-2008 The InspIRCd Development Team -# http://www.inspircd.org/wiki/index.php/Credits +# Copyright 2002-2009 The InspIRCd Development Team +# http://wiki.inspircd.org/Credits # # Licensed under GPL, please see the COPYING file # for more information @@ -26,7 +26,6 @@ BEGIN { }; use File::Copy (); - use Socket; use Cwd; use Getopt::Long; @@ -82,7 +81,7 @@ our %specialdeps = (); # If you wish for a file to have extra make lines (in between the compile and link steps) # then insert them here. # Auto populated by /* $ExtraBuild: */ instruction - + our %extrabuildlines = (); # If you wish for a file to be linked against extra objects or arctives, insert them here. @@ -145,6 +144,8 @@ GetOptions ( 'list-extras' => sub { list_extras; exit 0; }, # This, --enable-extras, and --disable-extras are for non-interactive managing. 'enable-extras=s@' => \@opt_enableextras, # ^ 'disable-extras=s@' => \@opt_disableextras, # ^ + 'generate-openssl-cert' => sub { make_openssl_cert(); exit(0); }, + 'generate-gnutls-cert' => sub { make_gnutls_cert(); exit(0); } ); if (scalar(@opt_enableextras) + scalar(@opt_disableextras) > 0) { @@ -530,6 +531,15 @@ sub svnupdate exit; } +sub test_compile { + my $feature = shift; + my $fail = 0; + $fail ||= system "$config{CC} -o test_$feature make/check_$feature.cpp >/dev/null 2>&1"; + $fail ||= system "./test_$feature"; + unlink "test_$feature"; + return !$fail; +} + print "Running non-interactive configure...\n" unless $interactive; print "Checking for cache from previous configure... "; print ((!getcache()) ? "not found\n" : "found\n"); @@ -583,69 +593,13 @@ if (!$fail) { print "yes\n" if $has_kqueue == 1; print "no\n" if $has_kqueue == 0; -printf "Checking if epoll exists... "; -$has_epoll = 0; -$fail = 0; -open(EPOLL, ")) - { - chomp($line); - if ($line =~ /GNU C Library .* version (.*?) /) - { - $libcv = $1; - $libcv =~ /(\d+\.\d+)/; - $libcv = $1; - } - elsif ($line =~ /Compiled on a Linux (.*?\..*?)\.* system/) - { - $kernelv = $1; - # Fix for some retarded libc builds, strip off >> and << etc. - $kernelv =~ /(\d+\.\d+)/; - $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; +printf "Checking for epoll support... "; +$has_epoll = test_compile('epoll'); +print $has_epoll ? "yes\n" : "no\n"; + +printf "Checking for eventfd support... "; +$config{HAS_EVENTFD} = test_compile('eventfd') ? 'true' : 'false'; +print $config{HAS_EVENTFD} eq 'true' ? "yes\n" : "no\n"; printf "Checking if Solaris I/O completion ports are available... "; $has_ports = 0; @@ -664,7 +618,7 @@ print "yes\n" if $has_ports == 1; print "no\n" if $has_ports == 0; $config{HAS_EPOLL} = $has_epoll; -$config{HAS_KQUEUE} = $has_kqueue; +$config{HAS_KQUEUE} = $has_kqueue; printf "Checking for libgnutls... "; if (defined($config{HAS_GNUTLS}) && (($config{HAS_GNUTLS}) || ($config{HAS_GNUTLS} eq "y"))) { @@ -705,7 +659,7 @@ if ($config{OSNAME} =~ /FreeBSD/i) { # ICKY ICKY ICK, FREEBSD 4.x! GET AN UPGRADE! $config{CRAQ} = "-L/usr/local/lib -lgnugetopt -DHAVE_DECL_GETOPT=1"; - print "yes\n"; + print "yes (upgrade ffs, freebsd 4 is *way* out of date)\n"; } else { @@ -867,28 +821,39 @@ should NOT be used. You should probably specify a newer compiler.\n\n"; $config{USE_FREEBSD_BASE_SSL} = "y" if ($^O eq "freebsd"); } - if (($config{HAS_GNUTLS} eq "y") && ($config{HAS_OPENSSL} eq "y")) { - print "I have detected both \e[1;32mGnuTLS\e[0m and \e[1;32mOpenSSL\e[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"; + $config{USE_SSL} = "n"; + + if ($config{HAS_GNUTLS} eq "y" || $config{HAS_OPENSSL} eq "y") + { print "Detected GnuTLS version: \e[1;32m" . $gnutls_ver . "\e[0m\n"; print "Detected OpenSSL version: \e[1;32m" . $openssl_ver . "\e[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"; + yesno('USE_SSL', "One or more SSL libraries detected. Would you like to enable SSL support?"); + if ($config{USE_SSL} eq "y") + { + if ($config{HAS_GNUTLS} eq "y") + { + yesno('USE_GNUTLS',"Would you like to enable SSL with m_ssl_gnutls? (recommended)"); + if ($config{USE_GNUTLS} eq "y") + { + print "\nUsing GnuTLS SSL module.\n"; + } + } + + if ($config{HAS_OPENSSL} eq "y") + { + yesno('USE_OPENSSL', "Would you like to enable SSL with m_ssl_openssl?"); + 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"; + else + { + print "\nCould not detect OpenSSL or GnuTLS. Make sure pkg-config is installed if\n"; + print "you intend to use OpenSSL, or that GnuTLS is in your path if you intend\nto use GnuTLS.\n\n"; } } @@ -985,7 +950,7 @@ if (($config{USE_GNUTLS} eq "y") || ($config{USE_OPENSSL} eq "y")) { print "Please note: for \e[1;32mSSL support\e[0m you will need to load required\n"; print "modules in your config. This configure script has added those modules to the\n"; print "build process. For more info please refer to:\n"; - print "\e[1;32mhttp://www.inspircd.org/wiki/Installation_From_Tarball\e[0m\n"; + print "\e[1;32mhttp://wiki.inspircd.org/Installation_From_Tarball\e[0m\n"; } print "*** \e[1;32mRemember to edit your configuration files!!!\e[0m ***\n\n\n"; if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) { @@ -1051,8 +1016,8 @@ sub dir_check { # Assume relative Path was given.. fill in the rest. $var = $this . "/$var"; } - - $var = resolve_directory($var); + + $var = resolve_directory($var); if (! -e $var) { print "$var does not exist. Create it?\n[\e[1;32my\e[0m] "; chomp(my $tmp = ); @@ -1095,7 +1060,7 @@ sub getosflags { $config{LDLIBS} = "-pthread -lstdc++"; $config{FLAGS} = "-fPIC -Woverloaded-virtual -Wshadow -Wformat=2 -Wmissing-format-attribute -Wall $config{OPTIMISATI}"; $config{DEVELOPER} = "-fPIC -Woverloaded-virtual -Wshadow -Wall -Wformat=2 -Wmissing-format-attribute -g"; - $SHARED = "-shared"; + $SHARED = "-shared -export-dynamic"; $config{MAKEPROG} = "make"; if ($config{OSNAME} =~ /darwin/i) { @@ -1106,7 +1071,8 @@ sub getosflags { if ($config{OSNAME} =~ /OpenBSD/i) { $config{MAKEPROG} = "gmake"; - $config{LDLIBS} = $config{LDLIBS} . " -lunwind"; +# apparantly (Dagonet says) that this causes problems, so let's try without it. +# $config{LDLIBS} = $config{LDLIBS} . " -lunwind"; chomp(my $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 @@ -1143,7 +1109,7 @@ sub getosflags { $config{LDLIBS} .= " -lsocket -lnsl -lrt -lresolv -pthread"; return "Solaris"; } - + if($config{OSNAME} =~ /MINGW32/i) { # All code is position-independent on windows @@ -1217,6 +1183,9 @@ print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n"; if ($config{SUPPORT_IP6LINKS} =~ /y/i) { print FILEHANDLE "#define SUPPORT_IP6LINKS\n"; } + if ($config{HAS_EVENTFD} eq 'true') { + print FILEHANDLE "#define HAS_EVENTFD\n"; + } my $use_hiperf = 0; if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) { print FILEHANDLE "#define USE_KQUEUE\n"; @@ -1348,7 +1317,7 @@ EOF $tmp =~ s/\@INSTALL_LIST\@/$install_list/ if defined $install_list; $tmp =~ s/\@UNINSTALL_LIST\@/$uninstall_list/ if defined $uninstall_list; - open(FILEHANDLE, ">$file"); + open(FILEHANDLE, ">$file") or die("Can't write to $file: $!\n"); print FILEHANDLE $tmp; } } @@ -1368,8 +1337,8 @@ sub write_dynamic_modules_makefile { ### print FILEHANDLE < # for assisting with making this work right. @@ -1411,27 +1380,27 @@ EOCHEESE $cmflags = getcompilerflags("src/modules/m_".$i.".cpp"); $liflags = getlinkerflags("src/modules/m_".$i.".cpp"); my $deps = getdependencies("src/modules/m_".$i.".cpp"); - + #print "file: $i: cmflags=$cmflags; liflags=$liflags; deps=$deps\n"; - + if (nopedantic("src/modules/m_".$i.".cpp")) { print FILEHANDLE " m_$i.so: m_$i.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h ../../include/inspircd_config.h ../../include/inspircd.h ../../include/configreader.h $deps - \@../../make/run-cc.pl \$(CC) -pipe -I../../include \$(NICEFLAGS) $cmflags \$(PICLDFLAGS) $liflags -export-dynamic -o m_$i.so m_$i.cpp -" + \@../../make/run-cc.pl \$(CC) -pipe -I../../include \$(NICEFLAGS) $cmflags \$(PICLDFLAGS) $liflags $SHARED -o m_$i.so m_$i.cpp +"; } else { print FILEHANDLE " m_$i.so: m_$i.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h ../../include/inspircd_config.h ../../include/inspircd.h ../../include/configreader.h $deps - \@../../make/run-cc.pl \$(CC) -pipe -I../../include \$(FLAGS) $cmflags \$(PICLDFLAGS) $liflags -export-dynamic -o m_$i.so m_$i.cpp + \@../../make/run-cc.pl \$(CC) -pipe -I../../include \$(FLAGS) $cmflags \$(PICLDFLAGS) $liflags $SHARED -o m_$i.so m_$i.cpp "; } $install_list = $install_list . " install -m \$(INSTMODE) src/modules/m_$i.so \$(MODPATH)\n"; $uninstall_list = $uninstall_list . " -rm \$(MODULES)/m_$i.so\n"; -### + ### # End Write Entry to the MakeFile ### } @@ -1447,12 +1416,8 @@ m_$i.so: m_$i.cpp ../../include/modules.h ../../include/users.h ../../include/ch if (defined(opendir(MDIRHANDLE, "src/modules/$name"))) { read_module_directory("src/modules/$name", $name); print "Composing Makefile rules for directory \e[1;32m$name\e[0m... (\e[1;32m$mfcount files found\e[0m)\n"; - 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 $mobjs\n"; - if ($config{IS_DARWIN} eq "YES") { - print FILEHANDLE " \@../../make/run-cc.pl \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) $mliflags -bundle -o $name.so $mobjs\n"; - } else { - print FILEHANDLE " \@../../make/run-cc.pl \$(CC) -pipe \$(FLAGS) -shared $mliflags -o $name.so $mobjs\n"; - } + 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 $mobjs\n"; + print FILEHANDLE " \@../../make/run-cc.pl \$(CC) -pipe \$(FLAGS) $SHARED $mliflags -o $name.so $mobjs\n"; print FILEHANDLE "\n$mfrules\n"; closedir(MDIRHANDLE); $install_list = $install_list . " install -m \$(INSTMODE) src/modules/$name.so \$(MODPATH)\n"; @@ -1464,11 +1429,11 @@ m_$i.so: m_$i.cpp ../../include/modules.h ../../include/users.h ../../include/ch sub read_module_directory { my ($dpath, $reldpath) = @_; - + if (opendir(MDIRHANDLE, $dpath) == 0) { return; } - + foreach my $fname (sort readdir(MDIRHANDLE)) { if ($fname =~ /\.cpp$/) { my $cmflags = getcompilerflags("$dpath/$fname"); @@ -1477,7 +1442,7 @@ sub read_module_directory { my $oname = $fname; $oname =~ s/\.cpp$/.o/g; $mfrules = $mfrules . "$reldpath/$oname: $reldpath/$fname ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h ../../include/inspircd_config.h ../../include/inspircd.h ../../include/configreader.h $deps\n"; - $mfrules = $mfrules . " \@../../make/run-cc.pl \$(CC) -pipe -I../../include -I. \$(FLAGS) $cmflags -export-dynamic -o $reldpath/$oname -c $reldpath/$fname\n\n"; + $mfrules = $mfrules . " \@../../make/run-cc.pl \$(CC) -pipe -I../../include -I. \$(FLAGS) $cmflags $SHARED -o $reldpath/$oname -c $reldpath/$fname\n\n"; $mobjs = $mobjs . " $reldpath/$oname"; $mfcount++; } @@ -1665,7 +1630,7 @@ sub write_dynamic_makefile if ($config{IS_DARWIN} eq "YES") { $libraryext = "dylib"; - $binary_rule = " \@../make/run-cc.pl \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd.cpp\n \@../make/run-cc.pl \$(CC) -pipe -dynamic -bind_at_load -L. -o inspircd \$(LDLIBS) inspircd.o " + $binary_rule = " \@../make/run-cc.pl \$(CC) -pipe -I../include \$(FLAGS) -c inspircd.cpp\n \@../make/run-cc.pl \$(CC) -pipe -dynamic -bind_at_load -L. -o inspircd \$(LDLIBS) inspircd.o " } else { @@ -1717,12 +1682,12 @@ EOM if (exists($core_files_list{$cpp})) { - # core files are statically linked into the binary and do not require -export-dynamic + # core files are statically linked into the binary and do not require $SHARED shared libs switches $buildstring = $buildstring . " \@../make/run-cc.pl \$(CC) -pipe -I../include \$(FLAGS) -c $rawcpp\n"; } else { - $buildstring = $buildstring . " \@../make/run-cc.pl \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c $rawcpp\n"; + $buildstring = $buildstring . " \@../make/run-cc.pl \$(CC) -pipe -I../include \$(FLAGS) $SHARED -c $rawcpp\n"; } if (exists($extrabuildlines{$cpp})) @@ -1760,11 +1725,11 @@ all: $cmdobjs ITEM - # now print the command file details. + # now print the command file detail foreach my $cmd (@cmdlist) { print FH <