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.