X-Git-Url: https://ruderich.org/simon/gitweb/?p=blhc%2Fblhc.git;a=blobdiff_plain;f=bin%2Fblhc;h=9ed648aa1a7be09fabffa22514b7cabb35a87166;hp=cfe49d2a3335527a1dcca61fbe80ff264b4640b5;hb=22380d5ef99ff37e3c96070d65f01c34a8f0ba82;hpb=4ab50053d9969464c5002db66e135bcfb92bd625
diff --git a/bin/blhc b/bin/blhc
index cfe49d2..9ed648a 100755
--- a/bin/blhc
+++ b/bin/blhc
@@ -500,15 +500,17 @@ sub compile_flag_regexp {
my @result = ();
foreach my $flag (@flags) {
+ # Compile flag regexp for faster execution.
+ my $regex = qr/\s$flag(?:\s|\\)/;
+
# Store flag name in replacement string for correct flags in messages
# with qr//ed flag regexps.
- $flag_renames_ref->{qr/\s$flag(?:\s|\\)/}
+ $flag_renames_ref->{$regex}
= (exists $flag_renames_ref->{$flag})
? $flag_renames_ref->{$flag}
: $flag;
- # Compile flag regexp for faster execution.
- push @result, qr/\s$flag(?:\s|\\)/;
+ push @result, $regex;
}
return @result;
}
@@ -517,14 +519,12 @@ sub compile_flag_regexp {
sub extension_found {
my ($extensions_ref, @extensions) = @_;
- my $found = 0;
foreach my $extension (@extensions) {
if (exists $extensions_ref->{$extension}) {
- $found = 1;
- last;
+ return 1;
}
}
- return $found;
+ return 0;
}
@@ -570,7 +570,8 @@ if ($option_help) {
Pod::Usage::pod2usage(1);
}
if ($option_version) {
- print "blhc $VERSION Copyright (C) 2012-2013 Simon Ruderich
+ print <<"EOF";
+blhc $VERSION Copyright (C) 2012-2013 Simon Ruderich
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -584,7 +585,7 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
-";
+EOF
exit 0;
}
@@ -687,8 +688,13 @@ 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 index($line, 'Architecture: ') == 0) {
- $arch = substr $line, 14, -1; # -1 to ignore '\n' at the end
+ if (not $arch) {
+ if (index($line, 'Build Architecture: ') == 0) {
+ $arch = substr $line, 20, -1; # -1 to ignore '\n' at the end
+ # For old logs (sbuild << 0.63.0-1).
+ } elsif (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
@@ -728,9 +734,11 @@ foreach my $file (@ARGV) {
}
}
- # Debian's build daemons use Build-Depends: for the build
- # dependencies, but pbuilder just uses Depends:; support both.
- if (index($line, 'Build-Depends: ') == 0
+ # Debian's build daemons use "Filtered Build-Depends:" (or just
+ # "Build-Depends:" in older versions) for the build dependencies, but
+ # pbuilder uses "Depends:"; support both.
+ if (index($line, 'Filtered Build-Depends: ') == 0
+ or index($line, 'Build-Depends: ') == 0
or index($line, 'Depends: ') == 0) {
# If hardening wrapper is used (wraps calls to gcc and adds
# hardening flags automatically) we can't perform any checks,
@@ -919,7 +927,7 @@ foreach my $file (@ARGV) {
# Option or auto detected.
if ($arch) {
- # The following was partially copied from dpkg-dev 1.16.4.3
+ # The following was partially copied from dpkg-dev 1.17.1
# (/usr/share/perl5/Dpkg/Vendor/Debian.pm, add_hardening_flags()),
# copyright Raphaël Hertzog , Kees Cook
# , Canonical, Ltd. licensed under GPL version 2 or
@@ -929,7 +937,12 @@ foreach my $file (@ARGV) {
my ($abi, $os, $cpu) = Dpkg::Arch::debarch_to_debtriplet($arch);
# Disable unsupported hardening options.
- if ($cpu =~ /^(?:ia64|alpha|mips|mipsel|hppa)$/ or $arch eq 'arm') {
+ if ($os !~ /^(?:linux|knetbsd|hurd)$/ or
+ $cpu =~ /^(?:hppa|mips|mipsel|avr32)$/) {
+ $harden_pie = 0;
+ }
+ if ($cpu =~ /^(?:ia64|alpha|mips|mipsel|hppa|arm64)$/
+ or $arch eq 'arm') {
$harden_stack = 0;
}
if ($cpu =~ /^(?:ia64|hppa|avr32)$/) {
@@ -971,8 +984,8 @@ foreach my $file (@ARGV) {
# Stores normal CFLAGS when @cflags_ada are temporarily used.
my @cflags_backup;
- # Ada CFLAGS.
- my @cflags_ada = @cflags;
+ # Ada CFLAGS, only set if ada is used.
+ my @cflags_ada;
# Ada doesn't support format hardening flags, see #680117 for more
# information. Filter them out if ada is used.
if ($ada and $harden_format) {