Bug#854233: licensecheck: Please mark licensecheck as Multi-Arch:foreign

Johannes Schauer josch at debian.org
Sun Feb 5 09:44:26 UTC 2017


Source: licensecheck
Version: 3.0.28-1
Severity: wishlist
Tags: patch
User: debian-cross at lists.debian.org
Usertags: cross-satisfiability

Hi,

currently, licensecheck is involved in 48 source packages not being able
to satisfy their crossbuild dependencies. See [1] for a list (Ctrl+F for
licensecheck). This is because the dependencies of a source package have
to be installed for the architecture that the source package is built
for. During native compilation, that architecture is equal to the native
architecture. During cross compilation it is a different architecture
than the native architecture. The licensecheck package is
Architecture:all and thus implicitly treated as being the native
architecture. As it is, the package is thus unable to satisfy crossbuild
dependencies of any source package build depending on it.

There are multiple ways to resolve this situation:

 - make licensecheck Multi-Arch:foreign (with private perl lib)
 - make licensecheck Multi-Arch:foreign and split out perl library into
   a new package which is Architecture:any Multi-Arch:same
 - adapt all build dependencies on it with the :native qualifier

For a binary package to be marked as Multi-Arch:foreign it has to not
expose the architecture it is installed in. This seems to be the case
for the licensecheck application. The interface the licensecheck script
provides seems to be architecture independent.

Unfortunately, the binary package also ships perl modules. Perl modules
can be architecture independent (pure perl) or architecture specific (XS
modules). The problem arises when the architecture independent module is
on a dependency path between two architecture specific packages. The
architecture independent package is unable to transport the architecture
of its reverse dependency and it can thus happen that two XS modules of
different architectures end up in the same installation set. Since the
architecture of all XS modules has to be equal, the package becomes
unusable. This is called the multiarch interpreter problem and a list of
affected packages can be found here [2]. The only solution to the
problem with our current dependency model is to put the architecture
independent perl module into a binary package that is marked as
Architecture:any and Multi-Arch:same.

Fortunately though, a look through codesearch seems to suggest that
nobody is using the perl module provided by the licensecheck binary
package. Thus it is possible to just make the perl module private and
thus prevent accidental usage by third parties. If the module is ever
required by others, then it should be moved into a separate package
which is marked Architecture:any and Multi-Arch:same.

Since the problem can be fixed in the licensecheck package, we can avoid
having to patch the 48 source packages that build depend on it.

I attached a patch which marks the licensecheck package
Multi-Arch:foreign and moves the perl module into a private path.

Thanks!

cheers, josch

[1] https://bootstrap.debian.net/cross_all.html
[2] https://bootstrap.debian.net/ma_interpreter.html
-------------- next part --------------
diff -Nru licensecheck-3.0.29/debian/changelog licensecheck-3.0.29/debian/changelog
--- licensecheck-3.0.29/debian/changelog	2017-01-24 11:55:30.000000000 +0100
+++ licensecheck-3.0.29/debian/changelog	2017-02-05 09:31:18.000000000 +0100
@@ -1,3 +1,17 @@
+licensecheck (3.0.29-1.1) UNRELEASED; urgency=medium
+
+  * Non-maintainer upload.
+  * Make the licensecheck package Multi-Arch:foreign so that it is able to
+    satisfy the crossbuild dependencies of (as of today) 49 source packages.
+    For the licensecheck binary package to be Multi-Arch foreign, the perl
+    module parts have to be hidden from the world and must thus not be
+    installed into the common perl search path. If the module part of
+    licensecheck is ever needed by another module, then the module would have
+    to be moved to a new binary package and marked as Architecture:any
+    Multi-Arch:same to avoid the multiarch interpreter problem.
+
+ -- Johannes Schauer <josch at debian.org>  Sun, 05 Feb 2017 09:31:18 +0100
+
 licensecheck (3.0.29-1) unstable; urgency=medium
 
   [ upstream ]
diff -Nru licensecheck-3.0.29/debian/control licensecheck-3.0.29/debian/control
--- licensecheck-3.0.29/debian/control	2017-01-24 11:52:22.000000000 +0100
+++ licensecheck-3.0.29/debian/control	2017-02-05 09:22:15.000000000 +0100
@@ -39,6 +39,7 @@
 Recommends: ${cdbs:Recommends}
 Breaks: devscripts (<< 2.16.6~)
 Replaces: devscripts (<< 2.16.6~)
+Multi-Arch: foreign
 Description: simple license checker for source files
  Licensecheck attempts to determine the license that applies to each
  file passed to it, by searching the start of the file for text
diff -Nru licensecheck-3.0.29/debian/patches/series licensecheck-3.0.29/debian/patches/series
--- licensecheck-3.0.29/debian/patches/series	1970-01-01 01:00:00.000000000 +0100
+++ licensecheck-3.0.29/debian/patches/series	2017-02-05 09:31:18.000000000 +0100
@@ -0,0 +1 @@
+use-private-module
diff -Nru licensecheck-3.0.29/debian/patches/use-private-module licensecheck-3.0.29/debian/patches/use-private-module
--- licensecheck-3.0.29/debian/patches/use-private-module	1970-01-01 01:00:00.000000000 +0100
+++ licensecheck-3.0.29/debian/patches/use-private-module	2017-02-05 09:31:18.000000000 +0100
@@ -0,0 +1,19 @@
+Description: use private licensecheck module
+ For the licensecheck binary package to be Multi-Arch foreign, the perl module
+ parts have to be hidden from the world and must thus not be installed into
+ the common perl search path. If the module part of licensecheck is ever needed
+ by another module, then the module would have to be moved to a new binary
+ package and marked as Architecture:any Multi-Arch:same to avoid the multiarch
+ interpreter problem.
+Author: Johannes Schauer <josch at debian.org>
+
+--- licensecheck-3.0.29.orig/bin/licensecheck
++++ licensecheck-3.0.29/bin/licensecheck
+@@ -17,6 +17,7 @@ use String::Escape qw(unbackslash);
+ use List::Util 1.45 qw(uniq uniqstr);
+ use Sort::Key::Multi 1.25 qw(rs_keysort rus_keysort);
+ 
++use lib '/usr/share/licensecheck';
+ use App::Licensecheck;
+ 
+ =head1 NAME
diff -Nru licensecheck-3.0.29/debian/rules licensecheck-3.0.29/debian/rules
--- licensecheck-3.0.29/debian/rules	2017-01-24 11:50:10.000000000 +0100
+++ licensecheck-3.0.29/debian/rules	2017-02-05 09:31:18.000000000 +0100
@@ -16,6 +16,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+DEB_MAKEMAKER_USER_FLAGS=LIB=/usr/share/licensecheck
+
 include /usr/share/cdbs/1/rules/utils.mk
 include /usr/share/cdbs/1/class/perl-makemaker.mk
 include /usr/share/cdbs/1/rules/debhelper.mk


More information about the pkg-perl-maintainers mailing list