X-Git-Url: https://ruderich.org/simon/gitweb/?p=blhc%2Fblhc.git;a=blobdiff_plain;f=bin%2Fblhc;h=6afff57ff521485c9c6a4db9437bc826ea26b18d;hp=fa9a07c8dce590a4a9a7e7f55327d7e76b4b0253;hb=cda2e04237c0657e09d248b7f33c6ad0dc56612e;hpb=bf419763b81c704b86244b0b7f0e92dda492af8a diff --git a/bin/blhc b/bin/blhc index fa9a07c..6afff57 100755 --- a/bin/blhc +++ b/bin/blhc @@ -2,7 +2,7 @@ # Build log hardening check, checks build logs for missing hardening flags. -# Copyright (C) 2012-2016 Simon Ruderich +# Copyright (C) 2012-2017 Simon Ruderich # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -33,7 +33,7 @@ our $VERSION = '0.07'; my $cc_regex = qr/ (? 1 } ( @source_no_preprocess_compile_ada, @source_no_preprocess_no_compile_ada, ); +my %extensions_fortran = map { $_ => 1 } ( + @source_no_preprocess_compile_fortran, + @source_preprocess_compile_fortran, +); my %extensions_object = map { $_ => 1 } ( @object, ); @@ -618,7 +630,7 @@ if ($option_help) { } if ($option_version) { print <<"EOF"; -blhc $VERSION Copyright (C) 2012-2016 Simon Ruderich +blhc $VERSION Copyright (C) 2012-2017 Simon Ruderich This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -730,6 +742,8 @@ foreach my $file (@ARGV) { # different CFLAGS. But only perform ada checks if an ada compiler is used # for performance reasons. my $ada = 0; + # Fortran also requires different CFLAGS. + my $fortran = 0; # Number of parallel jobs to prevent false positives when detecting # non-verbose builds. As not all jobs declare the number of parallel jobs @@ -827,6 +841,10 @@ foreach my $file (@ARGV) { if ($line =~ /\bgnat\b/) { $ada = 1; } + # Fortran compiler. + if ($line =~ /\bgfortran\b/) { + $fortran = 1; + } } # This flags is not always available, but if it is use it. @@ -1087,14 +1105,13 @@ foreach my $file (@ARGV) { @ldflags = (@ldflags, @def_ldflags_bindnow); } - # Stores normal CFLAGS when @cflags_ada are temporarily used. - my @cflags_backup; - # Ada CFLAGS, only set if ada is used. - my @cflags_ada; # Ada doesn't support format hardening flags, see #680117 for more - # information. Filter them out if ada is used. - if ($ada and $harden_format) { - @cflags_ada = grep { + # information. Same for fortran. Filter them out if either language is + # used. + my @cflags_backup; + my @cflags_noformat; + if (($ada or $fortran) and $harden_format) { + @cflags_noformat = grep { my $ok = 1; foreach my $flag (@def_cflags_format) { $ok = 0 if $_ eq $flag; @@ -1236,7 +1253,7 @@ LINE: } my $compile_cpp = 0; - my $compile_ada = 0; + my $restore_cflags = 0; # Assume CXXFLAGS are required when a C++ file is specified in the # compiler line. if ($compile @@ -1246,10 +1263,16 @@ LINE: # Ada needs special CFLAGS, use them if only ada files are compiled. } elsif ($ada and extension_found(\%extensions_ada, @extensions)) { - $compile_ada = 1; + $restore_cflags = 1; $preprocess = 0; # Ada uses no CPPFLAGS @cflags_backup = @cflags; - @cflags = @cflags_ada; + @cflags = @cflags_noformat; + # Same for fortran. + } elsif ($fortran + and extension_found(\%extensions_fortran, @extensions)) { + $restore_cflags = 1; + @cflags_backup = @cflags; + @cflags = @cflags_noformat; } if ($option_buildd) { @@ -1324,7 +1347,7 @@ LINE: } # Restore normal CFLAGS. - if ($compile_ada) { + if ($restore_cflags) { @cflags = @cflags_backup; } } @@ -1626,7 +1649,7 @@ Ejari.aalto@cante.netE for their valuable input and suggestions. =head1 LICENSE AND COPYRIGHT -Copyright (C) 2012-2016 by Simon Ruderich +Copyright (C) 2012-2017 by Simon Ruderich This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by