$file = $1;
if (index($next_line, $file) != -1 and $next_line =~ /$cc_regex/o) {
- # We still have to skip the current line as it doesn't contain any
- # compiler commands.
+ # Not a non-verbose line, but we still have to skip the current line
+ # as it doesn't contain any compiler commands.
${$skip_ref} = 1;
return 0;
}
# Same for arch specific ignore flags, but only prepare here.
if (scalar @option_ignore_arch_flag > 0) {
foreach my $ignore (@option_ignore_arch_flag) {
- my ($ignore_arch, $ignore_flag) = split ':', $ignore, 2;
+ my ($ignore_arch, $ignore_flag) = split /:/, $ignore, 2;
if (not $ignore_arch or not $ignore_flag) {
printf STDERR 'Value "%s" invalid for option ignore-arch-flag '
# Same for arch specific ignore lines.
if (scalar @option_ignore_arch_line > 0) {
foreach my $ignore (@option_ignore_arch_line) {
- my ($ignore_arch, $ignore_line) = split ':', $ignore, 2;
+ my ($ignore_arch, $ignore_line) = split /:/, $ignore, 2;
if (not $ignore_arch or not $ignore_line) {
printf STDERR 'Value "%s" invalid for option ignore-arch-line '
# only, doesn't use the dpkg-buildpackage header. Necessary to ignore
# build logs which aren't built (wrong architecture, build error,
# etc.).
- if (not $arch
- and $line =~ /^Architecture: (.+)$/) {
- $arch = $1;
+ if (not $arch and index($line, 'Architecture: ') == 0) {
+ $arch = substr $line, 14, -1; # -1 to ignore '\n' at the end
}
# dpkg-buildflags only provides hardening flags since 1.16.1, don't
# Input lines, contain only the lines with compiler commands.
my @input = ();
+ # Non-verbose lines in the input. Used to reduce calls to
+ # is_non_verbose_build() (which is quite slow) in the second loop when
+ # it's already clear if a line is non-verbose or not.
+ my @input_nonverbose = ();
my $continuation = 0;
my $complete_line = undef;
# And stop at the end of the build log. Package details (reported by
# the buildd logs) are not important for us. This also prevents false
# positives.
- last if $line =~ /^Build finished at \d{8}-\d{4}$/;
+ last if index($line, 'Build finished at ') == 0
+ and $line =~ /^Build finished at \d{8}-\d{4}$/;
# Detect architecture automatically unless overridden.
if (not $arch
- and $line =~ /^dpkg-buildpackage: host architecture (.+)$/) {
- $arch = $1;
+ and index($line, 'dpkg-buildpackage: host architecture ') == 0) {
+ $arch = substr $line, 37, -1; # -1 to ignore '\n' at the end
}
# Ignore compiler warnings for now.
and $line =~ /^(?:checking|[Cc]onfigure:) /;
next if $line =~ /^\s*(?:Host\s+)?(?:C(?:\+\+)?\s+)?
[Cc]ompiler[\s.]*:?\s+
- /xo;
+ /x;
next if $line =~ /^\s*(?:- )?(?:HOST_)?(?:CC|CXX)\s*=\s*$cc_regex_full\s*$/o;
# `moc-qt4`, contains '-I/usr/share/qt4/mkspecs/linux-g++' (or
# similar for other architectures) which gets recognized as a
$harden_bindnow = 1 if any_flags_used($line, @def_ldflags_bindnow);
push @input, $line;
+ push @input_nonverbose, $non_verbose;
}
}
# Ignore flags for this arch if requested.
if ($arch and exists $option_ignore_arch_flag{$arch}) {
- my @flag_refs = (\@cflags, \@cxxflags, \@cppflags, \@ldflags);
+ my @local_flag_refs = (\@cflags, \@cxxflags, \@cppflags, \@ldflags);
- remove_flags(\@flag_refs,
+ remove_flags(\@local_flag_refs,
\%flag_renames,
@{$option_ignore_arch_flag{$arch}});
}
}
my $skip = 0;
- if (is_non_verbose_build($line, $input[$i + 1], \$skip)) {
+ if ($input_nonverbose[$i]
+ and is_non_verbose_build($line, $input[$i + 1], \$skip)) {
if (not $option_buildd) {
error_non_verbose_build($line);
$exit |= $exit_code{non_verbose_build};
Thanks to to Bernhard R. Link E<lt>brlink@debian.orgE<gt> and Jaria Alto
E<lt>jari.aalto@cante.netE<gt> for their valuable input and suggestions.
-=head1 COPYRIGHT AND LICENSE
+=head1 LICENSE AND COPYRIGHT
Copyright (C) 2012 by Simon Ruderich