###################################################
# InspIRCd Configuration Script
#
-# Copyright 2002-2009 The InspIRCd Development Team
+# Copyright 2002-2010 The InspIRCd Development Team
# http://wiki.inspircd.org/Credits
#
# Licensed under GPL, please see the COPYING file
our ($opt_use_gnutls, $opt_rebuild, $opt_use_openssl, $opt_nointeractive, $opt_ports,
$opt_epoll, $opt_kqueue, $opt_noports, $opt_noepoll, $opt_nokqueue,
- $opt_ipv6, $opt_maxbuf, $opt_disable_debug, $opt_freebsd_port);
+ $opt_noipv6, $opt_maxbuf, $opt_disable_debug, $opt_freebsd_port,
+ $opt_system, $opt_uid);
-our ($opt_cc, $opt_base_dir, $opt_config_dir, $opt_module_dir, $opt_binary_dir,
- $opt_library_dir);
+our ($opt_cc, $opt_base_dir, $opt_config_dir, $opt_module_dir, $opt_binary_dir);
sub list_extras ();
GetOptions (
'enable-gnutls' => \$opt_use_gnutls,
'rebuild' => \$opt_rebuild,
+ 'system' => \$opt_system,
+ 'uid=s' => \$opt_uid,
'enable-openssl' => \$opt_use_openssl,
'disable-interactive' => \$opt_nointeractive,
'enable-ports' => \$opt_ports,
'disable-ports' => \$opt_noports,
'disable-epoll' => \$opt_noepoll,
'disable-kqueue' => \$opt_nokqueue,
- 'enable-ipv6' => \$opt_ipv6,
+ 'disable-ipv6' => \$opt_noipv6,
'with-cc=s' => \$opt_cc,
'with-maxbuf=i' => \$opt_maxbuf,
'enable-freebsd-ports-openssl' => \$opt_freebsd_port,
'config-dir=s' => \$opt_config_dir,
'module-dir=s' => \$opt_module_dir,
'binary-dir=s' => \$opt_binary_dir,
- 'library-dir=s' => \$opt_library_dir,
'disable-debuginfo' => sub { $opt_disable_debug = 1 },
'help' => sub { showhelp(); },
'update' => sub { update(); },
exit 0;
}
-our $non_interactive = (
- (defined $opt_library_dir) ||
+our $interactive = !(
(defined $opt_base_dir) ||
(defined $opt_config_dir) ||
(defined $opt_module_dir) ||
(defined $opt_binary_dir) ||
(defined $opt_nointeractive) ||
(defined $opt_cc) ||
- (defined $opt_ipv6) ||
+ (defined $opt_noipv6) ||
(defined $opt_kqueue) ||
(defined $opt_epoll) ||
(defined $opt_ports) ||
(defined $opt_noepoll) ||
(defined $opt_noports) ||
(defined $opt_maxbuf) ||
+ (defined $opt_system) ||
+ (defined $opt_uid) ||
(defined $opt_use_gnutls) ||
(defined $opt_freebsd_port)
);
-our $interactive = !$non_interactive;
chomp(our $topdir = getcwd());
our $this = resolve_directory($topdir); # PWD, Regardless.
our @modlist = (); # Declare for Module List..
our %config = (); # Initiate Configuration Hash..
-$config{ME} = resolve_directory($topdir); # Present Working Directory
+$config{ME} = resolve_directory($topdir); # Present Working Directory
-$config{BASE_DIR} = $config{ME};
+$config{BASE_DIR} = $config{ME}."/run";
-if (defined $opt_base_dir)
-{
+if (defined $opt_base_dir) {
$config{BASE_DIR} = $opt_base_dir;
+} elsif (defined $opt_system || defined $opt_uid) {
+ $config{BASE_DIR} = '/var/lib/inspircd';
}
-$config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Directory
-$config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
-$config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
-$config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
+if (defined $opt_system || defined $opt_uid) {
+ $config{UID} = $opt_uid || 'ircd';
+ $config{CONFIG_DIR} = '/etc/inspircd';
+ $config{MODULE_DIR} = '/usr/lib/inspircd';
+ $config{BINARY_DIR} = '/usr/sbin/';
+ $config{BUILD_DIR} = resolve_directory($config{ME}."/build"); # Build Directory
+} else {
+ $config{UID} = $<;
+ $config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Directory
+ $config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
+ $config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
+ $config{BUILD_DIR} = resolve_directory($config{ME}."/build"); # Build Directory
+}
-if (defined $opt_config_dir)
-{
+if (defined $opt_config_dir) {
$config{CONFIG_DIR} = $opt_config_dir;
}
-if (defined $opt_module_dir)
-{
+if (defined $opt_module_dir) {
$config{MODULE_DIR} = $opt_module_dir;
}
-if (defined $opt_binary_dir)
-{
+if (defined $opt_binary_dir) {
$config{BINARY_DIR} = $opt_binary_dir;
}
-if (defined $opt_library_dir)
-{
- $config{LIBRARY_DIR} = $opt_library_dir;
-}
chomp($config{HAS_GNUTLS} = `pkg-config --modversion gnutls 2>/dev/null | cut -c 1,2,3`); # GNUTLS Version.
if (defined $opt_freebsd_port)
$config{USE_OPENSSL} = "y";
}
-# no, let's not change these.
-$config{OPTIMITEMP} = "0"; # Default Optimisation Value
-if (!defined $opt_disable_debug)
-{
+if (!defined $opt_disable_debug) {
$config{OPTIMISATI} = "-g1"; # Optimisation Flag
-}
-else
-{
- $config{OPTIMISATI} = "-O2"; # DEBUGGING OFF!
+} else {
+ $config{OPTIMISATI} = "-O2";
}
$config{HAS_STRLCPY} = "false"; # strlcpy Check.
$config{HAS_STDINT} = "false"; # stdint.h check
$config{USE_KQUEUE} = "y"; # kqueue enabled
-if (defined $opt_kqueue)
-{
- $config{USE_KQUEUE} = "y";
-}
-if (defined $opt_nokqueue)
-{
+if (defined $opt_nokqueue) {
$config{USE_KQUEUE} = "n";
}
$config{USE_POLL} = "y"; # poll enabled
$config{USE_EPOLL} = "y"; # epoll enabled
-if (defined $opt_epoll)
-{
- $config{USE_EPOLL} = "y";
-}
if (defined $opt_noepoll)
{
$config{USE_EPOLL} = "n";
}
$config{USE_PORTS} = "y"; # epoll enabled
-if (defined $opt_ports)
-{
- $config{USE_PORTS} = "y";
-}
if (defined $opt_noports)
{
$config{USE_PORTS} = "n";
}
-$config{IPV6} = "n"; # IPv6 support (experimental)
-if (defined $opt_ipv6)
+$config{IPV6} = "y"; # IPv6 support
+if (defined $opt_noipv6)
{
- $config{IPV6} = "y";
+ $config{IPV6} = "n";
}
-chomp($config{GCCVER} = `g++ -dumpversion | cut -c 1`); # Major GCC Version
-chomp($config{GCCMINOR} = `g++ -dumpversion | cut -c 3`);
$config{_SOMAXCONN} = SOMAXCONN; # Max connections in accept queue
$config{OSNAME} = $^O; # Operating System Name
$config{IS_DARWIN} = "NO"; # Is OSX?
{
$config{IS_DARWIN} = "YES";
$config{STARTSCRIPT} = "org.inspircd.plist"; # start script for OSX.
- $config{DESTINATION} = "LAUNCHDPATH"; # Is OSX target.
- $config{EXTRA_DIR} = " launchd_dir"; # Is OSX specific path.
}
$config{CC} = "g++"; # C++ compiler
if (defined $opt_cc)
$config{SYSTEM} = lc $^O;
print "Checking operating system version... $config{SYSTEM}\n";
+$exec = $config{CC} . " -dumpversion | cut -c 1";
+chomp($config{GCCVER} = `$exec`); # Major GCC Version
+$exec = $config{CC} . " -dumpversion | cut -c 3";
+chomp($config{GCCMINOR} = `$exec`);
+
printf "Checking if stdint.h exists... ";
$config{HAS_STDINT} = "true";
our $fail = 0;
my $version = `uname -r`;
if ($version =~ /^4\./)
{
- print "yes\n";
- exit 1;
+ print "yes.\n";
+ print "FreeBSD 4.x is no longer supported. By ANYONE.\n";
+ print "To build, you will need to add the following to CXXFLAGS:\n";
+ print "\t-L/usr/local/lib -lgnugetopt -DHAVE_DECL_GETOPT=1\n";
}
else
{
print "no ($config{OSNAME})\n";
}
-print "Checking for upgrades to extra and third party modules... ";
-system "./modulemanager upgrade";
-
################################################################################
# BEGIN INTERACTIVE PART #
################################################################################
$config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Dir
$config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
$config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary Directory
- $config{LIBRARY_DIR} = resolve_directory($config{BASE_DIR}."/lib"); # Library Directory
}
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");
+ dir_check("do you want the build to take place", "BUILD_DIR");
my $chose_hiperf = 0;
if ($has_kqueue) {
}
$config{USE_SSL} = "n";
+ $config{MODUPDATE} = 'n';
if ($config{HAS_GNUTLS} eq "y" || $config{HAS_OPENSSL} eq "y")
{
print "\nCould not detect OpenSSL or GnuTLS. Make sure pkg-config is installed if\n";
print "you intend to use OpenSSL, or that GnuTLS is in your path if you intend\nto use GnuTLS.\n\n";
}
+
+ yesno('MODUPDATE',"Would you like to check for updates to third-party modules?");
+ print "\n";
+ if ($config{MODUPDATE} eq "y") {
+ print "Checking for upgrades to extra and third party modules... ";
+ system "./modulemanager upgrade";
+ }
}
dumphash();
#define CoreExport /**/
#define DllExport /**/
-#define CONFIG_FILE "$config{CONFIG_DIR}/inspircd.conf"
#define MOD_PATH "$config{MODULE_DIR}"
#define SOMAXCONN_S "$config{_SOMAXCONN}"
-#define OPTIMISATION $config{OPTIMITEMP}
-#define LIBRARYDIR "$config{LIBRARY_DIR}"
#define ENTRYPOINT int main(int argc, char** argv)
EOF
print FILEHANDLE "\n#include \"threadengines/threadengine_pthread.h\"\n\n#endif\n";
close(FILEHANDLE);
- open(FILEHANDLE, ">include/inspircd_se_config.h.tmp");
- print FILEHANDLE <<EOF;
-/* Auto generated by configure, do not modify or commit to svn! */
-#ifndef __CONFIGURATION_SOCKETENGINE__
-#define __CONFIGURATION_SOCKETENGINE__
-
-#include "socketengines/$config{SOCKETENGINE}.h"
-
-#endif
-EOF
- close(FILEHANDLE);
-
open(FILEHANDLE, ">include/inspircd_version.h.tmp");
print FILEHANDLE <<EOF;
#define VERSION "$version"
EOF
close FILEHANDLE;
- for my $file (qw(include/inspircd_config.h include/inspircd_se_config.h include/inspircd_version.h)) {
+ for my $file (qw(include/inspircd_config.h include/inspircd_version.h)) {
my $diff = 0;
open my $fh1, $file or $diff = 1;
open my $fh2, $file.'.tmp' or die "Can't read $file.tmp that we just wrote: $!";
# but right now we only parse .inspircd.inc to form './inspircd'
prepare_dynamic_makefile();
- print "Writing \e[1;32mMakefiles\e[0m\n";
-
- opendir(DIRHANDLE, $this);
-
- foreach my $name (sort readdir(DIRHANDLE)) {
- if ($name =~ /^\.(.+)\.inc$/) {
- $file = $1;
+ my @dotfiles = qw(main.mk inspircd);
+ push @dotfiles, 'org.inspircd.plist' if $config{OSNAME} eq 'darwin';
- # Bug #353, omit this on non-darwin
- next if (($config{OSNAME} !~ /darwin/) && ($file eq "org.inspircd.plist"));
+ foreach my $file (@dotfiles) {
+ open(FILEHANDLE, "make/template/$file") or die "Can't open make/template/$file: $!";
+ $_ = join '', <FILEHANDLE>;
+ close(FILEHANDLE);
- # All .name.inc files need parsing!
- open(FILEHANDLE, ".$file.inc") or die ("Can't open .$file.inc");
- $_ = join '', <FILEHANDLE>;
- close(FILEHANDLE);
+ $config{BUILD_DIR} ||= resolve_directory($config{ME}."/build");
+ for my $var (qw(
+ CC SYSTEM BASE_DIR CONFIG_DIR MODULE_DIR BINARY_DIR BUILD_DIR UID
+ STARTSCRIPT DESTINATION EXTRA_DIR SOCKETENGINE
+ )) {
+ s/\@$var\@/$config{$var}/g;
+ }
+ s/\@EXECUTABLE\@/$exe/ if defined $exe;
+ s/\@VERSION\@/$version/ if defined $version;
+
+ if ($file eq 'main.mk') {
+ print "Writing \e[1;32mGNUmakefile\e[0m ...\n";
+
+ my $mk_tmp = $_;
+ s/\@IFDEF (\S+)/ifdef $1/g;
+ s/\@IFNDEF (\S+)/ifndef $1/g;
+ s/\@IFEQ (\S+) (\S+)/ifeq ($1,$2)/g;
+ s/\@ELSIFEQ (\S+) (\S+)/else ifeq ($1,$2)/g;
+ s/\@ELSE/else/g;
+ s/\@ENDIF/endif/g;
+ s/ *\@BSD_ONLY .*\n//g;
+ s/\@GNU_ONLY //g;
+ s/\@DO_EXPORT (.*)/export $1/g;
+ open MKF, '>GNUmakefile' or die "Can't write to GNUmakefile: $!";
+ print MKF $_;
+ close MKF;
+
+ print "Writing \e[1;32mBSDmakefile\e[0m ...\n";
+ $_ = $mk_tmp;
+ s/\@IFDEF (\S+)/.if defined($1)/g;
+ s/\@IFNDEF (\S+)/.if !defined($1)/g;
+ s/\@IFEQ (\S+) (\S+)/.if $1 == $2/g;
+ s/\@ELSIFEQ (\S+) (\S+)/.elif $1 == $2/g;
+ s/\@ELSE/.else/g;
+ s/\@ENDIF/.endif/g;
+ s/\@BSD_ONLY //g;
+ s/ *\@GNU_ONLY .*\n//g;
+ $mk_tmp = $_;
+ $mk_tmp =~ s#\@DO_EXPORT (.*)#"MAKEENV += ".join ' ', map "$_='\${$_}'", split /\s/, $1#eg;
+ open MKF, '>BSDmakefile' or die "Can't write to BSDmakefile: $!";
+ print MKF $mk_tmp;
+ close MKF;
+ } else {
print "Writing \e[1;32m$file\e[0m ...\n";
- for my $var (qw(
- CC SYSTEM BASE_DIR CONFIG_DIR MODULE_DIR BINARY_DIR LIBRARY_DIR
- STARTSCRIPT DESTINATION EXTRA_DIR SOCKETENGINE CORE_FLAGS
- )) {
- s/\@$var\@/$config{$var}/g;
- }
- s/\@EXECUTABLE\@/$exe/ if defined $exe;
- s/\@VERSION\@/$version/ if defined $version;
-
- if ($file eq 'Makefile') {
- my $mk_tmp = $_;
- s/\@IFDEF (\S+)/ifdef $1/g;
- s/\@IFNDEF (\S+)/ifndef $1/g;
- s/\@IFEQ (\S+) (\S+)/ifeq ($1,$2)/g;
- s/\@ELSIFEQ (\S+) (\S+)/else ifeq ($1,$2)/g;
- s/\@ELSE/else/g;
- s/\@ENDIF/endif/g;
- s/ *\@BSD_ONLY .*\n//g;
- s/\@GNU_ONLY //g;
- s/\@DO_EXPORT (.*)/export $1/g;
- open MKF, '>GNUmakefile' or die "Can't write to GNUmakefile: $!";
- print MKF $_;
- close MKF;
- $_ = $mk_tmp;
- s/\@IFDEF (\S+)/.if defined($1)/g;
- s/\@IFNDEF (\S+)/.if !defined($1)/g;
- s/\@IFEQ (\S+) (\S+)/.if $1 == $2/g;
- s/\@ELSIFEQ (\S+) (\S+)/.elif $1 == $2/g;
- s/\@ELSE/.else/g;
- s/\@ENDIF/.endif/g;
- s/\@BSD_ONLY //g;
- s/ *\@GNU_ONLY .*\n//g;
- $mk_tmp = $_;
- $mk_tmp =~ s#\@DO_EXPORT (.*)#"MAKEENV += ".join ' ', map "$_='\${$_}'", split /\s/, $1#eg;
- open MKF, '>BSDmakefile' or die "Can't write to BSDmakefile: $!";
- print MKF $mk_tmp;
- close MKF;
- } else {
- open(FILEHANDLE, ">$file") or die("Can't write to $file: $!\n");
- print FILEHANDLE $_;
- close(FILEHANDLE);
- }
+ open(FILEHANDLE, ">$file") or die("Can't write to $file: $!\n");
+ print FILEHANDLE $_;
+ close(FILEHANDLE);
}
}
- closedir(DIRHANDLE);
- # Make inspircd executable!
- chmod 0744, 'inspircd';
+ chmod 0755, 'inspircd';
}
sub depcheck