X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=bin%2Fblhc;h=d276bc001b37b302672e35c6bff4abc1c7ba56ac;hb=388bdf91c4879a0212ac77840d2c3f016ff4b75b;hp=348dbb6c875e6c04842bc60ad9eb1127ecfdab46;hpb=ad221453b3058bdc13ab4b9314348ac2e5d6d643;p=blhc%2Fblhc.git diff --git a/bin/blhc b/bin/blhc index 348dbb6..d276bc0 100755 --- a/bin/blhc +++ b/bin/blhc @@ -90,10 +90,14 @@ my @source_no_preprocess_compile = ( qw( mi ), # Fortran qw( f for ftn f90 f95 f03 f08 ), + # Ada body + qw( adb ), ); my @source_no_preprocess_no_compile = ( # Assembly qw( s ), + # Ada specification + qw( ads ), ); my @source_no_preprocess = ( @source_no_preprocess_compile, @@ -430,8 +434,8 @@ sub is_non_verbose_build { $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; } @@ -575,7 +579,7 @@ if (scalar @option_ignore_flag > 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 ' @@ -601,7 +605,7 @@ foreach my $ignore (@option_ignore_line) { # 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 ' @@ -641,8 +645,8 @@ foreach my $file (@ARGV) { # 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 @@ -702,6 +706,10 @@ foreach my $file (@ARGV) { # 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; @@ -709,12 +717,13 @@ foreach my $file (@ARGV) { # 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. @@ -812,6 +821,7 @@ foreach my $file (@ARGV) { $harden_bindnow = 1 if any_flags_used($line, @def_ldflags_bindnow); push @input, $line; + push @input_nonverbose, $non_verbose; } } @@ -902,9 +912,9 @@ foreach my $file (@ARGV) { # 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}}); } @@ -925,7 +935,8 @@ LINE: } 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}; @@ -1380,7 +1391,7 @@ Simon Ruderich, Esimon@ruderich.orgE Thanks to to Bernhard R. Link Ebrlink@debian.orgE and Jaria Alto Ejari.aalto@cante.netE for their valuable input and suggestions. -=head1 COPYRIGHT AND LICENSE +=head1 LICENSE AND COPYRIGHT Copyright (C) 2012 by Simon Ruderich