Public bug reported: 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. ** Affects: dpkg (Ubuntu) Importance: Undecided Status: New -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/2068653 Title: dpkg-buildflags Ubuntu vendor module incompatible with Debaain To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/dpkg/+bug/2068653/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs