]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - configure
Implement support for portable installations.
[user/henk/code/inspircd.git] / configure
index c4fdbb919bc7de550f1e5393347fbec650e311c1..9d064c693d97455c1fed77378dccd5e45e7997e1 100755 (executable)
--- a/configure
+++ b/configure
@@ -38,7 +38,7 @@ use warnings FATAL => qw(all);
 
 use File::Basename        qw(basename);
 use File::Copy            ();
-use File::Spec::Functions qw(rel2abs);
+use File::Spec::Functions qw(catfile catdir rel2abs);
 use FindBin               qw($RealDir);
 use Getopt::Long          qw(GetOptions);
 use POSIX                 qw(getgid getuid);
@@ -61,6 +61,7 @@ my ($opt_binary_dir,
     $opt_log_dir,
     $opt_manual_dir,
     $opt_module_dir,
+    $opt_portable,
     $opt_prefix,
     $opt_script_dir,
     $opt_socketengine,
@@ -93,6 +94,7 @@ exit 1 unless GetOptions(
        'log-dir=s'            => \$opt_log_dir,
        'manual-dir=s'         => \$opt_manual_dir,
        'module-dir=s'         => \$opt_module_dir,
+       'portable'             => \$opt_portable,
        'prefix=s'             => \$opt_prefix,
        'script-dir=s'         => \$opt_script_dir,
        'socketengine=s'       => \$opt_socketengine,
@@ -130,6 +132,7 @@ our $interactive = !(
        defined $opt_log_dir ||
        defined $opt_manual_dir ||
        defined $opt_module_dir ||
+       defined $opt_portable ||
        defined $opt_prefix ||
        defined $opt_script_dir ||
        defined $opt_socketengine ||
@@ -186,7 +189,19 @@ if (defined $opt_socketengine) {
 }
 $config{SOCKETENGINE} = $opt_socketengine // $socketengines[0];
 
-if (defined $opt_system) {
+if (defined $opt_portable) {
+       print_error '--portable and --system can not be used together!' if defined $opt_system;
+       $config{DESTDIR}     = catfile $RealDir, 'run', '';
+       $config{BASE_DIR}    = $opt_prefix      // '';
+       $config{BINARY_DIR}  = $opt_binary_dir  // 'bin';
+       $config{CONFIG_DIR}  = $opt_config_dir  // 'conf';
+       $config{DATA_DIR}    = $opt_data_dir    // 'data';
+       $config{EXAMPLE_DIR} = $opt_example_dir // catdir $config{CONFIG_DIR}, 'examples';
+       $config{LOG_DIR}     = $opt_log_dir     // 'logs';
+       $config{MANUAL_DIR}  = $opt_manual_dir  // 'manuals';
+       $config{MODULE_DIR}  = $opt_module_dir  // 'modules';
+       $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';
@@ -197,15 +212,15 @@ if (defined $opt_system) {
        $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{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};
+       $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';
+       $config{CONFIG_DIR}  = $opt_config_dir     // $config{CONFIG_DIR}  // catdir $config{BASE_DIR},   'conf';
+       $config{DATA_DIR}    = $opt_data_dir       // $config{DATA_DIR}    // catdir $config{BASE_DIR},   'data';
+       $config{EXAMPLE_DIR} = $opt_example_dir    // $config{EXAMPLE_DIR} // catdir $config{CONFIG_DIR}, 'examples';
+       $config{LOG_DIR}     = $opt_log_dir        // $config{LOG_DIR}     // catdir $config{BASE_DIR},   'logs';
+       $config{MANUAL_DIR}  = $opt_manual_dir     // $config{MANUAL_DIR}  // catdir $config{BASE_DIR},   'manuals';
+       $config{MODULE_DIR}  = $opt_module_dir     // $config{MODULE_DIR}  // catdir $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.
@@ -226,6 +241,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.
                        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;
                }
@@ -252,6 +268,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.
                        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;
                }
@@ -431,7 +448,7 @@ print_format <<"EOM";
 <|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