X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=make%2Fconfigure.pm;h=e314e6d159305cfe0a6082072f576a04616874f8;hb=a2461fb7e1c28e28e64b61256d7a547162a83f6e;hp=8653edaac2c14b962be8fd9aa381c3e6163c5710;hpb=7404ba8b66083c2fbb19c638da85c252551792a2;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/make/configure.pm b/make/configure.pm index 8653edaac..e314e6d15 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); @@ -93,6 +94,13 @@ sub __get_template_settings($$$) { return %settings; } +sub __test_compiler($) { + my $compiler = shift; + return 0 unless run_test("`$compiler`", !system "$compiler -v >/dev/null 2>&1"); + return 0 unless run_test("`$compiler`", test_file($compiler, 'compiler.cpp', '-fno-rtti'), 'compatible'); + return 1; +} + sub cmd_clean { unlink CONFIGURE_CACHE_FILE; } @@ -160,7 +168,7 @@ FLAGS will search for c++, g++, clang++ or icpc. If you have any problems with configuring InspIRCd then visit our IRC channel -at irc.ChatSpike.net #InspIRCd. +at irc.inspircd.org #InspIRCd for support. EOH exit 0; @@ -168,18 +176,19 @@ 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) = @_; - print_format "Checking whether <|GREEN $what|> is available ... "; +sub run_test($$;$) { + my ($what, $result, $adjective) = @_; + $adjective //= 'available'; + print_format "Checking whether <|GREEN $what|> is $adjective ... "; print_format $result ? "<|GREEN yes|>\n" : "<|RED no|>\n"; return $result; } @@ -187,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"; @@ -196,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); @@ -220,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); } @@ -229,9 +238,11 @@ sub write_configure_cache(%) { sub get_compiler_info($) { my $binary = shift; my $version = `$binary -v 2>&1`; - if ($version =~ /clang\sversion\s(\d+\.\d+)/i || $version =~ /^apple.+\(based\son\sllvm\s(\d+\.\d+)/i) { + if ($version =~ /Apple\sLLVM\sversion\s(\d+\.\d+)/i) { # Apple version their LLVM releases slightly differently to the mainline LLVM. # See https://trac.macports.org/wiki/XcodeVersionInfo for more information. + return (NAME => 'AppleClang', VERSION => $1); + } elsif ($version =~ /clang\sversion\s(\d+\.\d+)/i) { return (NAME => 'Clang', VERSION => $1); } elsif ($version =~ /gcc\sversion\s(\d+\.\d+)/i) { return (NAME => 'GCC', VERSION => $1); @@ -243,11 +254,9 @@ sub get_compiler_info($) { sub find_compiler { my @compilers = qw(c++ g++ clang++ icpc); - foreach my $compiler (shift || @compilers) { - return $compiler if run_test "`$compiler`", test_file $compiler, 'compiler.cpp'; - if ($^O eq 'darwin') { - return $compiler if run_test "`xcrun $compiler`", test_file "xcrun $compiler", 'compiler.cpp'; - } + foreach my $compiler (shift // @compilers) { + return $compiler if __test_compiler $compiler; + return "xcrun $compiler" if $^O eq 'darwin' && __test_compiler "xcrun $compiler"; } } @@ -263,7 +272,7 @@ sub get_property($$;$) } } close(MODULE); - return defined $default ? $default : ''; + return $default // ''; } sub parse_templates($$$) { @@ -412,7 +421,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);