X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=bin%2Fblhc;h=544c567b37bc7434a414abb047638ee1fa9cc74a;hb=a1ade38eef7f07b148c07f1d2721fae8f1c8d5b1;hp=c8260e58dc55cc01f939361155d834a9b9a74679;hpb=b3737dbbbeaf60f8685e099043675712284e6fa6;p=blhc%2Fblhc.git diff --git a/bin/blhc b/bin/blhc index c8260e5..544c567 100755 --- a/bin/blhc +++ b/bin/blhc @@ -24,7 +24,7 @@ use warnings; use Getopt::Long (); use Text::ParseWords (); -our $VERSION = '0.02'; +our $VERSION = '0.03'; # CONSTANTS/VARIABLES @@ -172,9 +172,11 @@ my @def_cxxflags = ( my @def_cppflags = (); my @def_cppflags_fortify = ( '-D_FORTIFY_SOURCE=2', # must be first, see cppflags_fortify_broken() + # If you add another flag fix hack below (search for "Hack to fix"). ); my @def_cppflags_fortify_bad = ( # These flags may overwrite -D_FORTIFY_SOURCE=2. + '-U_FORTIFY_SOURCE', '-D_FORTIFY_SOURCE=0', '-D_FORTIFY_SOURCE=1', ); @@ -194,7 +196,7 @@ my @def_ldflags_pic = ( '-fpic', '-shared', ); -# References to all flags checked by the parser. +# References to all flags checked by the flag checker. my @flag_refs = ( \@def_cflags, \@def_cflags_format, @@ -654,7 +656,7 @@ foreach my $file (@ARGV) { if (not $option_buildd) { error_invalid_cmake($1); } else { - print "$buildd_tag{invalid_cmake} $1\n"; + print "$buildd_tag{invalid_cmake}|$1|\n"; } $exit |= $exit_code{invalid_cmake}; } @@ -666,7 +668,7 @@ foreach my $file (@ARGV) { if (not $option_buildd) { error_hardening_wrapper(); } else { - print "$buildd_tag{hardening_wrapper}\n"; + print "$buildd_tag{hardening_wrapper}||\n"; } $exit |= $exit_code{hardening_wrapper}; next FILE; @@ -800,7 +802,7 @@ foreach my $file (@ARGV) { if (not $option_buildd) { print "No compiler commands!\n"; } else { - print "$buildd_tag{no_compiler_commands}\n"; + print "$buildd_tag{no_compiler_commands}||\n"; } $exit |= $exit_code{no_compiler_commands}; next FILE; @@ -862,6 +864,13 @@ foreach my $file (@ARGV) { @ldflags = (@ldflags, @def_ldflags_bindnow); } + # Hack to fix cppflags_fortify_broken() if --ignore-flag + # -D_FORTIFY_SOURCE=2 is used to ignore missing fortification. Only works + # as long as @def_cppflags_fortify contains only one variable. + if (scalar @def_cppflags_fortify == 0) { + $harden_fortify = 0; + } + # Ignore flags for this arch if requested. if ($arch and exists $option_ignore_arch_flag{$arch}) { my @flag_refs = (\@cflags, \@cxxflags, \@cppflags, \@ldflags); @@ -1067,11 +1076,11 @@ if ($option_buildd) { } if (scalar @warning) { local $" = ', '; # array join string - print "$buildd_tag{flags_missing} @warning missing\n"; + print "$buildd_tag{flags_missing}|@warning missing|\n"; } if ($statistics{commands_nonverbose}) { - printf "$buildd_tag{non_verbose_build} %d (of %d) hidden\n", + printf "$buildd_tag{non_verbose_build}|%d (of %d) hidden|\n", $statistics{commands_nonverbose}, $statistics{commands}, }