]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - configure
Update Doxyfile for the latest version of Doxygen.
[user/henk/code/inspircd.git] / configure
index fb4d5d842abd35b0579696c057c696130f502fc5..cd5cf425880e41141855418ef547788b835a1f75 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,16 +1,30 @@
-#!/usr/bin/perl
-###################################################
-# InspIRCd Configuration Script
+#!/usr/bin/env perl
+
+#
+# InspIRCd -- Internet Relay Chat Daemon
+#
+#   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>
 #
-# Copyright 2002-2009 The InspIRCd Development Team
-#  http://wiki.inspircd.org/Credits
+# 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.
 #
-# Licensed under GPL, please see the COPYING file
-# for more information
+# 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.
 #
-# $Id$
+# 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;
@@ -44,9 +58,10 @@ use make::opensslcert;
 
 our ($opt_use_gnutls, $opt_rebuild, $opt_use_openssl, $opt_nointeractive, $opt_ports,
     $opt_epoll, $opt_kqueue, $opt_noports, $opt_noepoll, $opt_nokqueue,
-    $opt_noipv6, $opt_maxbuf, $opt_disable_debug, $opt_freebsd_port);
+    $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 ();
 
@@ -60,6 +75,8 @@ my @opt_disableextras;
 GetOptions (
        'enable-gnutls' => \$opt_use_gnutls,
        'rebuild' => \$opt_rebuild,
+       'system' => \$opt_system,
+       'uid=s' => \$opt_uid,
        'enable-openssl' => \$opt_use_openssl,
        'disable-interactive' => \$opt_nointeractive,
        'enable-ports' => \$opt_ports,
@@ -76,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, # ^
@@ -98,12 +116,14 @@ if (scalar(@opt_enableextras) + scalar(@opt_disableextras) > 0) {
        exit 0;
 }
 
-our $non_interactive = (
+our $interactive = !(
        (defined $opt_base_dir) ||
        (defined $opt_config_dir) ||
        (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) ||
@@ -115,41 +135,60 @@ our $non_interactive = (
        (defined $opt_noepoll) ||
        (defined $opt_noports) ||
        (defined $opt_maxbuf) ||
+       (defined $opt_system) ||
+       (defined $opt_uid) ||
        (defined $opt_use_gnutls) ||
        (defined $opt_freebsd_port)
 );
-our $interactive = !$non_interactive;
 
 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)
-{
+if (defined $opt_base_dir) {
        $config{BASE_DIR} = $opt_base_dir;
+} elsif (defined $opt_system) {
+       $config{BASE_DIR} = '/var/lib/inspircd';
 }
 
-$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
+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} = $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)
-{
+if (defined $opt_config_dir) {
        $config{CONFIG_DIR} = $opt_config_dir;
 }
-if (defined $opt_module_dir)
-{
+if (defined $opt_module_dir) {
        $config{MODULE_DIR} = $opt_module_dir;
 }
-if (defined $opt_binary_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)
@@ -186,68 +225,44 @@ if (defined $opt_use_openssl)
        $config{USE_OPENSSL} = "y";
 }
 
-# no, let's not change these.
-$config{OPTIMITEMP}     = "0";                                         # Default Optimisation Value
-if (!defined $opt_disable_debug)
-{
+if (!defined $opt_disable_debug) {
        $config{OPTIMISATI}      = "-g1";                               # Optimisation Flag
-}
-else
-{
-       $config{OPTIMISATI}      = "-O2";                               # DEBUGGING OFF!
+} else {
+       $config{OPTIMISATI}      = "-O2";
 }
 
 $config{HAS_STRLCPY}   = "false";                                      # strlcpy Check.
 $config{HAS_STDINT}     = "false";                                     # stdint.h check
 $config{USE_KQUEUE}     = "y";                                         # kqueue enabled
-if (defined $opt_kqueue)
-{
-       $config{USE_KQUEUE} = "y";
-}
-if (defined $opt_nokqueue)
-{
+if (defined $opt_nokqueue) {
        $config{USE_KQUEUE} = "n";
 }
 $config{USE_POLL}     = "y";                                   # poll enabled
 $config{USE_EPOLL}       = "y";                                        # epoll enabled
-if (defined $opt_epoll)
-{
-       $config{USE_EPOLL} = "y";
-}
 if (defined $opt_noepoll)
 {
        $config{USE_EPOLL} = "n";
 }
 $config{USE_PORTS}       = "y";                                        # epoll enabled
-if (defined $opt_ports)
-{
-       $config{USE_PORTS} = "y";
-}
 if (defined $opt_noports)
 {
        $config{USE_PORTS} = "n";
 }
-$config{IPV6}         = "y";                                   # IPv6 support
-if (defined $opt_noipv6)
-{
-       $config{IPV6} = "n";
-}
-chomp($config{GCCVER}       = `g++ -dumpversion | cut -c 1`);          # Major GCC Version
-chomp($config{GCCMINOR}     = `g++ -dumpversion | cut -c 3`);
 $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{DESTINATION}      = "LAUNCHDPATH";                              # Is OSX target.
-       $config{EXTRA_DIR}          = " launchd_dir";                           # Is OSX specific path.
+       $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;
@@ -258,14 +273,18 @@ $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 "")) {
-       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;
 }
 
@@ -314,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;
@@ -404,10 +345,15 @@ 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";
 
+$exec = $config{CC} . " -dumpversion | cut -c 1";
+chomp($config{GCCVER}          = `$exec`);                             # Major GCC Version
+$exec = $config{CC} . " -dumpversion | cut -c 3";
+chomp($config{GCCMINOR}                = `$exec`);
+
 printf "Checking if stdint.h exists... ";
 $config{HAS_STDINT} = "true";
 our $fail = 0;
@@ -600,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?");
@@ -640,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 "")
@@ -697,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?");
@@ -709,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"))
@@ -917,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";
@@ -930,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)
@@ -946,25 +904,18 @@ 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";
                }
                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";
@@ -1001,6 +952,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"
@@ -1060,8 +1012,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
-                       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;
                }
@@ -1162,7 +1114,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