# Expected (hardening) flags. All flags are used as regexps.
my @cflags = (
'-g',
- '-O2',
+ '-O(?:2|3)',
);
my @cflags_format = (
'-Wformat',
);
# Renaming rules for the output so the regex parts are not visible.
my %flag_renames = (
+ '-O(?:2|3)' => '-O2',
'-Wl,(-z,)?relro' => '-Wl,-z,relro',
'-Wl,(-z,)?now' => '-Wl,-z,now',
);
my $start = 0;
my $continuation = 0;
+my $complete_line = undef;
while (my $line = <>) {
# We skip over unimportant lines at the beginning to prevent false
# positives.
# Join lines, but leave the "\" in place so it's clear where the
# original line break was.
- chomp $input[-1];
- $input[-1] .= ' ' . $line;
+ chomp $complete_line;
+ $complete_line .= ' ' . $line;
+ }
+ # Line continuation, line ends with "\".
+ if ($line =~ /\\\s*$/) {
+ $continuation = 1;
+ # Start line continuation.
+ if (not defined $complete_line) {
+ $complete_line = $line;
+ }
+ next;
+ }
+
+ if (not $continuation) {
+ # Use the complete line if a line continuation occurred.
+ if (defined $complete_line) {
+ $line = $complete_line;
+ $complete_line = undef;
+ }
- } else {
# Ignore lines with no compiler commands.
next if $line !~ /\b$cc_regex(?:\s|\\)/ and not $non_verbose;
#
# `./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*$/
+ 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*/;
push @input, $line;
}
-
- # Line continuation, line ends with "\".
- if ($line =~ /\\\s*$/) {
- $continuation = 1;
- }
}
}
# Even if it's a verbose build, we might have to skip this line.
next if $skip;
- # Ignore false positives.
- #
- # ./configure summary.
- next if $line =~ /^\s*(?:C|c)ompiler[\s.]*:\s+$cc_regex(?:\s-std=[a-z0-9:+]+)?\s*$/
- or $line =~ /^\s*- (?:CC|CXX)\s*=\s*$cc_regex\s*$/
- or $line =~ /^\s*-- Check for working (?:C|CXX) compiler: /;
# Is this a compiler or linker command?
my $compiler = 1;
(?:[/.A-Za-z0-9~_-]+/)? # path to file
[A-Za-z0-9~_-]+ # binary name (no dots!)
(?:[0-9.]*\.so[0-9.]*[a-z]? # library (including version)
- |\.la)?
+ |\.la
+ |\.cgi)? # CGI binary
(?:\s|\\|$) # end of file name
}x
or $line =~ /^libtool: link: /