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