X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=configure;h=ab2d50a8676820f316e4f499c6beb8c3fa852147;hb=37de78450964b42741dffa51329251cdef28119f;hp=55880fab68d8b884dc847ec2b135623f1d4d50d4;hpb=500a0524d94d596b327ed9aaa17fd0a8ce9ebf96;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/configure b/configure index 55880fab6..ab2d50a86 100755 --- a/configure +++ b/configure @@ -27,9 +27,10 @@ BEGIN { - require 5.8.0; + require 5.10.0; } +use feature ':5.10'; use strict; use warnings FATAL => qw(all); @@ -39,14 +40,16 @@ use File::Spec::Functions qw(rel2abs); use Getopt::Long qw(GetOptions); use POSIX qw(getgid getuid); +use make::common; use make::configure; use make::console; -use make::utilities; my ($opt_binary_dir, $opt_config_dir, $opt_data_dir, + $opt_development, $opt_disable_interactive, + $opt_distribution_label, $opt_gid, $opt_log_dir, $opt_manual_dir, @@ -70,18 +73,20 @@ GetOptions( 'help' => \&cmd_help, 'update' => \&cmd_update, - 'disable-interactive' => \$opt_disable_interactive, - 'binary-dir=s' => \$opt_binary_dir, - 'config-dir=s' => \$opt_config_dir, - 'data-dir=s' => \$opt_data_dir, - 'gid=s' => \$opt_gid, - 'log-dir=s' => \$opt_log_dir, - 'manual-dir=s' => \$opt_manual_dir, - 'module-dir=s' => \$opt_module_dir, - 'prefix=s' => \$opt_prefix, - 'socketengine=s' => \$opt_socketengine, - 'system' => \$opt_system, - 'uid=s' => \$opt_uid, + 'development' => \$opt_development, + 'disable-interactive' => \$opt_disable_interactive, + 'distribution-label=s' => \$opt_distribution_label, + 'binary-dir=s' => \$opt_binary_dir, + 'config-dir=s' => \$opt_config_dir, + 'data-dir=s' => \$opt_data_dir, + 'gid=s' => \$opt_gid, + 'log-dir=s' => \$opt_log_dir, + 'manual-dir=s' => \$opt_manual_dir, + 'module-dir=s' => \$opt_module_dir, + 'prefix=s' => \$opt_prefix, + 'socketengine=s' => \$opt_socketengine, + 'system' => \$opt_system, + 'uid=s' => \$opt_uid, # TODO: when the modulemanager rewrite is done these should be removed. 'disable-extras=s@' => \@opt_disableextras, @@ -105,7 +110,9 @@ our $interactive = !( defined $opt_binary_dir || defined $opt_config_dir || defined $opt_data_dir || + defined $opt_development || defined $opt_disable_interactive || + defined $opt_distribution_label || defined $opt_gid || defined $opt_log_dir || defined $opt_manual_dir || @@ -119,47 +126,48 @@ our $interactive = !( my %version = get_version(); print_format "<|BOLD Configuring InspIRCd $version{MAJOR}.$version{MINOR}.$version{PATCH}+$version{LABEL} on $^O.|>\n"; -our %config = read_configure_cache(); - -print "Checking for cache from previous configure... "; -print %config ? "found\n" : "not found\n"; +our %config; +if ($interactive) { + %config = read_configure_cache(); + run_test CONFIGURE_CACHE_FILE, %config; + if (!defined $config{VERSION}) { + $config{VERSION} = CONFIGURE_CACHE_VERSION; + } elsif ($config{VERSION} != CONFIGURE_CACHE_VERSION) { + print_warning "ignoring contents of ${\CONFIGURE_CACHE_FILE} as it was generated by an incompatible version of $0!"; + %config = ('VERSION', CONFIGURE_CACHE_VERSION); + } +} -$config{CXX} = defined $ENV{CXX} && !system("$ENV{CXX} -v > /dev/null 2>&1") ? $ENV{CXX} : find_compiler(); -if ($config{CXX} eq "") { - print "A C++ compiler could not be detected on your system!\n"; - print "Set the CXX environment variable to the full path if this is incorrect.\n"; +$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; } - my %compiler = get_compiler_info($config{CXX}); -if ($compiler{UNSUPPORTED}) { - print "Your C++ compiler is too old to build InspIRCd!\n"; - print "Reason: $compiler{REASON}\n"; - exit 1; -} $config{HAS_CLOCK_GETTIME} = run_test 'clock_gettime()', test_file($config{CXX}, 'clock_gettime.cpp', '-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; @@ -177,22 +185,28 @@ 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. @@ -201,7 +215,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]; @@ -213,7 +227,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]; @@ -223,7 +237,7 @@ $config{UID} = $user[2]; system 'tput', 'clear' if $interactive; # Check that the user actually wants this version. -if ($version{LABEL} ne 'release' && $interactive) { +if ($version{LABEL} ne 'release') { print_warning <<'EOW'; You are building a development version. This contains code which has not been tested as heavily and may contain various faults which could seriously @@ -232,9 +246,11 @@ 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 -exit 1 unless prompt_bool $interactive, 'I understand this warning and want to continue anyway.', !$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; + } } # Configure directory settings. @@ -257,10 +273,10 @@ if (prompt_bool $interactive, $question, 0) { foreach my $key (qw(BINARY_DIR CONFIG_DIR DATA_DIR LOG_DIR MANUAL_DIR MODULE_DIR)) { $config{$key} =~ s/^\Q$original_base_dir\E/$config{BASE_DIR}/; } - $config{BINARY_DIR} = prompt_dir $interactive, 'In what directory should the InspIRCd binary be placed?', $config{BINARY_DIR}; + $config{BINARY_DIR} = prompt_dir $interactive, 'In what directory should the InspIRCd binary be placed?', $config{BINARY_DIR}; $config{CONFIG_DIR} = prompt_dir $interactive, 'In what directory are configuration files to be stored?', $config{CONFIG_DIR}; - $config{DATA_DIR} = prompt_dir $interactive, 'In what directory are variable data files to be stored?', $config{DATA_DIR}; - $config{LOG_DIR} = prompt_dir $interactive, 'In what directory are log files to be stored?', $config{LOG_DIR}; + $config{DATA_DIR} = prompt_dir $interactive, 'In what directory are variable data files to be stored?', $config{DATA_DIR}; + $config{LOG_DIR} = prompt_dir $interactive, 'In what directory are log files to be stored?', $config{LOG_DIR}; $config{MANUAL_DIR} = prompt_dir $interactive, 'In what directory are manual pages to be placed?', $config{MANUAL_DIR}; $config{MODULE_DIR} = prompt_dir $interactive, 'In what directory are modules to be placed?', $config{MODULE_DIR}; } @@ -291,7 +307,7 @@ if ( && prompt_bool $interactive, 'Would you like to ge } write_configure_cache %config; -parse_templates \%config, \%compiler; +parse_templates \%config, \%compiler, \%version; print_format <<"EOM"; @@ -302,10 +318,15 @@ Configuration is complete! You have chosen to build with the following settings: <|GREEN Name:|> $compiler{NAME} <|GREEN Version:|> $compiler{VERSION} -<|GREEN Extra Modules:|> <> - * m_foo - * m_bar - * m_baz +<|GREEN Extra Modules:|> +EOM + +for my $file () { + my $module = basename $file, '.cpp'; + say " * $module" if -l $file; +} + +print_format <<"EOM"; <|GREEN Paths:|> <|GREEN Base:|> $config{BASE_DIR}