diff --git a/src/perl/scripts2/check_compilers.pl b/src/perl/scripts2/check_compilers.pl index dba6ba82668b4ce95cb191ca01ff5d8b77ca059a..b3c4dad10d989e9726bf7a70965a359c81dba48a 100755 --- a/src/perl/scripts2/check_compilers.pl +++ b/src/perl/scripts2/check_compilers.pl @@ -4,6 +4,7 @@ use Sort::Versions; use rob_misc; $|=1; + # # Script to build binary_c with each available gcc and clang, # checking for errors and warnings @@ -11,9 +12,13 @@ $|=1; my $args = "@ARGV"; my $vb = ($args=~/-v/) ? 1 : 0; +my %versions; +my @compilers = ('gcc','clang'); +my $compiler_regexp = join('|',@compilers); + +print "Check binary_c compilers (vb = $vb)\n"; -foreach my $compiler ('gcc', - 'clang') +foreach my $compiler (@compilers) { my @executables = find_executables($compiler); @@ -46,25 +51,16 @@ sub find_executables } @executables; # get versions : we want a unique list by version - my %versions; foreach my $executable (@executables) { - my $v = (`$executable -v 2>\&1`=~/version (\S+)/)[0]; - if($v) + my $v = version_of($executable); + if(!defined $v) { - $versions{$v} = $executable; + print "Warning: $executable gave no version\n"; } else { - $v = (`$executable --version 2>\&1`=~/$compiler \S+ (\d.*)/)[0]; - if($v) - { - $versions{$v} = $executable; - } - else - { - print "Warning: $executable gave no version\n"; - } + $versions{$v} = $executable; } } @@ -74,34 +70,46 @@ sub find_executables return @executables; } +sub version_of +{ + # return version of the compiler, or undef + my ($executable) = @_; + return (`$executable -v 2>\&1`=~/version (\S+)/)[0] // + (`$executable --version 2>\&1`=~/($compiler_regexp) \S+ (\d.*)/)[0] // + undef; +} + sub build { my ($compiler) = @_; - - my $env = "export CC=$compiler"; - - my $r = `$env ; ./configure 2>/dev/stdout`; + my $v = version_of($compiler)//''; + # environment for commnads + my $env = "unset CC; export CC=$compiler; "; + + # run configure + print "Configure with $compiler (version $v)\n"; + my $cmd = "$env ./configure 2>/dev/stdout"; + print "CMD $cmd\n"if($vb); + my $r = `$cmd`; print $r if($vb); if($r=~/Now run .\/make/) { - print "Building with $compiler\n"; - my $r = `$env ; ./make clean; ./make 2>/dev/stdout`; + # configure successful : do the build + print "Building\n"; + $cmd = "$env ./make clean 2>/dev/stdout; ./make 2>/dev/stdout"; + print "CMD $cmd\n" if($vb); + $r = `$cmd`; - # clean the results - $r =~ s/Done.*//g; - $r =~ s/Make on.*//g; - $r =~ s/rm -f.*//g; - $r =~ s/BUILD.*//g; - $r =~ s/LINK.*//g; - $r =~ s/DONE.*//g; + # clean the results of successful statements + $r =~ s/(?:rm -f|Make on|Done|BUILD|LINK|DONE).*//g; $r =~ s/\n\s*\n//g; $r =~ s/^\s+//; $r =~ s/\s+$//; $r = rob_misc::remove_ANSI($r); - # check for warnings or errors + # check for remaining warnings or errors if($r) { # error or warning found @@ -115,7 +123,7 @@ sub build } else { - print "Configure with compiler \"$compiler\" failed \n"; + print "Configure with compiler \"$compiler\" (version $v) failed \n"; exit; } } diff --git a/src/setup/version.c b/src/setup/version.c index 9af7bee81152d913286255b5877da1d83dfc392e..15a4f575b8726e9df73752234325b14113322c32 100644 --- a/src/setup/version.c +++ b/src/setup/version.c @@ -307,13 +307,14 @@ void version(struct stardata_t * RESTRICT const stardata) copy_stardata((const struct stardata_t*)_s,(struct stardata_t*)(STARDATA1),COPY_STARDATA_PREVIOUS_NONE); \ Safe_free(_s); \ } -#define Swap_stardatas_with_move(STARDATA1,STARDATA2) \ - { \ - struct stardata_t * _s = New_stardata; \ - Move_stardata((STARDATA2),_s); \ - Move_stardata((STARDATA1),(STARDATA2)); \ - Move_stardata(_s,(STARDATA1)); \ - Safe_free(_s); \ +#define Swap_stardatas_with_move(STARDATA1,STARDATA2) \ + { \ + struct stardata_t * _s = New_stardata; \ + struct stardata_t * _dummy_s MAYBE_UNUSED; \ + _dummy_s = Move_stardata((STARDATA2),_s); \ + _dummy_s = Move_stardata((STARDATA1),(STARDATA2)); \ + _dummy_s = Move_stardata(_s,(STARDATA1)); \ + Safe_free(_s); \ } /*