]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - configure
zap the evil externs, and comment the lot
[user/henk/code/inspircd.git] / configure
index d0c7d535640b3f3f89ace9c3e3a501740e0dcbb7..616ebfea790f42ddd5db34bae4b7a6865959ee4b 100755 (executable)
--- a/configure
+++ b/configure
@@ -70,7 +70,7 @@ our $uninstall_list = "";
 
 # This is a list of all files in the core. Each cpp file is mapped to a shared object file,
 # whos file extension is omitted (these can vary from system to system). Auto detected by
-# scanning the src/*.cpp files for files containing /* $Core: */ identifiers.
+# scanning the src/*.cpp files for files containing /* $Core */ identifiers.
 
 our %filelist = ();
 
@@ -97,12 +97,10 @@ our %extraobjects = ();
 
 our %extrasources = ();
 
-our ($opt_use_gnutls, $opt_rebuild, $opt_use_openssl, $opt_nointeractive, $opt_nick_length,
-    $opt_chan_length, $opt_ports, $opt_epoll, $opt_kqueue, $opt_noports,
-    $opt_noepoll, $opt_nokqueue, $opt_disablerpath, $opt_ipv6, $opt_ipv6links,
-    $opt_noipv6links, $opt_ident, $opt_quit, $opt_topic, $opt_maxbuf, $opt_kick,
-    $opt_gecos, $opt_away, $opt_modes, $opt_disable_debug, $opt_maxchans,
-    $opt_opermaxchans, $opt_freebsd_port);
+our ($opt_use_gnutls, $opt_rebuild, $opt_use_openssl, $opt_nointeractive, $opt_ports,
+    $opt_epoll, $opt_kqueue, $opt_noports, $opt_noepoll, $opt_nokqueue,
+    $opt_ipv6, $opt_ipv6links, $opt_noipv6links, $opt_maxbuf, $opt_disable_debug,
+    $opt_freebsd_port);
 
 our ($opt_cc, $opt_base_dir, $opt_config_dir, $opt_module_dir, $opt_binary_dir,
     $opt_library_dir);
@@ -121,27 +119,17 @@ GetOptions (
        '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,
        'enable-ports' => \$opt_ports,
        'enable-epoll' => \$opt_epoll,
        'enable-kqueue' => \$opt_kqueue,
        'disable-ports' => \$opt_noports,
        'disable-epoll' => \$opt_noepoll,
        'disable-kqueue' => \$opt_nokqueue,
-       'disable-rpath' => \$opt_disablerpath,
        'enable-ipv6' => \$opt_ipv6,
        'enable-remote-ipv6' => \$opt_ipv6links,
        'disable-remote-ipv6' => \$opt_noipv6links,
        'with-cc=s' => \$opt_cc,
-       'with-ident-length=i' => \$opt_ident,
-       'with-quit-length=i' => \$opt_quit,
-       'with-topic-length=i' => \$opt_topic,
        'with-maxbuf=i' => \$opt_maxbuf,
-       'with-kick-length=i' => \$opt_kick,
-       'with-gecos-length=i' => \$opt_gecos,
-       'with-away-length=i' => \$opt_away,
-       'with-max-modes=i' => \$opt_modes,
        'enable-freebsd-ports-openssl' => \$opt_freebsd_port,
        'prefix=s' => \$opt_base_dir,
        'config-dir=s' => \$opt_config_dir,
@@ -178,13 +166,6 @@ our $non_interactive = (
        (defined $opt_base_dir) ||
        (defined $opt_binary_dir) ||
        (defined $opt_nointeractive) ||
-       (defined $opt_away) ||
-       (defined $opt_gecos) ||
-       (defined $opt_kick) ||
-       (defined $opt_modes) ||
-       (defined $opt_topic) ||
-       (defined $opt_quit) ||
-       (defined $opt_ident) ||
        (defined $opt_cc) ||
        (defined $opt_ipv6) ||
        (defined $opt_ipv6links) ||
@@ -192,10 +173,6 @@ our $non_interactive = (
        (defined $opt_kqueue) ||
        (defined $opt_epoll) ||
        (defined $opt_ports) ||
-       (defined $opt_maxchans) ||
-       (defined $opt_opermaxchans) ||
-       (defined $opt_chan_length) ||
-       (defined $opt_nick_length) ||
        (defined $opt_use_openssl) ||
        (defined $opt_nokqueue) ||
        (defined $opt_noepoll) ||
@@ -287,21 +264,6 @@ else
        $config{OPTIMISATI}      = "-O2";                               # DEBUGGING OFF!
 }
 
-$config{NICK_LENGT}     = "31";                                        # Default Nick Length
-if (defined $opt_nick_length)
-{
-       $config{NICK_LENGT} = $opt_nick_length;
-}
-$config{CHAN_LENGT}     = "64";                                        # Default Channel Name Length
-if (defined $opt_chan_length)
-{
-       $config{CHAN_LENGT} = $opt_chan_length;
-}
-$config{MAXI_MODES}     = "20";                                        # Default Max. Number of Modes set at once.
-if (defined $opt_modes)
-{
-       $config{MAXI_MODES} = $opt_modes;
-}
 $config{HAS_STRLCPY}   = "false";                                      # strlcpy Check.
 $config{HAS_STDINT}     = "false";                                     # stdint.h check
 $config{USE_KQUEUE}     = "y";                                         # kqueue enabled
@@ -346,6 +308,7 @@ if (defined $opt_noipv6links)
        $config{SUPPORT_IP6LINKS} = "n";
 }
 chomp($config{GCCVER}       = `g++ -dumpversion | cut -c 1`);          # Major GCC Version
+chomp($config{GCCMINOR}     = `g++ -dumpversion | cut -c 3`);
 $config{_SOMAXCONN} = SOMAXCONN;                                       # Max connections in accept queue
 $config{OSNAME}            = $^O;                                      # Operating System Name
 $config{IS_DARWIN}       = "NO";                                       # Is OSX?
@@ -366,38 +329,10 @@ if (defined $opt_cc)
 }
 our $exec = $config{CC} . " -dumpversion | cut -c 1";
 chomp($config{GCCVER}          = `$exec`);                             # Major GCC Version
+$exec = $config{CC} . " -dumpversion | cut -c 3";
+chomp($config{GCCMINOR}                = `$exec`);
 $config{MAKEORDER}             = "ircd mods";                          # build order
-$config{MAX_IDENT}             = "12";                                 # max ident size
-$config{MAX_QUIT}              = "255";                                # max quit message size
-$config{MAX_TOPIC}             = "307";                                # max topic size
-$config{MAX_KICK}              = "255";                                # max kick message size
-$config{MAX_GECOS}             = "128";                                # max GECOS size
-$config{MAX_AWAY}              = "200";                                # max AWAY size
 $config{MAXBUF}                        = "512";                                # Max buffer size
-if (defined $opt_ident)
-{
-       $config{MAX_IDENT} = $opt_ident;
-}
-if (defined $opt_quit)
-{
-       $config{MAX_QUIT} = $opt_quit;
-}
-if (defined $opt_topic)
-{
-       $config{MAX_TOPIC} = $opt_topic;
-}
-if (defined $opt_kick)
-{
-       $config{MAX_KICK} = $opt_kick;
-}
-if (defined $opt_gecos)
-{
-       $config{MAX_GECOS} = $opt_gecos;
-}
-if (defined $opt_away)
-{
-       $config{MAX_AWAY} = $opt_away;
-}
 
 if ($config{HAS_OPENSSL} =~ /^([-[:digit:].]+)([a-z])?(\-[a-z][0-9])?$/) {
        $config{HAS_OPENSSL} = $1;
@@ -405,7 +340,7 @@ if ($config{HAS_OPENSSL} =~ /^([-[:digit:].]+)([a-z])?(\-[a-z][0-9])?$/) {
        $config{HAS_OPENSSL} = "";
 }
 
-if ($config{GCCVER} eq "") {
+if (($config{GCCVER} eq "") || ($config{GCCMINOR} eq "")) {
        print $config{CC} . " was not found! You require g++ (the GNU C++ compiler, part of GCC) to build InspIRCd!\n";
        exit;
 }
@@ -811,7 +746,7 @@ STOP
        print ".\n\n";
 
        $config{CHANGE_COMPILER} = "n";
-       print "I have detected the following compiler: \e[1;32m$config{CC}\e[0m (version \e[1;32m$config{GCCVER}.x\e[0m)\n";
+       print "I have detected the following compiler: \e[1;32m$config{CC}\e[0m (version \e[1;32m$config{GCCVER}.$config{GCCMINOR}\e[0m)\n";
 
        while (($config{GCCVER} < 3) || ($config{GCCVER} eq "")) {
                print "\e[1;32mIMPORTANT!\e[0m A GCC 2.x compiler has been detected, and
@@ -827,7 +762,8 @@ should NOT be used. You should probably specify a newer compiler.\n\n";
                        chomp(my $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 compilers
-                               print "Queried compiler: \e[1;32m$config{CC}\e[0m (version \e[1;32m$config{GCCVER}.x\e[0m)\n";
+                               chomp($config{GCCMINOR}     = `$config{CC} -dumpversion | cut -c 3`);
+                               print "Queried compiler: \e[1;32m$config{CC}\e[0m (version \e[1;32m$config{GCCVER}.$config{GCCMINOR}\e[0m)\n";
                                if ($config{GCCVER} < 3) {
                                        print "\e[1;32mGCC 2.x WILL NOT WORK!\e[0m. Let's try that again, shall we?\n";
                                }
@@ -929,24 +865,6 @@ should NOT be used. You should probably specify a newer compiler.\n\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";
-       print "as defaults unless you have a real reason to change them. If they\n";
-       print "changed, then the values must be identical on all servers on your\n";
-       print "network, or malfunctions and/or crashes may occur, with the exception\n";
-       print "of the 'maximum number of clients' setting which may be different on\n";
-       print "different servers on the network.\n\n";
-
-       promptnumeric("length of nicknames", "NICK_LENGT");
-       promptnumeric("length of channel names", "CHAN_LENGT");
-       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");
-       promptnumeric("length of a channel topic", "MAX_TOPIC");
-       promptnumeric("length of a kick message", "MAX_KICK");
-       promptnumeric("length of a GECOS (real name)", "MAX_GECOS");
-       promptnumeric("length of an away message", "MAX_AWAY");
 }
 
 dumphash();
@@ -1152,7 +1070,7 @@ sub getosflags {
        $config{LDLIBS} = "-pthread -lstdc++";
        $config{FLAGS}  = "-fPIC -Woverloaded-virtual -Wshadow -Wformat=2 -Wmissing-format-attribute -Wall $config{OPTIMISATI}";
        $config{DEVELOPER} = "-fPIC -Woverloaded-virtual -Wshadow -Wall -Wformat=2 -Wmissing-format-attribute -g";
-       $SHARED = "-Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared" unless defined $opt_disablerpath;
+       $SHARED = "-shared";
        $config{MAKEPROG} = "make";
 
        if ($config{OSNAME} =~ /darwin/i) {
@@ -1171,6 +1089,7 @@ sub getosflags {
                if ($foo ne "") {
                        $config{CC} = "eg++";
                        chomp($config{GCCVER}       = `eg++ -dumpversion | cut -c 1`); # we must redo these if we change the compiler path
+                       chomp($config{GCCMINOR}     = `eg++ -dumpversion | cut -c 3`);
                }
                return "OpenBSD";
        }
@@ -1223,8 +1142,6 @@ sub writefiles {
        {
                print "Writing \e[1;32minspircd_config.h\e[0m\n";
                open(FILEHANDLE, ">include/inspircd_config.h");
-               my $NL = $config{NICK_LENGT}+1;
-               my $CL = $config{CHAN_LENGT}+1;
                print FILEHANDLE <<EOF;
 /* Auto generated by configure, do not modify! */
 #ifndef __CONFIGURATION_AUTO__
@@ -1239,18 +1156,10 @@ sub writefiles {
 #define VERSION "$version"
 #define REVISION "$revision2"
 #define SOMAXCONN_S "$config{_SOMAXCONN}"
-#define NICKMAX $NL
-#define CHANMAX $CL
-#define MAXMODES $config{MAXI_MODES}
-#define IDENTMAX $config{MAX_IDENT}
-#define MAXQUIT $config{MAX_QUIT}
-#define MAXTOPIC $config{MAX_TOPIC}
-#define MAXKICK $config{MAX_KICK}
-#define MAXGECOS $config{MAX_GECOS}
-#define MAXAWAY $config{MAX_AWAY}
 #define OPTIMISATION $config{OPTIMITEMP}
 #define LIBRARYDIR "$config{LIBRARY_DIR}"
 #define SYSTEM "$incos"
+#define ENTRYPOINT int main(int argc, char** argv)
 
 EOF
 print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n";
@@ -1264,6 +1173,13 @@ print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n";
                if ($config{GCCVER} >= 3) {
                        print FILEHANDLE "#define GCC3\n";
                }
+               if (
+                       (($config{GCCVER} == 4) && ($config{GCCMINOR} >= 3))
+                               ||
+                       ($config{GCCVER} > 4)
+               ) {
+                       print FILEHANDLE "#define HASHMAP_DEPRECATED\n";
+               }
                if ($config{HAS_STRLCPY} eq "true") {
                        print FILEHANDLE "#define HAS_STRLCPY\n";
                }
@@ -1327,12 +1243,12 @@ EOF
        chomp($modules);   # Remove Redundant whitespace..
 
        opendir(DIRHANDLE, "src/modules");
-       foreach my $name (sort readdir(DIRHANDLE)) {
-               if ($name =~ /^m_(.+?)$/) {
-                       if (defined(opendir(MDIRHANDLE, "src/modules/$name"))) {
+       foreach my $name2 (sort readdir(DIRHANDLE)) {
+               if ($name2 =~ /^m_(.+?)$/) {
+                       if (defined(opendir(MDIRHANDLE, "src/modules/$name2"))) {
                                closedir(MDIRHANDLE);
-                               $modules .= "$name.so ";
-                               $uninstall_list = $uninstall_list . "   -rm \$(MODULES)/$name.so\n";
+                               $modules .= "$name2.so ";
+                               $uninstall_list = $uninstall_list . "   -rm \$(MODULES)/$name2.so\n";
                        }
                }
        }
@@ -1582,6 +1498,8 @@ sub write_dynamic_makefile
        my $i = 0;
        my @cmdlist = ();
        my %existing_install_list = ();
+       my %core_files_list = ();
+
        opendir(DIRHANDLE, "src/commands");
        foreach my $name (sort readdir(DIRHANDLE))
        {
@@ -1607,6 +1525,9 @@ sub write_dynamic_makefile
                $config{USE_PORTS} = 0;
        }
 
+       # formerly generated below this foreach, now it's not! magic.
+       my $all_core = "";
+
        foreach my $dir (("src","src/commands","src/modes","src/socketengines","src/modules"))
        {
                print "Scanning \e[1;32m$dir\e[0m for core files ";
@@ -1620,9 +1541,20 @@ sub write_dynamic_makefile
                                while (defined(my $line = <CPP>))
                                {
                                        chomp($line);
-                                       if ($line =~ /\/\* \$Core: (\w+) \*\//i)
+                                       if ($line =~ /\/\* \$Core \*\//i)
                                        {
-                                               $filelist{$name} = $1;
+                                               my $sname = $name;
+                                               $sname =~ s/\.cpp$/.o/;
+
+                                               # append it to list to be built
+                                               $all_core = $all_core . $sname . " ";
+                                               $filelist{$name} = $sname;
+
+                                               # mark it as a core file, so it won't get shared object cflags
+                                               if (!exists($core_files_list{$name}))
+                                               {
+                                                       $core_files_list{$name} = 1;
+                                               }
                                        }
                                        elsif ($line =~ /\/\* \$ExtraDeps: (.*?) \*\//i)
                                        {
@@ -1688,37 +1620,25 @@ sub write_dynamic_makefile
                print " done!\n";
        }
 
+       # modes need to be compiled in too
+       $all_core = $all_core . "modes/modeclasses.a";
+
        my $freebsd4libs = (defined $config{CRAQ} ? $config{CRAQ} : "");
 
-       my $all = "all: ";
-       my $all_libsonly = "";
        my $libraryext = "";
-       my $othercrap = "";
-       my $RPATH = "";
+       my $binary_rule = "";
 
        if ($config{IS_DARWIN} eq "YES")
        {
                $libraryext = "dylib";
-               $othercrap = "  \@../make/run-cc.pl \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd.cpp\n       \@../make/run-cc.pl \$(CC) -pipe -dynamic -bind_at_load -L. -o inspircd \$(LDLIBS) inspircd.o "
+               $binary_rule = "        \@../make/run-cc.pl \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd.cpp\n       \@../make/run-cc.pl \$(CC) -pipe -dynamic -bind_at_load -L. -o inspircd \$(LDLIBS) inspircd.o "
        }
        else
        {
                $libraryext = "so";
-               $RPATH = "-Wl,--rpath -Wl,$config{LIBRARY_DIR}" unless defined $opt_disablerpath;
-               $othercrap = "  \@../make/run-cc.pl \$(CC) -pipe -I../include $RPATH \$(FLAGS) $freebsd4libs -rdynamic -L. inspircd.cpp -o inspircd \$(LDLIBS) ";
+               $binary_rule = "        \@../make/run-cc.pl \$(CC) -pipe -I../include \$(FLAGS) $freebsd4libs -rdynamic -L. inspircd.cpp -o inspircd \$(LDLIBS) ";
        }
 
-       foreach my $cpp (sort keys %filelist)
-       {
-               $all = $all . $filelist{$cpp} . "." . $libraryext . " ";
-               $all_libsonly = $all_libsonly . $filelist{$cpp} . "." . $libraryext . " ";
-               $install_list = $install_list . "       -install -m \$(INSTMODE) src/" . $filelist{$cpp} . "." . $libraryext . " \$(LIBPATH)\n";
-               $uninstall_list = $uninstall_list . "   -rm \$(LIBPATH)/" . $filelist{$cpp} . "." . $libraryext . "\n";
-       }
-       $all = $all . "moo inspircd\n";
-
-       $othercrap = $othercrap . " $all_libsonly\n\n";
-
        open(FH,">src/Makefile") or die("Could not write src/Makefile");
        print FH <<EOM;
 
@@ -1729,42 +1649,24 @@ RELCPPFILES = \$(shell /bin/ls -l modes/ | grep '\\.cpp' | sed 's/^.* /modes\\//
 
 EOM
 
-       print FH "$all\n\n";
-
-       my $deps = calcdeps("src/inspircd.cpp");
-       print FH "inspircd: inspircd.cpp $deps $all_libsonly\n";
-       print FH "$othercrap\n";
+       my $buildstring = "";
+       my $deps = "";
 
        foreach my $cpp (sort keys %filelist)
        {
-               my $thislib = $filelist{$cpp} . "." . $libraryext; 
                my $objs = $cpp;
                my $rawcpp = $cpp;
-               my $libcrap = "";
                $objs =~ s/\.cpp$/.o/;
                if (exists($extraobjects{$cpp}))
                {
                        $objs = $objs . " " . $extraobjects{$cpp};
+                       $all_core = $all_core . " " . $extraobjects{$cpp};
                }
                if (exists($extrasources{$cpp}))
                {
                        $rawcpp = $rawcpp . " " . $extrasources{$cpp};
                }
-               if ($config{IS_DARWIN} eq "YES")
-               {
-                       $libcrap = "-install_name " . $config{LIBRARY_DIR} . "/" . $thislib . " -dynamiclib -twolevel_namespace -undefined dynamic_lookup";
-               }
-               else
-               {
-                       if (defined $opt_disablerpath)
-                       {
-                               $libcrap = " -shared";
-                       }
-                       else
-                       {
-                               $libcrap = "-Wl,--rpath -Wl," . $config{LIBRARY_DIR} . " -shared";
-                       }
-               }
+
                $deps = calcdeps("src/$cpp");
                if (exists($extrasources{$cpp}))
                {
@@ -1777,15 +1679,31 @@ EOM
                                }
                        }
                }
-               print FH $thislib . ": $cpp $deps ". (defined($specialdeps{$cpp}) ? $specialdeps{$cpp} : "") . "\n";
-               print FH "      \@../make/run-cc.pl \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c $rawcpp\n";
+               $buildstring = $buildstring . $objs . ": $cpp $deps ". (defined($specialdeps{$cpp}) ? $specialdeps{$cpp} : "") . "\n";
+
+               if (exists($core_files_list{$cpp}))
+               {
+                       # core files are statically linked into the binary and do not require -export-dynamic
+                       $buildstring = $buildstring . " \@../make/run-cc.pl \$(CC) -pipe -I../include \$(FLAGS) -c $rawcpp\n";
+               }
+               else
+               {
+                       $buildstring = $buildstring . " \@../make/run-cc.pl \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c $rawcpp\n";
+               }
+
                if (exists($extrabuildlines{$cpp}))
                {
-                       print FH "      " . $extrabuildlines{$cpp} . "\n";
+                       $buildstring = $buildstring . " " . $extrabuildlines{$cpp} . "\n";
                }
-               print FH "      \@../make/run-cc.pl \$(CC) -pipe $libcrap -o " . $thislib . " " . $objs . "\n\n";
        }
 
+       print FH "all: inspircd moo\n\n\n";
+
+       $deps = calcdeps("src/inspircd.cpp");
+       print FH "inspircd: inspircd.cpp $deps $all_core\n";
+       print FH "$binary_rule $all_core\n\n";
+
+       print FH $buildstring;
        print FH "moo:\n        \@\${MAKE} -C \"commands\" DIRNAME=\"src/commands\" CC=\"\$(CC)\" \$(MAKEARGS)\n\n";
 
        # close main makefile
@@ -1811,7 +1729,7 @@ ITEM
        # now print the command file details.
        foreach my $cmd (@cmdlist) {
                print FH <<ITEM;
-cmd_$cmd.so: cmd_$cmd.cpp ../../include/base.h ../../include/modules.h ../../include/inspircd.h ../../include/channels.h ../../include/users.h ../../include/globals.h ../../include/inspircd_config.h ../../include/commands/cmd_$cmd.h
+cmd_$cmd.so: cmd_$cmd.cpp ../../include/base.h ../../include/modules.h ../../include/inspircd.h ../../include/channels.h ../../include/users.h ../../include/inspircd_config.h ../../include/commands/cmd_$cmd.h
        \@../../make/run-cc.pl \$(CC) -pipe -I../../include \$(FLAGS) -export-dynamic $SHARED -o cmd_$cmd.so cmd_$cmd.cpp
 
 ITEM