[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