]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - configure
Added <options:hideulines>
[user/henk/code/inspircd.git] / configure
index c9cd330a9efb68c891e767b627d4d212ccea42be..e41c39d6c392af95780d9a0662d64ef0eb411dd0 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,5 +1,4 @@
 #!/usr/bin/perl
-
 # InspIRCd Configuration Script
 #
 # Copyright 2003 The ChatSpike Development Team
@@ -56,6 +55,14 @@ $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 "")){
@@ -104,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();
@@ -194,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";
 }
 
@@ -588,7 +595,7 @@ print "\033[0mOptimatizaton 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";
-print "\033[0mGnuTLS Support:\033[1;32m\t\t$config{USE_GNUTLS}\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") {
@@ -661,15 +668,6 @@ print "*** \033[1;32mRemember to edit your configuration files!!!\033[0m ***\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 <<FOO;
-\033[1;32mWARNING!\033[0m CYGWIN does not properly support shared modules,
-so modules will be compiled statically into the core of the ircd. The modules
-will act like they are being loaded from disk and being unloaded from RAM,
-however they are in fact being enabled and disabled similar to features in
-other ircds.
-FOO
-}
 
 if ($config{GCCVER} < "3") {
        print <<FOO2;
@@ -786,6 +784,11 @@ sub getosflags {
        $config{FLAGS}  = "-frtti $OPTIMISATI -Wall -Woverloaded-virtual $config{OPTIMISATI}";
        $config{LDLIBS} = "";
        $config{MAKEPROG} = "/usr/bin/make";
+       $config{MAKEORDER} = "ircd mods config bininst";
+    } elsif ($config{OSNAME} eq "CYG-STATIC") {
+       $config{FLAGS} = "-frtti $OPTIMISATI -Wall -Woverloaded-virtual $config{OPTIMISATI}";
+       $config{LDLIBS} = "";
+       $config{MAKEPROG} = "/usr/bin/make";
        $config{MAKEORDER} = "mods ircd config bininst";
        $config{STATICLIBS} = "modules/mods.a";
        $config{STATIC_LINK} = "yes";
@@ -870,6 +873,10 @@ EOF
     print FILEHANDLE "#define IS_CYGWIN\n";
     print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE   1024\n#endif\n";
   }
+  if ($config{OSNAME} eq "CYG-STATIC") {
+    print FILEHANDLE "#ifndef FD_SETSIZE\n#define FD_SETSIZE    1024\n#endif\n";
+  }
+
   if ($config{STATIC_LINK} eq "yes") {
     print FILEHANDLE "#define STATIC_LINK\n";
   }
@@ -913,7 +920,7 @@ EOF
   my $modules = "";
   foreach $i (@modlist)
   {
-    if ($config{OSNAME} =~ /CYGWIN/) {
+    if ($config{STATIC_LINK} eq "yes") {
         $modules .= "m_".$i.".o ";
     }
     else {
@@ -972,12 +979,15 @@ EOF
   # Make inspircd executable!
   chmod 0744, 'inspircd';
 
-  if ($config{OSNAME} =~ /CYGWIN/) {
+  if ($config{STATIC_LINK} eq "yes") {
        print "Writing static-build \033[1;32msrc/Makefile\033[0m\n";
        write_static_makefile();
        write_static_modules_makefile();
-  }
-  else {
+  } elsif ($config{OSNAME} =~ /CYGWIN/) {
+       print "Writing cygwin-build \033[1;32msrc/Makefile\033[0m\n";
+       write_static_makefile();
+       write_dynamic_modules_makefile();
+  } else {
        print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
        write_dynamic_makefile();
        write_dynamic_modules_makefile();
@@ -1102,10 +1112,10 @@ foreach $i (@modlist)
                $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
                $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
 
-               print FILEHANDLE <<EOCHEESE;
                ###
-               # Write Entry to the MakeFile
+               # Write Entry to the Makefile
                ###
+               print FILEHANDLE <<EOCHEESE;
 m_$i.o: m_$i\_static.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h
        \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c m_$i\_static.cpp
        mv m_$i\_static.o ../m_$i.o
@@ -1138,6 +1148,11 @@ sub write_dynamic_modules_makefile {
   # Modules Makefile..
   print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
   open(FILEHANDLE, ">src/modules/Makefile");
+  my $extra = "";
+
+  if ($config{OSNAME} =~ /CYGWIN/) {
+       $extra = "../inspircd.dll.a";
+  }
 
 ###
 # Module Makefile Header
@@ -1172,7 +1187,7 @@ foreach $i (@modlist) {
        print FILEHANDLE <<EOCHEESE;
 m_$i.so: m_$i.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h ../../include/inspircd_config.h ../../include/inspircd.h ../../include/inspircd_io.h
        \$(CC) -pipe -I../../include \$(FLAGS) $cmflags -export-dynamic -c m_$i.cpp
-       \$(CC) \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o
+       \$(CC) \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o $extra
        \@-rm -f \$(MODPATH)/m_$i.so
        install -v -m 0700 m_$i.so \$(MODPATH)
 
@@ -1206,17 +1221,43 @@ sub write_static_makefile {
 #
 # (C) ChatSpike development team
 # Makefile by <Craig\@ChatSpike.net>
-# Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
+# Makefile version 2 (statically linked core) by <brain\@inspircd.org>
 #
 
 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 <<EOM;
+all: aes.o command_parse.o cull_list.o userprocess.o socketengine.o socket.o hashcomp.o channels.o mode.o xline.o inspstring.o dns.o base.o inspircd_io.o message.o $cmdobjs commands.o dnsqueue.o dynamic.o users.o modules.o wildcard.o helperfuncs.o inspircd.exe
+
+inspircd.exe: inspircd.dll.a
+       \$(CC) -o \$@ \$^
+
+inspircd.dll inspircd.dll.a: inspircd.o channels.o mode.o xline.o inspstring.o dns.o base.o inspircd_io.o message.o $cmdobjs  commands.o dnsqueue.o dynamic.o users.o modules.o wildcard.o helperfuncs.o hashcomp.o socket.o socketengine.o userprocess.o cull_list.o command_parse.o aes.o
+       \$(CC) -shared -Wl,--out-implib=inspircd.dll.a -o inspircd.dll \$^
+EOM
+} else {
+       print FH <<EOM;
 all: aes.o command_parse.o cull_list.o userprocess.o socketengine.o socket.o hashcomp.o channels.o mode.o xline.o inspstring.o dns.o base.o inspircd_io.o message.o $cmdobjs commands.o dnsqueue.o dynamic.o users.o modules.o wildcard.o helperfuncs.o \$(MODULES) inspircd.exe
 
 inspircd.exe: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h ../include/base.h
        \$(CC) -I../include \$(FLAGS) inspircd.cpp -o inspircd.exe \$(LDLIBS) channels.o mode.o xline.o inspstring.o dns.o base.o inspircd_io.o message.o $cmdobjs commands.o dnsqueue.o dynamic.o users.o modules.o wildcard.o helperfuncs.o hashcomp.o socket.o socketengine.o userprocess.o cull_list.o command_parse.o aes.o \$(MODULES)
+EOM
+}
+
+print FH <<EOM;
 
 cull_list.o: cull_list.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/users.h ../include/channels.h
        \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c cull_list.cpp