Package: dpkg-cross Version: 2.6.3ubuntu1 Severity: important Tags: patch -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
This is a copy of Ubuntu bug #739151 https://bugs.launchpad.net/ubuntu/+source/dpkg-cross/+bug/739151 Running dpkg-cross against the Multi-Arch: same version of libc6 currently in natty does not produce sensible output. Instead it generates a .deb that contains only a large number of iconv .so modules under /usr/x86_64-linux-gnu/include, e.g.: ./usr/x86_64-linux-gnu/include/gconv/libCNS.so I have no idea why it's installing to include. The source location was ../usr/lib/x86_64-linux-gnu/gconv/. It might seem that it's not a big deal for dpkg-cross to not handle multiarch packages since multiarch packages can just be installed directly; but since we can't use foreign-architecture build dependencies on the buildds yet, cross-toolchain packages in the archive (such as armel-cross-toolchain-base) need to build using gcc-4.5-source, eglibc-source, etc. and run dpkg-cross afterwards to output their binary packages. So the armel cross-compiler in the archive isn't buildable until this is resolved. I've checked with dpkg-cross 2.6.2 from Debian unstable; the same problem is present there. - -- Package-specific info: - -- /etc/dpkg-cross/cross-compile -- # # /etc/dpkg-cross/cross-compile: configuration for dpkg-cross # # default architecture for dpkg-cross (to avoid always typing the -a option # if you do cross installations only for one architecture) # Note: default_arch is managed by debconf - it can be overridden # if ~/.dpkg-cross/cross-compile exists or by specifying an # architecture on the command line. # Use '[sudo] dpkg-reconfigure dpkg-cross' to change this value. #default_arch = # All subsequent variables may be removed (and/or become # unsupported) at any time. # # general section: paths of cross compiling environment # # you can set the following variables here: # crossprefix: prefix for cross compiling binaries; default: $(DEB_HOST_GNU_SYSTEM)- # crossbase : base prefix for the following; default: /usr # crossdir : base directory for architecture; default: # $(CROSSBASE)/$(DEB_HOST_GNU_TYPE) # crossbin : dir for binaries; default: $(CROSSDIR)/bin # crosslib : dir for libraries; default: $(CROSSDIR)/lib # crossinc : dir for headers; default: $(CROSSDIR)/include # maintainer : maintainer name to pass to original dpkg-buildpackage # in -m option. If not set at all, don't pass a -m, thus # dpkg-buildpackage will use the name from the changelog # file. If set to the special string CURRENTUSER, # dpkg-buildpackage will use the name from the # changelog, too, but signing the .changes will be done # as the current user (default key). # removedeps : comma-separated list of package names that should be removed # from depends/conflicts/etc fields # keepdeps : comma-separated list of package names that should be kept # in depends/conflicts/etc fields as is, without adding # -arch-cross. # # In preparation for merging dpkg-cross into dpkg, the previous # defaults have been removed. - -- System Information: Debian Release: squeeze/sid APT prefers natty APT policy: (999, 'natty') Architecture: amd64 (x86_64) Kernel: Linux 2.6.38-7-generic (SMP w/4 CPU cores) Locale: LANG=pl_PL.utf8, LC_CTYPE=pl_PL.utf8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/bash Versions of packages dpkg-cross depends on: ii debconf [debconf-2.0] 1.5.36ubuntu4 Debian configuration management sy ii dpkg-dev 1.16.0~ubuntu6 Debian package development tools ii libconfig-auto-perl 0.20-2 Magical config file parser ii libdebian-dpkgcross-per 2.6.3ubuntu1 functions to aid cross-compiling D ii perl 5.10.1-17ubuntu3 Larry Wall's Practical Extraction Versions of packages dpkg-cross recommends: ii fakeroot 1.14.4-1ubuntu1 Gives a fake root environment Versions of packages dpkg-cross suggests: ii binutils-multia 2.21.0.20110322-1ubuntu1 Binary utilities that support mult - -- debconf information: dpkg-cross/default-arch: None -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iEYEARECAAYFAk2KEToACgkQeQ6MlGH/2quYngCfYp1ZT44SjXmj3X2Kwp+IYGB9 AwQAn2iZHPk+DuRby91TFEzMVeGdSf8A =kVUV -----END PGP SIGNATURE-----
Index: dpkg-cross =================================================================== RCS file: /cvsroot/dpkg-cross/dpkg-cross/dpkg-cross,v retrieving revision 1.83 diff -u -r1.83 dpkg-cross --- dpkg-cross 23 Feb 2011 14:46:33 -0000 1.83 +++ dpkg-cross 23 Mar 2011 14:32:35 -0000 @@ -507,7 +507,7 @@ } close(CONTROL); - if (defined ($control{'multi-arch'})) { + if (defined ($control{'multi-arch'}) and !$anyway) { my $output = basename ($package); warn sprintf(_g("%s: Skipping the '%s' Multi-Arch package.\n"), $progname, $output); if (not -f $output) { @@ -775,6 +775,16 @@ } elsif ((m:^/emul/ia32-linux/usr/lib/([^/]+\.[ao])$:)) { # regular .a or .o file under /emul/ia32-linux/ for #463588 link_file("$src$_", "$dst$crosslib32/$1") or goto fail; + } elsif (m:^(/usr)?/lib/$crosstype/([^/]+\.[ao])$:) { + # regular .a or .o file under /lib or /usr/lib/TRIPLET/ + link_file("$src$_", "$dst$crosslib/$crosstype/$2") or goto fail; + } elsif (m:^(/usr)?/lib/$crosstype/([^/]+\.so[^/]*)$:) { + # regular .so* file under /lib/TRIPLET or /usr/lib/TRIPLET + if (is_ldscript("$src$_")) { + fix_ldscript("$src$_", "$dst$crosslib/$crosstype/$2") or goto fail; + } else { + link_file("$src$_", "$dst$crosslib/$crosstype/$2") or goto fail; + } } elsif (m:^(/usr(/X11R6)?)?/lib/([^/]+\.so[^/]*)$:) { # regular .so* file under /lib, /usr/lib or /usr/X11R6/lib if (is_ldscript("$src$_")) { @@ -914,7 +924,18 @@ # useful or packaged in the -cross package, basically anything # in a directory beneath /usr/lib/. See #499292 # except pkgconfig symlinks, see #506956 - next if (($lv =~ m:$crosslib/.*/:) and ($lv !~ m:$crosslib/pkgconfig/:)); + # also handle multiarch packages with /usr/lib/TRIPLET/ directory + next if ( + ( + ($lv =~ m:$crosslib/$crosstype/.*/:) and + ($lv !~ m:$crosslib/$crosstype/pkgconfig/:) + ) or + ( + ($lv =~ m:$crosslib/.*/:) and + ($lv !~ m:$crosslib/pkgconfig/:) and + ($lv !~ m:$crosslib/$crosstype/:) + ) + ); $lv =~ m:$crosslib/(.*)$:; # Translators, retain the -> to indicate the direction of the link. printf (_g("Creating symlink %s -> %s\n"), $_, $1) if ($verbose >= 2);