#
###################################################
-require 5.6.0;
+require 5.8.0;
use Socket;
use Cwd;
use Getopt::Long;
{
# Suggestion from nenolod, weed out odd systems which have glibc built
# against 2.4 kernels (ick)
-
+ my $kernel_arch = `uname -p`;
+ chomp($kernel_arch);
$libcv = 0.0;
$kernelv = 0.0;
- open (FH,"/lib/libc.so.6|") or $has_epoll = 0;
+ if ($kernel_arch =~ /x86_64/) {
+ open (FH,"/lib64/libc.so.6|") or $has_epoll = 0;
+ }
+ else {
+ open (FH,"/lib/libc.so.6|") or $has_epoll = 0;
+ }
if ($has_epoll)
{
while (chomp($line = <FH>))
if ($line =~ /GNU C Library .* version (.*?) /)
{
$libcv = $1;
- $libcv =~ /([0-9\.\-])+/;
+ $libcv =~ /(\d+\.\d+)/;
$libcv = $1;
}
elsif ($line =~ /Compiled on a Linux (.*?\..*?)\.* system/)
{
$kernelv = $1;
# Fix for some retarded libc builds, strip off >> and << etc.
- $kernelv =~ /([0-9\.\-])+/;
+ $kernelv =~ /(\d+\.\d+)/;
$kernelv = $1;
}
}
$config{HAS_OPENSSL} = "n";
}
+printf "Checking if you are running an ancient, unsupported OS... ";
+if ($config{OSNAME} =~ /FreeBSD/i)
+{
+ $version = `uname -r`;
+ if ($version =~ /^4\./)
+ {
+ $foundit = `ls -l /usr/local/lib/libgnugetopt* | wc -l`;
+ if ($foundit > 0)
+ {
+ # ICKY ICKY ICK, FREEBSD 4.x! GET AN UPGRADE!
+ $config{CRAQ} = "-L/usr/local/lib -lgnugetopt -DHAVE_DECL_GETOPT=1";
+ print "yes\n";
+ }
+ else
+ {
+ print "\n\nERROR: You require libgnugetopt (from ports or packages) to build InspIRCd on FreeBSD 4.11.\n";
+ }
+ }
+ else
+ {
+ $config{CRAQ} = " ";
+ print "no ($version)\n";
+ }
+}
+else
+{
+ $config{CRAQ} = " ";
+ print "no ($config{OSNAME})\n";
+}
+
################################################################################
# BEGIN INTERACTIVE PART #
################################################################################
if ($config{OSNAME} =~ /OpenBSD/i) {
$config{MAKEPROG} = "gmake";
+ $config{LDLIBS} = $config{LDLIBS} . " -lunwind";
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
all: \$(MODULES)
EOF
+
+if ($config{OSNAME} =~ /darwin/) {
+ print FILEHANDLE <<EOCHEESE;
+
+PICLDFLAGS = -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle
+
+EOCHEESE
+} else {
+ print FILEHANDLE <<EOCHEESE;
+
+PICLDFLAGS = -fPIC -DPIC -shared \$(FLAGS)
+
+EOCHEESE
+}
+
###
# End Module Makefile Header
###
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/configreader.h $deps
- \$(CC) -pipe -I../../include \$(FLAGS) $cmflags -export-dynamic -c m_$i.cpp
-EOCHEESE
-
-if ($config{OSNAME} =~ /darwin/) {
- print FILEHANDLE <<EOCHEESE;
- \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle $liflags -o m_$i.so m_$i.o
-
-EOCHEESE
-} else {
- print FILEHANDLE <<EOCHEESE;
- \$(CC) -pipe \$(FLAGS) -shared $liflags -o m_$i.so m_$i.o
-
+ \$(CC) -pipe -I../../include \$(FLAGS) $cmflags \$(PICLDFLAGS) $liflags -export-dynamic -o m_$i.so m_$i.cpp
EOCHEESE
-}
$crud = $crud . " install -m \$(INSTMODE) m_$i.so \$(MODPATH)\n";
###
# End Write Entry to the MakeFile
opendir(DIRHANDLE, "src/modules");
foreach $name (sort readdir(DIRHANDLE)) {
if ($name =~ /^m_(.+?)$/) {
- $crapola = "";
- $crap3 = "";
+ $mfrules = "";
+ $mobjs = "";
$mliflags = "";
+ $mfcount = 0;
# A module made of multiple files, in a dir, e.g. src/modules/m_spanningtree/
if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
- my $i = 0;
- print FILEHANDLE "$name.so: ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h ../../include/inspircd_config.h ../../include/inspircd.h ../../include/configreader.h";
- foreach $fname (sort readdir(MDIRHANDLE)) {
- if ($fname =~ /\.cpp$/) {
- $cmflags = getcompilerflags("src/modules/$name/$fname");
- $mliflags = $mliflags . " " . getlinkerflags("src/modules/$name/$fname");
- $deps = getdependencies("src/modules/$name/$fname");
- $oname = $fname;
- $oname =~ s/\.cpp$/.o/g;
- print FILEHANDLE " $name/$oname";
- $crapola = $crapola . "$name/$oname: $name/$fname ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h ../../include/inspircd_config.h ../../include/inspircd.h ../../include/configreader.h $deps\n";
- $crapola = $crapola . " \$(CC) -pipe -I../../include -I. \$(FLAGS) $cmflags -export-dynamic -o $name/$oname -c $name/$fname\n\n";
- $crap3 = $crap3 . " $name/$oname";
- $i++;
- }
- }
- print "Composing Makefile rules for directory \033[1;32m$name\033[0m... (\033[1;32m$i files found\033[0m)\n";
+ read_module_directory("src/modules/$name", $name);
+ print "Composing Makefile rules for directory \033[1;32m$name\033[0m... (\033[1;32m$mfcount files found\033[0m)\n";
+ print FILEHANDLE "$name.so: ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h ../../include/inspircd_config.h ../../include/inspircd.h ../../include/configreader.h $mobjs\n";
if ($config{IS_DARWIN} eq "YES") {
- print FILEHANDLE "\n \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) -bundle -o $name.so $crap3\n";
+ print FILEHANDLE " \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) $mliflags -bundle -o $name.so $mobjs\n";
} else {
- print FILEHANDLE "\n \$(CC) -pipe \$(FLAGS) -shared $mliflags -o $name.so $crap3\n";
+ print FILEHANDLE " \$(CC) -pipe \$(FLAGS) -shared $mliflags -o $name.so $mobjs\n";
}
- print FILEHANDLE "\n$crapola\n";
+ print FILEHANDLE "\n$mfrules\n";
closedir(MDIRHANDLE);
$crud = $crud . " install -m \$(INSTMODE) $name.so \$(MODPATH)\n";
}
print FILEHANDLE "modinst:\n \@echo \"Installing modules...\"\n" . $crud;
}
+sub read_module_directory {
+ my ($dpath, $reldpath) = @_;
+
+ if (opendir(MDIRHANDLE, $dpath) == 0) {
+ return;
+ }
+
+ foreach $fname (sort readdir(MDIRHANDLE)) {
+ if ($fname =~ /\.cpp$/) {
+ $cmflags = getcompilerflags("$dpath/$fname");
+ $mliflags = $mliflags . " " . getlinkerflags("$dpath/$fname");
+ $deps = getdependencies("$dpath/$fname");
+ $oname = $fname;
+ $oname =~ s/\.cpp$/.o/g;
+ $mfrules = $mfrules . "$reldpath/$oname: $reldpath/$fname ../../include/modules.h ../../include/users.h ../../include/channels.h ../../include/base.h ../../include/inspircd_config.h ../../include/inspircd.h ../../include/configreader.h $deps\n";
+ $mfrules = $mfrules . " \$(CC) -pipe -I../../include -I. \$(FLAGS) $cmflags -export-dynamic -o $reldpath/$oname -c $reldpath/$fname\n\n";
+ $mobjs = $mobjs . " $reldpath/$oname";
+ $mfcount++;
+ }
+ elsif ((-d "$dpath/$fname") && !($fname eq ".") && !($fname eq "..")) {
+ read_module_directory($dpath."/".$fname, $reldpath."/".$fname);
+ }
+ }
+}
+
sub write_dynamic_makefile {
my $i = 0;
$se = "socketengine_ports";
}
+ $freebsd4libs = $config{CRAQ};
+
open(FH,">src/Makefile") or die("Could not write src/Makefile");
print FH <<EOM;
###################################################
if ($config{IS_DARWIN} eq "YES") {
print FH <<EOM;
-all: libIRCDtimer.dylib libIRCDcull_list.dylib libIRCDuserprocess.dylib libIRCDsocketengine.dylib libIRCDsocket.dylib libIRCDhash.dylib libIRCDchannels.dylib libIRCDmode.dylib libIRCDxline.dylib libIRCDstring.dylib libIRCDasyncdns.dylib libIRCDbase.dylib libIRCDconfigreader.dylib libIRCDinspsocket.dylib libIRCDcommands.dylib libIRCDdynamic.dylib libIRCDusers.dylib libIRCDmodules.dylib libIRCDwildcard.dylib libIRCDhelper.dylib libIRCDcommand_parse.dylib libIRCDsnomasks.dylib libIRCDserver.dylib libIRCDfilelogger.dylib inspircd
+all: libIRCDtimer.dylib libIRCDcull_list.dylib libIRCDuserprocess.dylib libIRCDsocketengine.dylib libIRCDsocket.dylib libIRCDhash.dylib libIRCDchannels.dylib libIRCDmode.dylib libIRCDxline.dylib libIRCDstring.dylib libIRCDasyncdns.dylib libIRCDbase.dylib libIRCDconfigreader.dylib libIRCDinspsocket.dylib libIRCDcommands.dylib libIRCDdynamic.dylib libIRCDusers.dylib libIRCDmodules.dylib libIRCDwildcard.dylib libIRCDhelper.dylib libIRCDcommand_parse.dylib libIRCDsnomasks.dylib libIRCDserver.dylib libIRCDfilelogger.dylib libIRCDuserresolver.dylib inspircd
-inspircd: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h ../include/socket.h $cmdobjs libIRCDtimer.dylib libIRCDcull_list.dylib libIRCDuserprocess.dylib libIRCDsocketengine.dylib libIRCDsocket.dylib libIRCDhash.dylib libIRCDchannels.dylib libIRCDmode.dylib libIRCDxline.dylib libIRCDstring.dylib libIRCDasyncdns.dylib libIRCDbase.dylib libIRCDconfigreader.dylib libIRCDinspsocket.dylib libIRCDsnomasks.dylib libIRCDcommands.dylib libIRCDdynamic.dylib libIRCDusers.dylib libIRCDmodules.dylib libIRCDwildcard.dylib libIRCDhelper.dylib libIRCDcommand_parse.dylib libIRCDserver.dylib libIRCDfilelogger.dylib
+inspircd: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h ../include/socket.h $cmdobjs libIRCDtimer.dylib libIRCDcull_list.dylib libIRCDuserprocess.dylib libIRCDsocketengine.dylib libIRCDsocket.dylib libIRCDhash.dylib libIRCDchannels.dylib libIRCDmode.dylib libIRCDxline.dylib libIRCDstring.dylib libIRCDasyncdns.dylib libIRCDbase.dylib libIRCDconfigreader.dylib libIRCDinspsocket.dylib libIRCDsnomasks.dylib libIRCDcommands.dylib libIRCDdynamic.dylib libIRCDusers.dylib libIRCDmodules.dylib libIRCDwildcard.dylib libIRCDhelper.dylib libIRCDcommand_parse.dylib libIRCDserver.dylib libIRCDfilelogger.dylib libIRCDuserresolver.dylib
\$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd.cpp
- \$(CC) -pipe -dynamic -bind_at_load -L. -o inspircd \$(LDLIBS) inspircd.o libIRCDchannels.dylib libIRCDmode.dylib libIRCDxline.dylib libIRCDstring.dylib libIRCDasyncdns.dylib libIRCDbase.dylib libIRCDconfigreader.dylib libIRCDinspsocket.dylib libIRCDcommands.dylib libIRCDdynamic.dylib libIRCDusers.dylib libIRCDmodules.dylib libIRCDwildcard.dylib libIRCDhelper.dylib libIRCDhash.dylib libIRCDsocket.dylib libIRCDsocketengine.dylib libIRCDuserprocess.dylib libIRCDcull_list.dylib libIRCDcommand_parse.dylib libIRCDtimer.dylib libIRCDsnomasks.dylib libIRCDserver.dylib libIRCDfilelogger.dylib
+ \$(CC) -pipe -dynamic -bind_at_load -L. -o inspircd \$(LDLIBS) inspircd.o libIRCDchannels.dylib libIRCDmode.dylib libIRCDxline.dylib libIRCDstring.dylib libIRCDasyncdns.dylib libIRCDbase.dylib libIRCDconfigreader.dylib libIRCDinspsocket.dylib libIRCDcommands.dylib libIRCDdynamic.dylib libIRCDusers.dylib libIRCDmodules.dylib libIRCDwildcard.dylib libIRCDhelper.dylib libIRCDhash.dylib libIRCDsocket.dylib libIRCDsocketengine.dylib libIRCDuserprocess.dylib libIRCDcull_list.dylib libIRCDcommand_parse.dylib libIRCDtimer.dylib libIRCDsnomasks.dylib libIRCDserver.dylib libIRCDfilelogger.dylib libIRCDuserresolver.dylib
libIRCDsocketengine.dylib: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
\$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp
\$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c filelogger.cpp
\$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDfilelogger.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDfilelogger.dylib filelogger.o
+libIRCDuserresolver.dylib: user_resolver.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/users.h
+ \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c user_resolver.cpp
+ \$(CC) -pipe -install_name $config{LIBRARY_DIR}/libIRCDfilelogger.dylib -dynamiclib -twolevel_namespace -undefined dynamic_lookup -o libIRCDuserresolver.dylib user_resolver.o
+
EOM
} else {
print FH <<EOM;
-all: libIRCDtimer.so libIRCDcull_list.so libIRCDuserprocess.so libIRCDsocketengine.so libIRCDsocket.so libIRCDhash.so libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDconfigreader.so libIRCDinspsocket.so $cmdobjs libIRCDcommands.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDcommand_parse.so libIRCDsnomasks.so libIRCDserver.so libIRCDfilelogger.so inspircd
+all: libIRCDtimer.so libIRCDcull_list.so libIRCDuserprocess.so libIRCDsocketengine.so libIRCDsocket.so libIRCDhash.so libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDconfigreader.so libIRCDinspsocket.so $cmdobjs libIRCDcommands.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDcommand_parse.so libIRCDsnomasks.so libIRCDserver.so libIRCDfilelogger.so libIRCDuserresolver.so inspircd
-inspircd: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h ../include/socket.h libIRCDtimer.so libIRCDcull_list.so libIRCDuserprocess.so libIRCDsocketengine.so libIRCDsocket.so libIRCDhash.so libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDconfigreader.so libIRCDinspsocket.so $cmdobjs libIRCDsnomasks.so libIRCDcommands.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDcommand_parse.so libIRCDserver.so libIRCDfilelogger.so
- \$(CC) -pipe -I../include -Wl,--rpath -Wl,$config{LIBRARY_DIR} \$(FLAGS) -rdynamic -L. inspircd.cpp -o inspircd \$(LDLIBS) libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDconfigreader.so libIRCDinspsocket.so libIRCDcommands.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDhash.so libIRCDsocket.so libIRCDsocketengine.so libIRCDuserprocess.so libIRCDcull_list.so libIRCDcommand_parse.so libIRCDtimer.so libIRCDsnomasks.so libIRCDserver.so libIRCDfilelogger.so
+inspircd: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h ../include/socket.h libIRCDtimer.so libIRCDcull_list.so libIRCDuserprocess.so libIRCDsocketengine.so libIRCDsocket.so libIRCDhash.so libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDconfigreader.so libIRCDinspsocket.so $cmdobjs libIRCDsnomasks.so libIRCDcommands.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDcommand_parse.so libIRCDserver.so libIRCDfilelogger.so libIRCDuserresolver.so
+ \$(CC) -pipe -I../include -Wl,--rpath -Wl,$config{LIBRARY_DIR} \$(FLAGS) $freebsd4libs -rdynamic -L. inspircd.cpp -o inspircd \$(LDLIBS) libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDconfigreader.so libIRCDinspsocket.so libIRCDcommands.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDhelper.so libIRCDhash.so libIRCDsocket.so libIRCDsocketengine.so libIRCDuserprocess.so libIRCDcull_list.so libIRCDcommand_parse.so libIRCDtimer.so libIRCDsnomasks.so libIRCDserver.so libIRCDfilelogger.so libIRCDuserresolver.so
libIRCDsocketengine.so: $se.cpp socketengine.cpp ../include/base.h ../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h ../include/$se.h
\$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp $se.cpp
\$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c filelogger.cpp
\$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDfilelogger.so filelogger.o
+libIRCDuserresolver.so: user_resolver.cpp ../include/base.h ../include/inspircd.h ../include/globals.h ../include/inspircd_config.h ../include/users.h
+ \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c user_resolver.cpp
+ \$(CC) -pipe -Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared -o libIRCDuserresolver.so user_resolver.o
+
EOM
}
foreach my $cmd (@cmdlist) {