X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=configure;h=62f7b341bf06374c91e1d5ac1737b81c57972074;hb=51ff3d67ed1b6f1594373d3745293ef155a26f44;hp=1ff38bad12b4947075f0f08363c892e7a776ef4c;hpb=214c6bc5254c94aa7f7ab49e3462728fb7be9d2a;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/configure b/configure index 1ff38bad1..62f7b341b 100755 --- a/configure +++ b/configure @@ -27,21 +27,25 @@ BEGIN { - require 5.8.0; + require 5.10.0; } +use feature ':5.10'; use strict; 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, @@ -122,8 +126,8 @@ 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; if ($interactive) { @@ -137,36 +141,42 @@ if ($interactive) { } } -$config{CXX} = find_compiler($config{CXX} || $ENV{CXX}); +$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'; + $config{SOCKETENGINE} //= 'epoll'; } if ($config{HAS_KQUEUE} = run_test 'kqueue', test_file($config{CXX}, 'kqueue.cpp')) { - $config{SOCKETENGINE} ||= 'kqueue'; + $config{SOCKETENGINE} //= 'kqueue'; } if ($config{HAS_PORTS} = run_test 'Solaris IOCP', test_header($config{CXX}, 'port.h')) { - $config{SOCKETENGINE} ||= 'ports'; + $config{SOCKETENGINE} //= 'ports'; } if ($config{HAS_POLL} = run_test 'poll', test_header($config{CXX}, 'poll.h')) { - $config{SOCKETENGINE} ||= 'poll'; + $config{SOCKETENGINE} //= 'poll'; } # Select is available on all platforms $config{HAS_SELECT} = 1; -$config{SOCKETENGINE} ||= 'select'; +$config{SOCKETENGINE} //= 'select'; if (defined $opt_socketengine) { my $cfgkey = 'HAS_' . uc $opt_socketengine; @@ -184,28 +194,22 @@ if (defined $opt_socketengine) { } } -# 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; -} - if (defined $opt_system) { - $config{BASE_DIR} = $opt_prefix || '/var/lib/inspircd'; - $config{BINARY_DIR} = $opt_binary_dir || '/usr/sbin'; - $config{CONFIG_DIR} = $opt_config_dir || '/etc/inspircd'; - $config{DATA_DIR} = $opt_data_dir || '/var/inspircd'; - $config{LOG_DIR} = $opt_module_dir || '/var/log/inspircd'; - $config{MANUAL_DIR} = $opt_manual_dir || '/usr/share/man/man1'; - $config{MODULE_DIR} = $opt_module_dir || '/usr/lib/inspircd'; + $config{BASE_DIR} = $opt_prefix // '/var/lib/inspircd'; + $config{BINARY_DIR} = $opt_binary_dir // '/usr/sbin'; + $config{CONFIG_DIR} = $opt_config_dir // '/etc/inspircd'; + $config{DATA_DIR} = $opt_data_dir // '/var/inspircd'; + $config{LOG_DIR} = $opt_module_dir // '/var/log/inspircd'; + $config{MANUAL_DIR} = $opt_manual_dir // '/usr/share/man/man1'; + $config{MODULE_DIR} = $opt_module_dir // '/usr/lib/inspircd'; } else { - $config{BASE_DIR} = $opt_prefix || $config{BASE_DIR} || rel2abs 'run'; - $config{BINARY_DIR} = $opt_binary_dir || $config{BINARY_DIR} || rel2abs $config{BASE_DIR} . '/bin'; - $config{CONFIG_DIR} = $opt_config_dir || $config{CONFIG_DIR} || rel2abs $config{BASE_DIR} . '/conf'; - $config{DATA_DIR} = $opt_data_dir || $config{DATA_DIR} || rel2abs $config{BASE_DIR} . '/data'; - $config{LOG_DIR} = $opt_log_dir || $config{LOG_DIR} || rel2abs $config{BASE_DIR} . '/logs'; - $config{MANUAL_DIR} = $opt_manual_dir || $config{MANUAL_DIR} || rel2abs $config{BASE_DIR} . '/manuals'; - $config{MODULE_DIR} = $opt_module_dir || $config{MODULE_DIR} || rel2abs $config{BASE_DIR} . '/modules'; + $config{BASE_DIR} = $opt_prefix // $config{BASE_DIR} // rel2abs 'run'; + $config{BINARY_DIR} = $opt_binary_dir // $config{BINARY_DIR} // rel2abs $config{BASE_DIR} . '/bin'; + $config{CONFIG_DIR} = $opt_config_dir // $config{CONFIG_DIR} // rel2abs $config{BASE_DIR} . '/conf'; + $config{DATA_DIR} = $opt_data_dir // $config{DATA_DIR} // rel2abs $config{BASE_DIR} . '/data'; + $config{LOG_DIR} = $opt_log_dir // $config{LOG_DIR} // rel2abs $config{BASE_DIR} . '/logs'; + $config{MANUAL_DIR} = $opt_manual_dir // $config{MANUAL_DIR} // rel2abs $config{BASE_DIR} . '/manuals'; + $config{MODULE_DIR} = $opt_module_dir // $config{MODULE_DIR} // rel2abs $config{BASE_DIR} . '/modules'; } # Parse --gid=123 or --gid=foo and extract the group id. @@ -214,7 +218,7 @@ if (defined $opt_gid) { @group = $opt_gid =~ /^\d+$/ ? getgrgid($opt_gid) : getgrnam($opt_gid); print_error "there is no '$opt_gid' group on this system!" unless @group; } else { - @group = $opt_system ? getgrnam('irc') : getgrgid($config{GID} || getgid()); + @group = $opt_system ? getgrnam('irc') : getgrgid($config{GID} // getgid()); print_error "you need to specify a group to run as using '--gid [id|name]'!" unless @group; } $config{GROUP} = $group[0]; @@ -226,7 +230,7 @@ if (defined $opt_uid) { @user = $opt_uid =~ /^\d+$/ ? getpwuid($opt_uid) : getpwnam($opt_uid); print_error "there is no '$opt_uid' user on this system!" unless @user; } else { - @user = $opt_system ? getpwnam('irc') : getpwuid($config{UID} || getuid()); + @user = $opt_system ? getpwnam('irc') : getpwuid($config{UID} // getuid()); print_error "you need to specify a user to run as using '--uid [id|name]'!" unless @user; } $config{USER} = $user[0]; @@ -246,8 +250,8 @@ version instead. You can obtain the latest stable version from http://www.inspircd.org/ or by running `git checkout insp20` if you are installing from Git. EOW - if (!prompt_bool $interactive, 'I understand this warning and want to continue anyway.', $opt_development || 0) { - print STDERR "If you understand this warning and still want to continue pass the --development flag.\n" unless $interactive; + if (!prompt_bool $interactive, 'I understand this warning and want to continue anyway.', $opt_development // 0) { + say STDERR 'If you understand this warning and still want to continue pass the --development flag.' unless $interactive; exit 1; } } @@ -296,8 +300,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. @@ -305,6 +310,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; @@ -322,7 +330,7 @@ EOM for my $file () { my $module = basename $file, '.cpp'; - print " * $module\n" if -l $file; + say " * $module" if -l $file; } print_format <<"EOM"; @@ -407,7 +415,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. @@ -454,7 +462,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") { @@ -490,7 +498,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.