]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - configure
Nonblocking connect() for outbound server links (why was this blocking anyway)
[user/henk/code/inspircd.git] / configure
index a305fc63de43e0577add1fd218cda251951a71b9..2fe49a74c63a4caf416c6d7a1ef98cbf0b56f3d9 100755 (executable)
--- a/configure
+++ b/configure
@@ -29,13 +29,20 @@ $config{MAXI_MODES}         = "20";                                         # Default Max.
 $config{HAS_STRLCPY}        = "false";                                         # strlcpy Check.
 $config{USE_KQUEUE}         = "y";                                             # kqueue enabled
 $config{USE_EPOLL}          = "y";                                             # epoll enabled
+$config{STATIC_LINK}       = "no";                                             # are doing static modules?
 chomp($config{MAX_CLIENT_T} = `sh -c \"ulimit -n\"`);                          # FD Limit
 chomp($config{GCCVER}       = `gcc -dumpversion | cut -c 1`);                  # Major GCC Version
 chomp($config{GCC34}        = `gcc -dumpversion | cut -c 3`);                  # Minor GCC Version
-chomp($config{OSNAME}       = `/bin/uname -s`);                                # Operating System Name
-
-if (!$config{OSNAME}) {
-  $config{OSNAME} = "Unknown";                                  # For use when uname fails.
+chomp($config{OSNAME}       = `/bin/uname`);                                   # Operating System Name
+$config{CC}                = "g++";                                            # C++ compiler
+$config{MAKEORDER}         = "ircd mods config bininst";                       # build order
+$config{STATICLIBS}         = "";                                              # library archive path
+
+if ((!$config{OSNAME}) || ($config{OSNAME} eq "")) {
+  chomp($config{OSNAME} = `/usr/bin/uname`);
+  if ((!$config{OSNAME}) || ($config{OSNAME} eq "")){
+       $config{OSNAME} = "Unknown";
+  }
 }
 
 if (!$config{MAX_CLIENT_T}) { 
@@ -88,7 +95,7 @@ if (!$fail)
        {
                # try and find the delcaration of:
                # size_t strlcpy(...)
-               if (($line =~ /size_t(\0x9|\s)+strlcpy(\0x9|\s)+\(/) || ($line =~ /size_t(\0x9|\s)+strlcpy\(/))
+               if ($line =~ /size_t(\0x9|\s)+strlcpy/)
                {
                        $config{HAS_STRLCPY} = "true";
                }
@@ -108,7 +115,7 @@ if (!$fail)
         {
                 # try and find the delcaration of:
                # int kqueue(void);
-               if (($line =~ /int(\0x9|\s)+kqueue(\0x9|\s)+\(/) || ($line =~ /int(\0x9|\s)+kqueue\(/))
+               if ($line =~ /int(\0x9|\s)+kqueue/)
                {
                        $has_kqueue = 1;
                }
@@ -138,6 +145,10 @@ if (!$fail)
 print "yes\n" if $has_epoll == 1;
 print "no\n" if $has_epoll == 0;
 
+if ($config{OSNAME} =~ /CYGWIN/) {
+       $config{HAS_STRLCPY} = "true";
+}
+
 ################################################################################
 #                          BEGIN INTERACTIVE PART                              #
 ################################################################################
@@ -283,7 +294,9 @@ print "\033[0mMax nickname length:\033[1;32m\t\t$config{NICK_LENGT}\n";
 print "\033[0mMax channel length:\033[1;32m\t\t$config{CHAN_LENGT}\n";
 print "\033[0mMax mode length:\033[1;32m\t\t$config{MAXI_MODES}\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\n";
+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\n";
 
 makecache();
 writefiles();
@@ -291,6 +304,18 @@ writefiles();
 print "\n\n";
 print "To build your server with these settings, please type '\033[1;32m$config{MAKEPROG}\033[0m' now.\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 <<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
+}
 
 ################################################################################
 #                              HELPER FUNCTIONS                                #
@@ -374,18 +399,41 @@ sub dir_check {
 }
 
 sub getosflags {
-  if ($config{OSNAME} eq "FreeBSD") {
+  if ($config{OSNAME} =~ /BSD$/) {
     $config{LDLIBS} = "-Ldl";
     $config{FLAGS}  = "-fPIC -frtti $OPTIMISATI -Woverloaded-virtual $config{OPTIMISATI}";
     $config{MAKEPROG} = "gmake";
+    if ($config{OSNAME} eq "OpenBSD") {
+       chomp($foo = `eg++ -dumpversion | cut -c 1`);
+       # theyre running the package version of gcc (eg++)... detect it and set up its version numbers.
+       # if theyre not running this, configure lets the build continue but they probably wont manage to
+       # 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
+       }
+    }
   } else {
     $config{LDLIBS} = "-ldl";
     $config{FLAGS}  = "-fPIC -frtti $OPTIMISATI -Woverloaded-virtual $config{OPTIMISATI}";
     $config{MAKEPROG} = "make";
+    if ($config{OSNAME} =~ /CYGWIN/) {
+       $config{FLAGS}  = "-frtti $OPTIMISATI -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";
+    }
   }
   if ($config{OSNAME} =~ /SunOS/) {
     # solaris/sunos needs these
-    $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl";
+    # socket = bsd sockets api
+    # nsl = dns stuff
+    # rt = POSIX realtime extensions
+    # resolv = inet_aton only (why isnt this in nsl?!)
+    $config{LDLIBS} = $config{LDLIBS} . " -lsocket -lnsl -lrt -lresolv";
   }
 }
 
@@ -407,7 +455,10 @@ sub getmodules {
   foreach $name (sort readdir(DIRHANDLE)) {
     if ($name =~ /^m_(.+)\.cpp$/)
     {
-      $modlist[$i++] = $1;
+      $mod = $1;
+      if ($mod !~ /_static$/) {
+             $modlist[$i++] = $mod;
+      }
     }
   }
   closedir(DIRHANDLE);
@@ -438,11 +489,13 @@ sub writefiles {
 EOF
 
   if ($config{OSNAME} =~ /SunOS/) {
-    print "MOO!\n";
-    print FILENAME "#define IS_SOLARIS";
+    print FILEHANDLE "#define IS_SOLARIS\n";
   }
-  else {
-    print "NO MOO :( ->'" . $config{OSNAME} . "'\n";
+  if ($config{OSNAME} =~ /CYGWIN/) {
+    print FILEHANDLE "#define IS_CYGWIN\n";
+  }
+  if ($config{STATIC_LINK} eq "yes") {
+    print FILEHANDLE "#define STATIC_LINK\n";
   }
   if ($config{GCCVER} > 3) {
     print FILEHANDLE "#define GCC3\n";
@@ -480,7 +533,12 @@ EOF
   my $modules = "";
   foreach $i (@modlist)
   {
-    $modules .= "m_".$i.".so ";
+    if ($config{OSNAME} =~ /CYGWIN/) {
+        $modules .= "m_".$i.".o ";
+    }
+    else {
+        $modules .= "m_".$i.".so ";
+    }
   }
   chomp($modules);   # Remove Redundant whitespace..
 
@@ -488,6 +546,12 @@ EOF
   # Write all .in files.
   my $tmp = "";
   my $file = "";
+  my $exe = "inspircd";
+
+  if ($config{OSNAME} =~ /CYGWIN/) {
+    $exe = "inspircd.exe";
+  }
+
   opendir(DIRHANDLE, $this);
   foreach $name (sort readdir(DIRHANDLE)) {
     if ($name =~ /^\.(.+)\.inc$/)
@@ -501,6 +565,7 @@ EOF
       }
       close(FILEHANDLE);
 
+      $tmp =~ s/\@CC\@/$config{CC}/;
       $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
       $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
       $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
@@ -509,6 +574,9 @@ EOF
       $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
       $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
       $tmp =~ s/\@MODULES\@/$modules/;
+      $tmp =~ s/\@EXECUTABLE\@/$exe/;
+      $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
+      $tmp =~ s/\@STATICLIBS\@/$config{STATICLIBS}/;
 
       print "Writing \033[1;32m$file\033[0m\n";
       open(FILEHANDLE, ">$file");
@@ -520,6 +588,16 @@ EOF
   # Make inspircd executable!
   chmod 0744, 'inspircd';
 
+  if ($config{OSNAME} =~ /CYGWIN/) {
+       print "Writing static-build \033[1;32msrc/Makefile\033[0m\n";
+       write_static_makefile();
+  }
+  else {
+       print "Writing dynamic-build \033[1;32msrc/Makefile\033[0m\n";
+       write_dynamic_makefile();
+  }
+
+
   # Modules Makefile..
   print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
   open(FILEHANDLE, ">src/modules/Makefile");
@@ -539,10 +617,50 @@ EOF
   # Create a Modules List..
   my $modules = "";
   my $flags = "";
+  if ($config{OSNAME} =~ /CYGWIN/) {
+     open(MODLIST,">include/modlist.h");
+     print MODLIST <<HEADER;
+// Generated automatically by configure. DO NOT EDIT!
+
+#ifndef __SYMBOLS__H_CONFIGURED__
+#define __SYMBOLS__H_CONFIGURED__
+
+HEADER
+     foreach $i (@modlist) {
+       if ($i !~ /_static$/) {
+               print MODLIST "extern \"C\" void * $i\_init (void);\n";
+       }
+     }
+     print MODLIST "\nstruct {const char *name; initfunc *value; } modsyms[] = {\n";
+  }
   foreach $i (@modlist)
   {
-    $flags = getcompilerflags("src/modules/m_".$i.".cpp");
-    print FILEHANDLE <<EOCHEESE;
+    if ($i !~ /_static$/) {
+     $flags = getcompilerflags("src/modules/m_".$i.".cpp");
+     if ($config{OSNAME} =~ /CYGWIN/) {
+        print FILEHANDLE <<EOCHEESE;
+m_$i.o: m_$i\_static.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/servers.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
+
+EOCHEESE
+        print "Configuring module [\033[1;32mm_$i.so\033[0m] for static linking... ";
+        open(MODULE,"<src/modules/m_".$i.".cpp") or die("Could not open m_".$i.".cpp");
+        open(MUNGED,">src/modules/m_".$i."_static.cpp") or die("Could not create m_".$i."_static.cpp");
+        while (chomp($a = <MODULE>)) { 
+               $a =~ s/init_module/$i\_init/g;
+               $a =~ s/Srv/$i\Srv/g;
+               print MUNGED "$a\n";
+        }
+        close(MODULE);
+        close(MUNGED);
+        print MODLIST <<EOENT;
+{"m_$i.so",\&$i\_init},
+EOENT
+        print "done\n";
+     }
+     else {
+         print FILEHANDLE <<EOCHEESE;
 m_$i.so: m_$i.cpp ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/servers.h ../../include/base.h
        \$(CC) -pipe -I../../include \$(FLAGS) $flags -export-dynamic -c m_$i.cpp
        \$(CC) \$(FLAGS) -shared $flags -o m_$i.so m_$i.o
@@ -550,6 +668,12 @@ m_$i.so: m_$i.cpp ../../include/modules.h ../../include/users.h ../../include/ch
        chmod 0700 \$(MODPATH)/m_$i.so
 
 EOCHEESE
+      }
+   }
+  }
+  if ($config{OSNAME} =~ /CYGWIN/) {
+     print MODLIST "{0}};\n\n#endif\n";
+     close(MODLIST);
   }
 }
 
@@ -595,3 +719,184 @@ sub yesno {
         }
        return;
 }
+
+
+sub write_static_makefile {
+       open(FH,">src/Makefile") or die("Could not write src/Makefile!");
+       print FH <<EOM;
+# Insp Makefile :p
+#
+# (C) ChatSpike development team
+# Makefile by <Craig\@ChatSpike.net>
+# Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
+#
+
+CC = im a cheezeball
+
+CXXFLAGS = -I../include \${FLAGS}
+
+all: hashcomp.o channels.o mode.o xline.o inspstring.o dns.o base.o inspircd_util.o inspircd_io.o connection.o message.o commands.o dnsqueue.o dynamic.o users.o modules.o wildcard.o servers.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
+       \$(CC) -I../include \$(FLAGS) inspircd.cpp -o inspircd.exe \$(LDLIBS) channels.o mode.o xline.o inspstring.o dns.o base.o inspircd_util.o inspircd_io.o connection.o message.o commands.o dnsqueue.o dynamic.o users.o modules.o wildcard.o servers.o helperfuncs.o hashcomp.o \$(MODULES)
+
+hashcomp.o: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
+
+helperfuncs.o: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
+
+channels.o: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
+
+mode.o: mode.cpp ../include/base.h ../include/mode.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
+
+xline.o: xline.cpp ../include/base.h ../include/xline.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
+
+inspstring.o: inspstring.cpp ../include/base.h ../include/inspstring.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
+
+dns.o: dns.cpp ../include/base.h ../include/dns.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
+
+base.o: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
+
+inspircd_util.o: inspircd_util.cpp ../include/base.h ../include/inspircd_util.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_util.cpp
+
+inspircd_io.o: inspircd_io.cpp ../include/base.h ../include/inspircd_io.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_io.cpp
+
+connection.o: connection.cpp ../include/base.h ../include/connection.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c connection.cpp
+
+message.o: message.cpp ../include/base.h ../include/message.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
+
+commands.o: commands.cpp ../include/base.h ../include/commands.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
+
+dnsqueue.o: dnsqueue.cpp ../include/base.h ../include/dnsqueue.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dnsqueue.cpp
+
+dynamic.o: dynamic.cpp ../include/base.h ../include/dynamic.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
+
+users.o: users.cpp ../include/base.h ../include/users.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/connection.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
+
+modules.o: modules.cpp ../include/base.h ../include/modules.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
+
+wildcard.o: wildcard.cpp ../include/base.h ../include/wildcard.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
+
+servers.o: servers.cpp ../include/base.h ../include/servers.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/connection.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c servers.cpp
+
+
+EOM
+close(FH);
+}
+
+sub write_dynamic_makefile {
+       open(FH,">src/Makefile") or die("Could not write src/Makefile");
+       print FH <<EOM;
+# Insp Makefile :p
+#
+# (C) ChatSpike development team
+# Makefile by <Craig\@ChatSpike.net>
+# Makefile version 2 (dynamically linked core) by <brain\@inspircd.org>
+#
+
+CC = im a cheezeball
+
+CXXFLAGS = -I../include \${FLAGS}
+
+all: libIRCDhash.so libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDutil.so libIRCDio.so libIRCDconnection.so libIRCDmessage.so libIRCDcommands.so libIRCDdnsqueue.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDservers.so libIRCDhelper.so inspircd
+
+inspircd: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -I../include \$(FLAGS) -rdynamic -L. inspircd.cpp -o inspircd \$(LDLIBS) libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDutil.so libIRCDio.so libIRCDconnection.so libIRCDmessage.so libIRCDcommands.so libIRCDdnsqueue.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDservers.so libIRCDhelper.so libIRCDhash.so
+
+libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c hashcomp.cpp
+       \$(CC) -shared -o libIRCDhash.so hashcomp.o
+
+libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c helperfuncs.cpp
+       \$(CC) -shared -o libIRCDhelper.so helperfuncs.o
+
+libIRCDchannels.so: channels.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c channels.cpp
+       \$(CC) -shared -o libIRCDchannels.so channels.o
+
+libIRCDmode.so: mode.cpp ../include/base.h ../include/mode.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c mode.cpp
+       \$(CC) -shared -o libIRCDmode.so mode.o
+
+libIRCDxline.so: xline.cpp ../include/base.h ../include/xline.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c xline.cpp
+       \$(CC) -shared -o libIRCDxline.so xline.o
+
+libIRCDstring.so: inspstring.cpp ../include/base.h ../include/inspstring.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspstring.cpp
+       \$(CC) -shared -o libIRCDstring.so inspstring.o
+
+libIRCDasyncdns.so: dns.cpp ../include/base.h ../include/dns.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dns.cpp
+       \$(CC) -shared -o libIRCDasyncdns.so dns.o
+
+libIRCDbase.so: base.cpp ../include/base.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c base.cpp
+       \$(CC) -shared -o libIRCDbase.so base.o
+
+libIRCDutil.so: inspircd_util.cpp ../include/base.h ../include/inspircd_util.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_util.cpp
+       \$(CC) -shared -o libIRCDutil.so inspircd_util.o
+
+libIRCDio.so: inspircd_io.cpp ../include/base.h ../include/inspircd_io.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd_io.cpp
+       \$(CC) -shared -o libIRCDio.so inspircd_io.o
+
+libIRCDconnection.so: connection.cpp ../include/base.h ../include/connection.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c connection.cpp
+       \$(CC) -shared -o libIRCDconnection.so connection.o
+
+libIRCDmessage.so: message.cpp ../include/base.h ../include/message.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c message.cpp
+       \$(CC) -shared -o libIRCDmessage.so message.o
+
+libIRCDcommands.so: commands.cpp ../include/base.h ../include/commands.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c commands.cpp
+       \$(CC) -shared -o libIRCDcommands.so commands.o
+
+libIRCDdnsqueue.so: dnsqueue.cpp ../include/base.h ../include/dnsqueue.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dnsqueue.cpp
+       \$(CC) -shared -o libIRCDdnsqueue.so dnsqueue.o
+
+libIRCDdynamic.so: dynamic.cpp ../include/base.h ../include/dynamic.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c dynamic.cpp
+       \$(CC) -shared -o libIRCDdynamic.so dynamic.o
+
+libIRCDusers.so: users.cpp ../include/base.h ../include/users.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/connection.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c users.cpp
+       \$(CC) -shared -o libIRCDusers.so users.o
+
+libIRCDmodules.so: modules.cpp ../include/base.h ../include/modules.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c modules.cpp
+       \$(CC) -shared -o libIRCDmodules.so modules.o
+
+libIRCDwildcard.so: wildcard.cpp ../include/base.h ../include/wildcard.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c wildcard.cpp
+       \$(CC) -shared -o libIRCDwildcard.so wildcard.o
+
+libIRCDservers.so: servers.cpp ../include/base.h ../include/servers.h ../include/inspircd.h ../include/channels.h ../include/users.h ../include/globals.h ../include/inspircd_config.h ../include/connection.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c servers.cpp
+       \$(CC) -shared -o libIRCDservers.so servers.o
+
+EOM
+close(FH);
+}