- if (!is_dir($var)) {
- # Target exists, but is not a directory.
- print "File $var exists, but is not a directory.\n\n";
- next;
- }
- }
- # Either Dir Exists, or was created fine.
- $config{$hash_key} = $var;
- $complete = 1;
- print "\n";
- }
-}
-
-sub getosflags {
-
- $config{LDLIBS} = "-lstdc++";
- $config{FLAGS} = "-fPIC -Wall -pedantic $config{OPTIMISATI}";
- $config{DEVELOPER} = "-fPIC -Wall -pedantic -g";
- $SHARED = "-Wl,--rpath -Wl,$config{LIBRARY_DIR} -shared";
- $config{MAKEPROG} = "make";
-
- if ($config{OSNAME} =~ /darwin/i) {
- $config{FLAGS} = "-DDARWIN -frtti -fPIC -Wall -pedantic $config{OPTIMISATI}";
- $SHARED = "-bundle -twolevel_namespace -undefined dynamic_lookup";
- $config{LDLIBS} = "-ldl -lstdc++";
- }
-
- 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
- # 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 the compiler path
- }
- return "OpenBSD";
- }
-
- if ($config{OSNAME} =~ /Linux/i) {
- $config{LDLIBS} = "-ldl -lstdc++";
- $config{FLAGS} = "-fPIC -Wall -pedantic $config{OPTIMISATI}";
- $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
- $config{LDLIBS} .= " " . $ENV{LDLIBS} if exists($ENV{LDLIBS});
- $config{MAKEPROG} = "make";
- }
-
- if ($config{OSNAME} =~ /FreeBSD/i) {
- $config{FLAGS} .= " " . $ENV{CXXFLAGS} if exists($ENV{CXXFLAGS});
- $config{LDLIBS} .= " " . $ENV{LDLIBS} if exists($ENV{LDLIBS});
- }
-
- if ($config{OSNAME} =~ /SunOS/i or $config{OSNAME} =~ /solaris/i)
- {
- # 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{MAKEPROG} = "gmake";
- $config{LDLIBS} .= " -lsocket -lnsl -lrt -lresolv";
- return "Solaris";
- }
-
- if($config{OSNAME} =~ /MINGW32/i)
- {
- # All code is position-independent on windows
- $config{FLAGS} =~ s/-fPIC //;
- return "MinGW";
- }
-
- return $config{OSNAME};
-}
-
-sub writefiles {
- my($writeheader) = @_;
- # First File.. inspircd_config.h
- chomp(my $incos = `uname -n -s -r`);
- chomp($version = `sh src/version.sh`);
- chomp(my $revision2 = getrevision());
- if ($writeheader == 1)
- {
- print "Writing \033[1;32minspircd_config.h\033[0m\n";
- open(FILEHANDLE, ">include/inspircd_config.h");
- my $NL = $config{NICK_LENGT}+1;
- my $CL = $config{CHAN_LENGT}+1;
- print FILEHANDLE <<EOF;
-/* Auto generated by configure, do not modify! */
-#ifndef __CONFIGURATION_AUTO__
-#define __CONFIGURATION_AUTO__
-
-/* this is for windows support. */
-#define CoreExport /**/
-#define DllExport /**/
-
-#define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
-#define MOD_PATH "$config{MODULE_DIR}"
-#define VERSION "$version"
-#define REVISION "$revision2"
-#define MAXCLIENTS $config{MAX_CLIENT}
-#define MAXCLIENTS_S "$config{MAX_CLIENT}"
-#define SOMAXCONN_S "$config{_SOMAXCONN}"
-#define MAX_DESCRIPTORS $config{MAX_DESCRIPTORS}
-#define NICKMAX $NL
-#define CHANMAX $CL
-#define MAXMODES $config{MAXI_MODES}
-#define IDENTMAX $config{MAX_IDENT}
-#define MAXQUIT $config{MAX_QUIT}
-#define MAXTOPIC $config{MAX_TOPIC}
-#define MAXKICK $config{MAX_KICK}
-#define MAXGECOS $config{MAX_GECOS}
-#define MAXAWAY $config{MAX_AWAY}
-#define OPTIMISATION $config{OPTIMITEMP}
-#define LIBRARYDIR "$config{LIBRARY_DIR}"
-#define SYSTEM "$incos"
-EOF
-print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n";
-
- if ($config{OSNAME} =~ /SunOS/i) {
- print FILEHANDLE "#define IS_SOLARIS\n";
- }
- if ($config{OSNAME} =~ /MINGW32/i) {
- print FILEHANDLE "#define IS_MINGW\n";
- }
- if ($config{GCCVER} >= 3) {
- print FILEHANDLE "#define GCC3\n";
- }
- if ($config{HAS_STRLCPY} eq "true") {
- print FILEHANDLE "#define HAS_STRLCPY\n";
- }
- if ($config{HAS_STDINT} eq "true") {
- print FILEHANDLE "#define HAS_STDINT\n";
- }
- if ($config{IPV6} =~ /y/i) {
- print FILEHANDLE "#define IPV6\n";
- }
- if ($config{SUPPORT_IP6LINKS} =~ /y/i) {
- print FILEHANDLE "#define SUPPORT_IP6LINKS\n";
- }
- my $use_hiperf = 0;
- if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
- print FILEHANDLE "#define USE_KQUEUE\n";
- $se = "socketengine_kqueue";
- $use_hiperf = 1;
- }
- if (($has_epoll) && ($config{USE_EPOLL} eq "y")) {
- print FILEHANDLE "#define USE_EPOLL\n";
- $se = "socketengine_epoll";
- $use_hiperf = 1;
- }
- if (($has_ports) && ($config{USE_PORTS} eq "y")) {
- print FILEHANDLE "#define USE_PORTS\n";
- $se = "socketengine_ports";
- $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";
- $se = "socketengine_select";
- }
- print FILEHANDLE "\n#endif\n";
- close(FILEHANDLE);
- }
-
- if ($writeheader)
- {
- open(FILEHANDLE, ">include/inspircd_se_config.h");
- print FILEHANDLE <<EOF;
-/* Auto generated by configure, do not modify or commit to svn! */
-#ifndef __CONFIGURATION_SOCKETENGINE__
-#define __CONFIGURATION_SOCKETENGINE__
-
-#include "socketengines/$se.h"
-
-#endif
-EOF
- close(FILEHANDLE);
- }
-
-
- # Create a Modules List..
- my $modules = "";
- foreach $i (@modlist)
- {
- $modules .= "m_".$i.".so ";
- }
- chomp($modules); # Remove Redundant whitespace..
-
- opendir(DIRHANDLE, "src/modules");
- foreach $name (sort readdir(DIRHANDLE)) {
- if ($name =~ /^m_(.+?)$/) {
- if (opendir(MDIRHANDLE, "src/modules/$name") != 0) {
- closedir(MDIRHANDLE);
- $modules .= "$name.so ";
- $uninstall_list = $uninstall_list . " -rm \$(MODULES)/$name.so\n";
- }
- }
- }
- closedir(DIRHANDLE);
-
-
- # Write all .in files.
- my $tmp = "";
- my $file = "";
- my $exe = "inspircd";
-
- # Do this once here, and cache it in the .*.inc files,
- # rather than attempting to read src/version.sh from
- # compiled code -- we might not have the source to hand.
- # Fix for bug#177 by Brain.
-
- chomp(my $version = `sh ./src/version.sh`);
- chomp(my $revision = getrevision());
- $version = "$version(r$revision)";
-
- # We can actually parse any file starting with . and ending with .inc,
- # but right now we only parse .inspircd.inc to form './inspircd'
-
- print "Writing \033[1;32mMakefiles\033[0m\n";
- write_dynamic_modules_makefile();
- write_dynamic_makefile();
-
- opendir(DIRHANDLE, $this);
-
- foreach $name (sort readdir(DIRHANDLE)) {
- if ($name =~ /^\.(.+)\.inc$/) {
- $file = $1;
-
- # Bug #353, omit this on non-darwin
- next if (($config{OSNAME} !~ /darwin/) && ($file eq "org.inspircd.plist"));
-
- # All .name.inc files need parsing!
- $tmp = "";
- open(FILEHANDLE, ".$file.inc") or die ("Can't open .$file.inc");
- while (<FILEHANDLE>) {
- $tmp .= $_;
- }
- close(FILEHANDLE);
-
- print "Writing \033[1;32m$file\033[0m ...\n";
- $tmp =~ s/\@CC\@/$config{CC}/;
- $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
- $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
- $tmp =~ s/\@DEVELOPER\@/$config{DEVELOPER}/;
- $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
- $tmp =~ s/\@BASE_DIR\@/$config{BASE_DIR}/;
- $tmp =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
- $tmp =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
- $tmp =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
- $tmp =~ s/\@LIBRARY_DIR\@/$config{LIBRARY_DIR}/;
- $tmp =~ s/\@MODULES\@/$modules/;
- $tmp =~ s/\@STARTSCRIPT\@/$config{STARTSCRIPT}/;
- $tmp =~ s/\@DESTINATION\@/$config{DESTINATION}/;
- $tmp =~ s/\@EXTRA_DIR\@/$config{EXTRA_DIR}/;
- $tmp =~ s/\@EXECUTABLE\@/$exe/;
- $tmp =~ s/\@MAKEORDER\@/$config{MAKEORDER}/;
- $tmp =~ s/\@VERSION\@/$version/;
- $tmp =~ s/\@INSTALL_LIST\@/$install_list/;
- $tmp =~ s/\@UNINSTALL_LIST\@/$uninstall_list/;
-
- open(FILEHANDLE, ">$file");
- print FILEHANDLE $tmp;
- }
- }
- closedir(DIRHANDLE);
-
- # Make inspircd executable!
- chmod 0744, 'inspircd';
-}
-
-sub write_dynamic_modules_makefile {
- # Modules Makefile..
- print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
- open(FILEHANDLE, ">src/modules/Makefile");
-
-###
-# Module Makefile Header
-###
- print FILEHANDLE <<EOF;
-###################################################
-# Copyright 2002-2007 The InspIRCd Development Team
-# http://www.inspircd.org/wiki/index.php/Credits
-#
-# Thanks to Andrew Church <achurch\@achurch.org>
-# for assisting with making this work right.
-#
-# Automatically Generated by ./configure to add a
-# modules please run ./configure -modupdate
-###################################################
-
-all: \$(MODULES)
-
-EOF
-
-if ($config{OSNAME} =~ /darwin/) {
- print FILEHANDLE <<EOCHEESE;
-
-PICLDFLAGS = -twolevel_namespace -undefined dynamic_lookup -bundle
-
-EOCHEESE
-} else {
- print FILEHANDLE <<EOCHEESE;
-
-PICLDFLAGS = -fPIC -DPIC -shared
-
-EOCHEESE
-}
-
- ###
- # End Module Makefile Header
- ###
-
- # Create a Modules List..
- my $modules = "";
- my $cmflags = "";
- my $liflags = "";
- foreach $i (@modlist) {
- ###
- # Write Entry to the MakeFile
- ###
- $cmflags = getcompilerflags("src/modules/m_".$i.".cpp");
- $liflags = getlinkerflags("src/modules/m_".$i.".cpp");
- $deps = getdependencies("src/modules/m_".$i.".cpp");
-
- #print "file: $i: cmflags=$cmflags; liflags=$liflags; deps=$deps\n";
-
-
- $nicerflags = $config{FLAGS};
- $nicerflags =~ s/-pedantic//g;
-
- if (nopedantic("src/modules/m_".$i.".cpp"))
- {
- print FILEHANDLE "
-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 $nicerflags $cmflags \$(PICLDFLAGS) $liflags -export-dynamic -o m_$i.so m_$i.cpp
-"
- }
- else
- {
- print FILEHANDLE "
-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 \$(PICLDFLAGS) $liflags -export-dynamic -o m_$i.so m_$i.cpp
-";
- }
- $install_list = $install_list . " install -m \$(INSTMODE) src/modules/m_$i.so \$(MODPATH)\n";
- $uninstall_list = $uninstall_list . " -rm \$(MODULES)/m_$i.so\n";
-###
- # End Write Entry to the MakeFile
- ###
- }
-
- opendir(DIRHANDLE, "src/modules");
- foreach $name (sort readdir(DIRHANDLE)) {
- if ($name =~ /^m_(.+?)$/) {
- $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) {
- 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 " \$(CC) -pipe -twolevel_namespace -undefined dynamic_lookup \$(FLAGS) $mliflags -bundle -o $name.so $mobjs\n";