]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - configure
Changed to fix minor typo in dynamic-build makefile
[user/henk/code/inspircd.git] / configure
index 6432d298c8aaf6c0364261628fcf24c4cf65c35d..30cf348cfd3835cdd0b6bc046bd74124e05c4219 100755 (executable)
--- a/configure
+++ b/configure
 #
 ########################################
 
-
-$this = resolve_directory($ENV{PWD});                                          # PWD, Regardless.
+chomp($topdir = `pwd`);
+$this = resolve_directory($topdir);                                            # PWD, Regardless.
 @modlist = ();                                                                 # Declare for Module List..
 %config = ();                                                                  # Initiate Configuration Hash..
-$config{ME}                 = resolve_directory($ENV{PWD});                    # Present Working Directory
-$config{CONFIG_DIR}         = resolve_directory($ENV{PWD}."/conf");            # Configuration Directory
-$config{MODULE_DIR}         = resolve_directory($ENV{PWD}."/modules");         # Modules Directory
-$config{BINARY_DIR}         = resolve_directory($ENV{PWD}."/bin");             # Binary Directory
-$config{LIBRARY_DIR}        = resolve_directory($ENV{PWD}."/lib");             # Library Directory
+$config{ME}                 = resolve_directory($topdir);                      # Present Working Directory
+$config{CONFIG_DIR}         = resolve_directory($config{ME}."/conf");          # Configuration Directory
+$config{MODULE_DIR}         = resolve_directory($config{ME}."/modules");       # Modules Directory
+$config{BINARY_DIR}         = resolve_directory($config{ME}."/bin");           # Binary Directory
+$config{LIBRARY_DIR}        = resolve_directory($config{ME}."/lib");           # Library Directory
 $config{OPTIMITEMP}         = "0";                                             # Default Optimisation Value
 $config{OPTIMISATI}         = "-g";                                            # Optimisation Flag
 $config{NICK_LENGT}         = "32";                                            # Default Nick Length
@@ -32,10 +32,14 @@ $config{USE_EPOLL}          = "y";                                          # epoll enabled
 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}       = `uname -s`);                                     # Operating System Name
+chomp($config{OSNAME}       = `/bin/uname`);                                   # Operating System Name
+$config{CC}                = "g++";                                            # C++ compiler
 
-if (!$config{OSNAME}) {
-  $config{OSNAME} = "Unknown";                                  # For use when uname fails.
+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 +92,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 +112,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 +142,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                              #
 ################################################################################
@@ -171,10 +179,16 @@ dir_check("is the IRCd binary to be placed", "BINARY_DIR");
 dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
 
 if ($has_kqueue) {
-       yesno(USE_KQUEUE,"You are running a BSD operating system, and kqueue\nwas detected. Would you like to enable kqueue support?\nIf you are unsure, answer yes.\n\nEnable kqueue?");
+       yesno(USE_KQUEUE,"You are running a BSD operating system, and kqueue\nwas detected. Would you like to enable kqueue support?\nThis is likely to increase performance.\nIf you are unsure, answer yes.\n\nEnable kqueue?");
 }
 if ($has_epoll) {
-       yesno(USE_EPOLL,"You are running a linux operating system, and epoll\nwas detected. Would you like to enable epoll support?\nIf you are unsure, answer yes.\n\nEnable epoll?");
+       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?");
+}
+$chose_hiperf = (($config{USE_EPOLL} eq "y") || ($config{USE_KQUEUE} 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";
 }
 
 # File Descriptor Settings..
@@ -277,7 +291,8 @@ 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\n";
 
 makecache();
 writefiles();
@@ -285,6 +300,12 @@ 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 "\033[1;32mWARNING!\033[0m CYGWIN does not properly support shared modules,\nso modules are unavailable on this platform.\nThe modules will build as .o files but will not be available for use.\nYou will be able to run the core ircd file (inspircd.exe) as normal.\n";
+}
 
 ################################################################################
 #                              HELPER FUNCTIONS                                #
@@ -368,14 +389,38 @@ 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";
+    }
+  }
+  if ($config{OSNAME} =~ /SunOS/) {
+    # solaris/sunos needs these
+    # 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";
   }
 }
 
@@ -409,7 +454,7 @@ sub writefiles {
   # First File.. inspircd_config.h
   chomp(my $incos = `uname -n -s -r`);
   chomp(my $version = `sh ./src/version.sh`);
-  open(FILEHANDLE, "> include/inspircd_config.h");
+  open(FILEHANDLE, ">include/inspircd_config.h");
   print FILEHANDLE <<EOF;
 /* Auto generated by configure, do not modify! */
 #define SYSLOG_FACILITY LOG_DAEMON
@@ -427,6 +472,9 @@ sub writefiles {
 #define MAXBUF 514
 EOF
 
+  if ($config{OSNAME} =~ /SunOS/) {
+    print FILEHANDLE "#define IS_SOLARIS\n";
+  }
   if ($config{GCCVER} > 3) {
     print FILEHANDLE "#define GCC3\n";
     print FILEHANDLE "#define GCC34\n";
@@ -463,7 +511,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..
 
@@ -471,6 +524,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$/)
@@ -484,6 +543,7 @@ EOF
       }
       close(FILEHANDLE);
 
+      $tmp =~ s/\@CC\@/$config{CC}/;
       $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
       $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
       $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
@@ -492,6 +552,7 @@ EOF
       $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
       $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
       $tmp =~ s/\@MODULES\@/$modules/;
+      $tmp =~ s/\@EXECUTABLE\@/$exe/;
 
       print "Writing \033[1;32m$file\033[0m\n";
       open(FILEHANDLE, ">$file");
@@ -503,6 +564,15 @@ 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");
@@ -525,7 +595,15 @@ EOF
   foreach $i (@modlist)
   {
     $flags = getcompilerflags("src/modules/m_".$i.".cpp");
-    print FILEHANDLE <<EOCHEESE;
+    if ($config{OSNAME} =~ /CYGWIN/) {
+       print FILEHANDLE <<EOCHEESE;
+m_$i.o: 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
+
+EOCHEESE
+    }
+    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
@@ -533,6 +611,7 @@ m_$i.so: m_$i.cpp ../../include/modules.h ../../include/users.h ../../include/ch
        chmod 0700 \$(MODPATH)/m_$i.so
 
 EOCHEESE
+     }
   }
 }
 
@@ -578,3 +657,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 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
+
+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);
+}