X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=configure;h=ca2e2f19ba6a2596a430077de263aff6ccced1df;hb=c6a508a3da977041909f18f77d6e8fea942512cf;hp=ab2d50a8676820f316e4f499c6beb8c3fa852147;hpb=8f5efbc7aa33b792e02d01e3288f553e6e98ccaa;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/configure b/configure index ab2d50a86..ca2e2f19b 100755 --- a/configure +++ b/configure @@ -3,6 +3,7 @@ # # InspIRCd -- Internet Relay Chat Daemon # +# Copyright (C) 2012-2017 Peter Powell # Copyright (C) 2009-2010 Daniel De Graaf # Copyright (C) 2007, 2009 Dennis Friis # Copyright (C) 2003, 2006-2008 Craig Edwards @@ -37,12 +38,15 @@ use warnings FATAL => qw(all); use File::Basename qw(basename); use File::Copy (); use File::Spec::Functions qw(rel2abs); +use FindBin qw($RealDir); use Getopt::Long qw(GetOptions); use POSIX qw(getgid getuid); +use lib $RealDir; use make::common; use make::configure; use make::console; +use make::directive; my ($opt_binary_dir, $opt_config_dir, @@ -123,12 +127,12 @@ our $interactive = !( defined $opt_uid ); -my %version = get_version(); -print_format "<|BOLD Configuring InspIRCd $version{MAJOR}.$version{MINOR}.$version{PATCH}+$version{LABEL} on $^O.|>\n"; +my %version = get_version $opt_distribution_label; +print_format "<|BOLD Configuring InspIRCd $version{FULL} on $^O.|>\n"; -our %config; +my %config; if ($interactive) { - %config = read_configure_cache(); + %config = read_config_file(CONFIGURE_CACHE_FILE); run_test CONFIGURE_CACHE_FILE, %config; if (!defined $config{VERSION}) { $config{VERSION} = CONFIGURE_CACHE_VERSION; @@ -140,56 +144,37 @@ if ($interactive) { $config{CXX} = find_compiler($config{CXX} // $ENV{CXX}); unless ($config{CXX}) { - print "A suitable C++ compiler could not be detected on your system!\n"; - print "Set the CXX environment variable to the compiler binary path if this is incorrect.\n"; - exit 1; + say 'A suitable C++ compiler could not be detected on your system!'; + unless ($interactive) { + say 'Set the CXX environment variable to the path to a C++ compiler binary if this is incorrect.'; + exit 1; + } + until ($config{CXX}) { + my $compiler_path = prompt_string 1, 'Please enter the path to a C++ compiler binary:', 'c++'; + $config{CXX} = find_compiler $compiler_path; + } } my %compiler = get_compiler_info($config{CXX}); -$config{HAS_CLOCK_GETTIME} = run_test 'clock_gettime()', test_file($config{CXX}, 'clock_gettime.cpp', '-lrt'); +$config{HAS_CLOCK_GETTIME} = run_test 'clock_gettime()', test_file($config{CXX}, 'clock_gettime.cpp', $^O eq 'darwin' ? undef : '-lrt'); $config{HAS_EVENTFD} = run_test 'eventfd()', test_file($config{CXX}, 'eventfd.cpp'); -if ($config{HAS_EPOLL} = run_test 'epoll', test_header($config{CXX}, 'sys/epoll.h')) { - $config{SOCKETENGINE} //= 'epoll'; -} - -if ($config{HAS_KQUEUE} = run_test 'kqueue', test_file($config{CXX}, 'kqueue.cpp')) { - $config{SOCKETENGINE} //= 'kqueue'; -} - -if ($config{HAS_PORTS} = run_test 'Solaris IOCP', test_header($config{CXX}, 'port.h')) { - $config{SOCKETENGINE} //= 'ports'; -} - -if ($config{HAS_POLL} = run_test 'poll', test_header($config{CXX}, 'poll.h')) { - $config{SOCKETENGINE} //= 'poll'; -} - -# Select is available on all platforms -$config{HAS_SELECT} = 1; -$config{SOCKETENGINE} //= 'select'; +my @socketengines; +push @socketengines, 'epoll' if run_test 'epoll', test_header $config{CXX}, 'sys/epoll.h'; +push @socketengines, 'kqueue' if run_test 'kqueue', test_file $config{CXX}, 'kqueue.cpp'; +push @socketengines, 'ports' if run_test 'Solaris IOCP', test_header $config{CXX}, 'port.h'; +push @socketengines, 'poll' if run_test 'poll', test_header $config{CXX}, 'poll.h'; +push @socketengines, 'select'; if (defined $opt_socketengine) { - my $cfgkey = 'HAS_' . uc $opt_socketengine; - if ($config{$cfgkey} && -f "src/socketengines/socketengine_$opt_socketengine.cpp") { - $config{SOCKETENGINE} = $opt_socketengine; - } else { - print "Unable to use a socket engine which is not supported on this platform ($opt_socketengine)!\n"; - print "Available socket engines are:"; - foreach () { - s/src\/socketengines\/socketengine_(\w+)\.cpp/$1/; - print " $1" if $config{'HAS_' . uc $1}; - } - print "\n"; - exit 1; + unless (grep { $_ eq $opt_socketengine } @socketengines) { + my $reason = -f "src/socketengines/socketengine_$opt_socketengine.cpp" ? 'is not available on this platform' : 'does not exist'; + print_error "The socket engine you requested ($opt_socketengine) $reason!", + 'Available socket engines are:', + map { " * $_" } @socketengines; } } - -# If the user has specified a distribution label then we use it in -# place of the label from src/version.sh or Git. -if (defined $opt_distribution_label) { - $version{LABEL} = $opt_distribution_label; -} +$config{SOCKETENGINE} = $opt_socketengine // $socketengines[0]; if (defined $opt_system) { $config{BASE_DIR} = $opt_prefix // '/var/lib/inspircd'; @@ -236,6 +221,15 @@ $config{UID} = $user[2]; # Clear the screen. system 'tput', 'clear' if $interactive; +# Warn the user about clock drifting when running on OpenVZ. +if (-e '/proc/user_beancounters' || -e '/proc/vz/vzaquota') { + print_warning <<'EOW'; +You are building InspIRCd inside of an an OpenVZ container. If you +plan to use InspIRCd in this container then you should make sure that NTP is +configured on the Hardware Node. Failure to do so may result in clock drifting! +EOW +} + # Check that the user actually wants this version. if ($version{LABEL} ne 'release') { print_warning <<'EOW'; @@ -297,8 +291,9 @@ if (prompt_bool $interactive, $question, 0) { } else { # TODO: finish modulemanager rewrite and replace this code with: # system './modulemanager', 'enable', '--auto'; - enable_extras 'm_ssl_gnutls.cpp' unless system 'gnutls-cli --version >/dev/null 2>&1'; - enable_extras 'm_ssl_openssl.cpp' unless system 'openssl --version >/dev/null 2>&1'; + enable_extras 'm_ssl_gnutls.cpp' unless system 'pkg-config --exists gnutls >/dev/null 2>&1'; + enable_extras 'm_ssl_mbedtls.cpp' if -e '/usr/include/mbedtls/ssl.h'; + enable_extras 'm_ssl_openssl.cpp' unless system 'pkg-config --exists openssl >/dev/null 2>&1'; } # Generate SSL certificates. @@ -306,6 +301,9 @@ if ( && prompt_bool $interactive, 'Would you like to ge system './tools/genssl', 'auto'; } +# Cache the distribution label so that its not lost when --update is run. +$config{DISTRIBUTION} = $opt_distribution_label if $opt_distribution_label; + write_configure_cache %config; parse_templates \%config, \%compiler, \%version; @@ -408,7 +406,7 @@ EXTRA: for my $extra (@extras) { for my $extra (keys(%extras)) { next unless $extras{$extra} =~ m/enabled/; # only process enabled extras. my $abs_extra = File::Spec->catfile($abs_srcdir, "extra", $extra); - my @deps = split /\s+/, get_property($abs_extra, 'ModDep'); + my @deps = split /\s+/, get_directive($abs_extra, 'ModDep', ''); for my $dep (@deps) { if (exists($extras{$dep})) { my $ref = \$extras{$dep}; # Take reference. @@ -455,7 +453,7 @@ sub enable_extras (@) { next; } # Get dependencies, and add them to be processed. - my @deps = split /\s+/, get_property($extrapath, 'ModDep'); + my @deps = split /\s+/, get_directive($extrapath, 'ModDep', ''); for my $dep (@deps) { next if scalar(grep { $_ eq $dep } (@extras)) > 0; # Skip if we're going to be enabling it anyway. if (!-e "src/modules/$dep" && !-e "include/$dep") { @@ -491,7 +489,7 @@ EXTRA: for my $extra (@extras) { } # Check if anything needs this. for my $file (@files) { - my @deps = split /\s+/, get_property("src/modules/extra/$file", 'ModDep'); + my @deps = split /\s+/, get_directive("src/modules/extra/$file", 'ModDep', ''); # File depends on this extra... if (scalar(grep { $_ eq $extra } @deps) > 0) { # And is both enabled and not about to be disabled.