#!/usr/bin/env perl
-
#
# InspIRCd -- Internet Relay Chat Daemon
#
-# Copyright (C) 2012-2017 Peter Powell <petpow@saberuk.com>
-# Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
-# Copyright (C) 2007, 2009 Dennis Friis <peavey@inspircd.org>
-# Copyright (C) 2003, 2006-2008 Craig Edwards <craigedwards@brainbox.cc>
-# Copyright (C) 2006-2008 Robin Burchell <robin+git@viroteck.net>
+# 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) 2012, 2019 Robby <robby@chatbelgie.be>
+# Copyright (C) 2012 ChrisTX <xpipe@hotmail.de>
+# Copyright (C) 2010 Daniel De Graaf <danieldg@inspircd.org>
# Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
-# Copyright (C) 2007 John Brooks <john.brooks@dereferenced.net>
-# Copyright (C) 2006 Oliver Lupton <oliverlupton@gmail.com>
-# Copyright (C) 2003-2006 Craig McLure <craig@chatspike.net>
+# Copyright (C) 2008 Robin Burchell <robin+git@viroteck.net>
+# Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
+# Copyright (C) 2006-2008 Craig Edwards <brain@inspircd.org>
#
# This file is part of InspIRCd. InspIRCd is free software: you can
# redistribute it and/or modify it under the terms of the GNU General Public
$opt_config_dir,
$opt_data_dir,
$opt_development,
+ $opt_disable_auto_extras,
$opt_disable_interactive,
$opt_distribution_label,
+ $opt_example_dir,
$opt_gid,
$opt_log_dir,
$opt_manual_dir,
my @opt_enableextras;
my @opt_disableextras;
-GetOptions(
+exit 1 unless GetOptions(
'clean' => \&cmd_clean,
'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,
'config-dir=s' => \$opt_config_dir,
'data-dir=s' => \$opt_data_dir,
+ 'development' => \$opt_development,
+ 'disable-auto-extras' => \$opt_disable_auto_extras,
+ 'disable-interactive' => \$opt_disable_interactive,
+ 'distribution-label=s' => \$opt_distribution_label,
+ 'example-dir=s' => \$opt_example_dir,
'gid=s' => \$opt_gid,
'log-dir=s' => \$opt_log_dir,
'manual-dir=s' => \$opt_manual_dir,
);
if (scalar(@opt_enableextras) + scalar(@opt_disableextras) > 0) {
- @opt_enableextras = split /,/, join(',', @opt_enableextras);
- @opt_disableextras = split /,/, join(',', @opt_disableextras);
+ @opt_enableextras = split /[, ]+/, join(',', @opt_enableextras);
+ @opt_disableextras = split /[, ]+/, join(',', @opt_disableextras);
enable_extras(@opt_enableextras);
disable_extras(@opt_disableextras);
list_extras;
defined $opt_config_dir ||
defined $opt_data_dir ||
defined $opt_development ||
+ defined $opt_disable_auto_extras ||
defined $opt_disable_interactive ||
defined $opt_distribution_label ||
+ defined $opt_example_dir ||
defined $opt_gid ||
defined $opt_log_dir ||
defined $opt_manual_dir ||
$config{SOCKETENGINE} = $opt_socketengine // $socketengines[0];
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{SCRIPT_DIR} = $opt_script_dir // '/usr/share/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{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{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';
- $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{SCRIPT_DIR} = $opt_script_dir // $config{SCRIPT_DIR} // $config{BASE_DIR};
+ $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{EXAMPLE_DIR} = $opt_example_dir // $config{EXAMPLE_DIR} // $config{CONFIG_DIR} . '/examples';
+ $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.
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.
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;
}
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.
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 the user about OpenBSD shipping incredibly broken compilers/linkers.
+if ($^O eq 'openbsd') {
+ print_warning <<'EOW';
+You are building InspIRCd on OpenBSD. The C++ compilers and linkers
+that OpenBSD ship are incredibly broken. You may have strange linker errors
+and crashes. Please consider using a different OS like FreeBSD/NetBSD instead.
+EOW
+}
+
# Check that the user actually wants this version.
-if ($version{LABEL} ne 'release') {
+if (defined $version{REAL_LABEL}) {
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
$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};
+ $config{EXAMPLE_DIR} = $config{CONFIG_DIR} . '/examples';
}
# Configure module settings.
enable_extras "$module_name.cpp";
}
}
-} else {
+} elsif (!defined $opt_disable_auto_extras) {
# TODO: finish modulemanager rewrite and replace this code with:
# system './modulemanager', 'enable', '--auto';
my %modules = (
https://letsencrypt.org/getting-started/ for more details.
EOQ
-if (<src/modules/m_ssl_*.cpp> && prompt_bool $interactive, $question, $interactive) {
- system './tools/genssl', 'auto';
+if (<src/modules/m_ssl_*.cpp>) {
+ if (prompt_bool $interactive, $question, $interactive) {
+ system './tools/genssl', 'auto';
+ }
+} else {
+ print_warning <<"EOM";
+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.
+
+Please read the following documentation pages on how to enable SSL support:
+
+GnuTLS (recommended): https://docs.inspircd.org/3/modules/ssl_gnutls
+mbedTLS: https://docs.inspircd.org/3/modules/ssl_mbedtls
+OpenSSL: https://docs.inspircd.org/3/modules/ssl_openssl
+EOM
}
# Cache the distribution label so that its not lost when --update is run.
print_format <<"EOM";
<|GREEN Paths:|>
- <|GREEN Base:|> $config{BASE_DIR}
- <|GREEN Binary:|> $config{BINARY_DIR}
- <|GREEN Config:|> $config{CONFIG_DIR}
- <|GREEN Data:|> $config{DATA_DIR}
- <|GREEN Log:|> $config{LOG_DIR}
- <|GREEN Manual:|> $config{MANUAL_DIR}
- <|GREEN Module:|> $config{MODULE_DIR}
- <|GREEN Script:|> $config{SCRIPT_DIR}
+ <|GREEN Base:|> $config{BASE_DIR}
+ <|GREEN Binary:|> $config{BINARY_DIR}
+ <|GREEN Config:|> $config{CONFIG_DIR}
+ <|GREEN Data:|> $config{DATA_DIR}
+ <|GREEN Example:|> $config{EXAMPLE_DIR}
+ <|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})
<|GREEN Socket Engine:|> $config{SOCKETENGINE}
-To build with these settings run '<|GREEN make -j${\get_cpu_count} install|>' now.
+To build with these settings run '<|GREEN make -j${\(get_cpu_count() + 1)} install|>' now.
EOM
sub enable_extras (@) {
my (@extras) = @_;
for my $extra (@extras) {
+ $extra = "m_$extra" unless $extra =~ /^m_/;
+ $extra = "$extra.cpp" unless $extra =~ /\.cpp$/;
my $extrapath = "src/modules/extra/$extra";
if (!-e $extrapath) {
print STDERR "Cannot enable \e[32;1m$extra\e[0m : No such file or directory in src/modules/extra\n";
closedir $dd;
my (@extras) = @_;
EXTRA: for my $extra (@extras) {
+ $extra = "m_$extra" unless $extra =~ /^m_/;
+ $extra = "$extra.cpp" unless $extra =~ /\.cpp$/;
my $extrapath = "src/modules/extra/$extra";
my $source = "src/modules/$extra";
if (!-e $extrapath) {