X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=configure;h=4338d29637c46918afb5b1a552507d8540d51156;hb=ea93eb64c56aad215ef3d3c342a46a92183ddc83;hp=d3e63a19ed8aed4813350179b119f5523f19d75d;hpb=73b9d0c5cb02f0ea8350de28bc3687e0af70ea0f;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/configure b/configure index d3e63a19e..4338d2963 100755 --- a/configure +++ b/configure @@ -1,333 +1,457 @@ -#!/bin/sh +#!/usr/bin/perl # InspIRCd Configuration Script # # Copyright 2003 The ChatSpike Development Team # # # -# $Id$ -# -# Some shell code based on the configure script of IRC Services. -# IRC Services is copyright (c) 1996-2002 Andrew Church. -# E-mail: +# [14:21] Brain: i know perl-fu! # +# $Id$ # ######################################## -# echo -e "\033[1;37mtest\033[0;37m" - -echo "Configuring default values..." -mkdir fdscount -echo "#include " >> fdscount/fdcounter.c -echo "#include " >> fdscount/fdcounter.c -echo "main()" >> fdscount/fdcounter.c -echo "{" >> fdscount/fdcounter.c -echo " int i;" >> fdscount/fdcounter.c -echo " int s;" >> fdscount/fdcounter.c -echo "" >> fdscount/fdcounter.c -echo " for (i = 1; i <= 10000; i++)" >> fdscount/fdcounter.c -echo " {" >> fdscount/fdcounter.c -echo " s = socket(AF_INET, SOCK_STREAM, 0);" >> fdscount/fdcounter.c -echo " if (s < 0)" >> fdscount/fdcounter.c -echo " {" >> fdscount/fdcounter.c -echo " printf(\"%i\", i + 2);" >> fdscount/fdcounter.c -echo " exit(-1);" >> fdscount/fdcounter.c -echo " }" >> fdscount/fdcounter.c -echo " }" >> fdscount/fdcounter.c -echo "}" >> fdscount/fdcounter.c - -echo "PROGS = fdcounter" >> fdscount/Makefile -echo "OBJS = fdcounter.o" >> fdscount/Makefile -echo "" >> fdscount/Makefile -echo "CC = gcc" >> fdscount/Makefile -echo "CXXFLAGS = -fPIC -frtti -O" >> fdscount/Makefile -echo "" >> fdscount/Makefile -echo "all : \$(PROGS)" >> fdscount/Makefile -echo "" >> fdscount/Makefile -echo "\$(PROGS): \$(OBJS)" >> fdscount/Makefile -echo " \$(CXX) -rdynamic \$^ -o \$@" >> fdscount/Makefile -echo "" >> fdscount/Makefile -echo ".PHONY: clean" >> fdscount/Makefile -echo "clean:" >> fdscount/Makefile -echo " rm -f *.o core" >> fdscount/Makefile - -cd fdscount -make -cd .. - -ME=`pwd` -PERL=`which perl` -CONFIG_DIR=$ME/conf -MODULE_DIR=$ME/modules -MAX_CLIENT=`fdscount/fdcounter` -NICK_LENGT=32 -CHAN_LENGT=64 -MAX_CHANNE=20 -MAXI_MODES=20 - -rm -rf fdscount - -if [ "$PERL" = "" ] ; then - echo "You require perl to run this program." - exit; -fi - - -OSNAME=`(uname -s) 2>/dev/null` || OSNAME="unknown" - -c="" -n="" -if [ "`eval echo -n 'a'`" = "-n a" ] ; then - c="\c" -else - n="-n" -fi - -exists () { # because some shells don't have test -e - if [ -f $1 -o -d $1 -o -p $1 -o -c $1 -o -b $1 ] ; then - return 0 - else - return 1 - fi + +$this = $ENV{PWD}; # PWD, Regardless. +@modlist = (); # Declare for Module List.. +%config = (); # Initiate Configuration Hash.. +$config{ME} = $ENV{PWD}; # Present Working Directory +$config{CONFIG_DIR} = $ENV{PWD}."/conf"; # Configuration Directory +$config{MODULE_DIR} = $ENV{PWD}."/modules"; # Modules Directory +$config{BINARY_DIR} = $ENV{PWD}."/bin"; # Binary Directory +$config{OPTIMITEMP} = "0"; # Default Optimisation Value +$config{OPTIMISATI} = "-g"; # Optimisation Flag +$config{NICK_LENGT} = "32"; # Default Nick Length +$config{CHAN_LENGT} = "64"; # Default Channel Name Length +$config{MAX_CHANNE} = "20"; # Default Max. Channels per user.. +$config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once. +$config{HAS_STRLCPY} = "false"; # strlcpy Check. +chomp($config{MAX_CLIENT_T} = `sh -c \"ulimit -n\"`); # 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{OSNAME} = `uname -s`); # Operating System Name + +if (!$config{OSNAME}) { + $config{OSNAME} = "Unknown"; # For use when uname fails. +} + +if (!$config{MAX_CLIENT_T}) { + $config{MAX_CLIENT_T} = 1024; # Set a reasonable 'Default' + $fd_scan_fail = "true"; # Used Later +} + +# Get and Set some important vars.. +getosflags(); +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 "-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"; + writefiles(); + print "Complete.\n"; + exit; + } +} + +getcache(); # Load the config.cache file. + +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}; +} + +# Perform the strlcpy() test.. +open(STRLCPY, ">.test.cpp"); +print STRLCPY "#include +#include +int main() { char a[10]; char b[10]; strlcpy(a,b,10); printf(\"%d\\n\",9); }\n"; +close(STRLCPY); + +# Build the Binary.. +system("g++ -o .test .test.cpp 2>&1"); + +# Was the build succesful? +if (-e ".test") { + $config{HAS_STRLCPY} = "true"; + system("rm -f .test .test.cpp"); +} + +################################################################################ +# BEGIN INTERACTIVE PART # +################################################################################ + +# Clear the Screen.. +system("clear"); +# Display Splash Logo.. +show_splash(); +chomp($wholeos = `uname -mnr`); + +# Display Introduction Message.. +print " +Welcome to the InspIRCd Configuration program! + +*** If you are unsure of any of these values, leave it blank for *** +*** standard settings that will work, and your server will run *** +*** using them. If you are running this server as part of a *** +*** larger network, you must consult with your network admins *** +*** for the proper values to use, or server links will be unstable! *** + +Press \033[1m\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"; + +# Directory Settings.. +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"); + +# 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 = ); + 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 = ); + 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 = ); + 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"; + } +} + +my $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 = ); + 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"; + } +} + +# Code Optimisation +print "Enter the Level Of Binary optimisation. This is a number between 0 and 3 (inclusive) +The InspIRCd Team will _NOT_ support any bug reports above 0. +Also note, the IRCd behaviour will be different depending on this value. +Please read the documentation for more information. + +The Higher the number, the more optimised your binary will be. This value will default to 0 +If you either a) Dont enter a number, or b) Enter a value outside the range.\n"; +print "[\033[1;32m0\033[0m] -> "; +chomp($var = ); +if ($var == 1) { + $config{OPTIMITEMP} = 1; + $config{OPTIMISATI} = "-O"; +} elsif ($var == 2) { + $config{OPTIMITEMP} = 2; + $config{OPTIMISATI} = "-O2"; +} elsif ($var == 3) { + $config{OPTIMITEMP} = 3; + $config{OPTIMISATI} = "-O3"; +} else { + $config{OPTIMITEMP} = 0; + $config{OPTIMISATI} = "-g"; +} + +print "\n\033[1;32mPre-build configuration is complete!\033[0m\n\n"; +print "\033[0mConfig path:\033[1;32m\t\t\t$config{CONFIG_DIR}\n"; +print "\033[0mModule path:\033[1;32m\t\t\t$config{MODULE_DIR}\n"; +print "\033[0mMax connections:\033[1;32m\t\t$config{MAX_CLIENT}\n"; +print "\033[0mMax User Channels\033[1;32m\t\t$config{MAX_CHANNE}\n"; +print "\033[0mMax nickname length:\033[1;32m\t\t$config{NICK_LENGT}\n"; +print "\033[0mMax channel length:\033[1;32m\t\t$config{CHAN_LENGT}\n"; +print "\033[0mMax mode length:\033[1;32m\t\t$config{MAXI_MODES}\n"; +print "\033[0mGCC Version Found:\033[1;32m\t\t$config{GCCVER}.$config{GCC34}\n"; +print "\033[0mOptimatizaton Flag:\033[1;32m\t\t$config{OPTIMISATI}\033[0m\n\n"; + +makecache(); +writefiles(); + +print "\n\n"; +print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n"; +print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n"; + +################################################################################ +# 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 () { + 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); +} + +sub dir_check { + my ($desc, $hash_key) = @_; + my $complete = 0; + while (!$complete) { + print "In what directory $desc?\n"; + print "[\033[1;32m$config{$hash_key}\033[0m] -> "; + chomp($var = ); + if ($var eq "") { $var = $config{$hash_key}; } + if (substr($var,0,1) ne "/") + { + # Assume relative Path was given.. fill in the rest. + $var = $this . "/$var"; + } + if (substr($var, 0, 1) eq "~") { + # Convert it to a full path.. + + $var = $this . substr(1,0); + } + if (! -e $var) { + print "$var does not exist. Create it?\n[\033[1;32my\033[0m] "; + chomp($tmp = ); + if (($tmp eq "") || ($tmp = "y")) { + # Attempt to Create the Dir.. + $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256; + if ($chk != 0) { + print "Unable to create directory. ($var)\n\n"; + # Restart Loop.. + next; + } + } else { + # They said they don't want to create, and we can't install there. + print "\n\n"; + next; + } + } else { + if (!is_dir($var)) { + # Target exists, but is not a directory. + print "File $var exists, but is not a directory.\n\n"; + next; + } + } + # Either Dir Exists, or was created fine. + $config{$hash_key} = $var; + $complete = 1; + print "\n"; + } +} + +sub getosflags { + if ($config{OSNAME} eq "FreeBSD") { + $config{LDLIBS} = "-Ldl"; + $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Woverloaded-virtual -g"; + $config{MAKEPROG} = "gmake"; + } else { + $config{LDLIBS} = "-ldl"; + $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Woverloaded-virtual -g"; + $config{MAKEPROG} = "make"; + } +} + +sub is_dir { + my ($path) = @_; + if (chdir($path)) { + chdir($this); + return 1; + } else { + # Just in case.. + chdir($this); + return 0; + } +} + +sub getmodules { + my $i = 0; + opendir(DIRHANDLE, "src/modules"); + foreach $name (sort readdir(DIRHANDLE)) { + if ($name =~ /^m_(.+)\.cpp$/) + { + $modlist[$i++] = $1; + } + } + closedir(DIRHANDLE); } -clear -echo -e "'\033[1;33m####\033[0;37m:'\033[1;33m##\033[0;37m::: \033[1;33m##\033[0;37m::'\033[1;33m######\033[0;37m::'\033[1;33m########\033[0;37m::'\033[1;33m####\033[0;37m:'\033[1;33m########\033[0;37m:::'\033[1;33m######\033[0;37m::'\033[1;33m########\033[0;37m::" -echo -e ". \033[1;33m##\033[0;37m:: \033[1;33m###\033[0;37m:: \033[1;33m##\033[0;37m:'\033[1;33m##\033[0;37m... \033[1;33m##\033[0;37m: \033[1;33m##\033[0;37m.... \033[1;33m##\033[0;37m:. \033[1;33m##\033[0;37m:: \033[1;33m##\033[0;37m.... \033[1;33m##\033[0;37m:'\033[1;33m##\033[0;37m... \033[1;33m##\033[0;37m: \033[1;33m##\033[0;37m.... \033[1;33m##\033[0;37m:" -echo -e ": \033[1;33m##\033[0;37m:: \033[1;33m####\033[0;37m: \033[1;33m##\033[0;37m: \033[1;33m##\033[0;37m:::..:: \033[1;33m##\033[0;37m:::: \033[1;33m##\033[0;37m:: \033[1;33m##\033[0;37m:: \033[1;33m##\033[0;37m:::: \033[1;33m##\033[0;37m: \033[1;33m##\033[0;37m:::..:: \033[1;33m##\033[0;37m:::: \033[1;33m##\033[0;37m:" -echo -e ": \033[1;33m##\033[0;37m:: \033[1;33m##\033[0;37m \033[1;33m##\033[0;37m \033[1;33m##\033[0;37m:. \033[1;33m######\033[0;37m:: \033[1;33m########\033[0;37m::: \033[1;33m##\033[0;37m:: \033[1;33m########\033[0;37m:: \033[1;33m##\033[0;37m::::::: \033[1;33m##\033[0;37m:::: \033[1;33m##\033[0;37m:" -echo -e ": \033[1;33m##\033[0;37m:: \033[1;33m##\033[0;37m. \033[1;33m####\033[0;37m::..... \033[1;33m##\033[0;37m: \033[1;33m##\033[0;37m.....:::: \033[1;33m##\033[0;37m:: \033[1;33m##\033[0;37m.. \033[1;33m##\033[0;37m::: \033[1;33m##\033[0;37m::::::: \033[1;33m##\033[0;37m:::: \033[1;33m##\033[0;37m:" -echo -e ": \033[1;33m##\033[0;37m:: \033[1;33m##\033[0;37m:. \033[1;33m###\033[0;37m:'\033[1;33m##\033[0;37m::: \033[1;33m##\033[0;37m: \033[1;33m##\033[0;37m::::::::: \033[1;33m##\033[0;37m:: \033[1;33m##\033[0;37m::. \033[1;33m##\033[0;37m:: \033[1;33m##\033[0;37m::: \033[1;33m##\033[0;37m: \033[1;33m##\033[0;37m:::: \033[1;33m##\033[0;37m:" -echo -e "'\033[1;33m####\033[0;37m: \033[1;33m##\033[0;37m::. \033[1;33m##\033[0;37m:. \033[1;33m######\033[0;37m:: \033[1;33m##\033[0;37m::::::::'\033[1;33m####\033[0;37m: \033[1;33m##\033[0;37m:::. \033[1;33m##\033[0;37m:. \033[1;33m######\033[0;37m:: \033[1;33m########\033[0;37m::" -echo -e "\033[0;37m\033[0;37m....::..::::..:::......:::..:::::::::....::..:::::..:::......:::........:::" -echo "" -echo -e "\033[1;37mWelcome to the InspIRCd Configuration program!" -echo "" -echo "*** If you are unsure of any of these values, leave it blank for ***" -echo "*** standard settings that will work, and your server will run ***" -echo "*** using them. If you are running this server as part of a ***" -echo "*** larger network, you must consult with your network admins ***" -echo "*** for the proper values to use, or server links will be unstable! ***" -echo -e "\033[0;37m" -echo -e "Press \033[1;37m\033[0;37m to accept the default for any option, or enter" -echo -e "a new value. Please note: You will \033[1;37mHAVE\033[0;37m to read the docs" -echo -e "dir, otherwise you won't have a config file!" -echo "" -echo -e "Your operating system is: \033[1;37m$OSNAME\033[0;37m (`uname -mnr`), fdmax: $MAX_CLIENT" -echo "" - -############################################################################# - - ok=0 - asked=1 - echo "In what directory are the configuration files?" - while [ $ok -eq 0 ] ; do - echo -e $n "[\033[1;32m$CONFIG_DIR\033[0;37m] -> $c" - if read INPUT ; then : ; else echo "" ; exit 1 ; fi - if [ ! "$INPUT" ] ; then - INPUT=$CONFIG_DIR - default=1 - fi - if echo "$INPUT" | grep -q \[\'\"\\\] ; then - echo 'Please use a pathname without the characters: '\'' " \' - elif [ ! "$NO_DIR_CHECK" -a ! -d "$INPUT" ] ; then - if exists "$INPUT" ; then - echo "$INPUT exists, but is not a directory!" - else - echo "$INPUT does not exist. Create it?" - echo -e $n "[\033[1;32my\033[0;37m] $c" - read YN - if [ "$YN" != "n" ] ; then - if mkdir -p "$INPUT" ; then - ok=1 - fi - fi - fi - else - ok=1 - fi - done - CONFIG_DIR=$INPUT - echo "" - - -############################################################################## - - ok=0 - asked=1 - echo "In What directory are the modules to be compiled to?" - while [ $ok -eq 0 ] ; do - echo -e $n "[\033[1;32m$MODULE_DIR\033[0;37m] -> $c" - if read INPUT ; then : ; else echo "" ; exit 1 ; fi - if [ ! "$INPUT" ] ; then - INPUT=$MODULE_DIR - default=1 - fi - if echo "$INPUT" | grep -q \[\'\"\\\] ; then - echo 'Please use a pathname without the characters: '\'' " \' - elif [ ! "$NO_DIR_CHECK" -a ! -d "$INPUT" ] ; then - if exists "$INPUT" ; then - echo "$INPUT exists, but is not a directory!" - else - echo "$INPUT does not exist. Create it?" - echo -e $n "[\033[1;32my\033[0;37m] $c" - read YN - if [ "$YN" != "n" ] ; then - if mkdir -p "$INPUT" ; then - ok=1 - fi - fi - fi - else - ok=1 - fi - done - MODULE_DIR=$INPUT - echo "" - - -############################################################################### - - echo -e "Maximum number of clients at any one time (\033[1;32m1-$MAX_CLIENT\033[0;37m)?" - echo -e $n "[\033[1;32m$MAX_CLIENT\033[0;37m] -> $c" - read cc - if [ "$cc" ] ; then - if [ "$cc" > "$MAX_CLIENT" ] ; then - echo -e "Number entered was above the maximum allowed by your OS." - echo -e "Max clients was set to the highest possible value, \033[1;32m$MAX_CLIENT\033[0;37m" - else - MAX_CLIENT=$cc - fi - fi - echo "" - -############################################################################### - - echo "What is the Maximum length of nicknames?" - echo -e $n "[\033[1;32m$NICK_LENGT\033[0;37m] -> $c" - read cc - if [ "$cc" ] ; then - NICK_LENGT=$cc - fi - echo "" - -############################################################################### - - echo "What is the Maximum length of channel names?" - echo -e $n "[\033[1;32m$CHAN_LENGT\033[0;37m] -> $c" - read cc - if [ "$cc" ] ; then - CHAN_LENGT=$cc - fi - echo "" - -############################################################################### - - echo "What is the Maximum Number of channels a user may Join?" - echo -e $n "[\033[1;32m$MAX_CHANNE\033[0;37m] -> $c" - read cc - if [ "$cc" ] ; then - MAX_CHANNE_LENGT=$cc - fi - echo "" - -############################################################################### - - echo "What is the Maximum number of mode changes in one line?" - echo -e $n "[\033[1;32m$MAXI_MODES\033[0;37m] -> $c" - read cc - if [ "$cc" ] ; then - MAXI_MODES=$cc - fi - echo "" - -############################################################################### - - -echo -e "\033[1;32mPre-build configuration is complete!\033[0;37m" -echo "" -echo -e "\033[0;37mConfig path:\033[1;32m\t\t\t$CONFIG_DIR" -echo -e "\033[0;37mModule path:\033[1;32m\t\t\t$MODULE_DIR" -echo -e "\033[0;37mMax connections:\033[1;32m\t\t$MAX_CLIENT" -echo -e "\033[0;37mMax User Channels\033[1;32m\t\t$MAX_CHANNE" -echo -e "\033[0;37mMax nickname length:\033[1;32m\t\t$NICK_LENGT" -echo -e "\033[0;37mMax channel length:\033[1;32m\t\t$CHAN_LENGT" -echo -e "\033[0;37mMax mode length:\033[1;32m\t\t$MAXI_MODES" -echo -e "\033[0;37m" -echo "Writing inspircd_config.h ..." - - -echo "/* Auto generated by configure, do not modify! */" >inspircd_config.h -echo "" >>inspircd_config.h -echo "#define SYSLOG_FACILITY LOG_DAEMON" >>inspircd_config.h -echo "#define SYSLOG_LEVEL LOG_NOTICE" >>inspircd_config.h -echo "#define CONFIG_FILE \"$CONFIG_DIR/inspircd.conf\"" >>inspircd_config.h -echo "#define MOD_PATH \"$MODULE_DIR\"" >>inspircd_config.h -echo "#define VERSION \"`sh ./version.sh`\"" >>inspircd_config.h -echo "#define MAXCLIENTS $MAX_CLIENT" >>inspircd_config.h -echo "#define NICKMAX $NICK_LENGT" >>inspircd_config.h -echo "#define CHANMAX $CHAN_LENGT" >>inspircd_config.h -echo "#define MAXCHANS $MAX_CHANNE" >>inspircd_config.h -echo "#define MAXMODES $MAXI_MODES" >>inspircd_config.h -echo "#define SYSTEM \"`uname -n -s -r`\"" >>inspircd_config.h -echo "#define MAXBUF 514">>inspircd_config.h -echo "$MODULE_DIR">.modpath - -touch inspircd_config.h -rm -rf *.o core $MOD_PATH/*.so - -echo "" -echo -e "\033[1;32mDetecting modules...\033[0;37m" -MODLINE="" -for module in m_*.cpp ; do - mod=`perl -e '$a='$module';print substr($a,0,length($a)-3)'` - dmod=`perl -e '$a="'$mod'";while (length($a)<30) { $a = "$a ";}; print $a;'` - desc=`perl -e 'open (F, "<'$module'");local($/)=undef;$blah=;$blah=~/\$ModDesc(.*)\*\//;print substr($1,13,length($1));close F;'` - echo -e "Found \033[1;32m$dmod\033[0;37m$desc" - MODLINE="$mod.so $MODLINE" -done -echo "" -echo -e "Module list: \033[1;32m$MODLINE\033[0;37m" -echo "" - - - -echo -e "Writing \033[1;37m${OSNAME}\033[0;37m makefile" - -cp -f Makefile.${OSNAME} Makefile - -echo "" -echo "Do you want to compile the IRCd binaries?" -echo -e $n "[\033[1;32my\033[0;37m] $c" -read YN -if [ "$YN" != "n" ] ; then - echo "" - echo -e "\033[1;32mCompiling...\033[0;37m" - echo "" - cd $ME - make - echo "" - echo "Done!" - echo "" -else - echo "" - echo "Done!" - echo "" - echo -e "To build your server with these settings, please type '\033[1;32mmake\033[0;37m' now." - echo "" - echo -e "*** \033[1;32mRemember to edit your configuration files!!!\033[0;37m ***" - echo "" -fi - - -echo "" -echo "Do you want to run the config file maker?" -echo -e $n "[\033[1;32my\033[0;37m] $c" -read YN -if [ "$YN" != "n" ] ; then - sh makeconf -fi - -echo -e "*** \033[1;32mRemember to edit your configuration files!!!\033[0;37m ***" -echo "" +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`); + open(FILEHANDLE, "> include/inspircd_config.h"); + print FILEHANDLE < 3) { + print FILEHANDLE "#define GCC34\n"; + } + } + if ($config{HAS_STRLCPY} eq "true") { + print FILEHANDLE "#define HAS_STRLCPY\n"; + } + close(FILEHANDLE); + + # Now the Makefile.. + print "Writing \033[1;32mMakefile\033[0m\n"; + my $makefile = ""; + open(FILEHANDLE, ".Makefile.inc"); + while () { + $makefile .= $_; + } + # Create a Modules List.. + my $modules = ""; + foreach $i (@modlist) + { + $modules .= "m_".$i.".so "; + } + chomp($modules); # Remove Redundant whitespace.. + $makefile =~ s/\@MAKEPROG\@/$config{MAKEPROG}/; + $makefile =~ s/\@FLAGS\@/$config{FLAGS}/; + $makefile =~ s/\@LDLIBS\@/$config{LDLIBS}/; + $makefile =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/; + $makefile =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/; + $makefile =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/; + $makefile =~ s/\@MODULES\@/$modules/; + + open(FILEHANDLE, ">Makefile"); + print FILEHANDLE $makefile; + close(FILEHANDLE); + + # Modules Makefile.. + print "Writing \033[1;32msrc/modules/Makefile\033[0m\n"; + open(FILEHANDLE, ">src/modules/Makefile"); + print FILEHANDLE < +# Many Thanks to Andrew Church +# for assisting with making this work right. +# +# Automatically Generated by ./configure to add a modules +# please run ./configure --update + +all: \$(MODULES) + +EOF + + # Create a Modules List.. + my $modules = ""; + my $flags = ""; + foreach $i (@modlist) + { + $flags = getcompilerflags("src/modules/m_".$i.".cpp"); + print FILEHANDLE <) { + if ($_ =~ /^\/\* \$CompileFlags: (.+) \*\/$/) { + close(FLAGS); + return $1; + } + } + close(FLAGS); + return undef; +} + +sub show_splash { + print "'\033[1;33m####\033[0m:'\033[1;33m##\033[0m::: \033[1;33m##\033[0m::'\033[1;33m######\033[0m::'\033[1;33m########\033[0m::'\033[1;33m####\033[0m:'\033[1;33m########\033[0m:::'\033[1;33m######\033[0m::'\033[1;33m########\033[0m::\n"; + print ". \033[1;33m##\033[0m:: \033[1;33m###\033[0m:: \033[1;33m##\033[0m:'\033[1;33m##\033[0m... \033[1;33m##\033[0m: \033[1;33m##\033[0m.... \033[1;33m##\033[0m:. \033[1;33m##\033[0m:: \033[1;33m##\033[0m.... \033[1;33m##\033[0m:'\033[1;33m##\033[0m... \033[1;33m##\033[0m: \033[1;33m##\033[0m.... \033[1;33m##\033[0m:\n"; + print ": \033[1;33m##\033[0m:: \033[1;33m####\033[0m: \033[1;33m##\033[0m: \033[1;33m##\033[0m:::..:: \033[1;33m##\033[0m:::: \033[1;33m##\033[0m:: \033[1;33m##\033[0m:: \033[1;33m##\033[0m:::: \033[1;33m##\033[0m: \033[1;33m##\033[0m:::..:: \033[1;33m##\033[0m:::: \033[1;33m##\033[0m:\n"; + print ": \033[1;33m##\033[0m:: \033[1;33m##\033[0m \033[1;33m##\033[0m \033[1;33m##\033[0m:. \033[1;33m######\033[0m:: \033[1;33m########\033[0m::: \033[1;33m##\033[0m:: \033[1;33m########\033[0m:: \033[1;33m##\033[0m::::::: \033[1;33m##\033[0m:::: \033[1;33m##\033[0m:\n"; + print ": \033[1;33m##\033[0m:: \033[1;33m##\033[0m. \033[1;33m####\033[0m::..... \033[1;33m##\033[0m: \033[1;33m##\033[0m.....:::: \033[1;33m##\033[0m:: \033[1;33m##\033[0m.. \033[1;33m##\033[0m::: \033[1;33m##\033[0m::::::: \033[1;33m##\033[0m:::: \033[1;33m##\033[0m:\n"; + print ": \033[1;33m##\033[0m:: \033[1;33m##\033[0m:. \033[1;33m###\033[0m:'\033[1;33m##\033[0m::: \033[1;33m##\033[0m: \033[1;33m##\033[0m::::::::: \033[1;33m##\033[0m:: \033[1;33m##\033[0m::. \033[1;33m##\033[0m:: \033[1;33m##\033[0m::: \033[1;33m##\033[0m: \033[1;33m##\033[0m:::: \033[1;33m##\033[0m:\n"; + print "'\033[1;33m####\033[0m: \033[1;33m##\033[0m::. \033[1;33m##\033[0m:. \033[1;33m######\033[0m:: \033[1;33m##\033[0m::::::::'\033[1;33m####\033[0m: \033[1;33m##\033[0m:::. \033[1;33m##\033[0m:. \033[1;33m######\033[0m:: \033[1;33m########\033[0m::\n"; + print "\033[0m\033[0m....::..::::..:::......:::..:::::::::....::..:::::..:::......:::........:::\n\n"; +}