Your message dated Fri, 03 Apr 2015 12:05:06 +0200
with message-id <[email protected]>
and subject line Re: [debhelper-devel] Bug#759812: Bug#759812: Make the 
multiarch tuple available in helpers
has caused the Debian Bug report #759812,
regarding Make the multiarch tuple available in helpers
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
759812: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=759812
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: debhelper
Version: 9.20140817
Severity: wishlist
Tags: patch

With multiarch, some use cases which would traditionally be solved
through the static *.dirs, *.install, and *.link files now require
hackery in debian/rules instead, as some of the operations need the
build-time multiarch tuple.

It would be great if these files would support a substitution or
placeholder for the multiarch tuple so that we can go back to the
traditional approach even for multiarch packages.


Example #1
==========

A library package with a custom Makefile that installs everything to
$(DESTDIR), and in particular the shared library to a hard-coded
$(DESTDIR)/usr/lib/.

Before multi-arch, this was not an issue. I would just have created
simple one-line debian/libfooX.install files, and be done with it. Now,
I have to query DEB_HOST_MULTIARCH in debian/rules, override dh_install,
and move stuff around manually. Given the long path names involved, this
is really clutters up things.

Example #2
==========

An essential library package using autoconf.

The FHS specifies that the essential library should go into /lib/, but
development files (eg: .so symlink, pkgconfig files) must go into
/usr/lib/. This, too, requires a lot of manual moving and symlinking
where otherwise one-line *.{dirs,install,link} files would have sufficed.


Proposed Solution
=================

The attached patch extends dh_installdirs, dh_install, and dh_link such
that in v10 mode, the literal string :multiarch: is substituted with the
appropriate multiarch tuple during their operation.

Coming back to example #1, this should then work (and make debian/rules
hackery unnecessary):

  [ debian/libfooX.install ]
  usr/lib/*.so.*    usr/lib/:multiarch:/

The real added value is in the more complex cases, though.


Possible Issues
===============

The substitution is currently applied not only to debian/package.*
files, but to direct invocations of the dh_* helpers as well. I don't
know if this is a problem.

There might be a better alternative to the choice of :multiarch: as
substitution string, but to avoid conflicts, it should probably not
include symbols with a special meaning within debian/rules.

The dh_link extension is not as useful as the others because it does not
support wildcards are not supported. For example, in the -dev package, I
cannot symlink the .so to the .so.X.Y via .so.*.*

I haven't looked into the translation stuff.

I'm not aware of any use cases for it, but theoretically the same
approach could be applied to other DEB_*_ variables, in which case a
substitution such as :host:multarch: might be better.

Christian
>From 65d1e4acac5d04b6ca5dac7f7562520a4c892719 Mon Sep 17 00:00:00 2001
From: Christian Kastner <[email protected]>
Date: Fri, 29 Aug 2014 19:38:52 -0700
Subject: [PATCH] Make the multiarch tuple available in some helpers

Extend the dh_installdirs, dh_install, and dh_link helpers such that the string
:multiarch: is substituted with the value of DEB_HOST_MULTIARCH at build time.
This affects both direct invocations of the commands, as well as their
respective debian/<package>.* files.

This feature is only available in v10 mode or above.
---
 debhelper.pod  |  6 ++++++
 dh_install     | 13 ++++++++++++-
 dh_installdirs | 13 ++++++++++++-
 dh_link        | 11 +++++++++++
 4 files changed, 41 insertions(+), 2 deletions(-)

diff --git a/debhelper.pod b/debhelper.pod
index 23f8582..d5dbb11 100644
--- a/debhelper.pod
+++ b/debhelper.pod
@@ -546,6 +546,12 @@ running debhelper commands. This will not affect packages that only build
 with debhelper commands, but it may expose bugs in commands not included in
 debhelper.
 
+=item -
+
+The B<dh_installdirs>, B<dh_install>, and B<dh_link> commands will
+substitute the string F<:multiarch:> in path names with the applicable
+multiarch tuple at build time.
+
 =back
 
 =back
diff --git a/dh_install b/dh_install
index 28a76ef..8924766 100755
--- a/dh_install
+++ b/dh_install
@@ -35,6 +35,10 @@ From debhelper compatibility level 7 on, B<dh_install> will fall back to
 looking in F<debian/tmp> for files, if it doesn't find them in the current
 directory (or wherever you've told it to look using B<--sourcedir>).
 
+From debhelper compatibility level 10 on, the string F<:multiarch:> may be
+used in the names of both of the sources and the destination; it will be
+substituted with the applicable multiarch tuplet.
+
 =head1 FILES
 
 =over 4
@@ -123,6 +127,8 @@ init(options => {
 
 my @installed;
 
+my $multiarch=dpkg_architecture_value("DEB_HOST_MULTIARCH");
+
 my $srcdir = '.';
 $srcdir = $dh{SOURCEDIR} if defined $dh{SOURCEDIR};
 
@@ -155,7 +161,12 @@ foreach my $package (getpackages()) {
 	foreach my $set (@install) {
 		my $dest;
 		my $tmpdest=0;
-		
+
+		# Perform substitution for multiarch tuple
+		if (! compat(9)) {
+			s/:multiarch:/$multiarch/g for @$set;
+		}
+
 		if (! defined $dh{AUTODEST} && @$set > 1) {
 			$dest=pop @$set;
 		}
diff --git a/dh_installdirs b/dh_installdirs
index fe5683d..90a5e3c 100755
--- a/dh_installdirs
+++ b/dh_installdirs
@@ -18,6 +18,10 @@ B<dh_installdirs> [S<I<debhelper options>>] [B<-A>] [S<I<dir> ...>]
 B<dh_installdirs> is a debhelper program that is responsible for creating
 subdirectories in package build directories.
 
+From debhelper compatibility level 10 on, the string F<:multiarch:> may be
+used in the name of directories; it will be substituted with the applicable
+multiarch tuplet.
+
 =head1 FILES
 
 =over 4
@@ -48,6 +52,8 @@ package acted on. (Or in all packages if B<-A> is specified.)
 
 init();
 
+my $multiarch=dpkg_architecture_value("DEB_HOST_MULTIARCH");
+
 # PROMISE: DH NOOP WITHOUT dirs
 
 foreach my $package (@{$dh{DOPACKAGES}}) {
@@ -61,7 +67,12 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
 	my @dirs;
 
 	if ($file) {
-		@dirs=filearray($file)
+		@dirs=filearray($file);
+
+		# Perform substitution for multiarch tuple
+		if (! compat(9)) {
+			s/:multiarch:/$multiarch/g for @dirs;
+		}
 	}
 
 	if (($package eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) && @ARGV) {
diff --git a/dh_link b/dh_link
index db4aea8..899b40b 100755
--- a/dh_link
+++ b/dh_link
@@ -38,6 +38,10 @@ Any pre-existing destination files will be replaced with symlinks.
 B<dh_link> also scans the package build tree for existing symlinks which do not
 conform to Debian policy, and corrects them (v4 or later).
 
+From debhelper compatibility level 10 on, the string F<:multiarch:> may be
+used in the names of both of the sources and the destinations; it will be
+substituted with the applicable multiarch tuplet.
+
 =head1 FILES
 
 =over 4
@@ -124,6 +128,8 @@ sub expand_path {
 
 init();
 
+my $multiarch=dpkg_architecture_value("DEB_HOST_MULTIARCH");
+
 foreach my $package (@{$dh{DOPACKAGES}}) {
 	my $tmp=tmpdir($package);
 	my $file=pkgfile($package,"links");
@@ -139,6 +145,11 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
 		error("$file lists a link without a destination.");
 	}
 
+	# Perform substitution for multiarch tuple
+	if (! compat(9)) {
+		s/:multiarch:/$multiarch/g for @links;
+	}
+
 	if (($package eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) && @ARGV) {
 		push @links, @ARGV;
 	}
-- 
2.1.0


--- End Message ---
--- Begin Message ---
On Wed, 03 Sep 2014 03:33:17 +0200 Christian Kastner <[email protected]> wrote:
> On 2014-09-02 17:16, Steve Langasek wrote:
> > On Sat, Aug 30, 2014 at 10:57:40AM -0700, Joey Hess wrote:
> >> Christian Kastner wrote:
> >>> The attached patch extends dh_installdirs, dh_install, and dh_link such
> >>> that in v10 mode, the literal string :multiarch: is substituted with the
> >>> appropriate multiarch tuple during their operation.
> > 
> >> I think that Ubuntu had a patch for this or something similar 
> >> earlier, so it may be good to reuse the syntax. Or perhaps ${multiarch}.
> > 
> >> We need to avoid something that conflicts with anything in any debhelper
> >> config files. It would be good to eg, grep the lintian lab.
> > 
> > The Ubuntu patch was superseded by dh-exec.  Is there a reason to add
> > support for this, given that dh-exec is now in widespread use in the archive
> > as a solution for this precise problem?
> 
> No, the solution provided by dh-exec is sufficient. I had ruled out
> dh-exec much earlier, but for apparently erroneous reasons.
> 
> I believe this bug can be closed. Even if debhelper were extended with
> the proposed simple substitution, I suspect that eventually, it would
> evolve to what dh-exec is already providing anyway.
> 
> 

Ok, I will close this bug then.

Thanks,
~Niels

--- End Message ---

Reply via email to