X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=configure;h=66ffb8db520f3b23e28c6eb231a40c2e1f2bc5f2;hb=33b0f56fdeabca9add41a449bc250ea6ea67bf7d;hp=d5921c8e6078c82f4e9c38d6f8997d4ba83be9ad;hpb=b8a0e4415cad04fa30d891c6855429c376c23d7a;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/configure b/configure index d5921c8e6..66ffb8db5 100755 --- a/configure +++ b/configure @@ -12,7 +12,9 @@ # ######################################## -chomp($topdir = `pwd`); +use Cwd; + +chomp($topdir = getcwd()); $this = resolve_directory($topdir); # PWD, Regardless. @modlist = (); # Declare for Module List.. %config = (); # Initiate Configuration Hash.. @@ -34,15 +36,17 @@ $config{MAX_CHANNE} = "20"; # Default Max. $config{MAX_OPERCH} = "60"; # Default Max. Channels per oper $config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once. $config{HAS_STRLCPY} = "false"; # strlcpy Check. +$config{HAS_STDINT} = "false"; # stdint.h check +$config{HAS_EXECINFO} = "0"; # execinfo.h Check. $config{USE_KQUEUE} = "y"; # kqueue enabled $config{USE_EPOLL} = "y"; # epoll enabled -$config{THREADED_DNS} = "n"; # threaded dns (experimental) +$config{THREADED_DNS} = "n"; # threaded dns $config{IPV6} = "n"; # IPv6 support (experimental) +$config{SUPPORT_IP6LINKS} = "y"; # IPv4 supporting IPv6 links (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} = `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"; # build order @@ -59,19 +63,31 @@ $no_svn = 0; $config{HAS_OPENSSL} =~ /OpenSSL (\S+) \d+ \S+ \d{4}/; $config{HAS_OPENSSL} = $1; +if ($config{GCCVER} eq "") { + print "g++ was not found! You require g++ (the GNU C++ compiler, part of GCC) to build InspIRCd!\n"; + exit; +} + # Minihack! Convert Cygwin to 'Cyg-Static' so i can # Keep my dynamic module experiments here for later # concideration! -if ($config{OSNAME} =~ /CYGWIN/) { +if ($config{OSNAME} =~ /CYGWIN/) +{ $config{OSNAME} = "CYG-STATIC"; } - -if ((!$config{OSNAME}) || ($config{OSNAME} eq "")) { +elsif($config{OSNAME} =~ /^MINGW32/) +{ + $config{OSNAME} = "MINGW32"; +} +elsif ((!$config{OSNAME}) || ($config{OSNAME} eq "")) +{ chomp($config{OSNAME} = `/usr/bin/uname`); - if ((!$config{OSNAME}) || ($config{OSNAME} eq "")){ + + if((!$config{OSNAME}) || ($config{OSNAME} eq "")) + { $config{OSNAME} = "Unknown"; - } + } } if (!$config{MAX_CLIENT_T}) { @@ -99,12 +115,32 @@ if ($arg eq "-update") { getosflags(); $has_epoll = $config{HAS_EPOLL}; $has_kqueue = $config{HAS_KQUEUE}; - writefiles(); + writefiles(1); print "Complete.\n"; 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}; + writefiles(0); + print "Complete.\n"; + exit; + } +} + + + if ($arg eq "-svnupdate") { my $fail = 0; open(FH,"<.svn/entries") or $fail = 1; @@ -120,28 +156,6 @@ if ($arg eq "-svnupdate") { 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; - } -} - print "Checking for cache from previous configure...\n"; getcache(); print "Checking operating system version...\n"; @@ -154,6 +168,17 @@ if (!$config{MAX_CLIENT}) { $config{MAX_CLIENT} = $config{MAX_CLIENT_T}; } +printf "Checking if stdint.h exists... "; +$config{HAS_STDINT} = "true"; +my $fail = 0; +open(STDINT, "); if (($tmp eq "") || ($tmp =~ /^y/i)) { # Attempt to Create the Dir.. + + system("mkdir -p \"$var\" >> /dev/null 2>&1"); $chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256; if ($chk != 0) { print "Unable to create directory. ($var)\n\n"; @@ -824,7 +881,7 @@ sub dir_check { sub getosflags { if ($config{OSNAME} =~ /BSD$/) { $config{LDLIBS} = "-Ldl -lstdc++"; - $config{FLAGS} = "-fPIC -frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}"; + $config{FLAGS} = "-fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}"; $config{MAKEPROG} = "gmake"; if ($config{OSNAME} eq "OpenBSD") { chomp($foo = `eg++ -dumpversion | cut -c 1`); @@ -833,21 +890,20 @@ sub getosflags { # 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 + chomp($config{GCCVER} = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change the compiler path } } } else { $config{LDLIBS} = "-ldl -lstdc++"; - $config{FLAGS} = "-fPIC -frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}"; + $config{FLAGS} = "-fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}"; $config{MAKEPROG} = "make"; if ($config{OSNAME} =~ /CYGWIN/) { - $config{FLAGS} = "-frtti -Wall -Woverloaded-virtual $config{OPTIMISATI}"; + $config{FLAGS} = "-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{FLAGS} = "-Wall -Woverloaded-virtual $config{OPTIMISATI}"; $config{LDLIBS} = ""; $config{MAKEPROG} = "/usr/bin/make"; $config{MAKEORDER} = "mods ircd"; @@ -855,7 +911,9 @@ sub getosflags { $config{STATIC_LINK} = "yes"; } } - if ($config{OSNAME} =~ /SunOS/) { + + if ($config{OSNAME} =~ /SunOS/) + { # solaris/sunos needs these # socket = bsd sockets api # nsl = dns stuff @@ -863,6 +921,12 @@ sub getosflags { # resolv = inet_aton only (why isnt this in nsl?!) $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv"; } + + if($config{OSNAME} eq "MINGW32") + { + # All code is position-independent on windows + $config{FLAGS} =~ s/-fPIC //; + } } sub is_dir { @@ -879,6 +943,7 @@ sub is_dir { sub getmodules { my $i = 0; + print "Detecting modules "; opendir(DIRHANDLE, "src/modules"); foreach $name (sort readdir(DIRHANDLE)) { if ($name =~ /^m_(.+)\.cpp$/) @@ -886,10 +951,12 @@ sub getmodules { $mod = $1; if ($mod !~ /_static$/) { $modlist[$i++] = $mod; + print "."; } } } closedir(DIRHANDLE); + print "\nOk, $i modules.\n"; } sub getrevision { @@ -897,6 +964,7 @@ sub getrevision { return "0"; } my $data = `svn info`; + if ($data eq "") { $no_svn = 1; $rev = "0"; @@ -911,17 +979,20 @@ sub getrevision { } sub writefiles { - print "Writing \033[1;32minspircd_config.h\033[0m\n"; + my($writeheader) = @_; # 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; - print FILEHANDLE <include/inspircd_config.h"); + my $NL = $config{NICK_LENGT}+1; + my $CL = $config{CHAN_LENGT}+1; + print FILEHANDLE < 3) { - print FILEHANDLE "#define GCC3\n"; - print FILEHANDLE "#define GCC34\n"; - } - else - { - if ($config{GCCVER} == 3) { + if ($config{OSNAME} =~ /SunOS/) { + print FILEHANDLE "#define IS_SOLARIS\n"; + } + if ($config{OSNAME} =~ /CYGWIN/) { + print FILEHANDLE "#define IS_CYGWIN\n"; + print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n"; + } + if ($config{OSNAME} eq "MINGW32") { + print FILEHANDLE "#define IS_MINGW\n"; + } + if ($config{OSNAME} eq "CYG-STATIC") { + print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n"; + } + if ($config{HAS_EXECINFO} eq "1") { + print FILEHANDLE "#define HAS_EXECINFO\n"; + } + if ($config{STATIC_LINK} eq "yes") { + print FILEHANDLE "#define STATIC_LINK\n"; + } + if ($config{GCCVER} >= 3) { print FILEHANDLE "#define GCC3\n"; - if ($config{GCC34} > 3) { - print FILEHANDLE "#define GCC34\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{THREADED_DNS} =~ /y/i) { + print FILEHANDLE "#define THREADED_DNS\n"; + } + if ($config{IPV6} =~ /y/i) { + print FILEHANDLE "#define IPV6\n"; + } + if ($config{SUPPORT_IP6LINKS} =~ /y/i) { + print FILEHANDLE "#define SUPPORT_IP6LINKS\n"; + } + my $use_hiperf = 0; + if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) { + print FILEHANDLE "#define USE_KQUEUE\n"; + $se = "socketengine_kqueue"; + $use_hiperf = 1; + } + if (($has_epoll) && ($config{USE_EPOLL} eq "y")) { + print FILEHANDLE "#define USE_EPOLL\n"; + $se = "socketengine_epoll"; + $use_hiperf = 1; + } + # user didn't choose either epoll or select for their OS. + # default them to USE_SELECT (ewwy puke puke) + if (!$use_hiperf) { + print FILEHANDLE "#define USE_SELECT\n"; + $se = "socketengine_select"; + } + print FILEHANDLE "\n#endif\n"; + close(FILEHANDLE); } - if ($config{HAS_STRLCPY} eq "true") { - print FILEHANDLE "#define HAS_STRLCPY\n"; - } - if ($config{THREADED_DNS} =~ /y/i) { - print FILEHANDLE "#define THREADED_DNS\n"; - } - if ($config{IPV6} =~/y/i) { - print FILEHANDLE "#define IPV6\n"; - } - my $use_hiperf = 0; - if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) { - print FILEHANDLE "#define USE_KQUEUE\n"; - $use_hiperf = 1; - } - if (($has_epoll) && ($config{USE_EPOLL} eq "y")) { - print FILEHANDLE "#define USE_EPOLL\n"; - $use_hiperf = 1; - } - # user didn't choose either epoll or select for their OS. - # default them to USE_SELECT (ewwy puke puke) - if (!$use_hiperf) { - print FILEHANDLE "#define USE_SELECT\n"; + + if ($writeheader) + { + open(FILEHANDLE, ">include/inspircd_se_config.h"); + print FILEHANDLE <src/modules/m_".$i."_static.cpp") or die("Could not create m_".$i."_static.cpp"); + open(MUNGED,">src/modules/.m_".$i."_static.cpp") or die("Could not create .m_".$i."_static.cpp"); while (chomp($a = )) { $a =~ s/init_module/$i\_init/g; print MUNGED "$a\n"; @@ -1273,8 +1366,8 @@ m_$i.so: m_$i.cpp ../../include/modules.h ../../include/users.h ../../include/ch \$(CC) \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o $extra EOCHEESE - $crud = $crud . " \@install -v -m 0700 m_$i.so \$(MODPATH)\n"; - ### + $crud = $crud . " install -m 0700 m_$i.so \$(MODPATH)\n"; +### # End Write Entry to the MakeFile ### } @@ -1310,8 +1403,19 @@ sub write_static_makefile { CC = im a cheezeball CXXFLAGS = -I../include \${FLAGS} +CPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* //' | grep -v svn) +RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//' | grep -v svn) EOM + +$se = "socketengine_select"; +if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) { + $se = "socketengine_kqueue"; +} +elsif (($has_epoll) && ($config{USE_EPOLL} eq "y")) { + $se = "socketengine_epoll"; +} + ### # This next section is for cygwin dynamic module builds. # Basically, what we do, is build the inspircd core as a library @@ -1323,20 +1427,20 @@ EOM if ($config{OSNAME} =~ /CYGWIN/) { print FH <src/Makefile") or die("Could not write src/Makefile"); print FH <