X-Git-Url: https://ruderich.org/simon/gitweb/?p=blhc%2Fblhc.git;a=blobdiff_plain;f=bin%2Fblhc;h=3b7f746113c319484b10f900f7c1fa50228d8e29;hp=8c1d1fb7acc9b27cbec5a8b98662ae2cd0452a80;hb=a4712dd7fab2e1e14ba27894279dc793d1944536;hpb=dd0fe03f3a6cbf13d0ea4f327662a3ffaca881e1 diff --git a/bin/blhc b/bin/blhc index 8c1d1fb..3b7f746 100755 --- a/bin/blhc +++ b/bin/blhc @@ -532,7 +532,7 @@ sub is_non_verbose_build { if (not (index($line, 'checking if you want to see long compiling messages... no') == 0 or $line =~ /^\s*\[?(?:CC|CCLD|C\+\+|CXX|CXXLD|LD|LINK)\]?\s+(.+?)$/ - or $line =~ /^\s*[Cc]ompiling\s+(.+?)(?:\.\.\.)?$/ + or $line =~ /^\s*[][\/0-9 ]*[Cc]ompiling\s+(.+?)(?:\.\.\.)?$/ or $line =~ /^\s*[Bb]uilding (?:program|shared library)\s+(.+?)$/ or $line =~ /^\s*\[[\d ]+%\] Building (?:C|CXX) object (.+?)$/)) { return 0; @@ -750,6 +750,7 @@ foreach my $flags (@flag_refs_all) { } # Precompile ignore line regexps, also anchor at beginning and end of line. +# Additional entries are also extracted from the build log, see below. foreach my $ignore (@option_ignore_line) { $ignore = qr/^$ignore$/; } @@ -954,6 +955,15 @@ foreach my $file (@ARGV) { } } + # Permit dynamic excludes from within the build log to ignore false + # positives. Cannot use a separate config file as we often only have + # the build log itself. + if (index($line, 'blhc: ignore-line-regexp: ') == 0) { + my $ignore = substr $line, 26, -1; # -1 to ignore '\n' at the end + push @option_ignore_line, qr/^$ignore$/; + next; + } + next if $line =~ /^\s*#/; # Ignore compiler warnings for now. next if $line =~ /$warning_regex/o; @@ -1066,6 +1076,10 @@ foreach my $file (@ARGV) { next if $line =~ m{$cc_regex_normal\s*>\s*\S+}o; # Hex output may contain "cc". next if $line =~ m#(?:\b[0-9a-fA-F]{2,}\b\s*){5}#; + # Meson build output + next if $line =~ /^C\+\+ linker for the host machine: /; + # Embedded `gcc -print-*` commands + next if $line =~ /`$cc_regex_normal\s*[^`]*-print-\S+`/; # Check if additional hardening options were used. Used to ensure # they are used for the complete build. @@ -1514,6 +1528,22 @@ If there's no output, no flags are missing and the build log is fine. See F for details about performed checks, auto-detection and limitations. +=head1 FALSE POSITIVES + +To suppress false positives you can embed the following string in the build +log: + + blhc: ignore-line-regexp: REGEXP + +All lines fully matching REGEXP (see B<--ignore-line> for details) will be +ignored. + +Please use this feature sparingly so that missing flags are not overlooked. If +you find false positives which affect more packages please report a bug. + +To generate this string simply use echo in C; make sure to use @ +to suppress the echo command itself as it could also trigger a false positive. + =head1 OPTIONS =over 8