X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=configure;h=f3aea791f38a5b8aa29998d1d2680669d3060413;hb=39ddf2fb7a4d030fc29a7d421e09394cd70dc9bf;hp=d18b02418864c5c16ab90b91fd9b0a2d17486b55;hpb=98b4025af9bbbb40cf74552016972247605e0e1e;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/configure b/configure index d18b02418..f3aea791f 100755 --- a/configure +++ b/configure @@ -28,17 +28,12 @@ BEGIN { require 5.8.0; + push @INC, '.'; } use strict; use warnings FATAL => qw(all); -use Data::Dumper; -BEGIN { - $Data::Dumper::Sortkeys = 1; - $Data::Dumper::Useqq = 1; -}; - use File::Copy (); use Socket; use Cwd; @@ -148,7 +143,7 @@ our %config = (); # Initiate Configuration Hash.. our $cache_loaded = getcache(); $config{ME} = resolve_directory($topdir); # Present Working Directory -$config{BASE_DIR} = $config{ME}."/run"; +$config{BASE_DIR} ||= $config{ME}."/run"; if (defined $opt_base_dir) { $config{BASE_DIR} = $opt_base_dir; @@ -165,13 +160,13 @@ if (defined $opt_system) { $config{DATA_DIR} = '/var/inspircd'; $config{LOG_DIR} = '/var/log/inspircd'; } else { - $config{UID} = $opt_uid || $<; - $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{BUILD_DIR} = resolve_directory($config{ME}."/build"); # Build Directory - $config{DATA_DIR} = resolve_directory($config{BASE_DIR}."/data"); # Data directory - $config{LOG_DIR} = resolve_directory($config{BASE_DIR}."/logs"); # Log directory + $config{UID} = $opt_uid || $config{UID} || $<; + $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{BUILD_DIR} ||= resolve_directory($config{ME}."/build"); # Build Directory + $config{DATA_DIR} ||= resolve_directory($config{BASE_DIR}."/data"); # Data directory + $config{LOG_DIR} ||= resolve_directory($config{BASE_DIR}."/logs"); # Log directory } if (defined $opt_config_dir) { @@ -189,7 +184,7 @@ if (defined $opt_data_dir) { if (defined $opt_log_dir) { $config{LOG_DIR} = $opt_log_dir; } -chomp($config{HAS_GNUTLS} = `pkg-config --modversion gnutls 2>/dev/null | cut -c 1,2,3`); # GNUTLS Version. +chomp($config{HAS_GNUTLS} = `pkg-config --modversion gnutls 2>/dev/null`); # GNUTLS Version. if (defined $opt_freebsd_port) { @@ -209,17 +204,18 @@ else { chomp($config{HAS_OPENSSL} = `pkg-config --modversion openssl 2>/dev/null`); # Openssl version, others $config{HAS_OPENSSL_PORT} = ""; + $config{USE_FREEBSD_BASE_SSL} = "n"; } } chomp(our $gnutls_ver = $config{HAS_GNUTLS}); chomp(our $openssl_ver = $config{HAS_OPENSSL}); -$config{USE_GNUTLS} = "n"; +$config{USE_GNUTLS} ||= "n"; if (defined $opt_use_gnutls) { $config{USE_GNUTLS} = "y"; # Use gnutls. } -$config{USE_OPENSSL} = "n"; # Use openssl. +$config{USE_OPENSSL} ||= "n"; # Use openssl. if (defined $opt_use_openssl) { $config{USE_OPENSSL} = "y"; @@ -259,6 +255,12 @@ if ($config{OSNAME} =~ /darwin/i) $config{STARTSCRIPT} = "org.inspircd.plist"; # start script for OSX. $config{CC} = "xcrun clang++"; # C++ compiler for OSX. } +elsif ($config{OSNAME} =~ /freebsd/i) +{ + chomp(my $fbsd_version = `uname -r`); + $fbsd_version =~ s/^(\d+\.\d+).*/$1/g; + $config{CC} = $fbsd_version >= 10.0 ? 'clang++' : 'g++'; +} else { $config{CC} = "g++"; # C++ compiler @@ -267,24 +269,20 @@ if (defined $opt_cc) { $config{CC} = $opt_cc; } -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{CC} -dumpversion` =~ /^(\d+)(?:\.(\d+))?/; +$config{GCCVER} = defined $1 ? $1 : ''; +$config{GCCMINOR} = defined $2 ? $2 : '0'; $config{MAXBUF} = "512"; # Max buffer size -if ($config{HAS_OPENSSL} =~ /^([-[:digit:].]+)([a-z])?(\-[a-z][0-9])?$/) { +if ($config{HAS_OPENSSL} =~ /^([-[:digit:].]+)(?:[a-z])?(?:\-[a-z][0-9])?/) { $config{HAS_OPENSSL} = $1; } else { $config{HAS_OPENSSL} = ""; } if (($config{GCCVER} eq "") || ($config{GCCMINOR} eq "")) { - if ($config{IS_DARWIN} eq "YES") { - print $config{CC} . " was not found! You require clang++ (the LLVM C++ compiler, part of the OSX developer tools) to build InspIRCd!\n"; - } else { - print $config{CC} . " was not found! You require g++ (the GNU C++ compiler, part of GCC) to build InspIRCd!\n"; - } + print "`$config{CC}` was not found! A C++ compiler is required to build InspIRCd!\n"; + print "You can pass a custom compiler to $0 using --with-cc=[name].\n"; exit; } @@ -349,65 +347,29 @@ print ($cache_loaded ? "found\n" : "not found\n"); $config{SYSTEM} = lc $^O; print "Checking operating system version... $config{SYSTEM}\n"; -$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{CC} -dumpversion` =~ /^(\d+)(?:\.(\d+))?/; +$config{GCCVER} = defined $1 ? $1 : ''; +$config{GCCMINOR} = defined $2 ? $2 : '0'; printf "Checking if stdint.h exists... "; -$config{HAS_STDINT} = "true"; -our $fail = 0; -open(STDINT, ")) { - chomp($line); - # try and find the delcaration of: - # size_t strlcpy(...) - if ($line =~ /size_t(\0x9|\s)+strlcpy/) { - $config{HAS_STRLCPY} = "true"; - } - } - close(STRLCPY); -} -print "yes\n" if $config{HAS_STRLCPY} eq "true"; -print "no\n" if $config{HAS_STRLCPY} eq "false"; +$config{HAS_STRLCPY} = test_compile('strlcpy'); +print $config{HAS_STRLCPY} ? "yes\n" : "no\n"; printf "Checking if kqueue exists... "; -$has_kqueue = 0; -$fail = 0; -open(KQUEUE, ")) { - chomp($line); - # try and find the delcaration of: - # int kqueue(void); - if ($line =~ /int(\0x9|\s)+kqueue/) { - $has_kqueue = 1; - } - } - close(KQUEUE); -} -print "yes\n" if $has_kqueue == 1; -print "no\n" if $has_kqueue == 0; +$has_kqueue = test_compile('kqueue'); +print $has_kqueue ? "yes\n" : "no\n"; 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"; +$config{HAS_EVENTFD} = test_compile('eventfd'); +print $config{HAS_EVENTFD} ? "yes\n" : "no\n"; printf "Checking if Solaris I/O completion ports are available... "; $has_ports = 0; @@ -490,7 +452,7 @@ if ($interactive) my $rev = getrevision(); # Display Introduction Message.. print <<"STOP" ; -Welcome to the \e[1mInspIRCd\e[0m Configuration program! (\e[1minteractive mode\e[0m) +Welcome to the \e[1mInspIRCd\e[0m configuration program! (\e[1minteractive mode\e[0m) \e[1mPackage maintainers: Type ./configure --help for non-interactive help\e[0m *** If you are unsure of any of these values, leave it blank for *** @@ -525,8 +487,9 @@ should NOT be used. You should probably specify a newer compiler.\n\n"; } chomp(my $foo = `$config{CC} -dumpversion | cut -c 1`); if ($foo ne "") { - chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change compilers - chomp($config{GCCMINOR} = `$config{CC} -dumpversion | cut -c 3`); + `$config{CC} -dumpversion` =~ /^(\d+)(?:\.(\d+))?/; + $config{GCCVER} = defined $1 ? $1 : ''; + $config{GCCMINOR} = defined $2 ? $2 : '0'; print "Queried compiler: \e[1;32m$config{CC}\e[0m (version \e[1;32m$config{GCCVER}.$config{GCCMINOR}\e[0m)\n"; if ($config{GCCVER} < 3) { print "\e[1;32mGCC 2.x WILL NOT WORK!\e[0m. Let's try that again, shall we?\n"; @@ -612,8 +575,8 @@ should NOT be used. You should probably specify a newer compiler.\n\n"; $config{USE_FREEBSD_BASE_SSL} = "y" if ($^O eq "freebsd"); } - $config{USE_SSL} = "n"; - $config{MODUPDATE} = 'n'; + $config{USE_SSL} ||= "n"; + $config{MODUPDATE} ||= 'n'; if ($config{HAS_GNUTLS} eq "y" || $config{HAS_OPENSSL} eq "y") { @@ -651,7 +614,7 @@ should NOT be used. You should probably specify a newer compiler.\n\n"; yesno('MODUPDATE',"Would you like to check for updates to third-party modules?"); print "\n"; if ($config{MODUPDATE} eq "y") { - print "Checking for upgrades to extra and third party modules... "; + print "Checking for upgrades to extra and third-party modules... "; system "./modulemanager upgrade"; } } @@ -663,18 +626,18 @@ dumphash(); 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"; + print "Sorry, but I couldn't detect GnuTLS. Make sure pkg-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"; + print "Sorry, but I couldn't detect OpenSSL. Make sure pkg-config and openssl are in your path.\n"; exit(0); } 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")); +yesno('CERTGEN',"Would you like to 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") { @@ -684,13 +647,11 @@ if ($config{USE_GNUTLS} eq "y") { 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 + print "SSL certificates not found, generating.. \n\n ************************************************************* -* Generating the Private Key may take some time, go grab a * -* Coffee. Even better, to generate some more entropy if it * -* is taking a while, open another console and type du / a * -* few times and get that HD going :) Then answer the * -* Questions which follow. If you are unsure, just hit enter * +* Generating the private key may take some time, once done, * +* answer the questions which follow. If you are unsure, * +* just hit enter! * *************************************************************\n\n"; $failed = make_gnutls_cert(); if ($failed) { @@ -703,7 +664,7 @@ if ($config{USE_GNUTLS} eq "y") { } } else { - print "SSL Certificates found, skipping.\n\n"; + print "SSL certificates found, skipping.\n\n"; } } else @@ -721,10 +682,10 @@ if ($config{USE_OPENSSL} eq "y") { 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 + print "SSL certificates not found, generating.. \n\n ************************************************************* * Generating the certificates may take some time, go grab a * -* coffee, or something. * +* coffee or something. * *************************************************************\n\n"; make_openssl_cert(); print "\nCertificate generation complete, copying to config directory... "; @@ -733,7 +694,7 @@ if ($config{USE_OPENSSL} eq "y") { File::Copy::move("dhparams.pem", "$config{CONFIG_DIR}/dhparams.pem") or print STDERR "Could not copy dhparams.pem!\n"; print "Done.\n\n"; } else { - print "SSL Certificates found, skipping.\n\n" + print "SSL certificates found, skipping.\n\n" } } else @@ -742,7 +703,7 @@ if ($config{USE_OPENSSL} eq "y") { } } if (($config{USE_GNUTLS} eq "n") && ($config{USE_OPENSSL} eq "n")) { - print "Skipping SSL Certificate generation, SSL support is not available.\n\n"; + print "Skipping SSL certificate generation as SSL support is not available.\n\n"; } depcheck(); @@ -754,12 +715,12 @@ print "To build your server with these settings, please run '\e[1;32mmake\e[0m' 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://wiki.inspircd.org/Installation_From_Tarball\e[0m\n"; + print "build process. For more info, please refer to:\n"; + print "\e[1;32mhttps://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++")) { - print "\e[1;32mWARNING!\e[0m You are running OpenBSD but you are using the base gcc package\nrather than eg++. This compile will most likely fail, but i'm letting you\ngo ahead with it anyway, just in case i'm wrong :-)\n"; + print "\e[1;32mWARNING!\e[0m You are running OpenBSD but you are using the base gcc package\nrather than eg++. This compile will most likely fail, but I'm letting you\ngo ahead with it anyway, just in case I'm wrong :-)\n"; } if ($config{GCCVER} < "3") { @@ -772,6 +733,14 @@ to a newer 3.x or 4.x (or whatever is available currently) version. FOO2 } +if ($^O eq 'openbsd') { + print <<__OPENBSD_WARNING__; +\e[1;32mWARNING!\e[0m OpenBSD 6.5 changed Make to no longer look for BSDmakefile when +searching for the makefile. If the version of OpenBSD you are using is 6.5 or +newer then you will need to run '\e[1;32mmake -f BSDmakefile\e[0m' or '\e[1;32mgmake\e[0m' instead. +__OPENBSD_WARNING__ +} + ################################################################################ # HELPER FUNCTIONS # ################################################################################ @@ -878,8 +847,8 @@ sub writefiles { open(FILEHANDLE, ">include/inspircd_config.h.tmp"); print FILEHANDLE <= 3) { print FILEHANDLE "#define GCC3\n"; } - if ( - (($config{GCCVER} == 4) && ($config{GCCMINOR} >= 3)) - || - ($config{GCCVER} > 4) - || # HACK: temporary fix for non-GCC (i.e. clang) builds - ($config{CC} !~ /gcc/) - ) { - print FILEHANDLE "#define HASHMAP_DEPRECATED\n"; - } - if ($config{HAS_STRLCPY} eq "true") { + if ($config{HAS_STRLCPY}) { print FILEHANDLE "#define HAS_STRLCPY\n"; } - if ($config{HAS_STDINT} eq "true") { + if ($config{HAS_STDINT}) { print FILEHANDLE "#define HAS_STDINT\n"; } - if ($config{HAS_EVENTFD} eq 'true') { + if ($config{HAS_EVENTFD}) { print FILEHANDLE "#define HAS_EVENTFD\n"; } if ($config{OSNAME} !~ /DARWIN/i) { print FILEHANDLE "#define HAS_CLOCK_GETTIME\n"; + } else { + print FILEHANDLE "#ifdef MAC_OS_X_VERSION_10_12\n"; + print FILEHANDLE "# define HAS_CLOCK_GETTIME\n"; + print FILEHANDLE "#endif\n"; } my $use_hiperf = 0; if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) { @@ -1013,6 +977,9 @@ EOF my @dotfiles = qw(main.mk inspircd); push @dotfiles, 'org.inspircd.plist' if $config{OSNAME} eq 'darwin'; + # HACK: we need to know if we are on GCC6 to disable the omission of `this` null pointer checks. + $config{GCC6} = `$config{CC} --version 2>/dev/null` =~ /gcc/i && $config{GCCVER} ge "6" ? "true" : "false"; + foreach my $file (@dotfiles) { open(FILEHANDLE, "make/template/$file") or die "Can't open make/template/$file: $!"; $_ = join '', ; @@ -1022,7 +989,7 @@ EOF for my $var (qw( CC SYSTEM BASE_DIR CONFIG_DIR MODULE_DIR BINARY_DIR BUILD_DIR DATA_DIR UID - STARTSCRIPT DESTINATION SOCKETENGINE + STARTSCRIPT DESTINATION SOCKETENGINE LOG_DIR GCC6 )) { s/\@$var\@/$config{$var}/g; }