]> 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 e141f79692a4d8821cc7a1d059337b3f0af64ece..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,6 +93,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(); },
@@ -106,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) ||
@@ -127,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) {
@@ -160,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)
@@ -228,8 +257,12 @@ 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;
@@ -247,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;
 }
 
@@ -308,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";
 
@@ -509,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?");
@@ -603,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?");
@@ -826,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";
@@ -839,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)
@@ -859,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";
                }
@@ -871,6 +922,9 @@ print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\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";
@@ -907,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"
@@ -966,7 +1021,7 @@ 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
+                       CC SYSTEM BASE_DIR CONFIG_DIR MODULE_DIR BINARY_DIR BUILD_DIR DATA_DIR UID
                        STARTSCRIPT DESTINATION SOCKETENGINE
                )) {
                        s/\@$var\@/$config{$var}/g;