Your message dated Mon, 06 Oct 2014 00:48:51 +0000
with message-id <[email protected]>
and subject line Bug#760158: fixed in dpkg 1.17.14
has caused the Debian Bug report #760158,
regarding dpkg: please implement the new build profiles syntax
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
760158: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=760158
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: dpkg
Version: 1.17.13
Severity: wishlist
Tags: patch
Control: block 744246 by -1

Hi,

please find attached a patch which implements the recent changes to the
build profile spec [1] as agreed during the bootstrap sprint in paris.

The patch contains a summary of the changes.

Thanks!

cheers, josch

[1] https://wiki.debian.org/BuildProfileSpec
>From f24a1286ae17fc1b2884255089dc3f3553d526e0 Mon Sep 17 00:00:00 2001
From: josch <[email protected]>
Date: Tue, 19 Aug 2014 07:57:03 +0200
Subject: [PATCH] update restriction formula syntax

 - the restriction list parsing now reflects the changes at
   https://wiki.debian.org/BuildProfileSpec which were agreed upon
   in the bootstrap sprint 2014 in Paris
 - restriction lists are now restriction formulas
 - restriction formulas are given in disjunctive normal form expression
        foo <bar baz> <blub>
 - removal of the prefix/namespace mechanic
 - since there can be more than one <> block, the regex in parse_string
   in scripts/Dpkg/Deps.pm is now greedy
 - properly handle the absence of packages in DEBIAN/control depending
   on build profiles - Closes: #758191
 - construct the profiles entry of the Packages-List field by
   converting the "<bar baz> <blub>" syntax into "bar,baz+blub"
 - include a compatibility function with the old way to write the
   Build-Profiles field in binary packages which can be removed once
   all affected source packages moved to the new syntax
 - adjusted testcases
---
 man/deb-src-control.5         | 17 +++++++++------
 man/dpkg-buildpackage.1       | 14 ++++++------
 man/dpkg-checkbuilddeps.1     |  7 +++---
 scripts/Dpkg/BuildProfiles.pm | 35 ++++++++++++++++++++++++++++--
 scripts/Dpkg/Deps.pm          | 46 ++++++++++-----------------------------
 scripts/dpkg-genchanges.pl    | 15 +++++++++++--
 scripts/dpkg-source.pl        | 19 ++++++++++++++--
 scripts/t/Dpkg_Deps.t         | 50 +++++++++++++++++++++++++------------------
 8 files changed, 123 insertions(+), 80 deletions(-)

diff --git a/man/deb-src-control.5 b/man/deb-src-control.5
index 407172a..7a17d1a 100644
--- a/man/deb-src-control.5
+++ b/man/deb-src-control.5
@@ -187,8 +187,8 @@ of packages separated by vertical bar (or "pipe") symbols, "|". The
 groups are separated by commas. Commas are to be read as "AND", and pipes
 as "OR", with pipes binding more tightly. Each package name is
 optionally followed by a version number specification in parentheses, an
-architecture specification in square brackets, and a profile specification
-in angle brackets.
+architecture specification in square brackets, and a restriction formula
+consisting of one or more lists of profile names in angle brackets.
 
 The syntax of the
 .BR Build\-Conflicts ,
@@ -198,8 +198,9 @@ and
 fields is a list of comma-separated package names, where the comma is read
 as an "AND". Specifying alternative packages using a "pipe" is not supported.
 Each package name is optionally followed by a version number specification in
-parentheses, an architecture specification in square brackets, and a profile
-specification in angle brackets.
+parentheses, an architecture specification in square brackets, and a
+restriction formula consisting of one or more lists of profile names in angle
+brackets.
 
 A version number may start with a ">>", in which case any later version
 will match, and may specify or omit the Debian packaging revision (separated
@@ -211,9 +212,11 @@ An architecture specification consists of one or more architecture names,
 separated by whitespace. Exclamation marks may be prepended to each of the
 names, meaning "NOT".
 
-A profile specification consists of one or more profile names, prefixed
-with the "\fBprofile.\fP" namespace, separated by whitespace. Exclamation
-marks may be prepended to each of the names, meaning "NOT".
+A restriction formula consists of one or more restriction lists, separated by
+whitespace. Each restriction list is enclosed in angle brackets. Items in the
+restriction list are build profile names, separated by whitespace and can be
+prefixed with an exclamation mark, meaning "NOT". A restriction formula
+represents a disjunctive normal form expression.
 
 Note that dependencies on packages in the
 .B build\-essential
diff --git a/man/dpkg-buildpackage.1 b/man/dpkg-buildpackage.1
index b96c25f..631ebdb 100644
--- a/man/dpkg-buildpackage.1
+++ b/man/dpkg-buildpackage.1
@@ -150,11 +150,11 @@ of \-a or as a complement to override the default GNU system type
 of the target Debian architecture.
 .TP
 .BR \-P \fIprofile\fP[ , ...]
-Specify the profile(s) we build, as a comma-separated list, without the
-"\fBprofile.\fP" namespace prefix. The default behavior is to build for
-no specific profile. Also adds them (as a space separated list) to the
-\fBDEB_BUILD_PROFILES\fP environment variable which allows, for example,
-\fBdebian/rules\fP files to use this information for conditional builds.
+Specify the profile(s) we build, as a comma-separated list. The default
+behavior is to build for no specific profile. Also sets them (as a space
+separated list) as the \fBDEB_BUILD_PROFILES\fP environment variable which
+allows, for example, \fBdebian/rules\fP files to use this information for
+conditional builds.
 .TP
 .BR \-j [\fIjobs\fP|\fBauto\fP]
 Number of jobs allowed to be run simultaneously, number of jobs matching
@@ -341,8 +341,8 @@ will be ignored.
 .TP
 .B DEB_BUILD_PROFILES
 If set, it will be used as the active build profile(s) for the package
-being built. It is a space separated list of profile names, without the
-"\fBprofile.\fP" namespace prefix. Overridden by the \fB\-P\fP option.
+being built. It is a space separated list of profile names. Overridden by
+the \fB\-P\fP option.
 
 .SS Reliance on exported environment flags
 Even if \fBdpkg\-buildpackage\fP exports some variables, \fBdebian/rules\fP
diff --git a/man/dpkg-checkbuilddeps.1 b/man/dpkg-checkbuilddeps.1
index 51cc77e..d37482f 100644
--- a/man/dpkg-checkbuilddeps.1
+++ b/man/dpkg-checkbuilddeps.1
@@ -64,8 +64,7 @@ the architecture of the current system.
 .BR "\-P " \fIprofile\fP[ , ...]
 Check build dependencies/conflicts assuming that the package described
 in the control file is to be built for the given build profile(s). The
-argument is a comma-separated list of profile names, without the
-"\fBprofile.\fP" namespace prefix.
+argument is a comma-separated list of profile names.
 .TP
 .BR \-? ", " \-\-help
 Show the usage message and exit.
@@ -77,5 +76,5 @@ Show the version and exit.
 .TP
 .B DEB_BUILD_PROFILES
 If set, it will be used as the active build profile(s) for the package
-being built. It is a space separated list of profile names, without the
-"\fBprofile.\fP" namespace prefix. Overridden by the \fB\-P\fP option.
+being built. It is a space separated list of profile names. Overridden by the
+\fB\-P\fP option.
diff --git a/scripts/Dpkg/BuildProfiles.pm b/scripts/Dpkg/BuildProfiles.pm
index 98c86d3..4dc43c0 100644
--- a/scripts/Dpkg/BuildProfiles.pm
+++ b/scripts/Dpkg/BuildProfiles.pm
@@ -19,10 +19,10 @@ use strict;
 use warnings;
 
 our $VERSION = '0.01';
-our @EXPORT_OK = qw(get_build_profiles set_build_profiles);
+our @EXPORT_OK = qw(get_build_profiles set_build_profiles evaluate_restriction_formula);
 
+use Dpkg::Util qw(:list);
 use Exporter qw(import);
-
 use Dpkg::BuildEnv;
 
 my $cache_profiles;
@@ -75,6 +75,37 @@ sub set_build_profiles {
     Dpkg::BuildEnv::set('DEB_BUILD_PROFILES', join ' ', @profiles);
 }
 
+=item evaluate_restriction_formula(\@formula, \@profiles)
+
+Evaluate whether a restriction formula of the form "<foo bar> <baz>", given as
+a nested array, is true or false, given the array of enabled build profiles.
+
+=cut
+
+sub evaluate_restriction_formula {
+    my ($formula, $profiles) = @_;
+
+    # restriction formulas are in disjunctive normal form:
+    # (foo AND bar) OR (blub AND bla)
+    foreach my $restrlist (@{$formula}) {
+        my $seen_profile = 1;
+        foreach my $restriction (@$restrlist) {
+            my ($neg, $prof) = $restriction =~ m/^(!)?(.*)/;
+            my $found = any { $_ eq $prof } @{$profiles};
+            # if a negative set profile is encountered, stop processing
+            # if a positive unset profile is encountered, stop processing
+            if (not ($found xor defined $neg)) {
+                $seen_profile = 0;
+                last;
+            }
+        }
+        # this conjunction evaluated to true so we don't have to evaluate the
+        # others
+        return 1 if $seen_profile;
+    }
+    return 0;
+}
+
 =back
 
 =cut
diff --git a/scripts/Dpkg/Deps.pm b/scripts/Dpkg/Deps.pm
index fe25def..74fd364 100644
--- a/scripts/Dpkg/Deps.pm
+++ b/scripts/Dpkg/Deps.pm
@@ -53,7 +53,7 @@ our $VERSION = '1.04';
 
 use Dpkg::Version;
 use Dpkg::Arch qw(get_host_arch get_build_arch);
-use Dpkg::BuildProfiles qw(get_build_profiles);
+use Dpkg::BuildProfiles qw(get_build_profiles evaluate_restriction_formula);
 use Dpkg::ErrorHandling;
 use Dpkg::Gettext;
 
@@ -208,15 +208,16 @@ Define the active build profiles. By default no profile is defined.
 =item reduce_profiles (defaults to 0)
 
 If set to 1, ignore dependencies that do not concern the current build
-profile. This implicitly strips off the profile restriction list so
+profile. This implicitly strips off the profile restriction formula so
 that the resulting dependencies are directly applicable to the current
 profiles.
 
 =item reduce_restrictions (defaults to 0)
 
 If set to 1, ignore dependencies that do not concern the current set of
-restrictions. This implicitly strips off any restriction list so that the
-resulting dependencies are directly applicable to the current restriction.
+restrictions. This implicitly strips off any architecture restriction list or
+restriction formula so that the resulting dependencies are directly applicable
+to the current restriction.
 This currently implies C<reduce_arch> and C<reduce_profiles>, and overrides
 them if set.
 
@@ -567,7 +568,7 @@ sub parse_string {
               )?                            # end of optional architecture
               (?:                           # start of optional restriction
                 \s* <                       # open bracket for restriction
-                \s* (.*?)                   # don't parse restrictions now
+                \s* (.*)                    # don't parse restrictions now
                 \s* >                       # closing bracket
               )?                            # end of optional restriction
               \s*$                          # trailing spaces at end
@@ -585,7 +586,7 @@ sub parse_string {
 	$self->{arches} = [ split(/\s+/, $5) ];
     }
     if (defined($6)) {
-	$self->{restrictions} = [ map { lc } split /\s+/, $6 ];
+	$self->{restrictions} = [ map { [ split /\s+/ ] } split />\s+</, $6 ];
     }
 }
 
@@ -602,7 +603,9 @@ sub output {
 	$res .= ' [' . join(' ', @{$self->{arches}}) . ']';
     }
     if (defined($self->{restrictions})) {
-	$res .= ' <' . join(' ', @{$self->{restrictions}}) . '>';
+        for my $restrlist (@{$self->{restrictions}}) {
+            $res .= ' <' . join(' ', @$restrlist) . '>';
+        }
     }
     if (defined($fh)) {
 	print { $fh } $res;
@@ -823,34 +826,7 @@ sub profile_is_concerned {
 
     return 0 if not defined $self->{package}; # Empty dep
     return 1 if not defined $self->{restrictions}; # Dep without restrictions
-
-    my $seen_profile = 0;
-    foreach my $restriction (@{$self->{restrictions}}) {
-        # Determine if this restriction is negated, and within the "profile"
-        # namespace, otherwise it does not concern this check.
-        next if $restriction !~ m/^(!)?profile\.(.*)/;
-
-        my $negated = defined $1 && $1 eq '!';
-        my $profile = $2;
-
-        # Determine if the restriction matches any of the specified profiles.
-        my $found = any { $_ eq $profile } @{$build_profiles};
-
-        if ($negated) {
-            if ($found) {
-                $seen_profile = 0;
-                last;
-            } else {
-                # "!profile.this" includes by default all other profiles
-                # unless they also appear in a "!profile.other".
-                $seen_profile = 1;
-            }
-        } elsif ($found) {
-            $seen_profile = 1;
-            last;
-        }
-    }
-    return $seen_profile;
+    return Dpkg::BuildProfiles::evaluate_restriction_formula($self->{restrictions}, $build_profiles);
 }
 
 sub reduce_profiles {
diff --git a/scripts/dpkg-genchanges.pl b/scripts/dpkg-genchanges.pl
index 5f0aa24..5a46e51 100755
--- a/scripts/dpkg-genchanges.pl
+++ b/scripts/dpkg-genchanges.pl
@@ -289,6 +289,7 @@ foreach (keys %{$src_fields}) {
 foreach my $pkg ($control->get_packages()) {
     my $p = $pkg->{'Package'};
     my $a = $pkg->{'Architecture'} // '';
+    my $bp = $pkg->{'Build-Profiles'};
     my $d = $pkg->{'Description'} || 'no description available';
     $d = $1 if $d =~ /^(.*)\n/;
     my $pkg_type = $pkg->{'Package-Type'} ||
@@ -302,11 +303,21 @@ foreach my $pkg ($control->get_packages()) {
     $desc .= ' (udeb)' if $pkg_type eq 'udeb';
     push @descriptions, $desc;
 
+    my $formula = ();
+    my $profiles = ();
+    if (defined $bp) {
+        $bp =~ s/^\s*<(.*)>\s*$/$1/;
+        $formula = [ map { [ split /\s+/, $_ ] } split />\s+</, $bp ];
+        $profiles = [ get_build_profiles() ];
+    }
+
     if (not defined($p2f{$p})) {
 	# No files for this package... warn if it's unexpected
-	if ((debarch_eq('all', $a) and ($include & BUILD_ARCH_INDEP)) ||
+	if (((debarch_eq('all', $a) and ($include & BUILD_ARCH_INDEP)) ||
 	    ((any { debarch_is($host_arch, $_) } split /\s+/, $a)
-		  and ($include & BUILD_ARCH_DEP))) {
+		  and ($include & BUILD_ARCH_DEP))) and
+            (not defined $bp || (defined $bp and
+                  evaluate_restriction_formula($formula, $profiles)))) {
 	    warning(_g('package %s in control file but not in files list'),
 		    $p);
 	}
diff --git a/scripts/dpkg-source.pl b/scripts/dpkg-source.pl
index 83888f2..5b2388b 100755
--- a/scripts/dpkg-source.pl
+++ b/scripts/dpkg-source.pl
@@ -273,8 +273,23 @@ if ($options{opmode} =~ /^(-b|--print-format|--(before|after)-build|--commit)$/)
         my $pkg_summary = sprintf('%s %s %s %s', $p, $type, $sect, $prio);
 
         $pkg_summary .= ' arch=' . join ',', split /\s+/, $arch;
-        $pkg_summary .= ' profile=' . join ',', split /\s+/, $profile
-            if defined $profile;
+
+        if (defined $profile) {
+            # if the string does not contain brackets then it's using the old
+            # syntax (glibc, file, dbus and doxygen are affected)
+            # Thus we convert the old syntax to the new one. This conversion
+            # can be dropped once the old syntax is not in the archive anymore
+            # http://codesearch.debian.net/search?q=Build-Profiles%3A\s%2B[^<]+path%3Adebian%2Fcontrol
+            if ($profile !~ m/^\s*<(.*)>\s*$/) {
+                $profile =~ s/([!a-z0-9]+)/<$1>/g;
+            }
+            # instead of splitting twice and then joining twice, we just do
+            # simple string replacements
+            $profile =~ s/^\s*<(.*)>\s*$/$1/; # remove the enclosing <>
+            $profile =~ s/>\s+</+/g;          # join lists with a plus (OR)
+            $profile =~ s/\s+/,/g;            # join their elements with a comma (AND)
+            $pkg_summary .= " profile=$profile";
+        }
 
         push @pkglist, $pkg_summary;
 	push @binarypackages, $p;
diff --git a/scripts/t/Dpkg_Deps.t b/scripts/t/Dpkg_Deps.t
index 0c90659..85ac072 100644
--- a/scripts/t/Dpkg_Deps.t
+++ b/scripts/t/Dpkg_Deps.t
@@ -69,20 +69,26 @@ is($dep_i386->output(), 'libc6 (>= 2.5)', 'Arch reduce 1/3');
 is($dep_alpha->output(), 'libc6.1', 'Arch reduce 2/3');
 is($dep_hurd->output(), 'libc0.1', 'Arch reduce 3/3');
 
-my $field_profile = 'dep1 <!profile.stage1 !profile.notest>, ' .
-'dep2 <profile.stage1 !profile.notest>, ' .
-'dep3 <profile.notest !profile.stage1>, ' .
-'dep4 <profile.stage1 profile.notest>, ' .
-'dep5 <profile.stage1>, dep6 <!profile.stage1>, ' .
-'dep7 <profile.stage1> | dep8 <profile.notest>';
+my $field_profile = 'dep1 <!stage1 !notest>, ' .
+'dep2 <stage1 !notest>, ' .
+'dep3 <notest !stage1>, ' .
+'dep4 <stage1 notest>, ' .
+'dep5 <stage1>, dep6 <!stage1>, ' .
+'dep7 <stage1> | dep8 <notest>, ' .
+'dep9 <!stage1> <!notest>, ' .
+'dep10 <stage1> <!notest>, ' .
+'dep11 <stage1> <notest>, '.
+'dep12 <!notest> <!stage1>, ' .
+'dep13 <notest> <!stage1>, ' .
+'dep14 <notest> <stage1>';
 my $dep_noprof = deps_parse($field_profile, reduce_profiles => 1, build_profiles => []);
 my $dep_stage1 = deps_parse($field_profile, reduce_profiles => 1, build_profiles => ['stage1']);
 my $dep_notest = deps_parse($field_profile, reduce_profiles => 1, build_profiles => ['notest']);
 my $dep_stage1notest = deps_parse($field_profile, reduce_profiles => 1, build_profiles => ['stage1', 'notest']);
-is($dep_noprof->output(), 'dep1, dep2, dep3, dep6', 'Profile reduce 1/4');
-is($dep_stage1->output(), 'dep2, dep4, dep5, dep7', 'Profile reduce 2/4');
-is($dep_notest->output(), 'dep3, dep4, dep6, dep8', 'Profile reduce 3/4');
-is($dep_stage1notest->output(), 'dep2, dep3, dep4, dep5, dep7 | dep8', 'Profile reduce 4/4');
+is($dep_noprof->output(), 'dep1, dep6, dep9, dep10, dep12, dep13', 'Profile reduce 1/4');
+is($dep_stage1->output(), 'dep2, dep5, dep7, dep9, dep10, dep11, dep12, dep14', 'Profile reduce 2/4');
+is($dep_notest->output(), 'dep3, dep6, dep8, dep9, dep11, dep12, dep13, dep14', 'Profile reduce 3/4');
+is($dep_stage1notest->output(), 'dep4, dep5, dep7 | dep8, dep10, dep11, dep13, dep14', 'Profile reduce 4/4');
 
 $dep_noprof = deps_parse($field_profile);
 $dep_noprof->reduce_profiles([]);
@@ -92,21 +98,23 @@ $dep_notest = deps_parse($field_profile);
 $dep_notest->reduce_profiles(['notest']);
 $dep_stage1notest = deps_parse($field_profile);
 $dep_stage1notest->reduce_profiles(['stage1', 'notest']);
-is($dep_noprof->output(), 'dep1, dep2, dep3, dep6', 'Profile post-reduce 1/4');
-is($dep_stage1->output(), 'dep2, dep4, dep5, dep7', 'Profile post-reduce 2/4');
-is($dep_notest->output(), 'dep3, dep4, dep6, dep8', 'Profile post-reduce 3/4');
-is($dep_stage1notest->output(), 'dep2, dep3, dep4, dep5, dep7 | dep8', 'Profile post-reduce 4/4');
-
-my $field_restrict = 'dep1 <!profile.bootstrap !other.restrict>, ' .
-'dep2 <profile.bootstrap other.restrict>, ' .
-'dep3 <!other.restrict>, ' .
-'dep4 <other.restrict>';
+is($dep_noprof->output(), 'dep1, dep6, dep9, dep10, dep12, dep13', 'Profile post-reduce 1/4');
+is($dep_stage1->output(), 'dep2, dep5, dep7, dep9, dep10, dep11, dep12, dep14', 'Profile post-reduce 2/4');
+is($dep_notest->output(), 'dep3, dep6, dep8, dep9, dep11, dep12, dep13, dep14', 'Profile post-reduce 3/4');
+is($dep_stage1notest->output(), 'dep4, dep5, dep7 | dep8, dep10, dep11, dep13, dep14', 'Profile post-reduce 4/4');
+
+my $field_restrict = 'dep1 <!bootstrap !restrict>, ' .
+'dep2 <bootstrap restrict>, ' .
+'dep3 <!restrict>, ' .
+'dep4 <restrict>, ' .
+'dep5 <!bootstrap> <!restrict>, ' .
+'dep6 <bootstrap> <restrict>';
 my $dep_restrict = deps_parse($field_restrict, reduce_restrictions => 1, build_profiles => []);
-is($dep_restrict->output(), 'dep1', 'Unknown restrictions reduce');
+is($dep_restrict->output(), 'dep1, dep3, dep5', 'Unknown restrictions reduce');
 
 $dep_restrict = deps_parse($field_restrict);
 $dep_restrict->reduce_profiles([]);
-is($dep_restrict->output(), 'dep1', 'Unknown restrictions post-reduce');
+is($dep_restrict->output(), 'dep1, dep3, dep5', 'Unknown restrictions post-reduce');
 
 my $facts = Dpkg::Deps::KnownFacts->new();
 $facts->add_installed_package('mypackage', '1.3.4-1', get_host_arch(), 'no');
-- 
2.0.1


--- End Message ---
--- Begin Message ---
Source: dpkg
Source-Version: 1.17.14

We believe that the bug you reported is fixed in the latest version of
dpkg, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to [email protected],
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Guillem Jover <[email protected]> (supplier of updated dpkg package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing [email protected])


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Format: 1.8
Date: Mon, 06 Oct 2014 00:11:08 +0200
Source: dpkg
Binary: libdpkg-dev dpkg dpkg-dev libdpkg-perl dselect
Architecture: source all
Version: 1.17.14
Distribution: unstable
Urgency: low
Maintainer: Dpkg Developers <[email protected]>
Changed-By: Guillem Jover <[email protected]>
Description:
 dpkg       - Debian package management system
 dpkg-dev   - Debian package development tools
 dselect    - Debian package management front-end
 libdpkg-dev - Debian package management static library
 libdpkg-perl - Dpkg perl modules
Closes: 628516 682659 686420 758191 759149 759498 759747 759754 760158 760222 
760690 761025 762391 762635 762683 763000 763767 763825
Changes:
 dpkg (1.17.14) unstable; urgency=low
 .
   [ Guillem Jover ]
   * Fix '--' to '-' on translations for single character options.
   * Correct the copyright holder in the gettext Makevars files.
   * Switch debian/copyright to machine-readable format 1.0, and extensively
     update the information within.
   * Bump Standards-Version to 3.9.6 (no changes needed).
   * Disable unused run-time type information for dselect.
   * Fix compiler flag detection with non-GCC compilers in the build system.
   * Fix perl warning on dpkg-source when typing Ctrl-D on patch name prompt.
   * Add new dpkg-deb --ctrl-tarfile command.
   * dpkg-architecture:
     - Add support for target system information via the new DEB_TARGET_ family
       of variables, and new -A and -T options to override defaulting to the
       host system.
     - Clarify that -a, -t, -e and -i work with the host system.
   * Place 'Commands:' before 'Options:' sections on --help output in
     dpkg-architecture and dpkg-vendor.
   * Always warn in dpkg-genchanges on missing Section or Priority value,
     either empty or '-'.
   * Fix order of Files field on generated .changes file in dpkg-genchanges.
     Regression introduced in dpkg 1.17.7.
   * Stop warning on unknown arbitrary fields from dpkg-deb.
   * Remove unnecessary handling of obsolete Package_Revision field in dselect
     ftp method.
   * Fix the build system to parse the system curses.h header instead of
     dselect-curses.h, to not just default on the builtin and override keys
     for dselect key bindings support. Regression introduced in dpkg 1.15.1.
   * Emit a warning when using the obsolete Dpkg::Deps check_package() function.
   * Add support for versioned Provides to Dpkg::Deps::KnownFacts, missed in
     dpkg 1.17.11.
   * Man pages:
     - Add a mention of packaging helpers support in dpkg-maintscript-helper(1).
       Closes: #759754
     - Move dpkg-buildflags(1) generic feature area details to the section top.
     - Fix prerm invocation arguments in update-alternatives(8).
       Reported by jre <[email protected]>. Closes: #761025
   * Add new deps_iterate() function to Dpkg::Deps. Closes: #759747
     Based on a patch by Dima Kogan <[email protected]>.
   * Add support for relative symlinks to dpkg-maintscript-helper symlink_to_dir
     command. Suggested by Don Armstrong <[email protected]>.
   * Add a new dpkg-buildflags qa feature area:
     - Add a new bug feature, disabled by default, which will enable fatal
       warnings for code that can pose actual problems. Closes: #682659
     - Add a new canary feature, disabled by default, which will allow tracking
       build flags propagation. Closes: #628516
   * Pass DEB_BUILD_OPTIONS to dpkg-buildflags in buildflags.mk, required to
     get noopt to work at all, for example.
   * Add a new dpkg-buildflags reproducible feature area:
     - Add a new timeless feature, disabled by default, which will add
       «-Wdate-time» to CPPFLAGS.
     Thanks to Paul Wise <[email protected]>. Closes: #762683
   * Fix error message from buffer_copy() read and write functions. This
     affects error messages from partial or broken .deb packages for example.
     Regression introduced in dpkg 1.17.10. Closes: #759498
   * Remove lpia architecture support.
   * Improvements and portability fixes to start-stop-daemon:
     - Abort if the system or compatibility setsid() fails.
     - Do not exit from the first parent before the pidfile has been created,
       when using --background and --make-pidfile, to avoid the race condition.
       Based on a patch by Nir Soffer <[email protected]>. Closes: #686420
     - Make sure the pidfile is always created with a 022 umask.
       Reported by Will Conley <[email protected]>. Closes: #760222
     - Do not abort on --stop when only --pid or --ppid options are specified.
       Thanks to Christos Trochalakis <[email protected]>. Closes: #763767
     - On kFreeBSD systems do not unnecessarily make kvm_openfiles() open
       /dev/mem. This causes issues on FreeBSD jails for example.
       Reported by Steven Chamberlain <[email protected]>.
     - On systems using libkvm, do not fail when kvm_getprocs() cannot find
       any process.
   * Map i786 to i386 also for the multiarch pathname in dpkg-architecture.
   * Handle omitted binary packages due to build profiles in dpkg-genchanges.
     Based on a patch by Johannes Schauer <[email protected]>. Closes: #758191
   * Update restriction formula syntax for build profiles:
     - Restriction lists are now restriction formulas.
     - Restriction formulas are given in disjunctive normal form expression:
       <foo> <bar baz> <blub>
     - Removal of the implicit prefix/namespace mechanic.
     - Construct the profiles entry of the Packages-List field by converting
       the "<bar baz> <blub>" syntax into "bar,baz+blub".
     - Include a temporary compatibility mapping with the old way to write
       the Build-Profiles field in binary packages which can be removed once
       all affected source packages have moved to the new syntax.
     Thanks to Johannes Schauer <[email protected]>. Closes: #760158
   * Normalize instdir in dpkg by removing trailing «/» and «/.». This gets
     rid of several inconsistencies and doubled «/» in syscalls and output
     messages.
   * Never try to remove the root directory or its backups. There's no point in
     it, and makes life more difficult for a read-only root with a read-write
     overlay or a symlink farm. Requested by [email protected].
   * Remove arbitrary filename limit from dpkg-deb, which was lifted some
     time ago when the code switched to a dynamic string via varbuf.
   * Do not pipe the files to sign from dpkg-buildpackage to GnuPG. When GnuPG
     uses the gpg-agent it is unable to detect the correct tty configuration
     if stdin is a pipe instead of the current terminal. Closes: #762391
   * Add a new --hash option to enable generating only specific file checksums
     in dpkg-scanpackages. Requested by Thorsten Glaser <[email protected]>.
   * Add architecture restriction options for dpkg-architecture -L. This allows
     to select specific subsets of all valid known architectures, matching by
     wildcard (-W), endianness (-E) or bits (-B). The restricting options can
     be combined, or omitted altogether. Closes: #762635
   * Say arch-wildcard instead of arch-alias in dpkg-architecture --help output.
   * Test suite:
     - Do not leave temporary files behind on failure or when interrupted.
     - Add basic unit tests for the FNV hashing function.
     - Add unit tests for the libdpkg tar extractor.
   * Add --build and --extract command aliases to dpkg-source.
   * Print file or package names instead of pointers in dpkg debug output,
     to make it more meaningful and reproducible.
   * Fix off-by-one error in libdpkg command argv size calculation.
     Based on a patch by Bálint Réczey <[email protected]>. Closes: #760690
   * Switch the libdpkg string hashing function from FNV-1 to the recommended
     FNV-1a variant.
   * Switch the dpkg files database string hashing function from what appears
     to be a custom hash function to the libdpkg FNV-1a implementation. As a
     side effect this fixes an integer overflow. Addresses: #760741
   * Double the dpkg files database hash table size to the closest 2^18 prime.
     Times have changed, and it's common to have at least these many files.
     This reduces the amount of collisions.
   * Document optional dpkg -C argument in --help output. Closes: #763000
   * Consider a hardlink tar entry as a regular file for mode values, i.e.
     assign to it S_IFREG instead of 0.
 .
   [ Raphaël Hertzog ]
   * Explain better in deb-triggers(5) why interest/activate-noawait should be
     favored.
 .
   [ Updated programs translations ]
   * Catalan (Guillem Jover): Fix mismatched format string.
   * Czech (Miroslav Kure).
   * Polish (Łukasz Dulny).
   * Turkish (Mert Dirik). Closes: #763825
 .
   [ Updated manpages translations ]
   * German (Helge Kreutzmann).
   * Italian (Guillem Jover): Swap order of some dpkg-deb arguments.
     Thanks to xor <[email protected]>. Closes: #759149
Checksums-Sha1:
 227a22405b4dcea58a9d9503d078f150dcd05dcc 2057 dpkg_1.17.14.dsc
 48e3ec26e0fc3b1a91cef4b4a0b76c96053fbaf2 4297500 dpkg_1.17.14.tar.xz
 ecf4b0fe1e47b7797debc59e9dfed6d3ce3bbb43 1485934 dpkg-dev_1.17.14_all.deb
 4ac3c5b63a72a10866659b3cfb76a4e129372298 1013832 libdpkg-perl_1.17.14_all.deb
Checksums-Sha256:
 1c22562917a6d0a93fd32398e1af6b1a005ab0c5f4f0e1b439fa8b629eb98416 2057 
dpkg_1.17.14.dsc
 233ba844a947eb5f9ede6a9e2618a4ade055c1dd421f2b4864e895f1a2ad5261 4297500 
dpkg_1.17.14.tar.xz
 beaafd77ff4e5b945ff27134aa87448ba169b1950303a88cdf873caddeec36e3 1485934 
dpkg-dev_1.17.14_all.deb
 fe133caf65a07c7c91d5b202ea8a3d7ef7a72095aa4cafb55f7ac5ed197c75f9 1013832 
libdpkg-perl_1.17.14_all.deb
Files:
 96f68d3ac740e0072946819cbb02e4b9 2057 admin required dpkg_1.17.14.dsc
 c161f8f7fb3f4d90d77569c928e20938 4297500 admin required dpkg_1.17.14.tar.xz
 216c2618db6c602cd80f3900d979b083 1485934 utils optional 
dpkg-dev_1.17.14_all.deb
 f9f730a96cb004f71cfe34dea2573a7f 1013832 perl optional 
libdpkg-perl_1.17.14_all.deb

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQIcBAEBCAAGBQJUMeBbAAoJELlyvz6krlejwfcQAKKf3Al9q71eFq6Q+kZAsRAx
1ysCCOmjO0ODhvT1WJIQzSo4E+6KvZU5aSYRs7cZetVAwe0mGU/Bwyn3UKUq2v6e
YXrndGL0tEo9dKm3wyxPXfk8Mk7Jksd/0CK4tmaF3mTpzKC3lK3mjSuzpULhs58o
4euqnvUolJT3UZDZ4nxbf1DxCuPJEhf/1LpmT9nLdkqOqCTaO0e0Rv0M32Qp/sLE
xm2JDfpNlUyz/7HZJ5/JPz/zF/2Yhqk+W6uIbm1EvadVg85Zf5DRhy4qi1qRJUAy
LKhAatuB9dILv95Z9LvRk4ntjowbgpONEnV+bMXTEZ5RvSG/E1zuwtmyuJnr7vIL
Qh3WmaMAfu9PcSS24tpaC8PN6+gA7HEZfOHQ6zXtAvSjegy2mBLGgIBFDysXFoDJ
kf7lMxL+JzPac19noag7iJ5jolDb30HiI2CQBfF7R1Z/JsUkToMVGdN+za3JE8h2
co3kYh2Neth5/zhGkQkOnTk1eg+uMBFu59OTXd4PoHS8p4G0grkq/axRZ10w3QJ2
YysUywg1EVosK3gZ/hbHmSgXv2c1Md3tp2kurWVXoYEC0HCd9P5ilBQITPdP0kDt
aFfaDlR9mLUwG7G6BVFXP1lXS9JGfkWQTADG+n1+lj8WhWthXBBLMDpABC6GZuAA
vd2+jaRg7qawd443h3k/
=6lKo
-----END PGP SIGNATURE-----

--- End Message ---

Reply via email to