summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Powell <petpow@saberuk.com>2015-03-21 20:04:03 +0000
committerPeter Powell <petpow@saberuk.com>2015-03-25 19:01:33 +0000
commitaae283e1dd292ace3a02809ca571a72eb06d9732 (patch)
tree78057af511efaa4b9ff3c2be9646d72c2f1c427a
parentaaae660fee19a56c752bdec84da86c4b1e779af0 (diff)
Convert the build system to Perl 5.10.
Thanks to Kross for the heads up on "use feature".
-rwxr-xr-xconfigure53
-rw-r--r--make/common.pm20
-rw-r--r--make/configure.pm23
-rw-r--r--make/console.pm7
-rwxr-xr-xtools/genssl22
-rwxr-xr-xtools/test-build15
6 files changed, 73 insertions, 67 deletions
diff --git a/configure b/configure
index 1ff38bad1..ab2d50a86 100755
--- a/configure
+++ b/configure
@@ -27,9 +27,10 @@
BEGIN {
- require 5.8.0;
+ require 5.10.0;
}
+use feature ':5.10';
use strict;
use warnings FATAL => qw(all);
@@ -137,7 +138,7 @@ if ($interactive) {
}
}
-$config{CXX} = find_compiler($config{CXX} || $ENV{CXX});
+$config{CXX} = find_compiler($config{CXX} // $ENV{CXX});
unless ($config{CXX}) {
print "A suitable C++ compiler could not be detected on your system!\n";
print "Set the CXX environment variable to the compiler binary path if this is incorrect.\n";
@@ -149,24 +150,24 @@ $config{HAS_CLOCK_GETTIME} = run_test 'clock_gettime()', test_file($config{CXX},
$config{HAS_EVENTFD} = run_test 'eventfd()', test_file($config{CXX}, 'eventfd.cpp');
if ($config{HAS_EPOLL} = run_test 'epoll', test_header($config{CXX}, 'sys/epoll.h')) {
- $config{SOCKETENGINE} ||= 'epoll';
+ $config{SOCKETENGINE} //= 'epoll';
}
if ($config{HAS_KQUEUE} = run_test 'kqueue', test_file($config{CXX}, 'kqueue.cpp')) {
- $config{SOCKETENGINE} ||= 'kqueue';
+ $config{SOCKETENGINE} //= 'kqueue';
}
if ($config{HAS_PORTS} = run_test 'Solaris IOCP', test_header($config{CXX}, 'port.h')) {
- $config{SOCKETENGINE} ||= 'ports';
+ $config{SOCKETENGINE} //= 'ports';
}
if ($config{HAS_POLL} = run_test 'poll', test_header($config{CXX}, 'poll.h')) {
- $config{SOCKETENGINE} ||= 'poll';
+ $config{SOCKETENGINE} //= 'poll';
}
# Select is available on all platforms
$config{HAS_SELECT} = 1;
-$config{SOCKETENGINE} ||= 'select';
+$config{SOCKETENGINE} //= 'select';
if (defined $opt_socketengine) {
my $cfgkey = 'HAS_' . uc $opt_socketengine;
@@ -191,21 +192,21 @@ if (defined $opt_distribution_label) {
}
if (defined $opt_system) {
- $config{BASE_DIR} = $opt_prefix || '/var/lib/inspircd';
- $config{BINARY_DIR} = $opt_binary_dir || '/usr/sbin';
- $config{CONFIG_DIR} = $opt_config_dir || '/etc/inspircd';
- $config{DATA_DIR} = $opt_data_dir || '/var/inspircd';
- $config{LOG_DIR} = $opt_module_dir || '/var/log/inspircd';
- $config{MANUAL_DIR} = $opt_manual_dir || '/usr/share/man/man1';
- $config{MODULE_DIR} = $opt_module_dir || '/usr/lib/inspircd';
+ $config{BASE_DIR} = $opt_prefix // '/var/lib/inspircd';
+ $config{BINARY_DIR} = $opt_binary_dir // '/usr/sbin';
+ $config{CONFIG_DIR} = $opt_config_dir // '/etc/inspircd';
+ $config{DATA_DIR} = $opt_data_dir // '/var/inspircd';
+ $config{LOG_DIR} = $opt_module_dir // '/var/log/inspircd';
+ $config{MANUAL_DIR} = $opt_manual_dir // '/usr/share/man/man1';
+ $config{MODULE_DIR} = $opt_module_dir // '/usr/lib/inspircd';
} else {
- $config{BASE_DIR} = $opt_prefix || $config{BASE_DIR} || rel2abs 'run';
- $config{BINARY_DIR} = $opt_binary_dir || $config{BINARY_DIR} || rel2abs $config{BASE_DIR} . '/bin';
- $config{CONFIG_DIR} = $opt_config_dir || $config{CONFIG_DIR} || rel2abs $config{BASE_DIR} . '/conf';
- $config{DATA_DIR} = $opt_data_dir || $config{DATA_DIR} || rel2abs $config{BASE_DIR} . '/data';
- $config{LOG_DIR} = $opt_log_dir || $config{LOG_DIR} || rel2abs $config{BASE_DIR} . '/logs';
- $config{MANUAL_DIR} = $opt_manual_dir || $config{MANUAL_DIR} || rel2abs $config{BASE_DIR} . '/manuals';
- $config{MODULE_DIR} = $opt_module_dir || $config{MODULE_DIR} || rel2abs $config{BASE_DIR} . '/modules';
+ $config{BASE_DIR} = $opt_prefix // $config{BASE_DIR} // rel2abs 'run';
+ $config{BINARY_DIR} = $opt_binary_dir // $config{BINARY_DIR} // rel2abs $config{BASE_DIR} . '/bin';
+ $config{CONFIG_DIR} = $opt_config_dir // $config{CONFIG_DIR} // rel2abs $config{BASE_DIR} . '/conf';
+ $config{DATA_DIR} = $opt_data_dir // $config{DATA_DIR} // rel2abs $config{BASE_DIR} . '/data';
+ $config{LOG_DIR} = $opt_log_dir // $config{LOG_DIR} // rel2abs $config{BASE_DIR} . '/logs';
+ $config{MANUAL_DIR} = $opt_manual_dir // $config{MANUAL_DIR} // rel2abs $config{BASE_DIR} . '/manuals';
+ $config{MODULE_DIR} = $opt_module_dir // $config{MODULE_DIR} // rel2abs $config{BASE_DIR} . '/modules';
}
# Parse --gid=123 or --gid=foo and extract the group id.
@@ -214,7 +215,7 @@ if (defined $opt_gid) {
@group = $opt_gid =~ /^\d+$/ ? getgrgid($opt_gid) : getgrnam($opt_gid);
print_error "there is no '$opt_gid' group on this system!" unless @group;
} else {
- @group = $opt_system ? getgrnam('irc') : getgrgid($config{GID} || getgid());
+ @group = $opt_system ? getgrnam('irc') : getgrgid($config{GID} // getgid());
print_error "you need to specify a group to run as using '--gid [id|name]'!" unless @group;
}
$config{GROUP} = $group[0];
@@ -226,7 +227,7 @@ if (defined $opt_uid) {
@user = $opt_uid =~ /^\d+$/ ? getpwuid($opt_uid) : getpwnam($opt_uid);
print_error "there is no '$opt_uid' user on this system!" unless @user;
} else {
- @user = $opt_system ? getpwnam('irc') : getpwuid($config{UID} || getuid());
+ @user = $opt_system ? getpwnam('irc') : getpwuid($config{UID} // getuid());
print_error "you need to specify a user to run as using '--uid [id|name]'!" unless @user;
}
$config{USER} = $user[0];
@@ -246,8 +247,8 @@ version instead.
You can obtain the latest stable version from http://www.inspircd.org/ or by
running `git checkout insp20` if you are installing from Git.
EOW
- if (!prompt_bool $interactive, 'I understand this warning and want to continue anyway.', $opt_development || 0) {
- print STDERR "If you understand this warning and still want to continue pass the --development flag.\n" unless $interactive;
+ if (!prompt_bool $interactive, 'I understand this warning and want to continue anyway.', $opt_development // 0) {
+ say STDERR 'If you understand this warning and still want to continue pass the --development flag.' unless $interactive;
exit 1;
}
}
@@ -322,7 +323,7 @@ EOM
for my $file (<src/modules/m_*>) {
my $module = basename $file, '.cpp';
- print " * $module\n" if -l $file;
+ say " * $module" if -l $file;
}
print_format <<"EOM";
diff --git a/make/common.pm b/make/common.pm
index 24ef599ce..638cc668a 100644
--- a/make/common.pm
+++ b/make/common.pm
@@ -18,11 +18,12 @@
BEGIN {
- require 5.8.0;
+ require 5.10.0;
}
package make::common;
+use feature ':5.10';
use strict;
use warnings FATAL => qw(all);
@@ -33,9 +34,8 @@ our @EXPORT = qw(get_cpu_count
get_version
module_installed);
-my %version;
-
sub get_version {
+ state %version;
return %version if %version;
# Attempt to retrieve version information from src/version.sh
@@ -47,22 +47,22 @@ sub get_version {
# Attempt to retrieve missing version information from Git
chomp(my $gr = `git describe --tags 2>/dev/null`);
if ($gr =~ /^v([0-9]+)\.([0-9]+)\.([0-9]+)(?:-\d+-g(\w+))?$/) {
- $version{MAJOR} = $1 unless defined $version{MAJOR};
- $version{MINOR} = $2 unless defined $version{MINOR};
- $version{PATCH} = $3 unless defined $version{PATCH};
+ $version{MAJOR} //= $1;
+ $version{MINOR} //= $2;
+ $version{PATCH} //= $3;
$version{LABEL} = $4 if defined $4;
}
# The user is using a stable release which does not have
# a label attached.
- $version{LABEL} = 'release' unless defined $version{LABEL};
+ $version{LABEL} //= 'release';
# If any of these fields are missing then the user has deleted the
# version file and is not running from Git. Fill in the fields with
# dummy data so we don't get into trouble with undef values later.
- $version{MAJOR} = '0' unless defined $version{MAJOR};
- $version{MINOR} = '0' unless defined $version{MINOR};
- $version{PATCH} = '0' unless defined $version{PATCH};
+ $version{MAJOR} //= '0';
+ $version{MINOR} //= '0';
+ $version{PATCH} //= '0';
return %version;
}
diff --git a/make/configure.pm b/make/configure.pm
index 84f076483..9a53221a8 100644
--- a/make/configure.pm
+++ b/make/configure.pm
@@ -22,11 +22,12 @@
BEGIN {
- require 5.8.0;
+ require 5.10.0;
}
package make::configure;
+use feature ':5.10';
use strict;
use warnings FATAL => qw(all);
@@ -175,18 +176,18 @@ EOH
sub cmd_update {
print_error "You have not run $0 before. Please do this before trying to update the generated files." unless -f CONFIGURE_CACHE_FILE;
- print "Updating...\n";
+ say 'Updating...';
my %config = read_configure_cache();
my %compiler = get_compiler_info($config{CXX});
my %version = get_version();
parse_templates(\%config, \%compiler, \%version);
- print "Update complete!\n";
+ say 'Update complete!';
exit 0;
}
sub run_test($$;$) {
my ($what, $result, $adjective) = @_;
- $adjective ||= 'available';
+ $adjective //= 'available';
print_format "Checking whether <|GREEN $what|> is $adjective ... ";
print_format $result ? "<|GREEN yes|>\n" : "<|RED no|>\n";
return $result;
@@ -195,7 +196,7 @@ sub run_test($$;$) {
sub test_file($$;$) {
my ($compiler, $file, $args) = @_;
my $status = 0;
- $args ||= '';
+ $args //= '';
$status ||= system "$compiler -o __test_$file make/test/$file $args >/dev/null 2>&1";
$status ||= system "./__test_$file >/dev/null 2>&1";
unlink "./__test_$file";
@@ -204,7 +205,7 @@ sub test_file($$;$) {
sub test_header($$;$) {
my ($compiler, $header, $args) = @_;
- $args ||= '';
+ $args //= '';
open(COMPILER, "| $compiler -E - $args >/dev/null 2>&1") or return 0;
print COMPILER "#include <$header>";
close(COMPILER);
@@ -228,8 +229,8 @@ sub write_configure_cache(%) {
my %config = @_;
open(CACHE, '>', CONFIGURE_CACHE_FILE) or print_error "unable to write ${\CONFIGURE_CACHE_FILE}: $!";
while (my ($key, $value) = each %config) {
- $value = '' unless defined $value;
- print CACHE "$key=\"$value\"\n";
+ $value //= '';
+ say CACHE "$key=\"$value\"";
}
close(CACHE);
}
@@ -251,7 +252,7 @@ sub get_compiler_info($) {
sub find_compiler {
my @compilers = qw(c++ g++ clang++ icpc);
- foreach my $compiler (shift || @compilers) {
+ foreach my $compiler (shift // @compilers) {
return $compiler if __test_compiler $compiler;
return "xcrun $compiler" if $^O eq 'darwin' && __test_compiler "xcrun $compiler";
}
@@ -269,7 +270,7 @@ sub get_property($$;$)
}
}
close(MODULE);
- return defined $default ? $default : '';
+ return $default // '';
}
sub parse_templates($$$) {
@@ -418,7 +419,7 @@ sub parse_templates($$$) {
print_format "Writing <|GREEN $target|> ...\n";
open(TARGET, '>', $target) or print_error "unable to write $_: $!";
foreach (@final_lines) {
- print TARGET $_, "\n";
+ say TARGET $_;
}
close(TARGET);
diff --git a/make/console.pm b/make/console.pm
index 045df8a70..4e7b32d49 100644
--- a/make/console.pm
+++ b/make/console.pm
@@ -20,9 +20,10 @@
package make::console;
BEGIN {
- require 5.8.0;
+ require 5.10.0;
}
+use feature ':5.10';
use strict;
use warnings FATAL => qw(all);
@@ -55,7 +56,7 @@ sub __console_format($$) {
sub print_format($;$) {
my $message = shift;
- my $stream = shift || *STDOUT;
+ my $stream = shift // *STDOUT;
while ($message =~ /(<\|(\S+)\s(.+?)\|>)/) {
my $formatted = __console_format $2, $3;
$message =~ s/\Q$1\E/$formatted/;
@@ -106,7 +107,7 @@ sub prompt_string($$$) {
print_format "$question\n";
print_format "[<|GREEN $default|>] => ";
chomp(my $answer = <STDIN>);
- print "\n";
+ say '';
return $answer ? $answer : $default;
}
diff --git a/tools/genssl b/tools/genssl
index 13b1f01fc..739f7fc7d 100755
--- a/tools/genssl
+++ b/tools/genssl
@@ -21,9 +21,10 @@
BEGIN {
- require 5.8.0;
+ require 5.10.0;
}
+use feature ':5.10';
use strict;
use warnings FATAL => qw(all);
@@ -36,15 +37,15 @@ use File::Temp();
sub prompt($$) {
my ($question, $default) = @_;
return prompt_string(1, $question, $default) if eval 'use make::console; 1';
- print "$question\n";
+ say $question;
print "[$default] => ";
chomp(my $answer = <STDIN>);
- print "\n";
+ say '';
return $answer ? $answer : $default;
}
if ($#ARGV != 0 || $ARGV[0] !~ /^(?:auto|gnutls|openssl)$/i) {
- print "Syntax: genssl <auto|gnutls|openssl>\n";
+ say 'Syntax: genssl <auto|gnutls|openssl>';
exit 1;
}
@@ -65,14 +66,14 @@ if ($tool eq 'auto') {
} elsif ($has_openssl) {
$tool = 'openssl';
} else {
- print STDERR "SSL generation failed: could not find $certtool or openssl in the PATH!\n";
+ say STDERR "SSL generation failed: could not find $certtool or openssl in the PATH!";
exit 1;
}
} elsif ($tool eq 'gnutls' && !$has_gnutls) {
- print STDERR "SSL generation failed: could not find '$certtool' in the PATH!\n";
+ say STDERR "SSL generation failed: could not find '$certtool' in the PATH!";
exit 1;
} elsif ($tool eq 'openssl' && !$has_openssl) {
- print STDERR "SSL generation failed: could not find 'openssl' in the PATH!\n";
+ say STDERR 'SSL generation failed: could not find \'openssl\' in the PATH!';
exit 1;
}
@@ -138,13 +139,14 @@ __OPENSSL_END__
}
if ($status) {
- print STDERR "SSL generation failed: $tool exited with a non-zero status!\n";
+ say STDERR "SSL generation failed: $tool exited with a non-zero status!";
exit 1;
}
if (defined $dercert && eval 'use Digest::SHA; 1') {
my $hash = Digest::SHA->new(256);
$hash->add($dercert);
- print "\nAdd this TLSA record to your domain for DANE support:\n";
- print "_6697._tcp." . $common_name . " TLSA 3 0 1 " . $hash->hexdigest . "\n";
+ say '';
+ say 'Add this TLSA record to your domain for DANE support:';
+ say "_6697._tcp." . $common_name . " TLSA 3 0 1 " . $hash->hexdigest;
}
diff --git a/tools/test-build b/tools/test-build
index 1b0192e31..b0eb255c0 100755
--- a/tools/test-build
+++ b/tools/test-build
@@ -19,13 +19,14 @@
BEGIN {
- require 5.8.0;
+ require 5.10.0;
unless (-f 'configure') {
print "Error: $0 must be run from the main source directory!\n";
exit 1;
}
}
+use feature ':5.10';
use strict;
use warnings FATAL => qw(all);
@@ -39,7 +40,7 @@ system 'git', 'clean', '-dfx';
my @compilers = $#ARGV >= 0 ? @ARGV : qw(g++ clang++ icpc);
foreach my $compiler (@compilers) {
if (system "$compiler -v > /dev/null 2>&1") {
- print "Skipping $compiler as it is not installed on this system!\n";
+ say "Skipping $compiler as it is not installed on this system!";
next;
}
$ENV{CXX} = $compiler;
@@ -49,23 +50,23 @@ foreach my $compiler (@compilers) {
push @socketengines, 'poll' if test_header $compiler, 'poll.h';
push @socketengines, 'ports' if test_header $compiler, 'ports.h';
foreach my $socketengine (@socketengines) {
- print "Attempting to build using the $compiler compiler and the $socketengine socket engine...\n";
+ say "Attempting to build using the $compiler compiler and the $socketengine socket engine...";
system './configure', '--enable-extras', $ENV{TEST_BUILD_MODULES} if defined $ENV{TEST_BUILD_MODULES};
if (system './configure', '--development', '--socketengine', $socketengine) {
- print "Failed to configure using the $compiler compiler and the $socketengine socket engine!\n";
+ say "Failed to configure using the $compiler compiler and the $socketengine socket engine!";
exit 1;
}
$ENV{PURE_STATIC} = 1;
if (system 'make', '-j'.get_cpu_count, 'install') {
- print "Failed to compile with static modules using the $compiler compiler and the $socketengine socket engine!\n";
+ say "Failed to compile with static modules using the $compiler compiler and the $socketengine socket engine!";
exit 1;
}
delete $ENV{PURE_STATIC};
if (system 'make', '-j'.get_cpu_count, 'install') {
- print "Failed to compile with dynamic modules using the $compiler compiler and the $socketengine socket engine!\n";
+ say "Failed to compile with dynamic modules using the $compiler compiler and the $socketengine socket engine!";
exit 1;
}
- print "Building using the $compiler compiler and the $socketengine socket engine succeeded!\n";
+ say "Building using the $compiler compiler and the $socketengine socket engine succeeded!";
}
system 'git', 'clean', '-dfx';