X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=configure;h=ee11086b5d856cb792b63eb316e559ff922ddb6d;hb=584d4569031d9e5d699d72eb3e09307fc84ea2f8;hp=73317a3d33bd2d883d21b8f513dc361ae359e388;hpb=032a1f8567d477c0b67944f31ad672468f38b09c;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/configure b/configure index 73317a3d3..ee11086b5 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 @@ -58,6 +59,7 @@ my ($opt_binary_dir, $opt_manual_dir, $opt_module_dir, $opt_prefix, + $opt_script_dir, $opt_socketengine, $opt_system, $opt_uid); @@ -87,6 +89,7 @@ GetOptions( 'manual-dir=s' => \$opt_manual_dir, 'module-dir=s' => \$opt_module_dir, 'prefix=s' => \$opt_prefix, + 'script-dir=s' => \$opt_script_dir, 'socketengine=s' => \$opt_socketengine, 'system' => \$opt_system, 'uid=s' => \$opt_uid, @@ -121,6 +124,7 @@ our $interactive = !( defined $opt_manual_dir || defined $opt_module_dir || defined $opt_prefix || + defined $opt_script_dir || defined $opt_socketengine || defined $opt_system || defined $opt_uid @@ -129,9 +133,9 @@ our $interactive = !( 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; @@ -155,44 +159,25 @@ unless ($config{CXX}) { } 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_ARC4RANDOM_BUF} = run_test 'arc4random_buf()', test_file($config{CXX}, 'arc4random_buf.cpp'); +$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, '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; } } +$config{SOCKETENGINE} = $opt_socketengine // $socketengines[0]; if (defined $opt_system) { $config{BASE_DIR} = $opt_prefix // '/var/lib/inspircd'; @@ -202,6 +187,7 @@ if (defined $opt_system) { $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{SCRIPT_DIR} = $opt_script_dir // '/usr/share/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'; @@ -210,6 +196,7 @@ if (defined $opt_system) { $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{SCRIPT_DIR} = $opt_script_dir // $config{SCRIPT_DIR} // $config{BASE_DIR}; } # Parse --gid=123 or --gid=foo and extract the group id. @@ -239,6 +226,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'; @@ -267,13 +263,14 @@ Currently, InspIRCd is configured with the following paths: <|BOLD Log:|> $config{LOG_DIR} <|BOLD Manual:|> $config{MANUAL_DIR} <|BOLD Module:|> $config{MODULE_DIR} +<|BOLD Script:|> $config{SCRIPT_DIR} Do you want to change these settings? EOQ if (prompt_bool $interactive, $question, 0) { my $original_base_dir = $config{BASE_DIR}; $config{BASE_DIR} = prompt_dir $interactive, 'In what directory do you wish to install the InspIRCd base?', $config{BASE_DIR}; - foreach my $key (qw(BINARY_DIR CONFIG_DIR DATA_DIR LOG_DIR MANUAL_DIR MODULE_DIR)) { + foreach my $key (qw(BINARY_DIR CONFIG_DIR DATA_DIR LOG_DIR MANUAL_DIR MODULE_DIR SCRIPT_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}; @@ -282,6 +279,7 @@ if (prompt_bool $interactive, $question, 0) { $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}; + $config{SCRIPT_DIR} = prompt_dir $interactive, 'In what directory are scripts to be placed?', $config{SCRIPT_DIR}; } # Configure module settings. @@ -306,7 +304,15 @@ if (prompt_bool $interactive, $question, 0) { } # Generate SSL certificates. -if ( && prompt_bool $interactive, 'Would you like to generate SSL certificates now?', $interactive) { +$question = < be used on a production network. + +Note: you can get a <|BOLD free|> CA-signed certificate from Let's Encrypt. See +https://letsencrypt.org/getting-started/ for more details. +EOQ + +if ( && prompt_bool $interactive, $question, $interactive) { system './tools/genssl', 'auto'; } @@ -343,6 +349,7 @@ print_format <<"EOM"; <|GREEN Log:|> $config{LOG_DIR} <|GREEN Manual:|> $config{MANUAL_DIR} <|GREEN Module:|> $config{MODULE_DIR} + <|GREEN Script:|> $config{SCRIPT_DIR} <|GREEN Execution Group:|> $config{GROUP} ($config{GID}) <|GREEN Execution User:|> $config{USER} ($config{UID})