]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - configure
Fix warning: "const type qualifier on return type has no effect".
[user/henk/code/inspircd.git] / configure
index 3f684df8ab2f09ffcc400aa99cedc620b385ec9b..d18b02418864c5c16ab90b91fd9b0a2d17486b55 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,16 +1,30 @@
 #!/usr/bin/env perl
-###################################################
-# InspIRCd Configuration Script
+
+#
+# InspIRCd -- Internet Relay Chat Daemon
 #
-# Copyright 2002-2010 The InspIRCd Development Team
-#  http://wiki.inspircd.org/Credits
+#   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) 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>
 #
-# Licensed under GPL, please see the COPYING file
-# for more information
+# 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
+# License as published by the Free Software Foundation, version 2.
 #
-# $Id$
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+# details.
 #
-###################################################
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
 
 BEGIN {
        require 5.8.0;
@@ -47,7 +61,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 ();
 
@@ -79,10 +93,11 @@ 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(); },
-       'svnupdate' => sub { svnupdate(); },
        'clean' => sub { clean(); },
        'list-extras' => sub { list_extras; exit 0; }, # This, --enable-extras, and --disable-extras are for non-interactive managing.
        'enable-extras=s@' => \@opt_enableextras, # ^
@@ -107,6 +122,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) ||
@@ -128,28 +145,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";
 
 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{UID} = $opt_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) {
@@ -161,6 +183,12 @@ if (defined $opt_module_dir) {
 if (defined $opt_binary_dir) {
        $config{BINARY_DIR} = $opt_binary_dir;
 }
+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 | cut -c 1,2,3`); # GNUTLS Version.
 
 if (defined $opt_freebsd_port)
@@ -220,23 +248,21 @@ if (defined $opt_noports)
 {
        $config{USE_PORTS} = "n";
 }
-$config{IPV6}         = "y";                                   # IPv6 support
-if (defined $opt_noipv6)
-{
-       $config{IPV6} = "n";
-}
 $config{_SOMAXCONN} = SOMAXCONN;                                       # Max connections in accept queue
 $config{OSNAME}            = $^O;                                      # Operating System Name
 $config{IS_DARWIN}       = "NO";                                       # Is OSX?
 $config{STARTSCRIPT}     = "inspircd";                 # start script?
 $config{DESTINATION}     = "BASE";                             # Is target path.
-$config{EXTRA_DIR}       = "";                                         # Is empty.
 if ($config{OSNAME} =~ /darwin/i)
 {
        $config{IS_DARWIN} = "YES";
        $config{STARTSCRIPT}      = "org.inspircd.plist";               # start script for OSX.
+       $config{CC}                 = "xcrun clang++";                                  # C++ compiler for OSX.
+}
+else
+{
+       $config{CC}                 = "g++";                                            # C++ compiler
 }
-$config{CC}                = "g++";                                            # C++ compiler
 if (defined $opt_cc)
 {
        $config{CC} = $opt_cc;
@@ -254,7 +280,11 @@ if ($config{HAS_OPENSSL} =~ /^([-[:digit:].]+)([a-z])?(\-[a-z][0-9])?$/) {
 }
 
 if (($config{GCCVER} eq "") || ($config{GCCMINOR} eq "")) {
-       print $config{CC} . " was not found! You require g++ (the GNU C++ compiler, part of GCC) to build InspIRCd!\n";
+       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";         
+       }
        exit;
 }
 
@@ -303,84 +333,6 @@ sub update
        exit;
 }
 
-sub svnupdate
-{
-       my $fail = 0;
-       open(FH,"<.svn/entries") or $fail = 1;
-       if ($fail) {
-               print "This is not an SVN copy of InspIRCd.\n";
-               exit 1;
-       }
-       else
-       {
-               close(FH);
-       }
-       open my $fd, "-|", "svn update";
-       my $configurechanged = 0; # Needs ./configure -update
-       my $rootincchanged = 0;
-       my @conflicted = ();
-       while (defined(my $line = <$fd>))
-       {
-               my ($action, $file);
-               print $line;
-               $line =~ m/^([ADUCG])\s+(.*)$/ or next;
-               ($action, $file) = ($1, $2);
-               if ($action eq "C")
-               {
-                       push @conflicted, $file;
-                       if ($file eq "configure")
-                       {
-                               $configurechanged = 1;
-                       }
-                       elsif ($file =~ m/^\..*\.inc$/)
-                       {
-                               $rootincchanged = 1;
-                       }
-               }
-               elsif ($action eq "U" || $action eq "G")
-               {
-                       if ($file eq "configure")
-                       {
-                               $configurechanged = 1;
-                       }
-                       elsif ($file =~ m/^\..*\.inc$/)
-                       {
-                               $rootincchanged = 1;
-                       }
-               }
-       }
-       unless (close $fd) # close() waits for exit and returns false if the command failed
-       {
-               if ($! == 0)
-               {
-                       print STDERR "Problem updating from SVN, please check above for errors\n";
-               }
-               else
-               {
-                       print STDERR "Failed to run SVN: $!\n";
-               }
-               exit 1;
-       }
-       if (scalar(@conflicted) > 0)
-       {
-               print STDERR "\e[0;33;1mERROR:\e[0m You have local modifications which conflicted with the updates from SVN\n";
-               print STDERR "Configure is not able to complete the update. Please resolve these conflicts, then run ./configure -update\n";
-               print "Conflicted files: " . join ", ", @conflicted . "\n";
-               exit 1;
-       }
-       if ($configurechanged)
-       {
-               system("perl configure -update");
-       }
-       else
-       {
-               print "No need to update Makefiles.\n";
-       }
-       if (defined $opt_rebuild) {
-               system("make install");
-       }
-       exit;
-}
 
 sub test_compile {
        my $feature = shift;
@@ -393,7 +345,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";
 
@@ -594,14 +546,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?");
@@ -634,9 +590,6 @@ should NOT be used. You should probably specify a newer compiler.\n\n";
                }
        }
 
-       yesno('IPV6',"Would you like to build InspIRCd with IPv6 support?\nYou can still use IPv4 addresses in your port bindings.\n\nEnable IPv6?");
-       print "\n";
-
        $config{USE_FREEBSD_BASE_SSL} = "n";
        $config{USE_FREEBSD_PORTS_SSL} = "n";
        if ($config{HAS_OPENSSL_PORT} ne "")
@@ -691,8 +644,8 @@ should NOT be used. You should probably specify a newer compiler.\n\n";
        }
        else
        {
-               print "\nCould not detect OpenSSL or GnuTLS. Make sure pkg-config is installed if\n";
-               print "you intend to use OpenSSL, or that GnuTLS is in your path if you intend\nto use GnuTLS.\n\n";
+               print "\nCould not detect OpenSSL or GnuTLS. Make sure pkg-config is installed and\n";
+               print "is in your path.\n\n";
        }
 
        yesno('MODUPDATE',"Would you like to check for updates to third-party modules?");
@@ -703,6 +656,9 @@ should NOT be used. You should probably specify a newer compiler.\n\n";
        }
 }
 
+# We are on a POSIX system, we can enable POSIX extras without asking
+symlink "extra/m_regex_posix.cpp", "src/modules/m_regex_posix.cpp";
+
 dumphash();
 
 if (($config{USE_GNUTLS} eq "y") && ($config{HAS_GNUTLS} ne "y"))
@@ -911,6 +867,11 @@ sub writefiles {
        chomp(my $incos = `uname -n -s -r`);
        chomp(my $version = `sh src/version.sh`);
        chomp(my $revision2 = getrevision());
+       my $branch = "InspIRCd-0.0";
+       if ($version =~ /^(InspIRCd-[0-9]+\.[0-9]+)\.[0-9]+/)
+       {
+               $branch = $1;
+       }
        if ($writeheader == 1)
        {
                print "Writing \e[1;32minspircd_config.h\e[0m\n";
@@ -924,6 +885,9 @@ sub writefiles {
 #define CoreExport /**/
 #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)
@@ -944,6 +908,8 @@ print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n";
                        (($config{GCCVER} == 4) && ($config{GCCMINOR} >= 3))
                                ||
                        ($config{GCCVER} > 4)
+                               || # HACK: temporary fix for non-GCC (i.e. clang) builds
+                       ($config{CC} !~ /gcc/)
                ) {
                        print FILEHANDLE "#define HASHMAP_DEPRECATED\n";
                }
@@ -953,12 +919,12 @@ print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n";
                if ($config{HAS_STDINT} eq "true") {
                        print FILEHANDLE "#define HAS_STDINT\n";
                }
-               if ($config{IPV6} =~ /y/i) {
-                       print FILEHANDLE "#define IPV6\n";
-               }
                if ($config{HAS_EVENTFD} eq 'true') {
                        print FILEHANDLE "#define HAS_EVENTFD\n";
                }
+               if ($config{OSNAME} !~ /DARWIN/i) {
+                       print FILEHANDLE "#define HAS_CLOCK_GETTIME\n";
+               }
                my $use_hiperf = 0;
                if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
                        print FILEHANDLE "#define USE_KQUEUE\n";
@@ -995,6 +961,7 @@ print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n";
 
                open(FILEHANDLE, ">include/inspircd_version.h.tmp");
                print FILEHANDLE <<EOF;
+#define BRANCH "$branch"
 #define VERSION "$version"
 #define REVISION "$revision2"
 #define SYSTEM "$incos"
@@ -1054,8 +1021,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 EXTRA_DIR SOCKETENGINE
+                       CC SYSTEM BASE_DIR CONFIG_DIR MODULE_DIR BINARY_DIR BUILD_DIR DATA_DIR UID
+                       STARTSCRIPT DESTINATION SOCKETENGINE
                )) {
                        s/\@$var\@/$config{$var}/g;
                }
@@ -1156,7 +1123,6 @@ sub list_extras () {
        my %extras = ();
 EXTRA: for my $extra (@extras) {
                next if (File::Spec->curdir() eq $extra || File::Spec->updir() eq $extra);
-               next if ($extra eq '.svn');
                my $abs_extra = File::Spec->catfile($abs_srcdir, "extra", $extra);
                my $abs_source = File::Spec->catfile($abs_srcdir, $extra);
                next unless ($extra =~ m/\.(cpp|h)$/ || (-d $abs_extra)); # C++ Source/Header, or directory