]> ruderich.org/simon Gitweb - blhc/blhc.git/blobdiff - bin/blhc
Switch to new output format for --buildd mode.
[blhc/blhc.git] / bin / blhc
index c3834fbf07aeaec8757b1c6cc3499fbc47ab5bd0..544c567b37bc7434a414abb047638ee1fa9cc74a 100755 (executable)
--- 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',
 );
@@ -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},
     }