]> ruderich.org/simon Gitweb - blhc/blhc.git/blobdiff - bin/blhc
Use index() in a few more places.
[blhc/blhc.git] / bin / blhc
index 3169e0bd63ea7f61fe977fb4d866b6bc844a0ae2..57ea0005df4f17712ef3e775d0e6ba8f1a829f12 100755 (executable)
--- a/bin/blhc
+++ b/bin/blhc
@@ -575,7 +575,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 +601,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,9 +641,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
@@ -703,6 +702,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;
@@ -710,12 +713,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.
@@ -788,7 +792,7 @@ foreach my $file (@ARGV) {
                     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
@@ -813,6 +817,7 @@ foreach my $file (@ARGV) {
             $harden_bindnow = 1 if any_flags_used($line, @def_ldflags_bindnow);
 
             push @input, $line;
+            push @input_nonverbose, $non_verbose;
         }
     }
 
@@ -903,9 +908,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}});
     }
@@ -926,7 +931,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};
@@ -1381,7 +1387,7 @@ Simon Ruderich, E<lt>simon@ruderich.orgE<gt>
 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