Skip to content

Fix handling of dependencies with :any multiarch qualifier

  • interpreters: Allow a dependency on make:any for #!/usr/bin/make scripts

    make:any is a weaker dependency than make, but it is sufficient to get a /usr/bin/make executable that can be used for simple architecture-agnostic build processes.

    The make interpreter is not a completely architecture-independent interface (see the changelog for versions 4.0-5 and 4.1-1) so it cannot be Multi-Arch: foreign. A dependency on make:any declares that the dependent package is only using the architecture-independent subset of its interface, and therefore can use a foreign make package, as though make was Multi-Arch: foreign.

    Closes: #994902

  • Lintian::Relation: Fix implication relationships with :any qualifier

    Truth table (cells indicate whether the dependency on the left implies the dependency at the top):

                 pkg          pkg:i386     pkg:any
      pkg        yes          maybe        yes
      pkg:i386   maybe        yes          yes
      pkg:any    no           no           yes

    where the relationships labelled "maybe" are implied if the dependency happens to be found in an i386 package, and otherwise not implied.

    This fixes a false positive, #995490, which could be seen in the scripts-control-interpreters-python test package: a dependency on python3 implies a dependency on python3:any, so it is enough to be able to run a "#!/usr/bin/python3" script.

    Closes: #995490
    Fixes: 9bc560a6 "Implement the multiarch selector :any in package relationships"

  • tests: Add a reproducer for #994902

    In Lintian < 2.107.0, there was a false-positive for the "missing-dep-for-interpreter" hint in packages that contain an executable Makefile and depend on make:any, rather than on make.

  • tests: Add a reproducer for #995490

    A dependency on python3, with or without the :any qualifier, is enough to make #!/usr/bin/python3 scripts available.

    Reproduces: #995490

  • Revert "Broaden multiarch acceptor to :any in some tests"

    A dependency on a "Multi-Arch: allowed" package with no multiarch acceptor, such as "Depends: python3", is a stronger dependency than "Depends: python3:any", so these packages were always correct (although perhaps more strict than they needed to be).

    This reverts commit 66ea8811.

  • tests: Use a data structure to test multiarch dependency implications

  • tests: Check dpkg and Lintian agree on multiarch dependency implications


I think this is right, but it would be useful if a multiarch expert like @helmut could check my reasoning - and in particular, the truth table in the second commit.

Merge request reports

Loading