X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=configure;h=ef24c0dde270b5118337c861b73fe58ac6b31f54;hb=4341f4b5e6e7024b38fdc75b1acd9956fa70f604;hp=971ba6e10e12e83340e3cfc7515bd49cce72912c;hpb=51fff2f99dc4692cfbb14eda789d615280d79365;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/configure b/configure index 971ba6e10..ef24c0dde 100755 --- a/configure +++ b/configure @@ -22,7 +22,9 @@ $config{MODULE_DIR} = resolve_directory($config{ME}."/modules"); # Modul $config{BINARY_DIR} = resolve_directory($config{ME}."/bin"); # Binary Directory $config{LIBRARY_DIR} = resolve_directory($config{ME}."/lib"); # Library Directory chomp($config{HAS_GNUTLS} = `libgnutls-config --version 2>/dev/null | cut -c 1,2,3`); # GNUTLS Version. -$config{USE_GNUTLS} = "n"; # Use. +chomp($config{HAS_OPENSSL} = `openssl version 2>/dev/null`); # Openssl version +$config{USE_GNUTLS} = "n"; # Use gnutls. +$config{USE_OPENSSL} = "n"; # Use openssl. $config{OPTIMITEMP} = "0"; # Default Optimisation Value $config{OPTIMISATI} = "-g"; # Optimisation Flag $config{NICK_LENGT} = "31"; # Default Nick Length @@ -50,6 +52,17 @@ $config{MAX_KICK} = "255"; # max kick message size $config{MAX_GECOS} = "128"; # max GECOS size $config{MAX_AWAY} = "200"; # max AWAY size +$config{HAS_OPENSSL} =~ /OpenSSL (\S+) \d+ \S+ \d{4}/; +$config{HAS_OPENSSL} = $1; + +# Minihack! Convert Cygwin to 'Cyg-Static' so i can +# Keep my dynamic module experiments here for later +# concideration! + +if ($config{OSNAME} =~ /CYGWIN/) { + $config{OSNAME} = "CYG-STATIC"; +} + if ((!$config{OSNAME}) || ($config{OSNAME} eq "")) { chomp($config{OSNAME} = `/usr/bin/uname`); if ((!$config{OSNAME}) || ($config{OSNAME} eq "")){ @@ -98,7 +111,7 @@ if ($arg eq "-modupdate") { getosflags(); $has_epoll = $config{HAS_EPOLL}; $has_kqueue = $config{HAS_KQUEUE}; - if ($config{OSNAME} =~ /CYGWIN/) { + if ($config{STATIC_LINK} eq "yes") { write_static_modules_makefile(); } else { write_dynamic_modules_makefile(); @@ -188,7 +201,7 @@ if ($has_epoll) { print "yes\n" if $has_epoll == 1; print "no\n" if $has_epoll == 0; -if ($config{OSNAME} =~ /CYGWIN/) { +if (($config{OSNAME} =~ /CYGWIN/) || ($config{OSNAME} eq "CYG-STATIC")) { $config{HAS_STRLCPY} = "true"; } @@ -204,6 +217,15 @@ if (($config{HAS_GNUTLS}) && (($config{HAS_GNUTLS} >= 1.2) || ($config{HAS_GNUTL $config{HAS_GNUTLS} = "n"; } +printf "Checking for openssl... "; +if (($config{HAS_OPENSSL}) && (($config{HAS_OPENSSL} >= 0.8) || ($config{HAS_OPENSSL} eq "y"))) { + print "yes\n"; + $config{HAS_OPENSSL} = "y"; +} else { + print "no\n"; + $config{HAS_OPENSSL} = "n"; +} + ################################################################################ # BEGIN INTERACTIVE PART # ################################################################################ @@ -292,8 +314,23 @@ if (!$chose_hiperf) yesno(THREADED_DNS,"Would you like to enable the experimental multi-threaded DNS lookup?"); print "\n"; +if (($config{HAS_GNUTLS} eq "y") && ($config{HAS_OPENSSL} eq "y")) { + print "I have detected both GnuTLS and OpenSSL on your system.\n"; + print "I will default to GnuTLS. If you wish to use OpenSSL\n"; + print "instead, you should enable the OpenSSL module yourself\n"; + print "by copying it from src/modules/extra to src/modules.\n\n"; +} + if ($config{HAS_GNUTLS} eq "y") { yesno(USE_GNUTLS, "Would you like to enable SSL Support?"); + if ($config{USE_GNUTLS} eq "y") { + print "\nUsing GnuTLS SSL module.\n"; + } +} elsif ($config{HAS_OPENSSL} eq "y") { + yesno(USE_OPENSSL, "Would you like to enable SSL Support?"); + if ($config{USE_OPENSSL} eq "y") { + print "\nUsing OpenSSL SSL module.\nYou will get better performance if you move to GnuTLS in the future.\n"; + } } print "\nThe following questions will ask you for various figures relating\n"; @@ -558,17 +595,20 @@ print "\033[0mMax kick length:\033[1;32m\t\t$config{MAX_KICK}\n"; print "\033[0mMax name length:\033[1;32m\t\t$config{MAX_GECOS}\n"; print "\033[0mMax away length:\033[1;32m\t\t$config{MAX_AWAY}\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"; +print "\033[0mOptimization Flag:\033[1;32m\t\t$config{OPTIMISATI}\033[0m\n"; print "\033[0mCompiler program:\033[1;32m\t\t$config{CC}\033[0m\n"; print "\033[0mStatic modules:\033[1;32m\t\t\t$config{STATIC_LINK}\033[0m\n"; -print "\033[0mMultithread DNS:\033[1;32m\t\t$config{THREADED_DNS}\033[0m\n\n"; +print "\033[0mMultithread DNS:\033[1;32m\t\t$config{THREADED_DNS}\033[0m\n"; +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") { - `cp src/modules/extra/m_ssl_gnutls.cpp src/modules/m_ssl_gnutls.cpp`; + system("cp src/modules/extra/m_ssl_gnutls.cpp src/modules/m_ssl_gnutls.cpp"); + getmodules(); $failed = 0; - open(TMP, "key.pem") or $failed = 1; + open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1; close(TMP); - open(TMP, "cert.pem") or $failed = 1; + open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1; close(TMP); if ($failed) { print "SSL Certificates Not found, Generating.. \n\n @@ -582,32 +622,57 @@ if ($config{USE_GNUTLS} eq "y") { system("certtool --generate-privkey --outfile key.pem"); system("certtool --generate-self-signed --load-privkey key.pem --outfile cert.pem"); print "\nCertificate generation complete, copying to config directory... "; - `cp key.pem $config{CONFIG_DIR}/key.pem`; - `cp cert.pem $config{CONFIG_DIR}/cert.pem`; + system("mv key.pem $config{CONFIG_DIR}/key.pem"); + system("mv cert.pem $config{CONFIG_DIR}/cert.pem"); print "Done.\n\n"; } else { - print "SSL Certificates found, skipping." + print "SSL Certificates found, skipping.\n\n" } +} elsif ($config{USE_OPENSSL} eq "y") { + system("cp src/modules/extra/m_ssl_openssl.cpp src/modules/m_ssl_openssl.cpp"); + getmodules(); + $failed = 0; + open(TMP, "<$config{CONFIG_DIR}/key.pem") or $failed = 1; + close(TMP); + open(TMP, "<$config{CONFIG_DIR}/cert.pem") or $failed = 1; + close(TMP); + if ($failed) { + print "SSL Certificates Not found, Generating.. \n\n +************************************************************* +* Generating the certificates may take some time, go grab a * +* coffee, or something. * +*************************************************************\n\n"; + system("openssl req -x509 -nodes -newkey rsa:1024 -keyout key.pem -out cert.pem"); + system("openssl dhparam -out dhparams.pem 1024"); + print "\nCertificate generation complete, copying to config directory... "; + system("mv key.pem $config{CONFIG_DIR}/key.pem"); + system("mv cert.pem $config{CONFIG_DIR}/cert.pem"); + system("mv dhparams.pem $config{CONFIG_DIR}/dhparams.pem"); + print "Done.\n\n"; + } else { + print "SSL Certificates found, skipping.\n\n" + } +} +if (($config{USE_GNUTLS} eq "n") && ($config{USE_OPENSSL} eq "n")) { + print "Skipping SSL Certificate generation, SSL support is not available.\n\n"; } +getosflags(); makecache(); writefiles(); print "\n\n"; print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\n"; +if (($config{USE_GNUTLS} eq "y") || ($config{USE_OPENSSL} eq "y")) { + print "Please remember that to enable \033[1;32mSSL support\033[0m you must\n"; + print "load the required modules in your config. This configure process\n"; + print "has just prepared these modules to be compiled for you, and has not\n"; + print "configured them to be compiled into the core of the ircd.\n"; +} print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\n\n\n"; if (($config{OSNAME} eq "OpenBSD") && ($config{CC} ne "eg++")) { print "\033[1;32mWARNING!\033[0m You are running OpenBSD but you are using the base gcc package\nrather than eg++. This compile will most likely fail, but i'm letting you\ngo ahead with it anyway, just in case i'm wrong :-)\n"; } -if ($config{OSNAME} =~ /CYGWIN/) { - print <src/modules/Makefile"); + my $extra = ""; + + if ($config{OSNAME} =~ /CYGWIN/) { + $extra = "../inspircd.dll.a"; + } ### # Module Makefile Header @@ -1087,7 +1169,7 @@ sub write_dynamic_modules_makefile { # for assisting with making this work right. # # Automatically Generated by ./configure to add a modules -# please run ./configure --update +# please run ./configure -update or ./configure -modupdate all: \$(MODULES) @@ -1105,10 +1187,12 @@ foreach $i (@modlist) { ### # Write Entry to the MakeFile ### + $cmflags = getcompilerflags("src/modules/m_".$i.".cpp"); + $liflags = getlinkerflags("src/modules/m_".$i.".cpp"); print FILEHANDLE < -# Makefile version 2 (dynamically linked core) by +# Makefile version 2 (statically linked core) by # CC = im a cheezeball CXXFLAGS = -I../include \${FLAGS} +EOM +### +# This next section is for cygwin dynamic module builds. +# Basically, what we do, is build the inspircd core as a library +# then the main executable uses that. the library is capable of +# loading / unloading the modules dynamically :) +# Massive thanks to the guys on #cygwin @ irc.freenode.net for helping +# make this work :) +### + +if ($config{OSNAME} =~ /CYGWIN/) { + print FH <