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: