/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 = (
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+(.+?)(?:\.\.\.)?$/
}
# 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.