########################################
-$this = $ENV{PWD}; # PWD, Regardless.
-@modlist = (); # Declare for Module List..
-%config = (); # Initiate Configuration Hash..
-$config{ME} = $ENV{PWD}; # Present Working Directory
-$config{CONFIG_DIR} = $ENV{PWD}."/conf"; # Configuration Directory
-$config{MODULE_DIR} = $ENV{PWD}."/modules"; # Modules Directory
-$config{BINARY_DIR} = $ENV{PWD}."/bin"; # Binary Directory
-$config{OPTIMITEMP} = "0"; # Default Optimisation Value
-$config{OPTIMISATI} = "-g"; # Optimisation Flag
-$config{NICK_LENGT} = "32"; # 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.
-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
+$this = resolve_directory($ENV{PWD}); # 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{OPTIMITEMP} = "0"; # Default Optimisation Value
+$config{OPTIMISATI} = "-g"; # Optimisation Flag
+$config{NICK_LENGT} = "32"; # 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.
+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.
}
# Get and Set some important vars..
-getosflags();
getmodules();
my $arg = $ARGV[0]; # Do Some Argument Checks..
} else {
# We've Loaded the cache file and all our variables..
print "Updating Files..\n";
+ getosflags();
writefiles();
print "Complete.\n";
exit;
}
}
-getcache(); # Load the config.cache file.
+
+getcache();
+getosflags();
if (!$config{MAX_CLIENT}) {
# If the cache hasn't set the max clients, copy the variable of MAX_CLIENT_T, this
dir_check("are the configuration files", "CONFIG_DIR");
dir_check("are the modules to be compiled to", "MODULE_DIR");
dir_check("is the IRCd binary to be placed", "BINARY_DIR");
+dir_check("are the IRCd libraries to be placed", "LIBRARY_DIR");
# File Descriptor Settings..
my $continue = 0;
print "[\033[1;32m$config{$hash_key}\033[0m] -> ";
chomp($var = <STDIN>);
if ($var eq "") { $var = $config{$hash_key}; }
+ if ($var =~ /^\~\/(.+)$/) {
+ # Convert it to a full path..
+ $var = resolve_directory($ENV{HOME} . "/" . $1);
+ }
if (substr($var,0,1) ne "/")
{
- # Assume relative Path was given.. fill in the rest.
- $var = $this . "/$var";
+ # Assume relative Path was given.. fill in the rest.
+ $var = $this . "/$var";
}
- if (substr($var, 0, 1) eq "~") {
- # Convert it to a full path..
-
- $var = $this . substr(1,0);
- }
+ $var = resolve_directory($var);
if (! -e $var) {
print "$var does not exist. Create it?\n[\033[1;32my\033[0m] ";
chomp($tmp = <STDIN>);
- if (($tmp eq "") || ($tmp = "y")) {
+ if (($tmp eq "") || ($tmp =~ /^y/i)) {
# Attempt to Create the Dir..
$chk = system("mkdir -p \"$var\" >> /dev/null 2>&1") / 256;
if ($chk != 0) {
sub getosflags {
if ($config{OSNAME} eq "FreeBSD") {
$config{LDLIBS} = "-Ldl";
- $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Wcomment -Wformat -Wunused -Wshadow -Werror -Wswitch -Wchar-subscripts -Wparentheses -Woverloaded-virtual";
+ $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Woverloaded-virtual -g";
$config{MAKEPROG} = "gmake";
} else {
$config{LDLIBS} = "-ldl";
- $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Wcomment -Wformat -Wunused -Wshadow -Werror -Wswitch -Wchar-subscripts -Wparentheses -Woverloaded-virtual";
+ $config{FLAGS} = "-fPIC -frtti $OPTIMISATI -Woverloaded-virtual -g";
$config{MAKEPROG} = "make";
}
}
#define MAXBUF 514
EOF
- if ($config{GCCVER} == 3) {
+ if ($config{GCCVER} > 3) {
print FILEHANDLE "#define GCC3\n";
- if ($config{GCC34} > 3) {
- print FILEHANDLE "#define GCC34\n";
+ print FILEHANDLE "#define GCC34\n";
+ }
+ else
+ {
+ if ($config{GCCVER} == 3) {
+ print FILEHANDLE "#define GCC3\n";
+ if ($config{GCC34} > 3) {
+ print FILEHANDLE "#define GCC34\n";
+ }
}
}
if ($config{HAS_STRLCPY} eq "true") {
}
close(FILEHANDLE);
- # Now the Makefile..
- print "Writing \033[1;32mMakefile\033[0m\n";
- my $makefile = "";
- open(FILEHANDLE, ".Makefile.inc");
- while (<FILEHANDLE>) {
- $makefile .= $_;
- }
# Create a Modules List..
my $modules = "";
foreach $i (@modlist)
$modules .= "m_".$i.".so ";
}
chomp($modules); # Remove Redundant whitespace..
- $makefile =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
- $makefile =~ s/\@FLAGS\@/$config{FLAGS}/;
- $makefile =~ s/\@LDLIBS\@/$config{LDLIBS}/;
- $makefile =~ s/\@CONFIG_DIR\@/$config{CONFIG_DIR}/;
- $makefile =~ s/\@MODULE_DIR\@/$config{MODULE_DIR}/;
- $makefile =~ s/\@BINARY_DIR\@/$config{BINARY_DIR}/;
- $makefile =~ s/\@MODULES\@/$modules/;
-
- open(FILEHANDLE, ">Makefile");
- print FILEHANDLE $makefile;
- close(FILEHANDLE);
+
+
+ # Write all .in files.
+ my $tmp = "";
+ my $file = "";
+ opendir(DIRHANDLE, $this);
+ foreach $name (sort readdir(DIRHANDLE)) {
+ if ($name =~ /^\.(.+)\.inc$/)
+ {
+ $file = $1;
+ # All .name.inc files need parsing!
+ $tmp = "";
+ open(FILEHANDLE, ".$file.inc");
+ while (<FILEHANDLE>) {
+ $tmp .= $_;
+ }
+ close(FILEHANDLE);
+
+ $tmp =~ s/\@MAKEPROG\@/$config{MAKEPROG}/;
+ $tmp =~ s/\@FLAGS\@/$config{FLAGS}/;
+ $tmp =~ s/\@LDLIBS\@/$config{LDLIBS}/;
+ $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/;
+
+ print "Writing \033[1;32m$file\033[0m\n";
+ open(FILEHANDLE, ">$file");
+ print FILEHANDLE $tmp;
+ }
+ }
+ closedir(DIRHANDLE);
+
+ # Make inspircd executable!
+ chmod 0744, 'inspircd';
# Modules Makefile..
print "Writing \033[1;32msrc/modules/Makefile\033[0m\n";
open(FILEHANDLE, ">src/modules/Makefile");
print FILEHANDLE <<EOF;
# (C) ChatSpike development team
-# Makefile by <Craig@ChatSpike.net>
-# Many Thanks to Andrew Church <achurch@achurch.org>
+# Makefile by <Craig\@ChatSpike.net>
+# Many Thanks to Andrew Church <achurch\@achurch.org>
# for assisting with making this work right.
#
# Automatically Generated by ./configure to add a modules
$flags = getcompilerflags("src/modules/m_".$i.".cpp");
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) -I../../include \$(FLAGS) -shared $flags -o m_$i.so m_$i.cpp
- \@cp m_$i.so \$(MODPATH)/
+ \$(CC) -I../../include \$(FLAGS) $flags -export-dynamic -c m_$i.cpp
+ \$(CC) \$(FLAGS) -shared $flags -o m_$i.so m_$i.o
+ cp m_$i.so \$(MODPATH)/
+ chmod 0700 \$(MODPATH)/m_$i.so
EOCHEESE
}
print "'\033[1;33m####\033[0m: \033[1;33m##\033[0m::. \033[1;33m##\033[0m:. \033[1;33m######\033[0m:: \033[1;33m##\033[0m::::::::'\033[1;33m####\033[0m: \033[1;33m##\033[0m:::. \033[1;33m##\033[0m:. \033[1;33m######\033[0m:: \033[1;33m########\033[0m::\n";
print "\033[0m\033[0m....::..::::..:::......:::..:::::::::....::..:::::..:::......:::........:::\n\n";
}
+
+sub resolve_directory {
+ use File::Spec;
+ return File::Spec->rel2abs($_[0]);
+
+ #my $dir = $_[0];
+ #my $old_dir = "";
+ #my $real_dir = "";
+ #getpwd($old_dir);
+ #chdir($dir);
+ #getpwd($real_dir);
+ #chdir($old_dir);
+ #return $real_dir;
+}