# Copyright (C) 2020 Nicole Kleinhoff <ilbelkyr@shalture.org>
# Copyright (C) 2020 Daniel Vassdal <shutter@canternet.org>
# Copyright (C) 2019 Matt Schatz <genius3000@g3k.solutions>
-# Copyright (C) 2019 Anatole Denis <natolumin@rezel.net>
-# Copyright (C) 2017 emerson <github@emersonveenstra.net>
-# Copyright (C) 2013-2020 Sadie Powell <sadie@witchery.services>
+# Copyright (C) 2013-2021 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
# Copyright (C) 2012 ChrisTX <xpipe@hotmail.de>
# Copyright (C) 2010 Daniel De Graaf <danieldg@inspircd.org>
$opt_development,
$opt_disable_auto_extras,
$opt_disable_interactive,
+ $opt_disable_ownership,
$opt_distribution_label,
$opt_example_dir,
$opt_gid,
'development' => \$opt_development,
'disable-auto-extras' => \$opt_disable_auto_extras,
'disable-interactive' => \$opt_disable_interactive,
+ 'disable-ownership' => \$opt_disable_ownership,
'distribution-label=s' => \$opt_distribution_label,
'example-dir=s' => \$opt_example_dir,
'gid=s' => \$opt_gid,
'system' => \$opt_system,
'uid=s' => \$opt_uid,
- # TODO: when the modulemanager rewrite is done these should be removed.
'disable-extras=s@' => \@opt_disableextras,
'enable-extras=s@' => \@opt_enableextras,
'list-extras' => sub { list_extras; exit 0; },
defined $opt_development ||
defined $opt_disable_auto_extras ||
defined $opt_disable_interactive ||
+ defined $opt_disable_ownership ||
defined $opt_distribution_label ||
defined $opt_example_dir ||
defined $opt_gid ||
$config{RUNTIME_DIR} = $opt_runtime_dir // $config{DATA_DIR};
$config{SCRIPT_DIR} = $opt_script_dir // $config{BASE_DIR};
} elsif (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{EXAMPLE_DIR} = $opt_example_dir // '/usr/share/doc/inspircd';
- $config{LOG_DIR} = $opt_log_dir // '/var/log/inspircd';
- $config{MANUAL_DIR} = $opt_manual_dir // '/usr/share/man/man1';
- $config{MODULE_DIR} = $opt_module_dir // '/usr/lib/inspircd';
- $config{RUNTIME_DIR} = $opt_runtime_dir // '/var/run';
- $config{SCRIPT_DIR} = $opt_script_dir // '/usr/share/inspircd';
+ $config{BASE_DIR} = $opt_prefix // '/';
+ $config{BINARY_DIR} = $opt_binary_dir // catdir $config{BASE_DIR}, 'usr/sbin';
+ $config{CONFIG_DIR} = $opt_config_dir // catdir $config{BASE_DIR}, 'etc/inspircd';
+ $config{DATA_DIR} = $opt_data_dir // catdir $config{BASE_DIR}, 'var/lib/inspircd';
+ $config{EXAMPLE_DIR} = $opt_example_dir // catdir $config{BASE_DIR}, 'usr/share/doc/inspircd';
+ $config{LOG_DIR} = $opt_log_dir // catdir $config{BASE_DIR}, 'var/log/inspircd';
+ $config{MANUAL_DIR} = $opt_manual_dir // catdir $config{BASE_DIR}, 'usr/share/man/man1';
+ $config{MODULE_DIR} = $opt_module_dir // catdir $config{BASE_DIR}, 'usr/lib/inspircd';
+ $config{RUNTIME_DIR} = $opt_runtime_dir // catdir $config{BASE_DIR}, $^O eq 'linux' ? '/run/inspircd' : '/var/run/inspircd';
+ $config{SCRIPT_DIR} = $opt_script_dir // catdir $config{BASE_DIR}, 'usr/share/inspircd';
} else {
$config{BASE_DIR} = rel2abs $opt_prefix // $config{BASE_DIR} // catdir $RealDir, 'run';
$config{BINARY_DIR} = $opt_binary_dir // $config{BINARY_DIR} // catdir $config{BASE_DIR}, 'bin';
# Parse --gid=123 or --gid=foo and extract the group id.
my @group;
-if (defined $opt_gid) {
+if (defined $opt_disable_ownership) {
+ @group = qw(insert-group-here . -1);
+ print_error 'you can not use --disable-ownership and --gid at the same time!' if defined $opt_gid;
+} elsif (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 {
to specify an unprivileged group to run as.
EOW
if (!prompt_bool $interactive, "Are you sure you want to build as the $group[0] group?", 0) {
- # PACKAGERS: You do not need to delete this check. Use `--gid $(id -g)` or `--gid 0` instead.
+ # PACKAGERS: You do not need to delete this check. Use `--disable-ownership` instead.
say STDERR "If you are sure you want to build as the $group[0] group pass the --gid $group[2] flag." unless $interactive;
exit 1;
}
# Parse --uid=123 or --uid=foo and extract the user id.
my @user;
-if (defined $opt_uid) {
+if (defined $opt_disable_ownership) {
+ @user = qw(insert-user-here . -1);
+ print_error 'you can not use --disable-ownership and --uid at the same time!' if defined $opt_uid;
+} elsif (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 {
to specify an unprivileged user to run as.
EOW
if (!prompt_bool $interactive, "Are you sure you want to build as the $user[0] user?", 0) {
- # PACKAGERS: You do not need to delete this check. Use `--uid $(id -u)` or `--uid 0` instead.
+ # PACKAGERS: You do not need to delete this check. Use `--disable-ownership` instead.
say STDERR "If you are sure you want to build as the $user[0] user pass the --uid $user[2] flag." unless $interactive;
exit 1;
}
EOW
}
+# Warn about Perl versions that will not be supported in the future.
+if ($^V lt 'v5.26.0') {
+ print_warning <<"EOW";
+You are building InspIRCd with Perl $^V. This is very old and will
+not be supported by the next major version of InspIRCd. Please consider updating
+to Perl v5.26 or newer.
+EOW
+}
+
+# Warn about compiler versions that will not be supported in the future.
+my %future_compilers = (
+ AppleClang => version->parse('10.0'),
+ Clang => version->parse('5.0'),
+ GCC => version->parse('7.0'),
+);
+if (exists $future_compilers{$compiler{NAME}} && $compiler{VERSION} lt $future_compilers{$compiler{NAME}}) {
+ print_warning <<"EOW";
+You are building InspIRCd with $compiler{NAME} v$compiler{VERSION}. This is very old and
+will not be supported by the next major version of InspIRCd. Please consider
+updating to $compiler{NAME} v$future_compilers{$compiler{NAME}} or newer.
+EOW
+}
+
# Check that the user actually wants this version.
if (defined $version{REAL_LABEL}) {
print_warning <<'EOW';
my $question = <<"EOQ";
Currently, InspIRCd is configured with the following paths:
-<|BOLD Base:|> $config{BASE_DIR}
<|BOLD Binary:|> $config{BINARY_DIR}
<|BOLD Config:|> $config{CONFIG_DIR}
<|BOLD Data:|> $config{DATA_DIR}
}
}
} elsif (!defined $opt_disable_auto_extras) {
- # TODO: finish modulemanager rewrite and replace this code with:
- # system './modulemanager', 'enable', '--auto';
my %modules = (
- # Missing: m_ldap, m_regex_stdlib, m_ssl_mbedtls
'm_argon2.cpp' => 'pkg-config --exists libargon2',
'm_geo_maxmind.cpp' => 'pkg-config --exists libmaxminddb',
'm_mysql.cpp' => 'mysql_config --version',
'm_pgsql.cpp' => 'pg_config --version',
+ 'm_ldap.cpp' => "echo '#include <ldap.h>' | $config{CXX} -E -",
'm_regex_pcre.cpp' => 'pcre-config --version',
'm_regex_posix.cpp' => undef,
'm_regex_re2.cpp' => 'pkg-config --exists re2',
+ 'm_regex_stdlib.cpp' => "$config{CXX} -o /dev/null -std=c++11 $RealDir/make/test/compiler.cpp",
'm_regex_tre.cpp' => 'pkg-config --exists tre',
'm_sqlite3.cpp' => 'pkg-config --exists sqlite3',
'm_ssl_gnutls.cpp' => 'pkg-config --exists gnutls',
+ 'm_ssl_mbedtls.cpp' => "echo '#include <mbedtls/version.h>' | $config{CXX} -E -",
'm_ssl_openssl.cpp' => 'pkg-config --exists openssl',
'm_sslrehashsignal.cpp' => undef,
);
}
} elsif (!defined $opt_disable_auto_extras) {
print_warning <<"EOM";
-You are building without enabling any SSL modules. This is not
+you are building without enabling any SSL modules. This is not
recommended as SSL greatly enhances the security and privacy of your IRC server
and in a future version will be <|BOLD required|> for linking servers.
# Cache the distribution label so that its not lost when --update is run.
$config{DISTRIBUTION} = $opt_distribution_label if $opt_distribution_label;
+$config{DISABLE_OWNERSHIP} = $opt_disable_ownership // 0;
write_configure_cache %config;
parse_templates \%config, \%compiler, \%version;
print console_format <<"EOM";
<|GREEN Paths:|>
- <|GREEN Base:|> $config{BASE_DIR}
<|GREEN Binary:|> $config{BINARY_DIR}
<|GREEN Config:|> $config{CONFIG_DIR}
<|GREEN Data:|> $config{DATA_DIR}