X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=configure;h=996edc98132151ab1ff1e7bfa9735503fe2793f4;hb=4934648e234538a7324c0a47836350a9be8b1fc0;hp=114d4c4f560a2030983a4007d62614b54a4da4c7;hpb=aca1b631d74df615fb20fa0caa99d432ea9b0fd1;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/configure b/configure index 114d4c4f5..996edc981 100755 --- a/configure +++ b/configure @@ -6,6 +6,9 @@ # # # +# Licensed under GPL, please see the COPYING file +# for more information +# # [14:21] Brain: i know perl-fu! # # $Id$ @@ -21,18 +24,20 @@ use Getopt::Long; # Utility functions for our buildsystem use make::utilities; use make::configure; +use make::gnutlscert; GetOptions ( 'enable-gnutls' => \$opt_use_gnutls, + 'rebuild' => \$opt_rebuild, 'enable-openssl' => \$opt_use_openssl, 'disable-interactive' => \$opt_nointeractive, 'with-nick-length=i' => \$opt_nick_length, 'with-channel-length=i' => \$opt_chan_length, - 'with-max-channels=i' => \$opt_maxchans, - 'with-max-oper-channels=i' => \$opt_opermaxchans, 'with-max-clients=i' => \$opt_maxclients, + 'enable-ports' => \$opt_ports, 'enable-epoll' => \$opt_epoll, 'enable-kqueue' => \$opt_kqueue, + 'disable-ports' => \$opt_noports, 'disable-epoll' => \$opt_noepoll, 'disable-kqueue' => \$opt_nokqueue, 'enable-ipv6' => \$opt_ipv6, @@ -81,6 +86,7 @@ my $non_interactive = ( (defined $opt_noipv6links) || (defined $opt_kqueue) || (defined $opt_epoll) || + (defined $opt_ports) || (defined $opt_maxchans) || (defined $opt_opermaxchans) || (defined $opt_chan_length) || @@ -88,6 +94,7 @@ my $non_interactive = ( (defined $opt_use_openssl) || (defined $opt_nokqueue) || (defined $opt_noepoll) || + (defined $opt_noports) || (defined $opt_use_gnutls) ); my $interactive = !$non_interactive; @@ -128,7 +135,9 @@ if (defined $opt_library_dir) $config{LIBRARY_DIR} = $opt_library_dir; } chomp($config{HAS_GNUTLS} = `libgnutls-config --version 2>/dev/null | cut -c 1,2,3`); # GNUTLS Version. -chomp($config{HAS_OPENSSL} = `openssl version 2>/dev/null`); # Openssl version +chomp($config{HAS_OPENSSL} = `pkg-config --modversion openssl 2>/dev/null`); # Openssl version +chomp($gnutls_ver = $config{HAS_GNUTLS}); +chomp($openssl_ver = $config{HAS_OPENSSL}); $config{USE_GNUTLS} = "n"; if (defined $opt_use_gnutls) { @@ -144,11 +153,11 @@ if (defined $opt_use_openssl) $config{OPTIMITEMP} = "0"; # Default Optimisation Value if (!defined $opt_disable_debug) { - $config{OPTIMISATI} = "-g"; # Optimisation Flag + $config{OPTIMISATI} = "-g1"; # Optimisation Flag } else { - $config{OPTIMISATI} = ""; # DEBUGGING OFF! + $config{OPTIMISATI} = "-O2"; # DEBUGGING OFF! } $config{NICK_LENGT} = "31"; # Default Nick Length @@ -161,16 +170,6 @@ if (defined $opt_chan_length) { $config{CHAN_LENGT} = $opt_chan_length; } -$config{MAX_CHANNE} = "20"; # Default Max. Channels per user -if (defined $opt_maxchans) -{ - $config{MAX_CHANNE} = $opt_maxchans; -} -$config{MAX_OPERCH} = "60"; # Default Max. Channels per oper -if (defined $opt_opermaxchans) -{ - $config{MAX_OPERCH} = $opt_opermaxchans; -} $config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once. if (defined $opt_modes) { @@ -196,6 +195,15 @@ 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} = "n"; # IPv6 support (experimental) if (defined $opt_ipv6) { @@ -216,6 +224,11 @@ chomp($config{MAX_DESCRIPTORS} = `sh -c \"ulimit -n\"`); # Hard FD Limit chomp($config{GCCVER} = `g++ -dumpversion | cut -c 1`); # Major GCC Version $config{_SOMAXCONN} = SOMAXCONN; # Max connections in accept queue $config{OSNAME} = $^O; # Operating System Name +$config{IS_DARWIN} = "NO"; # Is OSX? +if ($config{OSNAME} =~ /darwin/i) +{ + $config{IS_DARWIN} = "YES"; +} $config{CC} = "g++"; # C++ compiler if (defined $opt_cc) { @@ -256,7 +269,7 @@ if (defined $opt_away) $config{MAX_AWAY} = $opt_away; } -$config{HAS_OPENSSL} =~ /OpenSSL ([-[:digit:].]+)([a-z])?(\-[a-z][0-9])? (\w{3}|[0-9]+) (\w{3}|[0-9]+) [0-9]{4}/; +$config{HAS_OPENSSL} =~ /^([-[:digit:].]+)([a-z])?(\-[a-z][0-9])?$/; $config{HAS_OPENSSL} = $1; if ($config{GCCVER} eq "") { @@ -308,6 +321,7 @@ sub update getosflags(); } $has_epoll = $config{HAS_EPOLL}; + $has_ports = $config{HAS_PORTS}; $has_kqueue = $config{HAS_KQUEUE}; writefiles(1); makecache(); @@ -338,6 +352,7 @@ sub modupdate print "Updating Files..\n"; getosflags(); $has_epoll = $config{HAS_EPOLL}; + $has_ports = $config{HAS_PORTS}; $has_kqueue = $config{HAS_KQUEUE}; writefiles(0); makecache(); @@ -362,9 +377,13 @@ sub svnupdate print "This is not an SVN copy of InspIRCd.\n"; exit; } + else + { + close(FH); + } system("svn update"); system("perl configure -update"); - if ($ARGV[1] eq "rebuild") { + if (defined $opt_rebuild) { system("make install"); } exit; @@ -453,6 +472,22 @@ if ($has_epoll) { print "yes\n" if $has_epoll == 1; print "no\n" if $has_epoll == 0; +printf "Checking if Solaris I/O completion ports are available... "; +$has_ports = 0; +my $system = `uname -s`; +chomp ($system); +$has_ports = 1 if ($system eq "SunOS"); + +if ($has_ports) { + my $kernel = `uname -r`; + chomp($kernel); + if (($kernel !~ /^5\.10/)) { + $has_ports = 0; + } +} +print "yes\n" if $has_ports == 1; +print "no\n" if $has_ports == 0; + if (($config{OSNAME} =~ /CYGWIN/) || ($config{OSNAME} eq "CYG-STATIC")) { $config{HAS_STRLCPY} = "true"; } @@ -563,7 +598,11 @@ should NOT be used. You should probably specify a newer compiler.\n\n"; yesno(USE_EPOLL,"You are running a Linux 2.6+ operating system, and epoll\nwas detected. Would you like to enable epoll support?\nThis is likely to increase performance.\nIf you are unsure, answer yes.\n\nEnable epoll?"); print "\n"; } - $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y")); + if ($has_ports) { + yesno(USE_PORTS,"You are running Solaris 10.\nWould you like to enable I/O completion ports support?\nThis is likely to increase performance.\nIf you are unsure, answer yes.\n\nEnable support for I/O completion ports?"); + print "\n"; + } + $chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} eq "y") || ($config{USE_PORTS} eq "y")); 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"; @@ -573,18 +612,20 @@ should NOT be used. You should probably specify a newer compiler.\n\n"; print "\n"; if ($config{IPV6} eq "y") { - print "You have chosen to build an \033[1;32mIPV6-only\033[0m server.\nTo accept IPV4 users, you must use the '::ffff:' notation of addresses.\n\n"; + print "You have chosen to build an \033[1;32mIPV6-enabled\033[0m server.\nTo accept IPV4 users, you can still use IPV4 addresses\nin your port bindings..\n\n"; $config{SUPPORT_IP6LINKS} = "y"; } else { - yesno(SUPPORT_IP6LINKS,"You have chosen to build an \033[1;32mIPV4-only\033[0m server.\nWould you like to enable support for linking to IPV6-enabled\nInspIRCd servers which are using '::ffff:' notation?\nIf you are using a recent operating\nsystem and are unsure, answer yes."); + yesno(SUPPORT_IP6LINKS,"You have chosen to build an \033[1;32mIPV4-only\033[0m server.\nWould you like to enable support for linking to IPV6-enabled\nInspIRCd servers?\nIf you are using a recent operating\nsystem and are unsure, answer yes.\nIf you answer 'no' here, your InspIRCd server will be unable\nto parse IPV6 addresses (e.g. for CIDR bans)"); 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 have detected both \033[1;32mGnuTLS\033[0m and \033[1;32mOpenSSL\033[0m 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"; + print "Detected GnuTLS version: \033[1;32m" . $gnutls_ver . "\033[0m\n"; + print "Detected OpenSSL version: \033[1;32m" . $openssl_ver . "\033[0m\n\n"; } if ($config{HAS_GNUTLS} eq "y") { @@ -598,6 +639,9 @@ should NOT be used. You should probably specify a newer compiler.\n\n"; print "\nUsing OpenSSL SSL module.\nYou will get better performance if you move to GnuTLS in the future.\n"; } } + else { + print "\nCould not detect OpenSSL or GnuTLS. Make sure pkg-config is installed if\nyou intend to use OpenSSL, or that GnuTLS is in your path if you intend\nto use GnuTLS.\n\n"; + } print "\nThe following questions will ask you for various figures relating\n"; print "To your IRCd install. Please note that these should usually be left\n"; @@ -614,8 +658,6 @@ should NOT be used. You should probably specify a newer compiler.\n\n"; promptnumeric("length of nicknames", "NICK_LENGT"); promptnumeric("length of channel names", "CHAN_LENGT"); - promptnumeric("number of channels a normal user may join at any one time", "MAX_CHANNE"); - promptnumeric("number of channels an oper may join at any one time", "MAX_OPERCH"); promptnumeric("number of mode changes in one line", "MAXI_MODES"); promptnumeric("length of an ident (username)", "MAX_IDENT"); promptnumeric("length of a quit message", "MAX_QUIT"); @@ -646,7 +688,6 @@ if ($config{USE_GNUTLS} eq "y") { print "Symlinking src/modules/m_ssl_gnutls.cpp from extra/\n"; chdir("src/modules"); system("ln -s extra/m_ssl_gnutls.cpp"); - system("ln -s extra/ssl_cert.h"); chdir("../.."); } getmodules(); @@ -663,11 +704,10 @@ if ($config{USE_GNUTLS} eq "y") { * Generating the Private Key may take some time, go grab a * * Coffee. Even better, to generate some more entropy if it * * is taking a while, open another console and type du / a * -* few times and get that HD going :) Then answer the * +* few times and get that HD going :) Then answer the * * Questions which follow. If you are unsure, just hit enter * *************************************************************\n\n"; - system("certtool --generate-privkey --outfile key.pem"); - system("certtool --generate-self-signed --load-privkey key.pem --outfile cert.pem"); + make_gnutls_cert(); 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"); @@ -688,7 +728,6 @@ if ($config{USE_GNUTLS} eq "y") { print "Symlinking src/modules/m_ssl_openssl.cpp from extra/\n"; chdir("src/modules"); system("ln -s extra/m_ssl_openssl.cpp"); - system("ln -s extra/ssl_cert.h"); chdir("../.."); } getmodules(); @@ -703,7 +742,7 @@ if ($config{USE_GNUTLS} eq "y") { print "SSL Certificates Not found, Generating.. \n\n ************************************************************* * Generating the certificates may take some time, go grab a * -* coffee, or something. * +* 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"); @@ -839,8 +878,16 @@ sub getosflags { $config{LDLIBS} = "-lstdc++"; $config{FLAGS} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}"; + $config{DEVELOPER} = "-fno-strict-aliasing -fPIC -Wall -Woverloaded-virtual -g"; + $SHARED = "-Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared"; $config{MAKEPROG} = "make"; + if ($config{OSNAME} =~ /darwin/i) { + $config{FLAGS} = "-DDARWIN -frtti -fPIC -Wall -Woverloaded-virtual $config{OPTIMISATI}"; + $SHARED = "-bundle -twolevel_namespace -undefined dynamic_lookup"; + $config{LDLIBS} = "-ldl -lstdc++"; + } + if ($config{OSNAME} =~ /OpenBSD/i) { $config{MAKEPROG} = "gmake"; chomp($foo = `eg++ -dumpversion | cut -c 1`); @@ -903,9 +950,7 @@ sub writefiles { 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($version = `sh src/version.sh`); chomp(my $revision2 = getrevision()); if ($writeheader == 1) { @@ -928,8 +973,6 @@ sub writefiles { #define MAX_DESCRIPTORS $config{MAX_DESCRIPTORS} #define NICKMAX $NL #define CHANMAX $CL -#define MAXCHANS $config{MAX_CHANNE} -#define OPERMAXCHANS $config{MAX_OPERCH} #define MAXMODES $config{MAXI_MODES} #define IDENTMAX $config{MAX_IDENT} #define MAXQUIT $config{MAX_QUIT} @@ -984,6 +1027,11 @@ EOF $se = "socketengine_epoll"; $use_hiperf = 1; } + if (($has_ports) && ($config{USE_PORTS} eq "y")) { + print FILEHANDLE "#define USE_PORTS\n"; + $se = "socketengine_ports"; + $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) { @@ -1055,6 +1103,11 @@ EOF chomp(my $revision = getrevision()); $version = "$version(r$revision)"; + my $LIBEXT = "so"; + if ($config{IS_DARWIN} eq "YES") + { + $LIBEXT = "dylib"; + } # We can actually parse any file starting with . and ending with .inc, # but right now we only parse .inspircd.inc to form './inspircd' @@ -1072,12 +1125,14 @@ EOF $tmp =~ s/\@CC\@/$config{CC}/; $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/; $tmp =~ s/\@FLAGS\@/$config{FLAGS}/; + $tmp =~ s/\@DEVELOPER\@/$config{DEVELOPER}/; $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/; $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/; $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/; $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/; $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/; $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/; + $tmp =~ s/\@LIBRARY_EXT\@/$LIBEXT/; $tmp =~ s/\@MODULES\@/$modules/; $tmp =~ s/\@EXECUTABLE\@/$exe/; $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/; @@ -1254,9 +1309,19 @@ EOF print FILEHANDLE <src/Makefile") or die("Could not write src/Makefile"); print FH <