BEGIN {
- require 5.8.0;
+ require 5.10.0;
}
+use feature ':5.10';
use strict;
use warnings FATAL => qw(all);
my ($opt_binary_dir,
$opt_config_dir,
$opt_data_dir,
+ $opt_development,
$opt_disable_interactive,
$opt_distribution_label,
$opt_gid,
'help' => \&cmd_help,
'update' => \&cmd_update,
+ 'development' => \$opt_development,
'disable-interactive' => \$opt_disable_interactive,
'distribution-label=s' => \$opt_distribution_label,
'binary-dir=s' => \$opt_binary_dir,
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 ||
}
}
-$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";
$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;
}
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.
@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];
@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];
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
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.
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};
}
} 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_openssl.cpp' unless system 'pkg-config --exists openssl >/dev/null 2>&1';
}
# Generate SSL certificates.
for my $file (<src/modules/m_*>) {
my $module = basename $file, '.cpp';
- print " * $module\n" if -l $file;
+ say " * $module" if -l $file;
}
print_format <<"EOM";