[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Possible fix



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 to: