#
########################################
-
-$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
+$config{NICK_LENGT} = "31"; # Default Nick Length
$config{CHAN_LENGT} = "64"; # Default Channel Name Length
$config{MAX_CHANNE} = "20"; # Default Max. Channels per user..
$config{MAXI_MODES} = "20"; # Default Max. Number of Modes set at once.
$config{HAS_STRLCPY} = "false"; # strlcpy Check.
-$config{USE_KQUEUE} = "n"; # kqueue enabled
+$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} = `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}) {
}
}
-
+print "Checking for cache from previous configure...\n";
getcache();
+print "Checking operating system version...\n";
getosflags();
if (!$config{MAX_CLIENT}) {
$config{MAX_CLIENT} = $config{MAX_CLIENT_T};
}
+printf "Checking if strlcpy exists... ";
# Perform the strlcpy() test..
$config{HAS_STRLCPY} = "false";
my $fail = 0;
{
# 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";
}
}
close(STRLCPY);
}
+print "yes\n" if $config{HAS_STRLCPY} eq "true";
+print "no\n" if $config{HAS_STRLCPY} eq "false";
+printf "Checking if kqueue exists... ";
$has_kqueue = 0;
$fail = 0;
open(KQUEUE, "</usr/include/sys/event.h") or $fail = 1;
{
# 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;
}
}
close(KQUEUE);
}
+print "yes\n" if $has_kqueue == 1;
+print "no\n" if $has_kqueue == 0;
+
+printf "Checking if epoll exists... ";
+$has_epoll = 0;
+$fail = 0;
+open(EPOLL, "</usr/include/sys/epoll.h") or $fail = 1;
+if (!$fail)
+{
+ while (chomp($line = <EPOLL>))
+ {
+ # try and find the declaration of:
+ # extern int epoll_create (int __size) __THROW;
+ if (($line =~ /int(\0x9|\s)+epoll_create(\0x9|\s)+\(/) || ($line =~ /int(\0x9|\s)+epoll_create\(/))
+ {
+ $has_epoll = 1;
+ }
+ }
+ close(EPOLL);
+}
+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 #
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?\nPlease be aware that kqueue support is\nEXPERIMENTAL and not gauranteed to work properly.\nIf you are unsure, answer no.\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 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..
}
}
+# Because of the terminating null char we must increment this by one
+$config{NICK_LENGT}++;
+
my $continue = 0;
while (!$continue) {
print "What is the Maximum number of mode changes in one line?\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();
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 #
}
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
+ # 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";
}
}
foreach $name (sort readdir(DIRHANDLE)) {
if ($name =~ /^m_(.+)\.cpp$/)
{
- $modlist[$i++] = $1;
+ $mod = $1;
+ if ($mod !~ /_static$/) {
+ $modlist[$i++] = $mod;
+ }
}
}
closedir(DIRHANDLE);
# 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
#define MAXBUF 514
EOF
+ if ($config{OSNAME} =~ /SunOS/) {
+ print FILEHANDLE "#define IS_SOLARIS\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";
print FILEHANDLE "#define GCC34\n";
if ($config{HAS_STRLCPY} eq "true") {
print FILEHANDLE "#define HAS_STRLCPY\n";
}
- if ($config{USE_KQUEUE} eq "y") {
+ my $use_hiperf = 0;
+ if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
print FILEHANDLE "#define USE_KQUEUE\n";
+ $use_hiperf = 1;
+ }
+ if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
+ print FILEHANDLE "#define USE_EPOLL\n";
+ $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) {
+ print FILEHANDLE "#define USE_SELECT\n";
}
close(FILEHANDLE);
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..
# 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$/)
}
close(FILEHANDLE);
+ $tmp =~ s/\@CC\@/$config{CC}/;
$tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
$tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
$tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
$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");
# 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");
# 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
+ @-rm -f \$(MODPATH)/m_$i.so
cp m_$i.so \$(MODPATH)/
chmod 0700 \$(MODPATH)/m_$i.so
EOCHEESE
+ }
+ }
+ }
+ if ($config{OSNAME} =~ /CYGWIN/) {
+ print MODLIST "{0}};\n\n#endif\n";
+ close(MODLIST);
}
}
}
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);
+}