]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - configure
Make the comment make sense ;<
[user/henk/code/inspircd.git] / configure
index bd5b3abd225c2d7866545e8f702e472adbf9e34b..b467ce6265ecde0307b96f56032f776cc67a34e5 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,4 +1,5 @@
 #!/usr/bin/perl
+
 # InspIRCd Configuration Script
 #
 # Copyright 2003 The ChatSpike Development Team
@@ -39,11 +40,11 @@ $config{THREADED_DNS}       = "n";                                          # threaded dns (experimental)
 $config{STATIC_LINK}       = "no";                                             # are doing static modules?
 chomp($config{MAX_CLIENT_T} = `sh -c \"ulimit -n\"`);                          # FD Limit
 chomp($config{MAX_DESCRIPTORS} = `sh -c \"ulimit -n\"`);                       # Hard FD Limit
-chomp($config{GCCVER}       = `gcc -dumpversion | cut -c 1`);                  # Major GCC Version
-chomp($config{GCC34}        = `gcc -dumpversion | cut -c 3`);                  # Minor GCC Version
+chomp($config{GCCVER}       = `g++ -dumpversion | cut -c 1`);                  # Major GCC Version
+chomp($config{GCC34}        = `g++ -dumpversion | cut -c 3`);                  # Minor GCC Version
 chomp($config{OSNAME}       = `/bin/uname`);                                   # Operating System Name
 $config{CC}                = "g++";                                            # C++ compiler
-$config{MAKEORDER}         = "ircd mods config bininst";                       # build order
+$config{MAKEORDER}         = "ircd mods";                                      # build order
 $config{STATICLIBS}         = "";                                              # library archive path
 $config{MAX_IDENT}          = "12";                                            # max ident size
 $config{MAX_QUIT}           = "255";                                           # max quit message size
@@ -52,6 +53,8 @@ $config{MAX_KICK}           = "255";                                          # max kick message size
 $config{MAX_GECOS}          = "128";                                           # max GECOS size
 $config{MAX_AWAY}           = "200";                                           # max AWAY size
 
+$no_svn = 0;
+
 $config{HAS_OPENSSL} =~ /OpenSSL (\S+) \d+ \S+ \d{4}/;
 $config{HAS_OPENSSL} = $1;
 
@@ -60,65 +63,82 @@ $config{HAS_OPENSSL} = $1;
 # concideration!
 
 if ($config{OSNAME} =~ /CYGWIN/) {
-  $config{OSNAME} = "CYG-STATIC";
+       $config{OSNAME} = "CYG-STATIC";
 }
 
 if ((!$config{OSNAME}) || ($config{OSNAME} eq "")) {
-  chomp($config{OSNAME} = `/usr/bin/uname`);
-  if ((!$config{OSNAME}) || ($config{OSNAME} eq "")){
-       $config{OSNAME} = "Unknown";
-  }
+       chomp($config{OSNAME} = `/usr/bin/uname`);
+       if ((!$config{OSNAME}) || ($config{OSNAME} eq "")){
+               $config{OSNAME} = "Unknown";
+       }
 }
 
 if (!$config{MAX_CLIENT_T}) { 
-  $config{MAX_CLIENT_T} = 1024;                                 # Set a reasonable 'Default'
-  $fd_scan_fail = "true";                                       # Used Later
+       $config{MAX_CLIENT_T} = 1024;                                 # Set a reasonable 'Default'
+       $fd_scan_fail = "true";                                       # Used Later
 }
 
 # Get and Set some important vars..
 getmodules();
 
 my $arg = $ARGV[0];                                            # Do Some Argument Checks..
-if ($arg eq "-clean") { `rm -rf .config.cache`; }               # Remove the config.cache file.
+if ($arg eq "-clean") {
+       system("rm -rf .config.cache");
+}               # Remove the config.cache file.
 
 if ($arg eq "-update") {
-  # Does the cache file exist?
-  if (!getcache()) {
-    # No, No it doesn't.. *BASH*
-    print "You have not run ./configure before. Please do this before trying to run the update script.\n";
-    exit 0;
-  } else {
-    # We've Loaded the cache file and all our variables..
-    print "Updating Files..\n";
-    getosflags();
-    $has_epoll = $config{HAS_EPOLL};
-    $has_kqueue = $config{HAS_KQUEUE};
-    writefiles();
-    print "Complete.\n";
-    exit;
-  }
+       # Does the cache file exist?
+       if (!getcache()) {
+               # No, No it doesn't.. *BASH*
+               print "You have not run ./configure before. Please do this before trying to run the update script.\n";
+               exit 0;
+       } else {
+               # We've Loaded the cache file and all our variables..
+               print "Updating Files..\n";
+               getosflags();
+               $has_epoll = $config{HAS_EPOLL};
+               $has_kqueue = $config{HAS_KQUEUE};
+               writefiles();
+               print "Complete.\n";
+               exit;
+       }
+}
+
+if ($arg eq "-svnupdate") {
+       my $fail = 0;
+       open(FH,"<.svn/entries") or $fail = 1;
+       if ($fail) {
+               print "This is not an SVN copy of InspIRCd.\n";
+               exit;
+       }
+       system("svn update");
+       system("perl configure -update");
+       if ($ARGV[1] eq "rebuild") {
+               system("make install");
+       }
+       exit;
 }
 
 if ($arg eq "-modupdate") {
-  # Does the cache file exist?
-  if (!getcache()) {
-    # No, No it doesn't.. *BASH*
-    print "You have not run ./configure before. Please do this before trying to run the update script.\n";
-    exit 0;
-  } else {
-    # We've Loaded the cache file and all our variables..
-    print "Updating Files..\n";
-    getosflags();
-    $has_epoll = $config{HAS_EPOLL};
-    $has_kqueue = $config{HAS_KQUEUE};
-    if ($config{STATIC_LINK} eq "yes") {
-      write_static_modules_makefile();
-    } else {
-      write_dynamic_modules_makefile();
-    }
-    print "Complete.\n";
-    exit;
-  }
+       # Does the cache file exist?
+       if (!getcache()) {
+               # No, No it doesn't.. *BASH*
+               print "You have not run ./configure before. Please do this before trying to run the update script.\n";
+               exit 0;
+       } else {
+               # We've Loaded the cache file and all our variables..
+               print "Updating Files..\n";
+               getosflags();
+               $has_epoll = $config{HAS_EPOLL};
+               $has_kqueue = $config{HAS_KQUEUE};
+               if ($config{STATIC_LINK} eq "yes") {
+                       write_static_modules_makefile();
+               } else {
+                       write_dynamic_modules_makefile();
+               }
+               print "Complete.\n";
+               exit;
+       }
 }
 
 print "Checking for cache from previous configure...\n";
@@ -127,10 +147,10 @@ print "Checking operating system version...\n";
 getosflags();
 
 if (!$config{MAX_CLIENT}) { 
-  # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this
-  # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go
-  # higher than the found value" :))
-  $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
+       # If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this
+       # allows us to keep _T for testing purposes. (ie. "Are you sure you want to go
+       # higher than the found value" :))
+       $config{MAX_CLIENT} = $config{MAX_CLIENT_T};
 }
 
 printf "Checking if strlcpy exists... ";
@@ -138,14 +158,11 @@ printf "Checking if strlcpy exists... ";
 $config{HAS_STRLCPY} = "false";
 my $fail = 0;
 open(STRLCPY, "</usr/include/string.h") or $fail = 1;
-if (!$fail)
-{
-       while (chomp($line = <STRLCPY>))
-       {
+if (!$fail) {
+       while (chomp($line = <STRLCPY>)) {
                # try and find the delcaration of:
                # size_t strlcpy(...)
-               if ($line =~ /size_t(\0x9|\s)+strlcpy/)
-               {
+               if ($line =~ /size_t(\0x9|\s)+strlcpy/) {
                        $config{HAS_STRLCPY} = "true";
                }
        }
@@ -158,14 +175,11 @@ printf "Checking if kqueue exists... ";
 $has_kqueue = 0;
 $fail = 0;
 open(KQUEUE, "</usr/include/sys/event.h") or $fail = 1;
-if (!$fail)
-{
-        while (chomp($line = <KQUEUE>))
-        {
+if (!$fail) {
+        while (chomp($line = <KQUEUE>)) {
                 # try and find the delcaration of:
                # int kqueue(void);
-               if ($line =~ /int(\0x9|\s)+kqueue/)
-               {
+               if ($line =~ /int(\0x9|\s)+kqueue/) {
                        $has_kqueue = 1;
                }
        }
@@ -178,17 +192,8 @@ printf "Checking if epoll exists... ";
 $has_epoll = 0;
 $fail = 0;
 open(EPOLL, "</usr/include/sys/epoll.h") or $fail = 1;
-if (!$fail)
-{
-       while (chomp($line = <EPOLL>))
-       {
-               # try and find the declaration of:
-               # extern int epoll_create (int __size) __THROW;
-               if (($line =~ /int(\0x9|\s)+epoll_create(\0x9|\s)+\(/) || ($line =~ /int(\0x9|\s)+epoll_create\(/))
-               {
-                       $has_epoll = 1;
-               }
-       }
+if (!$fail) {
+       $has_epoll = 1;
        close(EPOLL);
 }
 if ($has_epoll) {
@@ -236,6 +241,7 @@ system("clear");
 show_splash();
 chomp($wholeos = `uname -mnr`);
 
+my $rev = getrevision();
 # Display Introduction Message..
 print "
 Welcome to the InspIRCd Configuration program!
@@ -250,33 +256,40 @@ Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter
 a new value. Please note: You will \033[1mHAVE\033[0m to read the docs
 dir, otherwise you won't have a config file!
 
-Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos), fdmax: $config{MAX_CLIENT_T}\n\n";
+Your operating system is: \033[1;32m$config{OSNAME}\033[0m ($wholeos), fdmax: $config{MAX_CLIENT_T}
+Your InspIRCd revision ID is \033[1;32mr$rev\033[0m";
+if ($rev eq "r0") {
+       print " (Non-SVN build)";
+}
+print ".\n\n";
 
 $config{CHANGE_COMPILER} = "n";
 print "I have detected the following compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.$config{GCC34}\033[0m)\n";
 
-if ($config{GCCVER} < 3)
-{
+while (($config{GCCVER} < 3) || ($config{GCCVER} eq "")) {
        print "\033[1;32mIMPORTANT!\033[0m A GCC 2.x compiler has been detected, and
-should NOT be used. You should probably specify a newer compiler.\n";
-}
-yesno(CHANGE_COMPILER,"Do you want to change the compiler?");
-if ($config{CHANGE_COMPILER} =~ /y/i)
-{
-    print "What command do you want to use to invoke your compiler?\n";
-    print "[\033[1;32m$config{CC}\033[0m] -> ";
-    chomp($config{CC} = <STDIN>);
-    if ($config{CC} eq "") { $config{CC} = "g++"; }
-    chomp($foo = `$config{CC} -dumpversion | cut -c 1`);
-    if ($foo ne "") {
-            chomp($config{GCCVER}       = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change
-            chomp($config{GCC34}        = `$config{CC} -dumpversion | cut -c 3`); # the compiler path
-           print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.$config{GCC34}\033[0m)\n";
-    }
-    else
-    {
-           print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n";
-    }
+should NOT be used. You should probably specify a newer compiler.\n\n";
+       yesno(CHANGE_COMPILER,"Do you want to change the compiler?");
+       if ($config{CHANGE_COMPILER} =~ /y/i) {
+               print "What command do you want to use to invoke your compiler?\n";
+               print "[\033[1;32m$config{CC}\033[0m] -> ";
+               chomp($config{CC} = <STDIN>);
+               if ($config{CC} eq "") {
+                       $config{CC} = "g++";
+               }
+               chomp($foo = `$config{CC} -dumpversion | cut -c 1`);
+               if ($foo ne "") {
+                       chomp($config{GCCVER}       = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change
+                       chomp($config{GCC34}        = `$config{CC} -dumpversion | cut -c 3`); # the compiler path
+                       print "Queried compiler: \033[1;32m$config{CC}\033[0m (version \033[1;32m$config{GCCVER}.$config{GCC34}\033[0m)\n";
+                       if ($config{GCCVER} < 3) {
+                               print "\033[1;32mGCC 2.x WILL NOT WORK!\033[0m. Let's try that again, shall we?\n";
+                       }
+               }
+               else {
+                       print "\033[1;32mWARNING!\033[0m Could not execute the compiler you specified. You may want to try again.\n";
+               }
+       }
 }
 
 print "\n";
@@ -305,8 +318,7 @@ if ($has_epoll) {
        print "\n";
 }
 $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y"));
-if (!$chose_hiperf)
-{
+if (!$chose_hiperf) {
        print "No high-performance socket engines are available, or you chose\n";
        print "not to enable one. Defaulting to select() engine.\n\n";
 }
@@ -344,206 +356,230 @@ print "different servers on the network.\n\n";
 # File Descriptor Settings..
 my $continue = 0;
 while (!$continue) {
-  print "Maximum number of clients at any one time ($config{MAX_CLIENT_T})\n";
-  print "[\033[1;32m$config{MAX_CLIENT}\033[0m] -> ";
-  chomp($var = <STDIN>);
-  if ($var eq "") { $var = $config{MAX_CLIENT}; }
-  if ($var =~ /^\d+$/) {
-    if (($var > $config{MAX_CLIENT_T}) && ($fd_scan_failed ne true)) {
-      # Client has entered a larger number than the 'discovered' value
-      # Confirm.
-      print "WARNING: Our scans have indicated that you are attempting
+       print "Maximum number of clients at any one time ($config{MAX_CLIENT_T})\n";
+       print "[\033[1;32m$config{MAX_CLIENT}\033[0m] -> ";
+       chomp($var = <STDIN>);
+       if ($var eq "") {
+               $var = $config{MAX_CLIENT};
+       }
+       if ($var =~ /^\d+$/) {
+               if (($var > $config{MAX_CLIENT_T}) && ($fd_scan_failed ne true)) {
+                       # Client has entered a larger number than the 'discovered' value
+                       # Confirm.
+                       print "WARNING: Our scans have indicated that you are attempting
 to use more sockets than there are avaliable. Are you sure
 you wish to do this? It may cause the IRCd to malfunction [y/n]
 [\033[1;32mn\033[0m] -> $c";
-      chomp($tmp = <STDIN>);
-      if ($tmp ne "y") {
-        print "Please enter the correct value.\n\n";
-        next;
-      }
-    }
-  } else {
-    print "You must enter a number in this field. Please try again.\n\n";
-    next;
-  }
-  # If we get here, we should be good to go.
-  $config{MAX_CLIENT} = $var;
-  $continue = 1;
-  print "\n";
+                       chomp($tmp = <STDIN>);
+                       if ($tmp ne "y") {
+                               print "Please enter the correct value.\n\n";
+                               next;
+                       }
+               }
+       } else {
+               print "You must enter a number in this field. Please try again.\n\n";
+               next;
+       }
+       # If we get here, we should be good to go.
+       $config{MAX_CLIENT} = $var;
+       $continue = 1;
+       print "\n";
 }
 
 my $continue = 0;
 while (!$continue) {
-  print "What is the maximum length of nicknames?\n";
-  print "[\033[1;32m$config{NICK_LENGT}\033[0m] -> ";
-  chomp($var = <STDIN>);
-  if ($var eq "") { $var = $config{NICK_LENGT}; }
-  if ($var =~ /^\d+$/) {
-    # We don't care what the number is, set it and be on our way.
-    $config{NICK_LENGT} = $var;
-    $continue = 1;
-    print "\n";
-  } else {
-    print "You must enter a number in this field. Please try again.\n\n";
-  }
+       print "What is the maximum length of nicknames?\n";
+       print "[\033[1;32m$config{NICK_LENGT}\033[0m] -> ";
+       chomp($var = <STDIN>);
+       if ($var eq "") {
+               $var = $config{NICK_LENGT};
+       }
+       if ($var =~ /^\d+$/) {
+               # We don't care what the number is, set it and be on our way.
+               $config{NICK_LENGT} = $var;
+               $continue = 1;
+               print "\n";
+       } else {
+               print "You must enter a number in this field. Please try again.\n\n";
+       }
 }
 
 $continue = 0;
 while (!$continue) {
-  print "What is the maximum length of channel names?\n";
-  print "[\033[1;32m$config{CHAN_LENGT}\033[0m] -> ";
-  chomp($var = <STDIN>);
-  if ($var eq "") { $var = $config{CHAN_LENGT}; }
-  if ($var =~ /^\d+$/) {
-    # We don't care what the number is, set it and be on our way.
-    $config{CHAN_LENGT} = $var;
-    $continue = 1;
-    print "\n";
-  } else {
-    print "You must enter a number in this field. Please try again.\n\n";
-  }
+       print "What is the maximum length of channel names?\n";
+       print "[\033[1;32m$config{CHAN_LENGT}\033[0m] -> ";
+       chomp($var = <STDIN>);
+       if ($var eq "") {
+               $var = $config{CHAN_LENGT};
+       }
+       if ($var =~ /^\d+$/) {
+               # We don't care what the number is, set it and be on our way.
+               $config{CHAN_LENGT} = $var;
+               $continue = 1;
+               print "\n";
+       } else {
+               print "You must enter a number in this field. Please try again.\n\n";
+       }
 }
 
 $continue = 0;
 while (!$continue) {
-  print "What is the maximum number of channels a normal user may join at any one time?\n";
-  print "[\033[1;32m$config{MAX_CHANNE}\033[0m] -> ";
-  chomp($var = <STDIN>);
-  if ($var eq "") { $var = $config{MAX_CHANNE}; }
-  if ($var =~ /^\d+$/) {
-    # We don't care what the number is, set it and be on our way.
-    $config{MAX_CHANNE} = $var;
-    $continue = 1;
-    print "\n";
-  } else {
-    print "You must enter a number in this field. Please try again.\n\n";
-  }
+       print "What is the maximum number of channels a normal user may join at any one time?\n";
+       print "[\033[1;32m$config{MAX_CHANNE}\033[0m] -> ";
+       chomp($var = <STDIN>);
+       if ($var eq "") {
+               $var = $config{MAX_CHANNE};
+       }
+       if ($var =~ /^\d+$/) {
+               # We don't care what the number is, set it and be on our way.
+               $config{MAX_CHANNE} = $var;
+               $continue = 1;
+               print "\n";
+       } else {
+               print "You must enter a number in this field. Please try again.\n\n";
+       }
 }
 
 $continue = 0;
 while (!$continue) {
-  print "What is the maximum number of channels an oper may join at any one time?\n";
-  print "[\033[1;32m$config{MAX_OPERCH}\033[0m] -> ";
-  chomp($var = <STDIN>);
-  if ($var eq "") { $var = $config{MAX_OPERCH}; }
-  if ($var =~ /^\d+$/) {
-    # We don't care what the number is, set it and be on our way.
-    $config{MAX_OPERCH} = $var;
-    $continue = 1;
-    print "\n";
- }
+       print "What is the maximum number of channels an oper may join at any one time?\n";
+       print "[\033[1;32m$config{MAX_OPERCH}\033[0m] -> ";
+       chomp($var = <STDIN>);
+       if ($var eq "") {
+               $var = $config{MAX_OPERCH};
+       }
+       if ($var =~ /^\d+$/) {
+               # We don't care what the number is, set it and be on our way.
+               $config{MAX_OPERCH} = $var;
+               $continue = 1;
+               print "\n";
+       }
 }
 
 $continue = 0;
 while (!$continue) {
-  print "What is the maximum number of mode changes in one line?\n";
-  print "[\033[1;32m$config{MAXI_MODES}\033[0m] -> ";
-  chomp($var = <STDIN>);
-  if ($var eq "") { $var = $config{MAXI_MODES}; }
-  if ($var =~ /^\d+$/) {
-    # We don't care what the number is, set it and be on our way.
-    $config{MAXI_MODES} = $var;
-    $continue = 1;
-    print "\n";
-  } else {
-    print "You must enter a number in this field. Please try again.\n\n";
-  }
+       print "What is the maximum number of mode changes in one line?\n";
+       print "[\033[1;32m$config{MAXI_MODES}\033[0m] -> ";
+       chomp($var = <STDIN>);
+       if ($var eq "") {
+               $var = $config{MAXI_MODES};
+       }
+       if ($var =~ /^\d+$/) {
+               # We don't care what the number is, set it and be on our way.
+               $config{MAXI_MODES} = $var;
+               $continue = 1;
+               print "\n";
+       } else {
+               print "You must enter a number in this field. Please try again.\n\n";
+       }
 }
 
 $continue = 0;
 while (!$continue) {
-  print "What is the maximum length of an ident (username)?\n";
-  print "[\033[1;32m$config{MAX_IDENT}\033[0m] -> ";
-  chomp($var = <STDIN>);
-  if ($var eq "") { $var = $config{MAX_IDENT}; }
-  if ($var =~ /^\d+$/) {
-    # We don't care what the number is, set it and be on our way.
-    $config{MAX_IDENT} = $var;
-    $continue = 1;
-    print "\n";
-  } else {
-    print "You must enter a number in this field. Please try again.\n\n";
-  }
+       print "What is the maximum length of an ident (username)?\n";
+       print "[\033[1;32m$config{MAX_IDENT}\033[0m] -> ";
+       chomp($var = <STDIN>);
+       if ($var eq "") {
+               $var = $config{MAX_IDENT};
+       }
+       if ($var =~ /^\d+$/) {
+               # We don't care what the number is, set it and be on our way.
+               $config{MAX_IDENT} = $var;
+               $continue = 1;
+               print "\n";
+       } else {
+               print "You must enter a number in this field. Please try again.\n\n";
+       }
 }
 
 $continue = 0;
 while (!$continue) {
-  print "What is the maximum length of a quit message?\n";
-  print "[\033[1;32m$config{MAX_QUIT}\033[0m] -> ";
-  chomp($var = <STDIN>);
-  if ($var eq "") { $var = $config{MAX_QUIT}; }
-  if ($var =~ /^\d+$/) {
-    # We don't care what the number is, set it and be on our way.
-    $config{MAX_QUIT} = $var;
-    $continue = 1;
-    print "\n";
-  } else {
-    print "You must enter a number in this field. Please try again.\n\n";
-  }
+       print "What is the maximum length of a quit message?\n";
+       print "[\033[1;32m$config{MAX_QUIT}\033[0m] -> ";
+       chomp($var = <STDIN>);
+       if ($var eq "") {
+               $var = $config{MAX_QUIT};
+       }
+       if ($var =~ /^\d+$/) {
+               # We don't care what the number is, set it and be on our way.
+               $config{MAX_QUIT} = $var;
+               $continue = 1;
+               print "\n";
+       } else {
+               print "You must enter a number in this field. Please try again.\n\n";
+       }
 }
 
 $continue = 0;
 while (!$continue) {
-  print "What is the maximum length of a channel topic?\n";
-  print "[\033[1;32m$config{MAX_TOPIC}\033[0m] -> ";
-  chomp($var = <STDIN>);
-  if ($var eq "") { $var = $config{MAX_TOPIC}; }
-  if ($var =~ /^\d+$/) {
-    # We don't care what the number is, set it and be on our way.
-    $config{MAX_TOPIC} = $var;
-    $continue = 1;
-    print "\n";
-  } else {
-    print "You must enter a number in this field. Please try again.\n\n";
-  }
+       print "What is the maximum length of a channel topic?\n";
+       print "[\033[1;32m$config{MAX_TOPIC}\033[0m] -> ";
+       chomp($var = <STDIN>);
+       if ($var eq "") {
+               $var = $config{MAX_TOPIC};
+       }
+       if ($var =~ /^\d+$/) {
+               # We don't care what the number is, set it and be on our way.
+               $config{MAX_TOPIC} = $var;
+               $continue = 1;
+               print "\n";
+       } else {
+               print "You must enter a number in this field. Please try again.\n\n";
+       }
 }
 
 $continue = 0;
 while (!$continue) {
-  print "What is the maximum length of a kick message?\n";
-  print "[\033[1;32m$config{MAX_KICK}\033[0m] -> ";
-  chomp($var = <STDIN>);
-  if ($var eq "") { $var = $config{MAX_KICK}; }
-  if ($var =~ /^\d+$/) {
-    # We don't care what the number is, set it and be on our way.
-    $config{MAX_KICK} = $var;
-    $continue = 1;
-    print "\n";
-  } else {
-    print "You must enter a number in this field. Please try again.\n\n";
-  }
+       print "What is the maximum length of a kick message?\n";
+       print "[\033[1;32m$config{MAX_KICK}\033[0m] -> ";
+       chomp($var = <STDIN>);
+       if ($var eq "") {
+               $var = $config{MAX_KICK};
+       }
+       if ($var =~ /^\d+$/) {
+               # We don't care what the number is, set it and be on our way.
+               $config{MAX_KICK} = $var;
+               $continue = 1;
+               print "\n";
+       } else {
+               print "You must enter a number in this field. Please try again.\n\n";
+       }
 }
 
 $continue = 0;
 while (!$continue) {
-  print "What is the maximum length of a GECOS (real name) field?\n";
-  print "[\033[1;32m$config{MAX_GECOS}\033[0m] -> ";
-  chomp($var = <STDIN>);
-  if ($var eq "") { $var = $config{MAX_GECOS}; }
-  if ($var =~ /^\d+$/) {
-    # We don't care what the number is, set it and be on our way.
-    $config{MAX_GECOS} = $var;
-    $continue = 1;
-    print "\n";
-  } else {
-    print "You must enter a number in this field. Please try again.\n\n";
-  }
+       print "What is the maximum length of a GECOS (real name) field?\n";
+       print "[\033[1;32m$config{MAX_GECOS}\033[0m] -> ";
+       chomp($var = <STDIN>);
+       if ($var eq "") {
+               $var = $config{MAX_GECOS};
+       }
+       if ($var =~ /^\d+$/) {
+               # We don't care what the number is, set it and be on our way.
+               $config{MAX_GECOS} = $var;
+               $continue = 1;
+               print "\n";
+       } else {
+               print "You must enter a number in this field. Please try again.\n\n";
+       }
 }
 
 $continue = 0;
 while (!$continue) {
-  print "What is the maximum length of an away message?\n";
-  print "[\033[1;32m$config{MAX_AWAY}\033[0m] -> ";
-  chomp($var = <STDIN>);
-  if ($var eq "") { $var = $config{MAX_AWAY}; }
-  if ($var =~ /^\d+$/) {
-    # We don't care what the number is, set it and be on our way.
-    $config{MAX_AWAY} = $var;
-    $continue = 1;
-    print "\n";
-  } else {
-    print "You must enter a number in this field. Please try again.\n\n";
-  }
+       print "What is the maximum length of an away message?\n";
+       print "[\033[1;32m$config{MAX_AWAY}\033[0m] -> ";
+       chomp($var = <STDIN>);
+       if ($var eq "") {
+               $var = $config{MAX_AWAY};
+       }
+       if ($var =~ /^\d+$/) {
+               # We don't care what the number is, set it and be on our way.
+               $config{MAX_AWAY} = $var;
+               $continue = 1;
+               print "\n";
+       } else {
+               print "You must enter a number in this field. Please try again.\n\n";
+       }
 }
 
 # Code Optimisation
@@ -560,21 +596,21 @@ As always, if you are unsure, just press enter and accept the default.\n\n";
 print "[\033[1;32m$config{OPTIMITEMP}\033[0m] -> ";
 chomp($var = <STDIN>);
 if ($var eq "") {
-  $var = $config{OPTIMITEMP};
+       $var = $config{OPTIMITEMP};
 }
 
 if ($var eq "1") {
-  $config{OPTIMITEMP} = 1;
-  $config{OPTIMISATI} = "-O";
+       $config{OPTIMITEMP} = 1;
+       $config{OPTIMISATI} = "-O";
 } elsif ($var eq "2") {
-  $config{OPTIMITEMP} = 2;
-  $config{OPTIMISATI} = "-O2";
+       $config{OPTIMITEMP} = 2;
+       $config{OPTIMISATI} = "-O2";
 } elsif ($var eq "3") {
-  $config{OPTIMITEMP} = 3;
-  $config{OPTIMISATI} = "-O3";
+       $config{OPTIMITEMP} = 3;
+       $config{OPTIMISATI} = "-O3";
 } else {
-  $config{OPTIMITEMP} = 0;
-  $config{OPTIMISATI} = "-g";
+       $config{OPTIMITEMP} = 0;
+       $config{OPTIMISATI} = "-g";
 }
 
 print "\n\033[1;32mPre-build configuration is complete!\033[0m\n\n";
@@ -603,7 +639,15 @@ print "\033[0mGnuTLS Support:\033[1;32m\t\t\t$config{USE_GNUTLS}\033[0m\n";
 print "\033[0mOpenSSL Support:\033[1;32m\t\t$config{USE_OPENSSL}\033[0m\n\n";
 
 if ($config{USE_GNUTLS} eq "y") {
-       system("ln -s src/modules/extra/m_ssl_gnutls.cpp src/modules/m_ssl_gnutls.cpp");
+       $failed = 0;
+       open(TMP, "<src/modules/m_ssl_gnutls.cpp") or $failed = 1;
+       close(TMP);
+       if ($failed) {
+               print "Symlinking src/modules/m_ssl_gnutls.cpp from extra/\n";
+               chdir("src/modules");
+               system("ln -s extra/m_ssl_gnutls.cpp");
+               chdir("../..");
+       }
        getmodules();
        $failed = 0;
        open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
@@ -629,7 +673,15 @@ if ($config{USE_GNUTLS} eq "y") {
                print "SSL Certificates found, skipping.\n\n"
        }       
 } elsif ($config{USE_OPENSSL} eq "y") {
-       system("ln -s src/modules/extra/m_ssl_openssl.cpp src/modules/m_ssl_openssl.cpp");
+       $failed = 0;
+       open(TMP, "<src/modules/m_ssl_openssl.cpp") or $failed = 1;
+       close(TMP);
+       if ($failed) {
+               print "Symlinking src/modules/m_ssl_openssl.cpp from extra/\n";
+               chdir("src/modules");
+               system("ln -s extra/m_ssl_openssl.cpp");
+               chdir("../..");
+       }
        getmodules();
        $failed = 0;
        open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1;
@@ -688,33 +740,30 @@ FOO2
 #                              HELPER FUNCTIONS                                #
 ################################################################################
 sub getcache {
-  # Retrieves the .config.cache file, and loads values into the main config hash.
-  open(CACHE, ".config.cache") or return undef;
-  while (<CACHE>) {
-    chomp;
-
-    # Ignore Blank lines, and comments..
-    next if /^\s*$/;
-    next if /^\s*#/;
-
-    my ($key, $value) = split("=", $_);
-    $value =~ /^\"(.*)\"$/;
-    # Do something with data here!
-    $config{$key} = $1;
-  }
-  close(CONFIG);
-  return "true";
+       # Retrieves the .config.cache file, and loads values into the main config hash.
+       open(CACHE, ".config.cache") or return undef;
+       while (<CACHE>) {
+               chomp;
+               # Ignore Blank lines, and comments..
+               next if /^\s*$/;
+               next if /^\s*#/;
+               my ($key, $value) = split("=", $_);
+               $value =~ /^\"(.*)\"$/;
+               # Do something with data here!
+               $config{$key} = $1;
+       }
+       close(CONFIG);
+       return "true";
 }
 
 sub makecache {
-  # Dump the contents of %config
-  print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
-  open(FILEHANDLE, ">.config.cache");
-  foreach $key (keys %config)
-  {
-    print FILEHANDLE "$key=\"$config{$key}\"\n";
-  }
-  close(FILEHANDLE);
+       # Dump the contents of %config
+       print "Writing \033[1;32mcache file\033[0m for future ./configures ...\n";
+       open(FILEHANDLE, ">.config.cache");
+       foreach $key (keys %config) {
+               print FILEHANDLE "$key=\"$config{$key}\"\n";
+       }
+       close(FILEHANDLE);
 }
 
 sub dir_check {
@@ -768,47 +817,47 @@ sub dir_check {
 }
 
 sub getosflags {
-  if ($config{OSNAME} =~ /BSD$/) {
-    $config{LDLIBS} = "-Ldl -lstdc++";
-    $config{FLAGS}  = "-fPIC -frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
-    $config{MAKEPROG} = "gmake";
-    if ($config{OSNAME} eq "OpenBSD") {
-       chomp($foo = `eg++ -dumpversion | cut -c 1`);
-       # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
-       # if theyre not running this, configure lets the build continue but they probably wont manage to
-       # compile as this standard version is 2.95.3!
-       if ($foo ne "") {
-               $config{CC} = "eg++";
-               chomp($config{GCCVER}       = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change
-               chomp($config{GCC34}        = `eg++ -dumpversion | cut -c 3`); # the compiler path
-       }
-    }
-  } else {
-    $config{LDLIBS} = "-ldl -lstdc++";
-    $config{FLAGS}  = "-fPIC -frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
-    $config{MAKEPROG} = "make";
-    if ($config{OSNAME} =~ /CYGWIN/) {
-       $config{FLAGS}  = "-frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
-       $config{LDLIBS} = "";
-       $config{MAKEPROG} = "/usr/bin/make";
-       $config{MAKEORDER} = "ircd mods config bininst";
-    } elsif ($config{OSNAME} eq "CYG-STATIC") {
-       $config{FLAGS} = "-frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
-       $config{LDLIBS} = "";
-       $config{MAKEPROG} = "/usr/bin/make";
-       $config{MAKEORDER} = "mods ircd config bininst";
-       $config{STATICLIBS} = "modules/mods.a";
-       $config{STATIC_LINK} = "yes";
-    }
-  }
-  if ($config{OSNAME} =~ /SunOS/) {
-    # solaris/sunos needs these
-    # socket = bsd sockets api
-    # nsl = dns stuff
-    # rt = POSIX realtime extensions
-    # resolv = inet_aton only (why isnt this in nsl?!)
-    $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv";
-  }
+       if ($config{OSNAME} =~ /BSD$/) {
+               $config{LDLIBS} = "-Ldl -lstdc++";
+               $config{FLAGS}  = "-fPIC -frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
+               $config{MAKEPROG} = "gmake";
+               if ($config{OSNAME} eq "OpenBSD") {
+                       chomp($foo = `eg++ -dumpversion | cut -c 1`);
+                       # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
+                       # if theyre not running this, configure lets the build continue but they probably wont manage to
+                       # compile as this standard version is 2.95.3!
+                       if ($foo ne "") {
+                               $config{CC} = "eg++";
+                               chomp($config{GCCVER}       = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change
+                               chomp($config{GCC34}        = `eg++ -dumpversion | cut -c 3`); # the compiler path
+                       }
+               }
+       } else {
+               $config{LDLIBS} = "-ldl -lstdc++";
+               $config{FLAGS}  = "-fPIC -frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
+               $config{MAKEPROG} = "make";
+               if ($config{OSNAME} =~ /CYGWIN/) {
+                       $config{FLAGS}  = "-frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
+                       $config{LDLIBS} = "";
+                       $config{MAKEPROG} = "/usr/bin/make";
+                       $config{MAKEORDER} = "ircd mods";
+               } elsif ($config{OSNAME} eq "CYG-STATIC") {
+                       $config{FLAGS} = "-frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}";
+                       $config{LDLIBS} = "";
+                       $config{MAKEPROG} = "/usr/bin/make";
+                       $config{MAKEORDER} = "mods ircd";
+                       $config{STATICLIBS} = "modules/mods.a";
+                       $config{STATIC_LINK} = "yes";
+               }
+       }
+       if ($config{OSNAME} =~ /SunOS/) {
+               # solaris/sunos needs these
+               # socket = bsd sockets api
+               # nsl = dns stuff
+               # rt = POSIX realtime extensions
+               # resolv = inet_aton only (why isnt this in nsl?!)
+               $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv";
+       }
 }
 
 sub is_dir {
@@ -838,12 +887,32 @@ sub getmodules {
        closedir(DIRHANDLE);
 }
 
-sub writefiles {
+sub getrevision {
+       if ($no_svn) {
+               return "0";
+       }
+       my $data = `svn info`;
+       if ($data eq "") {
+               $no_svn = 1;
+               $rev = "0";
+               return $rev;
+       }
+       $data =~ /Revision: (\d+)/;
+       my $rev = $1;
+       if (!defined($rev)) {
+               $rev = "0";
+       }
+       return $rev;
+}
 
+sub writefiles {
        print "Writing \033[1;32minspircd_config.h\033[0m\n";
        # First File.. inspircd_config.h
        chomp(my $incos = `uname -n -s -r`);
        chomp(my $version = `sh ./src/version.sh`);
+        chomp(my $revision = getrevision());
+       $version = "$version(r$revision)";
+       chomp(my $revision2 = getrevision());
        open(FILEHANDLE, ">include/inspircd_config.h");
        my $NL = $config{NICK_LENGT}+1;
        my $CL = $config{CHAN_LENGT}+1;
@@ -855,6 +924,7 @@ sub writefiles {
 #define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
 #define MOD_PATH "$config{MODULE_DIR}"
 #define VERSION "$version"
+#define REVISION "$revision2"
 #define MAXCLIENTS $config{MAX_CLIENT}
 #define MAX_DESCRIPTORS $config{MAX_DESCRIPTORS}
 #define NICKMAX $NL
@@ -1134,7 +1204,6 @@ EOCHEESE
                        open(MUNGED,">src/modules/m_".$i."_static.cpp") or die("Could not create m_".$i."_static.cpp");
                        while (chomp($a = <MODULE>)) { 
                                $a =~ s/init_module/$i\_init/g;
-                               $a =~ s/Srv/$i\Srv/g;
                                print MUNGED "$a\n";
                        }
                        close(MODULE);
@@ -1182,6 +1251,7 @@ EOF
        my $modules = "";
        my $cmflags = "";
        my $liflags = "";
+       my $crud = "";
 
        foreach $i (@modlist) {
        ###
@@ -1193,14 +1263,14 @@ EOF
 m_$i.so: m_$i.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h ../../include/inspircd_config.h ../../include/inspircd.h ../../include/inspircd_io.h
        \$(CC) -pipe -I../../include \$(FLAGS) $cmflags -export-dynamic -c m_$i.cpp
        \$(CC) \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o $extra
-       \@-rm -f \$(MODPATH)/m_$i.so
-       install -v -m 0700 m_$i.so \$(MODPATH)
 
 EOCHEESE
+       $crud = $crud . "       \@install -v -m 0700 m_$i.so \$(MODPATH)\n";
        ###
        # End Write Entry to the MakeFile
        ###
        }
+       print FILEHANDLE "modinst:\n    \@echo \"Installing modules...\"\n" . $crud;
 }
 
 
@@ -1245,20 +1315,20 @@ EOM
 
        if ($config{OSNAME} =~ /CYGWIN/) {
                print FH <<EOM;
-all: aes.o command_parse.o cull_list.o userprocess.o socketengine.o socket.o hashcomp.o channels.o mode.o xline.o inspstring.o dns.o base.o inspircd_io.o message.o $cmdobjs commands.o dnsqueue.o dynamic.o users.o modules.o wildcard.o helperfuncs.o inspircd.exe
+all: timer.o aes.o command_parse.o cull_list.o userprocess.o socketengine.o socket.o hashcomp.o channels.o mode.o xline.o inspstring.o dns.o base.o inspircd_io.o message.o $cmdobjs commands.o dnsqueue.o dynamic.o users.o modules.o wildcard.o helperfuncs.o inspircd.exe
 
 inspircd.exe: inspircd.dll.a
        \$(CC) -o \$@ \$^
 
-inspircd.dll inspircd.dll.a: inspircd.o channels.o mode.o xline.o inspstring.o dns.o base.o inspircd_io.o message.o $cmdobjs  commands.o dnsqueue.o dynamic.o users.o modules.o wildcard.o helperfuncs.o hashcomp.o socket.o socketengine.o userprocess.o cull_list.o command_parse.o aes.o
+inspircd.dll inspircd.dll.a: inspircd.o channels.o mode.o xline.o inspstring.o dns.o base.o inspircd_io.o message.o $cmdobjs  commands.o dnsqueue.o dynamic.o users.o modules.o wildcard.o helperfuncs.o hashcomp.o socket.o socketengine.o userprocess.o cull_list.o command_parse.o aes.o timer.o
        \$(CC) -shared -Wl,--out-implib=inspircd.dll.a -o inspircd.dll \$^
 EOM
        } else {
                print FH <<EOM;
-all: aes.o command_parse.o cull_list.o userprocess.o socketengine.o socket.o hashcomp.o channels.o mode.o xline.o inspstring.o dns.o base.o inspircd_io.o message.o $cmdobjs commands.o dnsqueue.o dynamic.o users.o modules.o wildcard.o helperfuncs.o \$(MODULES) inspircd.exe
+all: timer.o aes.o command_parse.o cull_list.o userprocess.o socketengine.o socket.o hashcomp.o channels.o mode.o xline.o inspstring.o dns.o base.o inspircd_io.o message.o $cmdobjs commands.o dnsqueue.o dynamic.o users.o modules.o wildcard.o helperfuncs.o \$(MODULES) inspircd.exe
 
 inspircd.exe: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h ../include/base.h
-       \$(CC) -I../include \$(FLAGS) inspircd.cpp -o inspircd.exe \$(LDLIBS) channels.o mode.o xline.o inspstring.o dns.o base.o inspircd_io.o message.o $cmdobjs commands.o dnsqueue.o dynamic.o users.o modules.o wildcard.o helperfuncs.o hashcomp.o socket.o socketengine.o userprocess.o cull_list.o command_parse.o aes.o \$(MODULES)
+       \$(CC) -I../include \$(FLAGS) inspircd.cpp -o inspircd.exe \$(LDLIBS) channels.o mode.o xline.o inspstring.o dns.o base.o inspircd_io.o message.o $cmdobjs commands.o dnsqueue.o dynamic.o users.o modules.o wildcard.o helperfuncs.o hashcomp.o socket.o socketengine.o userprocess.o cull_list.o command_parse.o aes.o timer.o \$(MODULES)
 EOM
        }
 
@@ -1330,6 +1400,9 @@ socket.o: socket.cpp ../include/base.h ../include/inspircd.h ../include/globals.
 aes.o: aes.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
        \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c aes.cpp
 
+timer.o: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
+
 EOM
        foreach my $cmd (@cmdlist) {
                print FH <<ITEM;
@@ -1372,10 +1445,10 @@ CC = im a cheezeball
 
 CXXFLAGS = -I../include \${FLAGS}
 
-all: libIRCDaes.so libIRCDcull_list.so libIRCDuserprocess.so libIRCDsocketengine.so libIRCDsocket.so libIRCDhash.so libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDio.so libIRCDmessage.so $cmdobjs libIRCDcommands.so libIRCDdnsqueue.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDcommand_parse.so inspircd
+all: libIRCDtimer.so libIRCDaes.so libIRCDcull_list.so libIRCDuserprocess.so libIRCDsocketengine.so libIRCDsocket.so libIRCDhash.so libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDio.so libIRCDmessage.so $cmdobjs libIRCDcommands.so libIRCDdnsqueue.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDcommand_parse.so inspircd
 
 inspircd: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h ../include/socket.h
-       \$(CC) -I../include -Wl,--rpath -Wl,$config{LIBRARY_DIR} \$(FLAGS) -rdynamic -L. inspircd.cpp -o inspircd \$(LDLIBS) libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDio.so libIRCDmessage.so libIRCDcommands.so libIRCDdnsqueue.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDhash.so libIRCDsocket.so libIRCDsocketengine.so libIRCDuserprocess.so libIRCDcull_list.so libIRCDcommand_parse.so libIRCDaes.so
+       \$(CC) -I../include -Wl,--rpath -Wl,$config{LIBRARY_DIR} \$(FLAGS) -rdynamic -L. inspircd.cpp -o inspircd \$(LDLIBS) libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDio.so libIRCDmessage.so libIRCDcommands.so libIRCDdnsqueue.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDhash.so libIRCDsocket.so libIRCDsocketengine.so libIRCDuserprocess.so libIRCDcull_list.so libIRCDcommand_parse.so libIRCDaes.so libIRCDtimer.so
 
 libIRCDsocketengine.so: socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h
        \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp
@@ -1465,6 +1538,10 @@ libIRCDaes.so: aes.cpp ../include/base.h ../include/inspircd.h ../include/global
        \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c aes.cpp
        \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDaes.so aes.o
 
+libIRCDtimer.so: timer.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c timer.cpp
+       \$(CC) -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDtimer.so timer.o
+
 EOM
        foreach my $cmd (@cmdlist) {
                print FH <<ITEM;