]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - configure
Sync helpop chmodes s and p with docs
[user/henk/code/inspircd.git] / configure
index ccf6cbd6ab0da32678d70de300d23b4496bdd9a6..f1813bf09801322db0617e615f851d12aee474c6 100755 (executable)
--- a/configure
+++ b/configure
@@ -5,7 +5,6 @@
 #   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) 2013-2021 Sadie Powell <sadie@witchery.services>
 #   Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
 #   Copyright (C) 2012 ChrisTX <xpipe@hotmail.de>
@@ -53,6 +52,7 @@ my ($opt_binary_dir,
     $opt_development,
     $opt_disable_auto_extras,
     $opt_disable_interactive,
+    $opt_disable_ownership,
     $opt_distribution_label,
     $opt_example_dir,
     $opt_gid,
@@ -87,6 +87,7 @@ exit 1 unless GetOptions(
        '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,
@@ -125,6 +126,7 @@ our $interactive = !(
        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 ||
@@ -204,15 +206,15 @@ if (defined $opt_portable) {
        $config{SCRIPT_DIR}  = $opt_script_dir  // $config{BASE_DIR};
 } elsif (defined $opt_system) {
        $config{BASE_DIR}    = $opt_prefix      // '/';
-       $config{BINARY_DIR}  = $opt_binary_dir  // '/usr/sbin';
-       $config{CONFIG_DIR}  = $opt_config_dir  // '/etc/inspircd';
-       $config{DATA_DIR}    = $opt_data_dir    // '/var/lib/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{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';
@@ -228,7 +230,10 @@ if (defined $opt_portable) {
 
 # 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 {
@@ -244,7 +249,7 @@ unprivileged user/group to build and run as or pass the '--gid [id|name]' flag
 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;
                }
@@ -255,7 +260,10 @@ $config{GID}   = $group[2];
 
 # 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 {
@@ -271,7 +279,7 @@ unprivileged user/group to build and run as or pass the '--uid [id|name]' flag
 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;
                }
@@ -385,22 +393,19 @@ if (prompt_bool $interactive, $question, 0) {
        }
 } elsif (!defined $opt_disable_auto_extras) {
        my %modules = (
-               # We can't automatically enable the following modules because there is
-               # no way to autodetect their dependencies:
-               #
-               #  * ldap (no pkg-config support)
-               #  * regex_stdlib (no C++11 compiler detection)
-               #  * ssl_mbedtls (no pkg-config support)
                '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,
        );
@@ -438,7 +443,7 @@ EOQ
        }
 } 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.
 
@@ -452,6 +457,7 @@ EOM
 
 # 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;