X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=configure;h=1a4f03330f3d07c87208612ee276e7ebb0922135;hb=26e8190a3775bea8a3ef1b2c89184043394ea341;hp=c0ff0d793a289bbb08380b22a7fcdc98d4f78d2f;hpb=de6551f6350206c036b7a91b1b13c8d1a523e522;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/configure b/configure index c0ff0d793..1a4f03330 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 @@ -81,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. @@ -144,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) { @@ -216,7 +218,7 @@ 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_GNUTLS} = `pkg-config --modversion gnutls 2>/dev/null | cut -c 1,2,3`); # GNUTLS Version. if (defined $opt_freebsd_port) { @@ -331,7 +333,6 @@ our $exec = $config{CC} . " -dumpversion | cut -c 1"; chomp($config{GCCVER} = `$exec`); # Major GCC Version $exec = $config{CC} . " -dumpversion | cut -c 3"; chomp($config{GCCMINOR} = `$exec`); -$config{MAKEORDER} = "ircd mods"; # build order $config{MAXBUF} = "512"; # Max buffer size if ($config{HAS_OPENSSL} =~ /^([-[:digit:].]+)([a-z])?(\-[a-z][0-9])?$/) { @@ -529,6 +530,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"); @@ -582,69 +592,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; @@ -663,7 +617,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"))) { @@ -723,6 +677,9 @@ else print "no ($config{OSNAME})\n"; } +print "Checking for upgrades to extra and third party modules... "; +system "./modulemanager upgrade"; + ################################################################################ # BEGIN INTERACTIVE PART # ################################################################################ @@ -916,13 +873,15 @@ if (($config{USE_OPENSSL} eq "y") && ($config{HAS_OPENSSL} ne "y")) } our $failed = 0; +$config{CERTGEN} ||= 'y'; +yesno('CERTGEN',"Would you like generate SSL certificates now?") if ($interactive && ($config{USE_GNUTLS} eq "y" || $config{USE_OPENSSL} eq "y")); + if ($config{USE_GNUTLS} eq "y") { unless (-r "src/modules/m_ssl_gnutls.cpp") { print "Symlinking src/modules/m_ssl_gnutls.cpp from extra/\n"; symlink "extra/m_ssl_gnutls.cpp", "src/modules/m_ssl_gnutls.cpp" or print STDERR "Symlink failed: $!"; } - getmodules(); - if ($interactive) + if ($interactive && $config{CERTGEN} eq 'y') { unless (-r "$config{CONFIG_DIR}/key.pem" && -r "$config{CONFIG_DIR}/cert.pem") { print "SSL Certificates Not found, Generating.. \n\n @@ -951,14 +910,15 @@ if ($config{USE_GNUTLS} eq "y") { { print "Skipping SSL certificate generation\nin non-interactive mode.\n\n"; } -} elsif ($config{USE_OPENSSL} eq "y") { +} + +if ($config{USE_OPENSSL} eq "y") { unless (-r "src/modules/m_ssl_openssl.cpp") { print "Symlinking src/modules/m_ssl_openssl.cpp from extra/\n"; symlink "extra/m_ssl_openssl.cpp", "src/modules/m_ssl_openssl.cpp" or print STDERR "Symlink failed: $!"; } - getmodules(); $failed = 0; - if ($interactive) + if ($interactive && $config{CERTGEN} eq 'y') { unless (-r "$config{CONFIG_DIR}/key.pem" && -r "$config{CONFIG_DIR}/cert.pem") { print "SSL Certificates Not found, Generating.. \n\n @@ -995,7 +955,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++")) { @@ -1061,8 +1021,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 = ); @@ -1103,13 +1063,13 @@ sub getosflags { # Beware: Linux sets it's own cflags below for some retarded reason $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"; + $config{FLAGS} = "-pipe -fPIC -Woverloaded-virtual -Wshadow -Wformat=2 -Wmissing-format-attribute -Wall $config{OPTIMISATI}"; + $config{DEVELOPER} = "-pipe -fPIC -Woverloaded-virtual -Wshadow -Wall -Wformat=2 -Wmissing-format-attribute -g"; + $SHARED = "-shared -export-dynamic"; $config{MAKEPROG} = "make"; if ($config{OSNAME} =~ /darwin/i) { - $config{FLAGS} = "-DDARWIN -frtti -fPIC -Wall $config{OPTIMISATI}"; + $config{FLAGS} = "-pipe -DDARWIN -frtti -fPIC -Wall $config{OPTIMISATI}"; $SHARED = "-bundle -twolevel_namespace -undefined dynamic_lookup"; $config{LDLIBS} = "-ldl -pthread -lstdc++"; } @@ -1154,7 +1114,7 @@ sub getosflags { $config{LDLIBS} .= " -lsocket -lnsl -lrt -lresolv -pthread"; return "Solaris"; } - + if($config{OSNAME} =~ /MINGW32/i) { # All code is position-independent on windows @@ -1228,6 +1188,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"; @@ -1293,7 +1256,7 @@ EOF if (defined(opendir(MDIRHANDLE, "src/modules/$name2"))) { closedir(MDIRHANDLE); $modules .= "$name2.so "; - $uninstall_list = $uninstall_list . " -rm \$(MODULES)/$name2.so\n"; + $uninstall_list = $uninstall_list . " -rm \$(MODPATH)/$name2.so\n"; } } } @@ -1331,36 +1294,49 @@ EOF next if (($config{OSNAME} !~ /darwin/) && ($file eq "org.inspircd.plist")); # All .name.inc files need parsing! - $tmp = ""; open(FILEHANDLE, ".$file.inc") or die ("Can't open .$file.inc"); - while () { - $tmp .= $_; - } + $_ = join '', ; close(FILEHANDLE); print "Writing \e[1;32m$file\e[0m ...\n"; - $tmp =~ s/\@CC\@/$config{CC}/ if defined $config{CC}; - $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/ if defined $config{MAKEPROG}; - $tmp =~ s/\@FLAGS\@/$config{FLAGS}/ if defined $config{FLAGS}; - $tmp =~ s/\@DEVELOPER\@/$config{DEVELOPER}/ if defined $config{DEVELOPER}; - $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/ if defined $config{LDLIBS}; - $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/ if defined $config{BASE_DIR}; - $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/ if defined $config{CONFIG_DIR}; - $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/ if defined $config{MODULE_DIR}; - $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/ if defined $config{BINARY_DIR}; - $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/ if defined $config{LIBRARY_DIR}; - $tmp =~ s/\@MODULES\@/$modules/ if defined $modules; - $tmp =~ s/\@STARTSCRIPT\@/$config{STARTSCRIPT}/ if defined $config{STARTSCRIPT}; - $tmp =~ s/\@DESTINATION\@/$config{DESTINATION}/ if defined $config{DESTINATION}; - $tmp =~ s/\@EXTRA_DIR\@/$config{EXTRA_DIR}/ if defined $config{EXTRA_DIR}; - $tmp =~ s/\@EXECUTABLE\@/$exe/ if defined $exe; - $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/ if defined $config{MAKEORDER}; - $tmp =~ s/\@VERSION\@/$version/ if defined $version; - $tmp =~ s/\@INSTALL_LIST\@/$install_list/ if defined $install_list; - $tmp =~ s/\@UNINSTALL_LIST\@/$uninstall_list/ if defined $uninstall_list; - - open(FILEHANDLE, ">$file") or die("Can't write to $file: $!\n"); - print FILEHANDLE $tmp; + for my $var (qw( + CC FLAGS DEVELOPER LDLIBS BASE_DIR CONFIG_DIR MODULE_DIR BINARY_DIR LIBRARY_DIR + STARTSCRIPT DESTINATION EXTRA_DIR + )) { + s/\@$var\@/$config{$var}/g; + } + s/\@MODULES\@/$modules/ if defined $modules; + s/\@EXECUTABLE\@/$exe/ if defined $exe; + s/\@VERSION\@/$version/ if defined $version; + s/\@INSTALL_LIST\@/$install_list/ if defined $install_list; + s/\@UNINSTALL_LIST\@/$uninstall_list/ if defined $uninstall_list; + + if ($file eq 'Makefile') { + my $mk_tmp = $_; + s/\@IFDEF (\S+)/ifdef $1/g; + s/\@IFNDEF (\S+)/ifndef $1/g; + s/\@ELSE/else/g; + s/\@ENDIF/endif/g; + s/\@BSD_ONLY .*\n//g; + s/\@GNU_ONLY //g; + open MKF, '>GNUmakefile' or die "Can't write to GNUmakefile: $!"; + print MKF $_; + close MKF; + $_ = $mk_tmp; + s/\@IFDEF (\S+)/.if defined($1)/g; + s/\@IFNDEF (\S+)/.if !defined($1)/g; + s/\@ELSE/.else/g; + s/\@ENDIF/.endif/g; + s/\@BSD_ONLY //g; + s/\@GNU_ONLY .*\n//g; + open MKF, '>BSDmakefile' or die "Can't write to BSDmakefile: $!"; + print MKF $_; + close MKF; + } else { + open(FILEHANDLE, ">$file") or die("Can't write to $file: $!\n"); + print FILEHANDLE $_; + close(FILEHANDLE); + } } } closedir(DIRHANDLE); @@ -1379,8 +1355,8 @@ sub write_dynamic_modules_makefile { ### print FILEHANDLE < # for assisting with making this work right. @@ -1422,27 +1398,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 -" + \$(RUNCC) \$(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 + \$(RUNCC) \$(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 ### } @@ -1458,12 +1434,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 " \$(RUNCC) \$(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"; @@ -1475,11 +1447,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"); @@ -1488,7 +1460,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 . " \$(RUNCC) -I. \$(FLAGS) $cmflags $SHARED -o $reldpath/$oname -c $reldpath/$fname\n\n"; $mobjs = $mobjs . " $reldpath/$oname"; $mfcount++; } @@ -1676,21 +1648,24 @@ sub write_dynamic_makefile if ($config{IS_DARWIN} eq "YES") { $libraryext = "dylib"; - $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 " + $binary_rule = " \$(RUNCC) -dynamic -bind_at_load -L. -o inspircd \$(LDLIBS) inspircd.o " } else { $libraryext = "so"; - $binary_rule = " \@../make/run-cc.pl \$(CC) -pipe -I../include \$(FLAGS) $freebsd4libs -rdynamic -L. inspircd.cpp -o inspircd \$(LDLIBS) "; + $binary_rule = " \$(RUNCC) \$(FLAGS) $freebsd4libs -rdynamic -L. -o inspircd \$(LDLIBS) "; } open(FH,">src/Makefile") or die("Could not write src/Makefile"); - print FH <src/commands/Makefile") or die("Could not write src/commands/Makefile"); print FH <