Package: gobject-introspection
Version: 1.40.0-1ubuntu0.1
Severity: wishlist
Tags: patch

Hello,

to install a cross build environment it would be great if the typelibs
could be co-installed in a multiarch environment. Right now all
foo-dev packages depend on gir1.2-foo. So when trying to install foo-dev
for cross-building that won't work because the gir1.2-foo is not
multi-arch ready. The attached patch moves gobject-introspection to
multiarch triplet pathes, adds compatiblity for the old path and 
updates dh_girepository to look at both the new and old path. 
This part could probably do with a review of someone more familiar 
with perl than I am :)

With this change most packages that ship a gir1.2-* package need a small
change to their debian/gir1.2-foo.install file:
 - usr/lib/girepository-1.0/* 
 + usr/lib/*/girepository-1.0/*
Without they will fail to build.

Here is a draft announcement:
"""
Dear developers,

we would like to move the gnome introspection typelib data from
/usr/lib/girepository-1.0 to /usr/lib/<triplet>/girepository-1.0
so that we can install them in parallel on a multiarch system.

A updated version of gobject-introspection is ready in experimental that will
look into the new multiarch path and have the old path as a fallback.

But because the pkg-config libdir is now also a multiarch path most
gir1.2-* packages need adjustments to their debian/install file(s).

The change is straightforward, just change your debian/install file:
- usr/lib/girepository-1.0/* 
+ usr/lib/*/girepository-1.0/*

because the typelib files are now in e.g. /usr/lib/x86_64-linux-gnu.

Thanks,
"""

Thanks for your consideration!
 Michael


-- System Information:
Debian Release: jessie/sid
  APT prefers trusty-updates
  APT policy: (500, 'trusty-updates'), (500, 'trusty-security'), (500, 
'trusty'), (100, 'trusty-backports')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.13.0-32-generic (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages gobject-introspection depends on:
ii  build-essential        11.6ubuntu6
ii  libc6                  2.19-0ubuntu6
ii  libffi6                3.1~rc1+r3.0.13-12
ii  libgirepository-1.0-1  1.40.0-1ubuntu0.1
ii  libglib2.0-0           2.40.0-2
ii  python-mako            0.9.1-1
ii  python2.7              2.7.6-8
pn  python:any             <none>

gobject-introspection recommends no packages.

gobject-introspection suggests no packages.

-- no debconf information
diff -Nru gobject-introspection-1.40.0/debian/dh_girepository gobject-introspection-1.40.0/debian/dh_girepository
--- gobject-introspection-1.40.0/debian/dh_girepository	2011-12-01 22:22:10.000000000 +0100
+++ gobject-introspection-1.40.0/debian/dh_girepository	2014-07-23 17:07:14.000000000 +0200
@@ -75,8 +75,12 @@
 my $bin_version = $dh{VERSION};
 my @archpackages = getpackages("arch");
 
+my $triplet = `dpkg-architecture -qDEB_HOST_MULTIARCH`;
+chomp $triplet;
+my $typelib_multiarch_path = "/usr/lib/$triplet/girepository-1.0";
 my $typelib_path = "/usr/lib/girepository-1.0";
-my @typelibdirs = (@ARGV, $typelib_path);
+
+my @typelibdirs = (@ARGV, $typelib_path, $typelib_multiarch_path);
 my $gir_path = "/usr/share/gir-1.0";
 my @girdirs = (@ARGV, $gir_path);
 my $arch_triplet = `dpkg-architecture -qDEB_HOST_MULTIARCH`;
@@ -146,28 +150,31 @@
 sub require_typelib {
     my $req = shift;
     my $package = shift;
-    my $fullpath = "$typelib_path/$req";
+    my $fullpath = "";
+    foreach my $typelibdir (@typelibdirs) {
+        $fullpath = "$typelibdir/$req";
 
-    verbose_print ("Dependency: $req");
-    foreach my $girdir (@girdirs) {
-        if (-f tmpdir($package)."$girdir/$req") {
-            verbose_print("  found in the same package");
-            return;
+        verbose_print ("Dependency: $req");
+        foreach my $girdir (@girdirs) {
+            if (-f tmpdir($package)."$girdir/$req") {
+                verbose_print("  found in the same package");
+                return;
+            }
         }
-    }
-    foreach my $otherpkg (@archpackages) {
-        if (-f tmpdir($otherpkg)."$fullpath") {
-            verbose_print ("  found in $otherpkg");
-            error("Dependency on $otherpkg with a different format than $format") unless $otherpkg =~ /^gir$format/;
-            addsubstvar ($package, "gir:Depends", $otherpkg, "= $bin_version");
-            return;
+        foreach my $otherpkg (@archpackages) {
+            if (-f tmpdir($otherpkg)."$fullpath") {
+                verbose_print ("  found in $otherpkg");
+                error("Dependency on $otherpkg with a different format than $format") unless $otherpkg =~ /^gir$format/;
+                addsubstvar ($package, "gir:Depends", $otherpkg, "= $bin_version");
+                return;
+            }
         }
-    }
-    foreach my $privpath (@privdirs) {
-        if (-f "$privpath/$req") {
-            verbose_print ("  found in $privpath");
-            $fullpath = "$privpath/$req";
-            last;
+        foreach my $privpath (@privdirs) {
+            if (-f "$privpath/$req") {
+                verbose_print ("  found in $privpath");
+                $fullpath = "$privpath/$req";
+                last;
+            }
         }
     }
     error("Could not find $req dependency") unless -f "$fullpath";
diff -Nru gobject-introspection-1.40.0/debian/gir1.2-freedesktop.install gobject-introspection-1.40.0/debian/gir1.2-freedesktop.install
--- gobject-introspection-1.40.0/debian/gir1.2-freedesktop.install	2011-12-15 07:20:39.000000000 +0100
+++ gobject-introspection-1.40.0/debian/gir1.2-freedesktop.install	2014-07-22 22:52:08.000000000 +0200
@@ -1,11 +1,11 @@
-usr/lib/girepository-1.0/cairo-1.0.typelib
-usr/lib/girepository-1.0/DBus-1.0.typelib
-usr/lib/girepository-1.0/DBusGLib-1.0.typelib
-usr/lib/girepository-1.0/fontconfig-2.0.typelib
-usr/lib/girepository-1.0/freetype2-2.0.typelib
-usr/lib/girepository-1.0/GL-1.0.typelib
-usr/lib/girepository-1.0/libxml2-2.0.typelib
-usr/lib/girepository-1.0/xfixes-4.0.typelib
-usr/lib/girepository-1.0/xft-2.0.typelib
-usr/lib/girepository-1.0/xlib-2.0.typelib
-usr/lib/girepository-1.0/xrandr-1.3.typelib
+usr/lib/*/girepository-1.0/cairo-1.0.typelib
+usr/lib/*/girepository-1.0/DBus-1.0.typelib
+usr/lib/*/girepository-1.0/DBusGLib-1.0.typelib
+usr/lib/*/girepository-1.0/fontconfig-2.0.typelib
+usr/lib/*/girepository-1.0/freetype2-2.0.typelib
+usr/lib/*/girepository-1.0/GL-1.0.typelib
+usr/lib/*/girepository-1.0/libxml2-2.0.typelib
+usr/lib/*/girepository-1.0/xfixes-4.0.typelib
+usr/lib/*/girepository-1.0/xft-2.0.typelib
+usr/lib/*/girepository-1.0/xlib-2.0.typelib
+usr/lib/*/girepository-1.0/xrandr-1.3.typelib
diff -Nru gobject-introspection-1.40.0/debian/gir1.2-glib-2.0.install gobject-introspection-1.40.0/debian/gir1.2-glib-2.0.install
--- gobject-introspection-1.40.0/debian/gir1.2-glib-2.0.install	2011-12-15 07:20:39.000000000 +0100
+++ gobject-introspection-1.40.0/debian/gir1.2-glib-2.0.install	2014-07-22 22:52:17.000000000 +0200
@@ -1,5 +1,5 @@
-usr/lib/girepository-1.0/Gio-2.0.typelib
-usr/lib/girepository-1.0/GObject-2.0.typelib
-usr/lib/girepository-1.0/GLib-2.0.typelib
-usr/lib/girepository-1.0/GIRepository-2.0.typelib
-usr/lib/girepository-1.0/GModule-2.0.typelib
+usr/lib/*/girepository-1.0/Gio-2.0.typelib
+usr/lib/*/girepository-1.0/GObject-2.0.typelib
+usr/lib/*/girepository-1.0/GLib-2.0.typelib
+usr/lib/*/girepository-1.0/GIRepository-2.0.typelib
+usr/lib/*/girepository-1.0/GModule-2.0.typelib
diff -Nru gobject-introspection-1.40.0/debian/gobject-introspection.install gobject-introspection-1.40.0/debian/gobject-introspection.install
--- gobject-introspection-1.40.0/debian/gobject-introspection.install	2013-10-13 23:03:54.000000000 +0200
+++ gobject-introspection-1.40.0/debian/gobject-introspection.install	2014-07-22 22:45:30.000000000 +0200
@@ -2,9 +2,9 @@
 usr/share/aclocal
 usr/share/gobject-introspection-1.0
 usr/share/man
-usr/lib/gobject-introspection/giscanner/*.py
-usr/lib/gobject-introspection/giscanner/*.so
-usr/lib/gobject-introspection/giscanner/collections/*.py
-usr/lib/gobject-introspection/giscanner/doctemplates
+usr/lib/*/gobject-introspection/giscanner/*.py
+usr/lib/*/gobject-introspection/giscanner/*.so
+usr/lib/*/gobject-introspection/giscanner/collections/*.py
+usr/lib/*/gobject-introspection/giscanner/doctemplates
 debian/dh_girepository /usr/bin
 debian/gir.pm /usr/share/perl5/Debian/Debhelper/Sequence
diff -Nru gobject-introspection-1.40.0/debian/libgirepository-1.0-1.install gobject-introspection-1.40.0/debian/libgirepository-1.0-1.install
--- gobject-introspection-1.40.0/debian/libgirepository-1.0-1.install	2011-12-15 07:20:39.000000000 +0100
+++ gobject-introspection-1.40.0/debian/libgirepository-1.0-1.install	2014-07-22 21:51:11.000000000 +0200
@@ -1 +1 @@
-usr/lib/libgirepository-1.0.so.*
+usr/lib/*/libgirepository-1.0.so.*
diff -Nru gobject-introspection-1.40.0/debian/libgirepository1.0-dev.install gobject-introspection-1.40.0/debian/libgirepository1.0-dev.install
--- gobject-introspection-1.40.0/debian/libgirepository1.0-dev.install	2011-12-15 07:20:39.000000000 +0100
+++ gobject-introspection-1.40.0/debian/libgirepository1.0-dev.install	2014-07-22 22:48:35.000000000 +0200
@@ -1,5 +1,5 @@
-usr/lib/libgirepository-1.0.so
-usr/lib/libgirepository-1.0.a
+usr/lib/*/libgirepository-1.0.so
+usr/lib/*/libgirepository-1.0.a
 usr/include
-usr/lib/pkgconfig
+usr/lib/*/pkgconfig
 usr/share/gir-1.0
diff -Nru gobject-introspection-1.40.0/debian/patches/multiarch_compat gobject-introspection-1.40.0/debian/patches/multiarch_compat
--- gobject-introspection-1.40.0/debian/patches/multiarch_compat	1970-01-01 01:00:00.000000000 +0100
+++ gobject-introspection-1.40.0/debian/patches/multiarch_compat	2014-07-22 21:29:09.000000000 +0200
@@ -0,0 +1,14 @@
+Index: gobject-introspection-1.40.0/girepository/girepository.c
+===================================================================
+--- gobject-introspection-1.40.0.orig/girepository/girepository.c
++++ gobject-introspection-1.40.0/girepository/girepository.c
+@@ -192,6 +192,9 @@ init_globals (void)
+ 
+       search_path = g_slist_prepend (search_path, typelib_dir);
+ 
++      // compat with pre-multiarch
++      search_path = g_slist_prepend (search_path, "/usr/lib/girepository-1.0");
++
+       search_path = g_slist_reverse (search_path);
+     }
+ 
diff -Nru gobject-introspection-1.40.0/debian/patches/series gobject-introspection-1.40.0/debian/patches/series
--- gobject-introspection-1.40.0/debian/patches/series	2012-04-19 14:55:14.000000000 +0200
+++ gobject-introspection-1.40.0/debian/patches/series	2014-07-22 21:27:30.000000000 +0200
@@ -0,0 +1,2 @@
+#needed only until all packages are moved to mutliarch pathes
+multiarch_compat
diff -Nru gobject-introspection-1.40.0/debian/rules gobject-introspection-1.40.0/debian/rules
--- gobject-introspection-1.40.0/debian/rules	2014-04-02 16:22:55.000000000 +0200
+++ gobject-introspection-1.40.0/debian/rules	2014-07-22 21:27:08.000000000 +0200
@@ -7,6 +7,8 @@
 include /usr/share/gnome-pkg-tools/1/rules/uploaders.mk
 -include /usr/share/gnome-pkg-tools/1/rules/gnome-get-source.mk
 
+DEB_CONFIGURE_EXTRA_FLAGS += --libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH) 
+
 common-binary-post-install-arch:: list-missing
 list-missing: remove-unwanted-files
 remove-unwanted-files:

Reply via email to