- Split the detection and compatibility checks into two different
steps (previously it was confusing as it would say the compiler
was not available when it was really not compatible).
- Fix a minor bug where compilers detected using xcrun on Darwin
would not have xcrun returned as part of the compiler name from
find_compiler.
+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'), 'compatible');
+ return 1;
+}
+
sub cmd_clean {
unlink CONFIGURE_CACHE_FILE;
}
sub cmd_clean {
unlink CONFIGURE_CACHE_FILE;
}
-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;
}
print_format $result ? "<|GREEN yes|>\n" : "<|RED no|>\n";
return $result;
}
sub find_compiler {
my @compilers = qw(c++ g++ clang++ icpc);
foreach my $compiler (shift || @compilers) {
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';
- }
+ return $compiler if __test_compiler $compiler;
+ return "xcrun $compiler" if $^O eq 'darwin' && __test_compiler "xcrun $compiler";