X-Git-Url: https://ruderich.org/simon/gitweb/?p=blhc%2Fblhc.git;a=blobdiff_plain;f=bin%2Fblhc;h=72a2c4294ec2d6c04b1e54ff263a2452c2060e63;hp=b45439ca9e533a7e01fbb2bc8759d5be8571d29e;hb=9e0473a48cbaa821c36fb9c456c25b203d46c87c;hpb=b12aec7229ebf8aa903aac01f66cab2d061b0a01 diff --git a/bin/blhc b/bin/blhc index b45439c..72a2c42 100755 --- a/bin/blhc +++ b/bin/blhc @@ -48,6 +48,9 @@ my $cc_regex_normal = qr/ /x; # Regex to catch (GCC) compiler warnings. my $warning_regex = qr/^(.+?):(\d+):\d+: warning: (.+?) \[(.+?)\]$/; +# Regex to catch libtool commands and not lines which show commands executed +# by libtool (e.g. libtool: link: ...). +my $libtool_regex = qr/\blibtool\s.*--mode=/; # List of source file extensions which require preprocessing. my @source_preprocess_compile_cpp = ( @@ -429,6 +432,20 @@ sub pic_pie_conflict { sub is_non_verbose_build { my ($line, $next_line, $skip_ref) = @_; + if ($line =~ /$libtool_regex/o) { + # libtool's --silent hides the real compiler flags. + if ($line =~ /\s--silent/) { + return 1; + # If --silent is not present, skip this line as some compiler flags + # might be missing (e.g. -fPIE) which are handled correctly by libtool + # internally. libtool displays the real compiler command on the next + # line, so the flags are checked as usual. + } else { + ${$skip_ref} = 1; + return 0; + } + } + 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+(.+?)(?:\.\.\.)?$/ @@ -816,7 +833,9 @@ foreach my $file (@ARGV) { } # Check if this line indicates a non verbose build. - $non_verbose |= is_non_verbose_build($line); + my $skip = 0; + $non_verbose |= is_non_verbose_build($line, undef, \$skip); + next if $skip; # One line may contain multiple commands (";"). Treat each one as # single line. parse_line() is slow, only use it when necessary.