X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=bin%2Fblhc;h=c82e9bc37475987d2bb8610e6c160ec2a9f42fb6;hb=b85a3fb508fc2f9d98d44583cf31cbf5ac63a382;hp=1d1fc27d6d2a5cdbe613de7c37cdf04105243f1f;hpb=5b550dc892a6568f9f4ddc71106a7b879ee380c3;p=blhc%2Fblhc.git diff --git a/bin/blhc b/bin/blhc index 1d1fc27..c82e9bc 100755 --- a/bin/blhc +++ b/bin/blhc @@ -30,7 +30,9 @@ our $VERSION = '0.01'; # CONSTANTS/VARIABLES # Regex to catch compiler commands. -my $cc_regex = qr/(?:x86_64-linux-gnu-)?(?:(?) { # Ignore compiler warnings for now. next if $line =~ /$warning_regex/; + # Remove all ANSI color sequences which are sometimes used in non-verbose + # builds. + $line = Term::ANSIColor::colorstrip($line); + # Also strip '\0xf' (delete previous character), used by Elink's build + # system. + $line =~ s/\x0f//g; + # And "ESC(B" which seems to be used on armhf and hurd (not sure what it + # does). + $line =~ s/\033\(B//g; + # Check if this line indicates a non verbose build. my $non_verbose = is_non_verbose_build($line); @@ -325,10 +337,18 @@ while (my $line = <>) { # # `./configure` output. next if not $non_verbose and $line =~ /^checking /; - next if $line =~ /^\s*(?:C|c)ompiler[\s.]*:\s+$cc_regex(?:\s-std=[a-z0-9:+]+)?\s*$/ + next if $line =~ /^\s*(?:C\s+)? + (?:C|c)ompiler[\s.]*:\s+ + $cc_regex + (?:\s-std=[a-z0-9:+]+)?\s*$ + /x or $line =~ /^\s*(?:- )?(?:CC|CXX)\s*=\s*$cc_regex\s*$/ or $line =~ /^\s*-- Check for working (?:C|CXX) compiler: / or $line =~ /^\s*(?:echo )?Using [A-Z_]+\s*=\s*/; + # Debian buildd output. + next if $line =~ /^\s*Depends: .*?$cc_regex.*?$/ + and $line !~ /\s-./; # option, prevent false negatives + push @input, $line; } @@ -511,8 +531,9 @@ automatically if dpkg-buildpackage is used. =back -Auto detection only works if at least one command uses the required hardening -flag (e.g. -fPIE). Then it's required for all other commands as well. +Auto detection for B<--pie> and B<--bindnow> only works if at least one +command uses the required hardening flag (e.g. -fPIE). Then it's required for +all other commands as well. =head1 EXIT STATUS