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

Reply via email to