]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - configure
Merge pull request #1084 from SaberUK/insp20+fix-parallel-debug-install
[user/henk/code/inspircd.git] / configure
index 6021a805d6b77922a1b68a306152b1a824dce4a4..fd00ff89c04ace244a996c09f27d0463a2f0fe0f 100755 (executable)
--- a/configure
+++ b/configure
@@ -33,12 +33,6 @@ BEGIN {
 use strict;
 use warnings FATAL => qw(all);
 
-use Data::Dumper;
-BEGIN {
-       $Data::Dumper::Sortkeys = 1;
-       $Data::Dumper::Useqq = 1;
-};
-
 use File::Copy ();
 use Socket;
 use Cwd;
@@ -61,7 +55,7 @@ our ($opt_use_gnutls, $opt_rebuild, $opt_use_openssl, $opt_nointeractive, $opt_p
     $opt_noipv6, $opt_maxbuf, $opt_disable_debug, $opt_freebsd_port,
        $opt_system, $opt_uid);
 
-our ($opt_cc, $opt_base_dir, $opt_config_dir, $opt_module_dir, $opt_binary_dir);
+our ($opt_cc, $opt_base_dir, $opt_config_dir, $opt_module_dir, $opt_binary_dir, $opt_data_dir, $opt_log_dir);
 
 sub list_extras ();
 
@@ -93,6 +87,8 @@ GetOptions (
        'config-dir=s' => \$opt_config_dir,
        'module-dir=s' => \$opt_module_dir,
        'binary-dir=s' => \$opt_binary_dir,
+       'data-dir=s' => \$opt_data_dir,
+       'log-dir=s' => \$opt_log_dir,
        'disable-debuginfo' => sub { $opt_disable_debug = 1 },
        'help'  => sub { showhelp(); },
        'update' => sub { update(); },
@@ -120,6 +116,8 @@ our $interactive = !(
        (defined $opt_module_dir) ||
        (defined $opt_base_dir) ||
        (defined $opt_binary_dir) ||
+       (defined $opt_data_dir) ||
+       (defined $opt_log_dir) ||
        (defined $opt_nointeractive) ||
        (defined $opt_cc) ||
        (defined $opt_noipv6) ||
@@ -141,28 +139,33 @@ chomp(our $topdir = getcwd());
 our $this = resolve_directory($topdir);                                                # PWD, Regardless.
 our @modlist = ();                                                                     # Declare for Module List..
 our %config = ();                                                                      # Initiate Configuration Hash..
+our $cache_loaded = getcache();
 $config{ME} = resolve_directory($topdir);                              # Present Working Directory
 
-$config{BASE_DIR} = $config{ME}."/run";
+$config{BASE_DIR} ||= $config{ME}."/run";
 
 if (defined $opt_base_dir) {
        $config{BASE_DIR} = $opt_base_dir;
-} elsif (defined $opt_system || defined $opt_uid) {
+} elsif (defined $opt_system) {
        $config{BASE_DIR} = '/var/lib/inspircd';
 }
 
-if (defined $opt_system || defined $opt_uid) {
+if (defined $opt_system) {
        $config{UID} = $opt_uid || 'ircd';
        $config{CONFIG_DIR}      = '/etc/inspircd';
        $config{MODULE_DIR}      = '/usr/lib/inspircd';
        $config{BINARY_DIR}      = '/usr/sbin/';
        $config{BUILD_DIR}       = resolve_directory($config{ME}."/build");         # Build Directory
+       $config{DATA_DIR}        = '/var/inspircd';
+       $config{LOG_DIR}         = '/var/log/inspircd';
 } else {
-       $config{UID} = $<;
-       $config{CONFIG_DIR}      = resolve_directory($config{BASE_DIR}."/conf");        # Configuration Directory
-       $config{MODULE_DIR}      = resolve_directory($config{BASE_DIR}."/modules");     # Modules Directory
-       $config{BINARY_DIR}      = resolve_directory($config{BASE_DIR}."/bin");         # Binary Directory
-       $config{BUILD_DIR}       = resolve_directory($config{ME}."/build");         # Build Directory
+       $config{UID} = $opt_uid || $config{UID} || $<;
+       $config{CONFIG_DIR}      ||= resolve_directory($config{BASE_DIR}."/conf");      # Configuration Directory
+       $config{MODULE_DIR}      ||= resolve_directory($config{BASE_DIR}."/modules");   # Modules Directory
+       $config{BINARY_DIR}      ||= resolve_directory($config{BASE_DIR}."/bin");               # Binary Directory
+       $config{BUILD_DIR}       ||= resolve_directory($config{ME}."/build");         # Build Directory
+       $config{DATA_DIR}        ||= resolve_directory($config{BASE_DIR}."/data");      # Data directory
+       $config{LOG_DIR}         ||= resolve_directory($config{BASE_DIR}."/logs");      # Log directory
 }
 
 if (defined $opt_config_dir) {
@@ -174,7 +177,13 @@ if (defined $opt_module_dir) {
 if (defined $opt_binary_dir) {
        $config{BINARY_DIR} = $opt_binary_dir;
 }
-chomp($config{HAS_GNUTLS}   = `pkg-config --modversion gnutls 2>/dev/null | cut -c 1,2,3`); # GNUTLS Version.
+if (defined $opt_data_dir) {
+       $config{DATA_DIR} = $opt_data_dir;
+}
+if (defined $opt_log_dir) {
+       $config{LOG_DIR} = $opt_log_dir;
+}
+chomp($config{HAS_GNUTLS}   = `pkg-config --modversion gnutls 2>/dev/null`); # GNUTLS Version.
 
 if (defined $opt_freebsd_port)
 {
@@ -194,17 +203,18 @@ else
        {
                chomp($config{HAS_OPENSSL}  = `pkg-config --modversion openssl 2>/dev/null`);           # Openssl version, others
                $config{HAS_OPENSSL_PORT} = "";
+               $config{USE_FREEBSD_BASE_SSL} = "n";
        }
 }
 
 chomp(our $gnutls_ver = $config{HAS_GNUTLS});
 chomp(our $openssl_ver = $config{HAS_OPENSSL});
-$config{USE_GNUTLS}        = "n";
+$config{USE_GNUTLS}        ||= "n";
 if (defined $opt_use_gnutls)
 {
        $config{USE_GNUTLS} = "y";                                      # Use gnutls.
 }
-$config{USE_OPENSSL}   = "n";                                          # Use openssl.
+$config{USE_OPENSSL}   ||= "n";                                                # Use openssl.
 if (defined $opt_use_openssl)
 {
        $config{USE_OPENSSL} = "y";
@@ -244,6 +254,12 @@ if ($config{OSNAME} =~ /darwin/i)
        $config{STARTSCRIPT}      = "org.inspircd.plist";               # start script for OSX.
        $config{CC}                 = "xcrun clang++";                                  # C++ compiler for OSX.
 }
+elsif ($config{OSNAME} =~ /freebsd/i)
+{
+       chomp(my $fbsd_version = `uname -r`);
+       $fbsd_version =~ s/^(\d+\.\d+).*/$1/g;
+       $config{CC} = $fbsd_version >= 10.0 ? 'clang++' : 'g++';
+}
 else
 {
        $config{CC}                 = "g++";                                            # C++ compiler
@@ -258,18 +274,15 @@ $exec = $config{CC} . " -dumpversion | cut -c 3";
 chomp($config{GCCMINOR}                = `$exec`);
 $config{MAXBUF}                        = "512";                                # Max buffer size
 
-if ($config{HAS_OPENSSL} =~ /^([-[:digit:].]+)([a-z])?(\-[a-z][0-9])?$/) {
+if ($config{HAS_OPENSSL} =~ /^([-[:digit:].]+)(?:[a-z])?(?:\-[a-z][0-9])?/) {
        $config{HAS_OPENSSL} = $1;
 } else {
        $config{HAS_OPENSSL} = "";
 }
 
 if (($config{GCCVER} eq "") || ($config{GCCMINOR} eq "")) {
-       if ($config{IS_DARWIN} eq "YES") {
-               print $config{CC} . " was not found! You require clang++ (the LLVM C++ compiler, part of the OSX developer tools) to build InspIRCd!\n";
-       } else {
-               print $config{CC} . " was not found! You require g++ (the GNU C++ compiler, part of GCC) to build InspIRCd!\n";         
-       }
+       print "`$config{CC}` was not found! A C++ compiler is required to build InspIRCd!\n";
+       print "You can pass a custom compiler to $0 using --with-cc=[name].\n";
        exit;
 }
 
@@ -330,7 +343,7 @@ sub test_compile {
 
 print "Running non-interactive configure...\n" unless $interactive;
 print "Checking for cache from previous configure... ";
-print ((!getcache()) ? "not found\n" : "found\n");
+print ($cache_loaded ? "found\n" : "not found\n");
 $config{SYSTEM} = lc $^O;
 print "Checking operating system version... $config{SYSTEM}\n";
 
@@ -340,51 +353,16 @@ $exec = $config{CC} . " -dumpversion | cut -c 3";
 chomp($config{GCCMINOR}                = `$exec`);
 
 printf "Checking if stdint.h exists... ";
-$config{HAS_STDINT} = "true";
-our $fail = 0;
-open(STDINT, "</usr/include/stdint.h") or $config{HAS_STDINT} = "false";
-if ($config{HAS_STDINT} eq "true") {
-       close(STDINT);
-}
-print "yes\n" if $config{HAS_STDINT} eq "true";
-print "no\n" if $config{HAS_STDINT} eq "false";
+$config{HAS_STDINT} = test_compile('stdint');
+print $config{HAS_STDINT} ? "yes\n" : "no\n";
 
 printf "Checking if strlcpy exists... ";
-# Perform the strlcpy() test..
-$config{HAS_STRLCPY} = "false";
-$fail = 0;
-open(STRLCPY, "</usr/include/string.h") or $fail = 1;
-if (!$fail) {
-       while (defined(my $line = <STRLCPY>)) {
-               chomp($line);
-               # try and find the delcaration of:
-               # size_t strlcpy(...)
-               if ($line =~ /size_t(\0x9|\s)+strlcpy/) {
-                       $config{HAS_STRLCPY} = "true";
-               }
-       }
-       close(STRLCPY);
-}
-print "yes\n" if $config{HAS_STRLCPY} eq "true";
-print "no\n" if $config{HAS_STRLCPY} eq "false";
+$config{HAS_STRLCPY} = test_compile('strlcpy');
+print $config{HAS_STRLCPY} ? "yes\n" : "no\n";
 
 printf "Checking if kqueue exists... ";
-$has_kqueue = 0;
-$fail = 0;
-open(KQUEUE, "</usr/include/sys/event.h") or $fail = 1;
-if (!$fail) {
-       while (defined(my $line = <KQUEUE>)) {
-               chomp($line);
-               # try and find the delcaration of:
-               # int kqueue(void);
-               if ($line =~ /int(\0x9|\s)+kqueue/) {
-                       $has_kqueue = 1;
-               }
-       }
-       close(KQUEUE);
-}
-print "yes\n" if $has_kqueue == 1;
-print "no\n" if $has_kqueue == 0;
+$has_kqueue = test_compile('kqueue');
+print $has_kqueue ? "yes\n" : "no\n";
 
 printf "Checking for epoll support... ";
 $has_epoll = test_compile('epoll');
@@ -475,7 +453,7 @@ if ($interactive)
        my $rev = getrevision();
        # Display Introduction Message..
        print <<"STOP" ;
-Welcome to the \e[1mInspIRCd\e[0m Configuration program! (\e[1minteractive mode\e[0m)
+Welcome to the \e[1mInspIRCd\e[0m configuration program! (\e[1minteractive mode\e[0m)
 \e[1mPackage maintainers: Type ./configure --help for non-interactive help\e[0m
 
 *** If you are unsure of any of these values, leave it blank for    ***
@@ -531,14 +509,18 @@ should NOT be used. You should probably specify a newer compiler.\n\n";
        if ($tmpbase ne $config{BASE_DIR}) {
                $config{CONFIG_DIR}      = resolve_directory($config{BASE_DIR}."/conf");           # Configuration Dir
                $config{MODULE_DIR}      = resolve_directory($config{BASE_DIR}."/modules");     # Modules Directory
+               $config{DATA_DIR}        = resolve_directory($config{BASE_DIR}."/data");        # Data Directory
+               $config{LOG_DIR}         = resolve_directory($config{BASE_DIR}."/logs");        # Log Directory
                $config{BINARY_DIR}      = resolve_directory($config{BASE_DIR}."/bin");     # Binary Directory
        }
 
        dir_check("are the configuration files", "CONFIG_DIR");
        dir_check("are the modules to be compiled to", "MODULE_DIR");
        dir_check("is the IRCd binary to be placed", "BINARY_DIR");
+       dir_check("are variable data files to be located in", "DATA_DIR");
+       dir_check("are the logs to be stored in", "LOG_DIR");
        dir_check("do you want the build to take place", "BUILD_DIR");
-
+               
        my $chose_hiperf = 0;
        if ($has_kqueue) {
                yesno('USE_KQUEUE',"You are running a BSD operating system, and kqueue\nwas detected. Would you like to enable kqueue support?\nThis is likely to increase performance.\nIf you are unsure, answer yes.\n\nEnable kqueue?");
@@ -593,8 +575,8 @@ should NOT be used. You should probably specify a newer compiler.\n\n";
                $config{USE_FREEBSD_BASE_SSL} = "y" if ($^O eq "freebsd");
        }
 
-       $config{USE_SSL} = "n";
-       $config{MODUPDATE} = 'n';
+       $config{USE_SSL} ||= "n";
+       $config{MODUPDATE} ||= 'n';
 
        if ($config{HAS_GNUTLS} eq "y" || $config{HAS_OPENSSL} eq "y")
        {
@@ -632,7 +614,7 @@ should NOT be used. You should probably specify a newer compiler.\n\n";
        yesno('MODUPDATE',"Would you like to check for updates to third-party modules?");
        print "\n";
        if ($config{MODUPDATE} eq "y") {
-               print "Checking for upgrades to extra and third party modules... ";
+               print "Checking for upgrades to extra and third-party modules... ";
                system "./modulemanager upgrade";
        }
 }
@@ -644,18 +626,18 @@ dumphash();
 
 if (($config{USE_GNUTLS} eq "y") && ($config{HAS_GNUTLS} ne "y"))
 {
-       print "Sorry, but i couldn't detect gnutls. Make sure gnutls-config is in your path.\n";
+       print "Sorry, but I couldn't detect GnuTLS. Make sure pkg-config is in your path.\n";
        exit(0);
 }
 if (($config{USE_OPENSSL} eq "y") && ($config{HAS_OPENSSL} ne "y"))
 {
-       print "Sorry, but i couldn't detect openssl. Make sure openssl is in your path.\n";
+       print "Sorry, but I couldn't detect OpenSSL. Make sure pkg-config and openssl are in your path.\n";
        exit(0);
 }
 our $failed = 0;
 
 $config{CERTGEN} ||= 'y';
-yesno('CERTGEN',"Would you like generate SSL certificates now?") if ($interactive && ($config{USE_GNUTLS} eq "y" || $config{USE_OPENSSL} eq "y"));
+yesno('CERTGEN',"Would you like to generate SSL certificates now?") if ($interactive && ($config{USE_GNUTLS} eq "y" || $config{USE_OPENSSL} eq "y"));
 
 if ($config{USE_GNUTLS} eq "y") {
        unless (-r "src/modules/m_ssl_gnutls.cpp") {
@@ -665,13 +647,11 @@ if ($config{USE_GNUTLS} eq "y") {
        if ($interactive && $config{CERTGEN} eq 'y')
        {
                unless (-r "$config{CONFIG_DIR}/key.pem" && -r "$config{CONFIG_DIR}/cert.pem") {
-                       print "SSL Certificates Not found, Generating.. \n\n
+                       print "SSL certificates not found, generating.. \n\n
 *************************************************************
-* Generating the Private Key may take some time, go grab a  *
-* Coffee. Even better, to generate some more entropy if it  *
-* is taking a while, open another console and type du / a   *
-* few times and get that HD going :) Then answer the        *
-* Questions which follow. If you are unsure, just hit enter *
+* Generating the private key may take some time, once done, *
+* answer the questions which follow. If you are unsure,     *
+* just hit enter!                                           *
 *************************************************************\n\n";
                        $failed = make_gnutls_cert();
                        if ($failed) {
@@ -684,7 +664,7 @@ if ($config{USE_GNUTLS} eq "y") {
                        }
                }
                else {
-                       print "SSL Certificates found, skipping.\n\n";
+                       print "SSL certificates found, skipping.\n\n";
                }
        }
        else
@@ -702,10 +682,10 @@ if ($config{USE_OPENSSL} eq "y") {
        if ($interactive && $config{CERTGEN} eq 'y')
        {
                unless (-r "$config{CONFIG_DIR}/key.pem" && -r "$config{CONFIG_DIR}/cert.pem") {
-                       print "SSL Certificates Not found, Generating.. \n\n
+                       print "SSL certificates not found, generating.. \n\n
 *************************************************************
 * Generating the certificates may take some time, go grab a *
-* coffee, or something.                                            *
+* coffee or something.                                     *
 *************************************************************\n\n";
                        make_openssl_cert();
                        print "\nCertificate generation complete, copying to config directory... ";
@@ -714,7 +694,7 @@ if ($config{USE_OPENSSL} eq "y") {
                        File::Copy::move("dhparams.pem", "$config{CONFIG_DIR}/dhparams.pem") or print STDERR "Could not copy dhparams.pem!\n";
                        print "Done.\n\n";
                } else {
-                       print "SSL Certificates found, skipping.\n\n"
+                       print "SSL certificates found, skipping.\n\n"
                }
        }
        else
@@ -723,7 +703,7 @@ if ($config{USE_OPENSSL} eq "y") {
        }
 }
 if (($config{USE_GNUTLS} eq "n") && ($config{USE_OPENSSL} eq "n")) {
-       print "Skipping SSL Certificate generation, SSL support is not available.\n\n";
+       print "Skipping SSL certificate generation as SSL support is not available.\n\n";
 }
 
 depcheck();
@@ -735,12 +715,12 @@ print "To build your server with these settings, please run '\e[1;32mmake\e[0m'
 if (($config{USE_GNUTLS} eq "y") || ($config{USE_OPENSSL} eq "y")) {
        print "Please note: for \e[1;32mSSL support\e[0m you will need to load required\n";
        print "modules in your config. This configure script has added those modules to the\n";
-       print "build process. For more info please refer to:\n";
+       print "build process. For more info, please refer to:\n";
        print "\e[1;32mhttp://wiki.inspircd.org/Installation_From_Tarball\e[0m\n";
 }
 print "*** \e[1;32mRemember to edit your configuration files!!!\e[0m ***\n\n\n";
 if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) {
-       print "\e[1;32mWARNING!\e[0m You are running OpenBSD but you are using the base gcc package\nrather than eg++. This compile will most likely fail, but i'm letting you\ngo ahead with it anyway, just in case i'm wrong :-)\n";
+       print "\e[1;32mWARNING!\e[0m You are running OpenBSD but you are using the base gcc package\nrather than eg++. This compile will most likely fail, but I'm letting you\ngo ahead with it anyway, just in case I'm wrong :-)\n";
 }
 
 if ($config{GCCVER} < "3") {
@@ -867,6 +847,8 @@ sub writefiles {
 #define DllExport /**/
 
 #define CONFIG_PATH "$config{CONFIG_DIR}"
+#define DATA_PATH "$config{DATA_DIR}"
+#define LOG_PATH "$config{LOG_DIR}"
 #define MOD_PATH "$config{MODULE_DIR}"
 #define SOMAXCONN_S "$config{_SOMAXCONN}"
 #define ENTRYPOINT int main(int argc, char** argv)
@@ -883,13 +865,6 @@ print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n";
                if ($config{GCCVER} >= 3) {
                        print FILEHANDLE "#define GCC3\n";
                }
-               if (
-                       (($config{GCCVER} == 4) && ($config{GCCMINOR} >= 3))
-                               ||
-                       ($config{GCCVER} > 4)
-               ) {
-                       print FILEHANDLE "#define HASHMAP_DEPRECATED\n";
-               }
                if ($config{HAS_STRLCPY} eq "true") {
                        print FILEHANDLE "#define HAS_STRLCPY\n";
                }
@@ -998,8 +973,8 @@ EOF
                $config{BUILD_DIR} ||= resolve_directory($config{ME}."/build");
 
                for my $var (qw(
-                       CC SYSTEM BASE_DIR CONFIG_DIR MODULE_DIR BINARY_DIR BUILD_DIR UID
-                       STARTSCRIPT DESTINATION SOCKETENGINE
+                       CC SYSTEM BASE_DIR CONFIG_DIR MODULE_DIR BINARY_DIR BUILD_DIR DATA_DIR UID
+                       STARTSCRIPT DESTINATION SOCKETENGINE LOG_DIR
                )) {
                        s/\@$var\@/$config{$var}/g;
                }