#!/usr/bin/env perl
-###################################################
-# InspIRCd Configuration Script
+
+#
+# InspIRCd -- Internet Relay Chat Daemon
#
-# Copyright 2002-2010 The InspIRCd Development Team
-# http://wiki.inspircd.org/Credits
+# Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
+# Copyright (C) 2007, 2009 Dennis Friis <peavey@inspircd.org>
+# Copyright (C) 2003, 2006-2008 Craig Edwards <craigedwards@brainbox.cc>
+# Copyright (C) 2006-2008 Robin Burchell <robin+git@viroteck.net>
+# Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
+# Copyright (C) 2007 John Brooks <john.brooks@dereferenced.net>
+# Copyright (C) 2006 Oliver Lupton <oliverlupton@gmail.com>
+# Copyright (C) 2003-2006 Craig McLure <craig@chatspike.net>
#
-# Licensed under GPL, please see the COPYING file
-# for more information
+# This file is part of InspIRCd. InspIRCd is free software: you can
+# redistribute it and/or modify it under the terms of the GNU General Public
+# License as published by the Free Software Foundation, version 2.
#
-# $Id$
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
#
-###################################################
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
BEGIN {
require 5.8.0;
};
use File::Copy ();
-use Socket;
use Cwd;
use Getopt::Long;
# Utility functions for our buildsystem
use make::utilities;
use make::configure;
-use make::gnutlscert;
-use make::opensslcert;
###############################################################################################
#
#
###############################################################################################
-our ($opt_use_gnutls, $opt_rebuild, $opt_use_openssl, $opt_nointeractive, $opt_ports,
- $opt_epoll, $opt_kqueue, $opt_noports, $opt_noepoll, $opt_nokqueue,
- $opt_noipv6, $opt_maxbuf, $opt_disable_debug, $opt_freebsd_port,
- $opt_system, $opt_uid);
+our ($opt_use_gnutls, $opt_use_openssl, $opt_nointeractive, $opt_ports, $opt_epoll, $opt_kqueue,
+ $opt_noports, $opt_noepoll, $opt_nokqueue, $opt_freebsd_port, $opt_system, $opt_uid);
-our ($opt_cc, $opt_base_dir, $opt_config_dir, $opt_module_dir, $opt_binary_dir);
+our ($opt_cc, $opt_base_dir, $opt_config_dir, $opt_module_dir, $opt_binary_dir, $opt_data_dir, $opt_log_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-ports' => \$opt_noports,
'disable-epoll' => \$opt_noepoll,
'disable-kqueue' => \$opt_nokqueue,
- 'disable-ipv6' => \$opt_noipv6,
'with-cc=s' => \$opt_cc,
- 'with-maxbuf=i' => \$opt_maxbuf,
'enable-freebsd-ports-openssl' => \$opt_freebsd_port,
'prefix=s' => \$opt_base_dir,
'config-dir=s' => \$opt_config_dir,
'module-dir=s' => \$opt_module_dir,
'binary-dir=s' => \$opt_binary_dir,
- 'disable-debuginfo' => sub { $opt_disable_debug = 1 },
+ 'data-dir=s' => \$opt_data_dir,
+ 'log-dir=s' => \$opt_log_dir,
'help' => sub { showhelp(); },
'update' => sub { update(); },
- 'svnupdate' => sub { svnupdate(); },
'clean' => sub { clean(); },
'list-extras' => sub { list_extras; exit 0; }, # This, --enable-extras, and --disable-extras are for non-interactive managing.
'enable-extras=s@' => \@opt_enableextras, # ^
'disable-extras=s@' => \@opt_disableextras, # ^
- 'generate-openssl-cert' => sub { make_openssl_cert(); exit(0); },
- 'generate-gnutls-cert' => sub { make_gnutls_cert(); exit(0); }
);
if (scalar(@opt_enableextras) + scalar(@opt_disableextras) > 0) {
(defined $opt_module_dir) ||
(defined $opt_base_dir) ||
(defined $opt_binary_dir) ||
+ (defined $opt_data_dir) ||
+ (defined $opt_log_dir) ||
(defined $opt_nointeractive) ||
(defined $opt_cc) ||
- (defined $opt_noipv6) ||
(defined $opt_kqueue) ||
(defined $opt_epoll) ||
(defined $opt_ports) ||
(defined $opt_nokqueue) ||
(defined $opt_noepoll) ||
(defined $opt_noports) ||
- (defined $opt_maxbuf) ||
(defined $opt_system) ||
(defined $opt_uid) ||
(defined $opt_use_gnutls) ||
our $this = resolve_directory($topdir); # PWD, Regardless.
our @modlist = (); # Declare for Module List..
our %config = (); # Initiate Configuration Hash..
+our $cache_loaded = getcache();
$config{ME} = resolve_directory($topdir); # Present Working Directory
$config{BASE_DIR} = $config{ME}."/run";
if (defined $opt_base_dir) {
$config{BASE_DIR} = $opt_base_dir;
-} elsif (defined $opt_system || defined $opt_uid) {
+} elsif (defined $opt_system) {
$config{BASE_DIR} = '/var/lib/inspircd';
}
-if (defined $opt_system || defined $opt_uid) {
+if (defined $opt_system) {
$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
+ $config{DATA_DIR} = '/var/inspircd';
+ $config{LOG_DIR} = '/var/log/inspircd';
} else {
- $config{UID} = $<;
+ $config{UID} = $opt_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
+ $config{DATA_DIR} = resolve_directory($config{BASE_DIR}."/data"); # Data directory
+ $config{LOG_DIR} = resolve_directory($config{BASE_DIR}."/logs"); # Log directory
}
if (defined $opt_config_dir) {
if (defined $opt_binary_dir) {
$config{BINARY_DIR} = $opt_binary_dir;
}
-chomp($config{HAS_GNUTLS} = `pkg-config --modversion gnutls 2>/dev/null | cut -c 1,2,3`); # GNUTLS Version.
+if (defined $opt_data_dir) {
+ $config{DATA_DIR} = $opt_data_dir;
+}
+if (defined $opt_log_dir) {
+ $config{LOG_DIR} = $opt_log_dir;
+}
+chomp($config{HAS_GNUTLS} = `pkg-config --modversion gnutls 2>/dev/null`); # GNUTLS Version.
if (defined $opt_freebsd_port)
{
$config{USE_OPENSSL} = "y";
}
-if (!defined $opt_disable_debug) {
- $config{OPTIMISATI} = "-g1"; # Optimisation Flag
-} 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_nokqueue) {
{
$config{USE_PORTS} = "n";
}
-$config{_SOMAXCONN} = SOMAXCONN; # Max connections in accept queue
$config{OSNAME} = $^O; # Operating System Name
-$config{IS_DARWIN} = "NO"; # Is OSX?
$config{STARTSCRIPT} = "inspircd"; # start script?
$config{DESTINATION} = "BASE"; # Is target path.
if ($config{OSNAME} =~ /darwin/i)
{
- $config{IS_DARWIN} = "YES";
$config{STARTSCRIPT} = "org.inspircd.plist"; # start script for OSX.
+ $config{CC} = "xcrun clang++"; # C++ compiler for OSX.
+}
+else
+{
+ $config{CC} = "g++"; # C++ compiler
}
-$config{CC} = "g++"; # C++ compiler
if (defined $opt_cc)
{
$config{CC} = $opt_cc;
chomp($config{GCCVER} = `$exec`); # Major GCC Version
$exec = $config{CC} . " -dumpversion | cut -c 3";
chomp($config{GCCMINOR} = `$exec`);
-$config{MAXBUF} = "512"; # Max buffer size
-if ($config{HAS_OPENSSL} =~ /^([-[:digit:].]+)([a-z])?(\-[a-z][0-9])?$/) {
+if ($config{HAS_OPENSSL} =~ /^([-[:digit:].]+)(?:[a-z])?(?:\-[a-z][0-9])?/) {
$config{HAS_OPENSSL} = $1;
} else {
$config{HAS_OPENSSL} = "";
}
if (($config{GCCVER} eq "") || ($config{GCCMINOR} eq "")) {
- print $config{CC} . " was not found! You require g++ (the GNU C++ compiler, part of GCC) to build InspIRCd!\n";
+ if ($config{OSNAME} eq 'darwin') {
+ print $config{CC} . " was not found! You require clang++ (the LLVM C++ compiler, part of the OSX developer tools) to build InspIRCd!\n";
+ } else {
+ print $config{CC} . " was not found! You require g++ (the GNU C++ compiler, part of GCC) to build InspIRCd!\n";
+ }
exit;
}
} else {
# We've Loaded the cache file and all our variables..
print "Updating files...\n";
- if (defined($opt_disable_debug) && $opt_disable_debug == 1)
- {
- print "Disabling debug information (-g).\n";
- $config{OPTIMISATI} = "";
- }
$has_epoll = $config{HAS_EPOLL};
$has_ports = $config{HAS_PORTS};
$has_kqueue = $config{HAS_KQUEUE};
exit;
}
-sub svnupdate
-{
- my $fail = 0;
- open(FH,"<.svn/entries") or $fail = 1;
- if ($fail) {
- print "This is not an SVN copy of InspIRCd.\n";
- exit 1;
- }
- else
- {
- close(FH);
- }
- open my $fd, "-|", "svn update";
- my $configurechanged = 0; # Needs ./configure -update
- my $rootincchanged = 0;
- my @conflicted = ();
- while (defined(my $line = <$fd>))
- {
- my ($action, $file);
- print $line;
- $line =~ m/^([ADUCG])\s+(.*)$/ or next;
- ($action, $file) = ($1, $2);
- if ($action eq "C")
- {
- push @conflicted, $file;
- if ($file eq "configure")
- {
- $configurechanged = 1;
- }
- elsif ($file =~ m/^\..*\.inc$/)
- {
- $rootincchanged = 1;
- }
- }
- elsif ($action eq "U" || $action eq "G")
- {
- if ($file eq "configure")
- {
- $configurechanged = 1;
- }
- elsif ($file =~ m/^\..*\.inc$/)
- {
- $rootincchanged = 1;
- }
- }
- }
- unless (close $fd) # close() waits for exit and returns false if the command failed
- {
- if ($! == 0)
- {
- print STDERR "Problem updating from SVN, please check above for errors\n";
- }
- else
- {
- print STDERR "Failed to run SVN: $!\n";
- }
- exit 1;
- }
- if (scalar(@conflicted) > 0)
- {
- print STDERR "\e[0;33;1mERROR:\e[0m You have local modifications which conflicted with the updates from SVN\n";
- print STDERR "Configure is not able to complete the update. Please resolve these conflicts, then run ./configure -update\n";
- print "Conflicted files: " . join ", ", @conflicted . "\n";
- exit 1;
- }
- if ($configurechanged)
- {
- system("perl configure -update");
- }
- else
- {
- print "No need to update Makefiles.\n";
- }
- if (defined $opt_rebuild) {
- system("make install");
- }
- exit;
-}
-
-sub test_compile {
- my $feature = shift;
- my $fail = 0;
- $fail ||= system "$config{CC} -o test_$feature make/check_$feature.cpp >/dev/null 2>&1";
- $fail ||= system "./test_$feature";
- unlink "test_$feature";
- return !$fail;
-}
-
print "Running non-interactive configure...\n" unless $interactive;
print "Checking for cache from previous configure... ";
-print ((!getcache()) ? "not found\n" : "found\n");
+print ($cache_loaded ? "found\n" : "not found\n");
$config{SYSTEM} = lc $^O;
print "Checking operating system version... $config{SYSTEM}\n";
$exec = $config{CC} . " -dumpversion | cut -c 3";
chomp($config{GCCMINOR} = `$exec`);
-printf "Checking if stdint.h exists... ";
-$config{HAS_STDINT} = "true";
-our $fail = 0;
-open(STDINT, "</usr/include/stdint.h") or $config{HAS_STDINT} = "false";
-if ($config{HAS_STDINT} eq "true") {
- close(STDINT);
+
+print "Checking whether <stdint.h> exists... ";
+if (test_header($config{CC}, "stdint.h")) {
+ $config{HAS_STDINT} = "true";
+ print "yes\n";
+} else {
+ $config{HAS_STDINT} = "false";
+ print "no\n";
}
-print "yes\n" if $config{HAS_STDINT} eq "true";
-print "no\n" if $config{HAS_STDINT} eq "false";
-
-printf "Checking if strlcpy exists... ";
-# Perform the strlcpy() test..
-$config{HAS_STRLCPY} = "false";
-$fail = 0;
-open(STRLCPY, "</usr/include/string.h") or $fail = 1;
-if (!$fail) {
- while (defined(my $line = <STRLCPY>)) {
- chomp($line);
- # try and find the delcaration of:
- # size_t strlcpy(...)
- if ($line =~ /size_t(\0x9|\s)+strlcpy/) {
- $config{HAS_STRLCPY} = "true";
- }
- }
- close(STRLCPY);
+
+printf "Checking whether clock_gettime() exists... ";
+if (test_file($config{CC}, "clock_gettime.cpp", "-lrt")) {
+ $config{HAS_CLOCK_GETTIME} = "true";
+ print "yes\n";
+} else {
+ $config{HAS_CLOCK_GETTIME} = "false";
+ print "no\n";
}
-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;
-if (!$fail) {
- while (defined(my $line = <KQUEUE>)) {
- chomp($line);
- # try and find the delcaration of:
- # int kqueue(void);
- if ($line =~ /int(\0x9|\s)+kqueue/) {
- $has_kqueue = 1;
- }
- }
- close(KQUEUE);
+
+printf "Checking whether eventfd() exists... ";
+if (test_file($config{CC}, "eventfd.cpp")) {
+ $config{HAS_EVENTFD} = "true";
+ print "yes\n";
+} else {
+ $config{HAS_EVENTFD} = "false";
+ print "no\n";
}
-print "yes\n" if $has_kqueue == 1;
-print "no\n" if $has_kqueue == 0;
-printf "Checking for epoll support... ";
-$has_epoll = test_compile('epoll');
+printf "Checking if a TCP deferring mechanism is available... ";
+if (test_file($config{CC}, "tcp_defer_accept.cpp")) {
+ $config{HAS_DEFER} = "TCP_DEFER_ACCEPT";
+ print "yes (TCP_DEFER_ACCEPT)\n";
+} elsif (test_file($config{CC}, "so_acceptfilter.cpp")) {
+ $config{HAS_DEFER} = "SO_ACCEPTFILTER";
+ print "yes (SO_ACCEPTFILTER)\n";
+} else {
+ $config{HAS_DEFER} = "false";
+ print "no\n";
+}
+
+print "Checking whether epoll is available... ";
+$has_epoll = test_header($config{CC}, "sys/epoll.h");
print $has_epoll ? "yes\n" : "no\n";
-printf "Checking for eventfd support... ";
-$config{HAS_EVENTFD} = test_compile('eventfd') ? 'true' : 'false';
-print $config{HAS_EVENTFD} eq 'true' ? "yes\n" : "no\n";
-
-printf "Checking if Solaris I/O completion ports are available... ";
-$has_ports = 0;
-our $system = `uname -s`;
-chomp ($system);
-$has_ports = 1 if ($system eq "SunOS");
-
-if ($has_ports) {
- my $kernel = `uname -r`;
- chomp($kernel);
- if (($kernel !~ /^5\.1./)) {
- $has_ports = 0;
- }
-}
-print "yes\n" if $has_ports == 1;
-print "no\n" if $has_ports == 0;
+print "Checking whether Kqueue is available... ";
+$has_kqueue = test_file($config{CC}, "kqueue.cpp");
+print $has_kqueue ? "yes\n" : "no\n";
+
+print 'Checking whether Solaris IOCP is available... ';
+$has_ports = test_header($config{CC}, 'port.h');
+print $has_ports ? "yes\n" : "no\n";
$config{HAS_EPOLL} = $has_epoll;
$config{HAS_KQUEUE} = $has_kqueue;
chomp($config{GCCVER} = `$config{CC} -dumpversion | cut -c 1`); # we must redo these if we change compilers
chomp($config{GCCMINOR} = `$config{CC} -dumpversion | cut -c 3`);
print "Queried compiler: \e[1;32m$config{CC}\e[0m (version \e[1;32m$config{GCCVER}.$config{GCCMINOR}\e[0m)\n";
- if ($config{GCCVER} < 3) {
- print "\e[1;32mGCC 2.x WILL NOT WORK!\e[0m. Let's try that again, shall we?\n";
+ if ($config{GCCVER} < 4 || $config{GCCVER} == 4 && $config{GCCMINOR} < 1) {
+ print "\e[1;32mGCC 4.1 and earlier WILL NOT WORK!\e[0m. Let's try that again, shall we?\n";
}
}
else {
if ($tmpbase ne $config{BASE_DIR}) {
$config{CONFIG_DIR} = resolve_directory($config{BASE_DIR}."/conf"); # Configuration Dir
$config{MODULE_DIR} = resolve_directory($config{BASE_DIR}."/modules"); # Modules Directory
+ $config{DATA_DIR} = resolve_directory($config{BASE_DIR}."/data"); # Data Directory
+ $config{LOG_DIR} = resolve_directory($config{BASE_DIR}."/logs"); # Log Directory
$config{BINARY_DIR} = resolve_directory($config{BASE_DIR}."/bin"); # Binary 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 variable data files to be located in", "DATA_DIR");
+ dir_check("are the logs to be stored in", "LOG_DIR");
dir_check("do you want the build to take place", "BUILD_DIR");
-
+
my $chose_hiperf = 0;
if ($has_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?");
}
else
{
- 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";
+ print "\nCould not detect OpenSSL or GnuTLS. Make sure pkg-config is installed and\n";
+ print "is in your path.\n\n";
}
yesno('MODUPDATE',"Would you like to check for updates to third-party modules?");
* few times and get that HD going :) Then answer the *
* Questions which follow. If you are unsure, just hit enter *
*************************************************************\n\n";
- $failed = make_gnutls_cert();
+ $failed = system "./tools/genssl gnutls";
if ($failed) {
print "\n\e[1;32mCertificate generation failed!\e[0m\n\n";
} else {
* Generating the certificates may take some time, go grab a *
* coffee, or something. *
*************************************************************\n\n";
- make_openssl_cert();
+ system "./tools/genssl openssl";
print "\nCertificate generation complete, copying to config directory... ";
File::Copy::move("key.pem", "$config{CONFIG_DIR}/key.pem") or print STDERR "Could not copy key.pem!\n";
File::Copy::move("cert.pem", "$config{CONFIG_DIR}/cert.pem") or print STDERR "Could not copy cert.pem!\n";
sub writefiles {
my($writeheader) = @_;
- # First File.. inspircd_config.h
+ # First File.. config.h
chomp(my $incos = `uname -n -s -r`);
chomp(my $version = `sh src/version.sh`);
chomp(my $revision2 = getrevision());
+ my $branch = "InspIRCd-0.0";
+ if ($version =~ /^(InspIRCd-[0-9]+\.[0-9]+)\.[0-9]+/)
+ {
+ $branch = $1;
+ }
if ($writeheader == 1)
{
- print "Writing \e[1;32minspircd_config.h\e[0m\n";
- open(FILEHANDLE, ">include/inspircd_config.h.tmp");
+ print "Writing \e[1;32mconfig.h\e[0m\n";
+ open(FILEHANDLE, ">include/config.h.tmp");
print FILEHANDLE <<EOF;
/* Auto generated by configure, do not modify! */
-#ifndef __CONFIGURATION_AUTO__
-#define __CONFIGURATION_AUTO__
+#pragma once
-/* this is for windows support. */
-#define CoreExport /**/
-#define DllExport /**/
+#define BRANCH "$branch"
+#define VERSION "$version"
+#define REVISION "$revision2"
+#define SYSTEM "$incos"
+#define CONFIG_PATH "$config{CONFIG_DIR}"
+#define DATA_PATH "$config{DATA_DIR}"
+#define LOG_PATH "$config{LOG_DIR}"
#define MOD_PATH "$config{MODULE_DIR}"
-#define SOMAXCONN_S "$config{_SOMAXCONN}"
-#define ENTRYPOINT int main(int argc, char** argv)
EOF
-print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n";
if ($config{OSNAME} =~ /SunOS/i) {
print FILEHANDLE "#define IS_SOLARIS\n";
if ($config{GCCVER} >= 3) {
print FILEHANDLE "#define GCC3\n";
}
- if (
- (($config{GCCVER} == 4) && ($config{GCCMINOR} >= 3))
- ||
- ($config{GCCVER} > 4)
- ) {
- print FILEHANDLE "#define HASHMAP_DEPRECATED\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{HAS_EVENTFD} eq 'true') {
print FILEHANDLE "#define HAS_EVENTFD\n";
}
+ if ($config{HAS_CLOCK_GETTIME} eq 'true') {
+ print FILEHANDLE "#define HAS_CLOCK_GETTIME\n";
+ }
my $use_hiperf = 0;
if (($has_kqueue) && ($config{USE_KQUEUE} eq "y")) {
print FILEHANDLE "#define USE_KQUEUE\n";
$config{SOCKETENGINE} = "socketengine_select";
}
}
- print FILEHANDLE "\n#include \"threadengines/threadengine_pthread.h\"\n\n#endif\n";
- close(FILEHANDLE);
- open(FILEHANDLE, ">include/inspircd_version.h.tmp");
- print FILEHANDLE <<EOF;
-#define VERSION "$version"
-#define REVISION "$revision2"
-#define SYSTEM "$incos"
-EOF
- close FILEHANDLE;
-
- 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: $!";
- while (!$diff) {
- my $line1 = <$fh1>;
- my $line2 = <$fh2>;
- if (defined($line1) != defined($line2)) {
- $diff = 1;
- } elsif (!defined $line1) {
- last;
- } else {
- $diff = ($line1 ne $line2);
- }
- }
- if ($diff) {
- unlink $file;
- rename "$file.tmp", $file;
+ if ($config{HAS_DEFER} eq "TCP_DEFER_ACCEPT") {
+ print FILEHANDLE "#define USE_TCP_DEFER_ACCEPT";
+ } elsif ($config{HAS_DEFER} eq "SO_ACCEPTFILTER") {
+ print FILEHANDLE "#define USE_SO_ACCEPTFILTER"
+ }
+
+ print FILEHANDLE "\n#include \"threadengines/threadengine_pthread.h\"\n";
+ close(FILEHANDLE);
+
+ my $file = 'include/config.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: $!";
+ while (!$diff) {
+ my $line1 = <$fh1>;
+ my $line2 = <$fh2>;
+ if (defined($line1) != defined($line2)) {
+ $diff = 1;
+ } elsif (!defined $line1) {
+ last;
} else {
- unlink "$file.tmp";
+ $diff = ($line1 ne $line2);
}
}
+ if ($diff) {
+ unlink $file;
+ rename "$file.tmp", $file;
+ } else {
+ unlink "$file.tmp";
+ }
}
# Write all .in files.
$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
+ CC SYSTEM BASE_DIR CONFIG_DIR MODULE_DIR BINARY_DIR BUILD_DIR DATA_DIR UID
STARTSCRIPT DESTINATION SOCKETENGINE
)) {
s/\@$var\@/$config{$var}/g;
my %extras = ();
EXTRA: for my $extra (@extras) {
next if (File::Spec->curdir() eq $extra || File::Spec->updir() eq $extra);
- next if ($extra eq '.svn');
my $abs_extra = File::Spec->catfile($abs_srcdir, "extra", $extra);
my $abs_source = File::Spec->catfile($abs_srcdir, $extra);
next unless ($extra =~ m/\.(cpp|h)$/ || (-d $abs_extra)); # C++ Source/Header, or directory