Package: dpkg-cross
tag 463588 + patch
thanks
> Suppose I want a cross-compiling environment targeting Debian-amd64. By
> default, the gcc-4.2 package builds a biarch compiler (which is after
> all needed to replicate properly the build environment available on an
> amd64 host), and therefore requires libc6{,-dev}-i386-amd64-cross.
> Unfortunately dpkg-cross does not convert these packages successfully:
> it fails to find any libraries because they are all in /emul/ia32-linux,
> which it does not search. I think dpkg-cross should search for libraries
> under /emul/ia32-linux and put them in $(CROSSDIR)/lib32/.
Would changes that result in the contents of the package below be an
appropriate fix for this bug?
$ dpkg -c libc6-dev-i386-amd64-cross_2.7-12_all.deb
drwxr-xr-x root/root 0 2008-07-12 19:39 ./
drwxr-xr-x root/root 0 2008-07-12 19:39 ./usr/
drwxr-xr-x root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/
drwxr-xr-x root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/
-rw-r--r-- root/root 128946 2008-06-02 22:22 ./usr/x86_64-linux-gnu/lib32/libnsl.a
-rw-r--r-- root/root 858 2008-06-02 22:19 ./usr/x86_64-linux-gnu/lib32/Mcrt1.o
-rw-r--r-- root/root 12668 2008-06-02 22:22 ./usr/x86_64-linux-gnu/lib32/libanl.a
-rw-r--r-- root/root 2482 2008-06-02 22:19 ./usr/x86_64-linux-gnu/lib32/Scrt1.o
-rw-r--r-- root/root 1072840 2008-06-02 22:20 ./usr/x86_64-linux-gnu/lib32/libpthread.a
-rw-r--r-- root/root 2172 2008-06-02 22:19 ./usr/x86_64-linux-gnu/lib32/crti.o
-rw-r--r-- root/root 286 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/libc.so
-rw-r--r-- root/root 810 2008-06-02 22:22 ./usr/x86_64-linux-gnu/lib32/libbsd-compat.a
-rw-r--r-- root/root 1712 2008-06-02 22:19 ./usr/x86_64-linux-gnu/lib32/crtn.o
-rw-r--r-- root/root 1162 2008-06-02 22:22 ./usr/x86_64-linux-gnu/lib32/libBrokenLocale.a
-rw-r--r-- root/root 8054 2008-06-02 22:22 ./usr/x86_64-linux-gnu/lib32/libdl.a
-rw-r--r-- root/root 85754 2008-06-02 22:22 ./usr/x86_64-linux-gnu/lib32/libresolv.a
-rw-r--r-- root/root 2416 2008-06-02 22:19 ./usr/x86_64-linux-gnu/lib32/crt1.o
-rw-r--r-- root/root 16350 2008-06-02 22:22 ./usr/x86_64-linux-gnu/lib32/libc_nonshared.a
-rw-r--r-- root/root 1192 2008-06-02 22:22 ./usr/x86_64-linux-gnu/lib32/libmcheck.a
-rw-r--r-- root/root 810 2008-06-02 22:22 ./usr/x86_64-linux-gnu/lib32/libg.a
-rw-r--r-- root/root 8792 2008-06-02 22:22 ./usr/x86_64-linux-gnu/lib32/libutil.a
-rw-r--r-- root/root 49438 2008-06-02 22:22 ./usr/x86_64-linux-gnu/lib32/libcrypt.a
-rw-r--r-- root/root 492274 2008-06-02 22:22 ./usr/x86_64-linux-gnu/lib32/libm.a
-rw-r--r-- root/root 59330 2008-06-02 22:22 ./usr/x86_64-linux-gnu/lib32/librt.a
-rw-r--r-- root/root 3376 2008-06-02 22:20 ./usr/x86_64-linux-gnu/lib32/libpthread_nonshared.a
-rw-r--r-- root/root 4168 2008-06-02 22:19 ./usr/x86_64-linux-gnu/lib32/gcrt1.o
-rw-r--r-- root/root 3033660 2008-06-02 22:22 ./usr/x86_64-linux-gnu/lib32/libc.a
-rw-r--r-- root/root 662 2008-06-02 22:22 ./usr/x86_64-linux-gnu/lib32/libieee.a
-rw-r--r-- root/root 248 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/libpthread.so
drwxr-xr-x root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/include/
drwxr-xr-x root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/include/gnu/
-rw-r--r-- root/root 624 2008-06-02 22:20 ./usr/x86_64-linux-gnu/include/gnu/stubs-32.h
drwxr-xr-x root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/include/sys/
-rw-r--r-- root/root 1012 2008-06-02 22:20 ./usr/x86_64-linux-gnu/include/sys/elf.h
-rw-r--r-- root/root 1193 2008-06-02 22:20 ./usr/x86_64-linux-gnu/include/sys/vm86.h
drwxr-xr-x root/root 0 2008-07-12 19:39 ./usr/share/
drwxr-xr-x root/root 0 2008-07-12 19:39 ./usr/share/doc/
drwxr-xr-x root/root 0 2008-07-12 19:39 ./usr/share/doc/libc6-dev-i386-amd64-cross/
-rw-r--r-- root/root 283 2008-07-12 19:39 ./usr/share/doc/libc6-dev-i386-amd64-cross/README
lrwxrwxrwx root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/libnss_dns.so -> libnss_dns.so.2
lrwxrwxrwx root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/libcidn.so -> libcidn.so.1
lrwxrwxrwx root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/libnss_files.so -> libnss_files.so.2
lrwxrwxrwx root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/libresolv.so -> libresolv.so.2
lrwxrwxrwx root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/libanl.so -> libanl.so.1
lrwxrwxrwx root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/libutil.so -> libutil.so.1
lrwxrwxrwx root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/libthread_db.so -> libthread_db.so.1
lrwxrwxrwx root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/libnss_compat.so -> libnss_compat.so.2
lrwxrwxrwx root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/libBrokenLocale.so -> libBrokenLocale.so.1
lrwxrwxrwx root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/libnss_nis.so -> libnss_nis.so.2
lrwxrwxrwx root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/libcrypt.so -> libcrypt.so.1
lrwxrwxrwx root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/libm.so -> libm.so.6
lrwxrwxrwx root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/libdl.so -> libdl.so.2
lrwxrwxrwx root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/libnsl.so -> libnsl.so.1
lrwxrwxrwx root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/libnss_hesiod.so -> libnss_hesiod.so.2
lrwxrwxrwx root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/librt.so -> librt.so.1
lrwxrwxrwx root/root 0 2008-07-12 19:39 ./usr/x86_64-linux-gnu/lib32/libnss_nisplus.so -> libnss_nisplus.so.2
Current changes for this bug and #483076:
Index: dpkg-cross
===================================================================
RCS file: /cvsroot/dpkg-cross/dpkg-cross/dpkg-cross,v
retrieving revision 1.51
diff -p -u -b -B -r1.51 dpkg-cross
--- dpkg-cross 10 Jul 2008 19:00:52 -0000 1.51
+++ dpkg-cross 12 Jul 2008 18:42:00 -0000
@@ -559,6 +559,14 @@ sub sub_build {
} elsif (/^\/usr(\/X11R6)?\/lib32\/([^\/]+\.[ao])$/) {
# regular .a or .o file under /usr/lib32 or /usr/X11R6/lib32
link_file("$src$_", "$dst$crosslib32/$2") or goto fail;
+ } elsif ((m:^/emul/ia32-linux/usr/lib/([^\/]+\.[ao])$:)) {
+ # regular .a or .o file under /emul/ia32-linux/
+ link_file("$src$_", "$dst$crosslib32/$1") or goto fail;
+ } elsif (m:^/usr/lib/([\w\-/]+)/lib/([^/]+\.so[^/]*)$:) {
+ # regular .so* file under /usr/lib/.*/lib/
+ # e.g. /usr/lib/libcairo-directfb/lib/libcairo.so.2.17.5
+ # See #483076
+ link_file("$src$_", "$dst$crosslib/$1/lib/$2") or goto fail;
} elsif (/^(\/usr(\/X11R6)?)?\/lib\/([^\/]+\.so[^\/]*)$/) {
# regular .so* file under /lib, /usr/lib or /usr/X11R6/lib
if (is_ldscript("$src$_")) {
@@ -587,6 +595,13 @@ sub sub_build {
} else {
link_file("$src$_", "$dst$crosslib32/$3") or goto fail;
}
+ } elsif ((m:^/emul/ia32-linux/usr/lib/([^\/]+\.so[^\/]*)$:)) {
+ # regular .so* file under /emul/ia32-linux/usr/lib
+ if (is_ldscript("$src$_")) {
+ fix_ldscript("$src$_", "$dst$crosslib32/$1") or goto fail;
+ } else {
+ link_file("$src$_", "$dst$crosslib32/$1") or goto fail;
+ }
} elsif (/^\/usr(\/X11R6)?\/lib\/([^\/]+\.la)$/) {
# regular .la file under /usr/lib or /usr/X11R6/lib
fix_la_file("$src$_", "$dst$crosslib/$2", $crosslib) or goto fail;
@@ -596,6 +611,9 @@ sub sub_build {
} elsif (/^\/usr(\/X11R6)?\/lib32\/([^\/]+\.la)$/) {
# regular .la file under /usr/lib32 or /usr/X11R6/lib32
fix_la_file("$src$_", "$dst$crosslib32/$2", $crosslib32) or goto fail;
+ } elsif ((m:^/emul/ia32-linux/usr/lib/([^\/]+\.la)$:)) {
+ # regular .la file under /emul-ia32-linux/usr/lib/
+ fix_la_file("$src$_", "$dst$crosslib32/$1", $crosslib32) or goto fail;
} elsif (/\/usr\/lib\/(pkgconfig\/[^\/]+.pc)$/) {
# regular .pc file in /usr/lib/pkgconfig
fix_pc_file("$src$_", "$dst$crosslib/$1") or goto fail;
@@ -642,7 +660,7 @@ sub sub_build {
chomp;
s/^$src//;
# Ignore any symlinks not under /usr or /lib or /lib64
- /^\/(usr|lib|lib64)/ or next;
+ m:^/(usr|lib|lib64|emul/ia32-linux): or next;
next if (/^\/usr\/\w+-\w+(-\w+(-\w+)?)?\// && !$cross2cross);
# Find out (absolute) symlink destination
my $lv = readlink("$src$_");
@@ -651,7 +669,7 @@ sub sub_build {
$lv = "$1/$lv";
}
# Ignore any symlinks pointing outside /usr and /lib and /lib64
- $lv =~ /^\/(usr|lib|lib64)/ or next;
+ $lv =~ m:^\/(usr|lib|lib64|emul/ia32-linux): or next;
# Calculate corresponding DESTINATION path
$lv = convert_path($lv);
Index: Debian/DpkgCross.pm
===================================================================
RCS file: /cvsroot/dpkg-cross/dpkg-cross/Debian/DpkgCross.pm,v
retrieving revision 1.30
diff -p -u -b -B -r1.30 DpkgCross.pm
--- Debian/DpkgCross.pm 26 Jun 2008 15:22:13 -0000 1.30
+++ Debian/DpkgCross.pm 12 Jul 2008 18:42:14 -0000
@@ -510,6 +510,8 @@ sub convert_path ($) {
$path = "$crosslib64/$'";
} elsif ($path =~ /^(\/usr(\/X11R6)?)?\/lib32\//) {
$path = "$crosslib32/$'";
+ } elsif ($path =~ m:^(/emul/ia32-linux/(usr/)?lib/):) {
+ $path = "$crosslib32/$'";
} elsif ($path =~ /^\/usr\/\w+-\w+(-\w+(-\w+)?)?\//) {
# leave alone
} else {
Is it safe to include ia32-linux in the pattern matches? Are there other
cases where non-linux support might be needed?
--
Neil Williams
=============
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/
Attachment:
signature.asc
Description: This is a digitally signed message part