[Bug 2068653] Re: dpkg-buildflags Ubuntu vendor module incompatible with Debaain
Ravi Kant Sharma
2068653 at bugs.launchpad.net
Mon Jun 17 11:17:34 UTC 2024
** Tags added: release-oo-incoming
** Tags removed: release-oo-incoming
** Tags added: release-nn-incoming
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to dpkg in Ubuntu.
https://bugs.launchpad.net/bugs/2068653
Title:
dpkg-buildflags Ubuntu vendor module incompatible with Debaain
Status in dpkg package in Ubuntu:
New
Bug description:
Description: Ubuntu 24.04 LTS
Release: 24.04
dpkg:
Installed: 1.22.6ubuntu6
Candidate: 1.22.6ubuntu6
Version table:
*** 1.22.6ubuntu6 500
500 http://us.archive.ubuntu.com/ubuntu noble/main amd64 Packages
100 /var/lib/dpkg/status
expected: i expect dpkg-buildflags --get CFLAGS to include -ffile-
prefix-map=OLD=NEW by default.
observed: if run in a directory with a valid debian/changelog, dpkg-
buildflags --get CFLAGS includes both -ffile-prefix-map=OLD=NEW and
-fdebug-prefix-map=OLD=NEW. if run with no debian/changelog, it
behaves as expected.
analysis:
The Debian vendor module's "reproducible" support, which is what's
also documented by the reproducibility project, will include -ffile-
prefix-map=OLD=NEW (which is a superset of -fdebug-prefix-map=OLD=NEW)
unless you explicitly opt to include -fdebug-prefix-map instead (and
then it will not include -ffile-prefix-map).
the code from Vendor/Debian.pm does as follows:
# Avoid storing the build path in the binaries.
if ($flags->use_feature('reproducible', 'fixfilepath') or
$flags->use_feature('reproducible', 'fixdebugpath')) {
my $build_path = $flags->get_option_value('build-path');
my $map;
# -ffile-prefix-map is a superset of -fdebug-prefix-map, prefer it
# if both are set.
if ($flags->use_feature('reproducible', 'fixfilepath')) {
$map = '-ffile-prefix-map=' . $build_path . '=.';
} else {
$map = '-fdebug-prefix-map=' . $build_path . '=.';
}
$flags->append($_, $map) foreach @compile_flags;
}
Starting in 1.22.0ubuntu1, the Ubuntu vendor code *almost*
unconditionally adds -fdebug-prefix-map=OLD=NEW; it will avoid adding
it if it cannot parse version and source from debian/changelog. It
will also strip any existing -fdebug-prefix-map=. It will *not* strip
-ffile-prefix-map. It's not clear which would take precedence if both
were defined differently since -ffile-prefix-map is a superset of
-fdebug-prefix-map.
It also means dpkg-buildflags behavior changes depending on whether it
can parse a file ./debian/changelog and find version and source in it
or not.
That code is here:
} elsif (-r 'debian/changelog') {
require Dpkg::Changelog::Debian;
my $pkgchangelog = Dpkg::Changelog::Debian->new(range => { "count" => 1 });
$pkgchangelog->load('debian/changelog');
my $chgentry = @{$pkgchangelog}[0];
my $pkgver = $chgentry->get_version();
my $pkgsrc = $chgentry->get_source();
if ($pkgver ne "" && $pkgsrc ne "") {
my $debugprefixmap = '-fdebug-prefix-map=' . $build_path . '=/usr/src/' . $pkgsrc . '-' . $pkgver;
# Strip any existing -fdebug-prefix-map flag.
$flags->strip($_, $stripflag) foreach @compile_flags;
$flags->append($_, $debugprefixmap) foreach @compile_flags;
}
}
It *should* define -ffile-prefix-map *or* -fdebug-prefix-map based on
the same metric Debian uses, and strip all other instances of both.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/dpkg/+bug/2068653/+subscriptions
More information about the foundations-bugs
mailing list