Bug#771497: file conflict between converted and unconverted libc6 package
Helmut Grohne <[email protected]> Sun, 30 Nov 2014 09:08:35 +0100
| Newsgroups | gmane.linux.debian.devel.embedded |
|---|---|
| Message-ID | <20141130080834.GA23093__28753.8908575245$1417335151$gmane$org@alf.mars> |
Source: dpkg-cross Version: 2.6.11 Severity: important Tags: patch User: [email protected] Usertags: rebootstrap When converting libc6:x32 using dpkg-cross, the symlink to the linker does not get translated. In libc6:x32 it looks like: lrwxrwxrwx root/root 0 2014-11-30 00:08 ./libx32/ld-linux-x32.so.2 -> /lib/x86_64-linux-gnux32/ld-2.19.so In libc6-x32-cross:all it looks like: lrwxrwxrwx root/root 0 2014-11-30 00:10 ./libx32/ld-linux-x32.so.2 -> ../usr/x86_64-linux-gnux32/lib/ld-2.19.so When installing both libc6:x32 and libc6-x32-cross:all, an undeclared file conflict occurs. Note that x32 is only an example here. The same issue happens for arm's libsf and libhf as well as mips' libn32. This causes bootstrapping of new architectures to fail. This is also why I marked this bug with severity important. The attached patch simply applies the existing logic for lib32 and lib64 to libhf, libn32, libsf and libx32 as well and thereby solves the issue at hand. Helmut
dpkg-cross_2.6.11+nmu1.debdiff
(text/plain, 7.1 KB)
diff -Nru dpkg-cross-2.6.11/Debian/DpkgCross.pm dpkg-cross-2.6.11+nmu1/Debian/DpkgCross.pm
--- dpkg-cross-2.6.11/Debian/DpkgCross.pm 2011-03-25 22:17:47.000000000 +0100
+++ dpkg-cross-2.6.11+nmu1/Debian/DpkgCross.pm 2014-11-30 08:46:18.000000000 +0100
@@ -16,7 +16,8 @@
$progname %archtable %std_tools
%pkgvars %allcrossroots $arch $default_arch $deb_host_gnu_type
$crossbase $crossprefix $crossdir $crossbin $crosslib $crossroot
-$crossinc $crosslib64 $crosslib32 $package $mode $tool_ %config
+$crossinc $crosslib64 $crosslib32 $crosslibhf $crosslibn32
+$crosslibsf $crosslibx32 $package $mode $tool_ %config
@keepdeps %allcrossroots @removedeps $maintainer $arch_dir
$compilerpath %debug_data);
@ISA = qw(Exporter);
@@ -171,6 +172,10 @@
$crosslib = $conf->{'crosslib'};
$crosslib64 = $conf->{'crosslib64'};
$crosslib32 = $conf->{'crosslib32'};
+ $crosslibhf = $conf->{'crosslibhf'};
+ $crosslibn32 = $conf->{'crosslibn32'};
+ $crosslibsf = $conf->{'crosslibsf'};
+ $crosslibx32 = $conf->{'crosslibx32'};
$crossinc = $conf->{'crossinc'};
$maintainer = $conf->{'maintainer'};
$compilerpath = $conf->{'compilerpath'};
@@ -204,6 +209,10 @@
$crosslib ||= $conf->{'crosslib'};
$crosslib64 ||= $conf->{'crosslib64'};
$crosslib32 ||= $conf->{'crosslib32'};
+ $crosslibhf ||= $conf->{'crosslibhf'};
+ $crosslibn32 ||= $conf->{'crosslibn32'};
+ $crosslibsf ||= $conf->{'crosslibsf'};
+ $crosslibx32 ||= $conf->{'crosslibx32'};
$crossinc ||= $conf->{'crossinc'};
$maintainer ||= $conf->{'maintainer'};
$compilerpath ||= $conf->{'compilerpath'};
@@ -383,6 +392,10 @@
$crosslib64 ||= $crosslib . "64";
$crosslib32 ||= $crosslib . "32";
+ $crosslibhf ||= $crosslib . "hf";
+ $crosslibn32 ||= $crosslib . "n32";
+ $crosslibsf ||= $crosslib . "sf";
+ $crosslibx32 ||= $crosslib . "x32";
$config{'crossbase'} = $crossbase;
$config{'crossprefix'} = $crossprefix;
$config{'crossdir'} = $crossdir;
@@ -390,6 +403,10 @@
$config{'crosslib'} = $crosslib;
$config{'crosslib64'} = $crosslib64;
$config{'crosslib32'} = $crosslib32;
+ $config{'crosslibhf'} = $crosslibhf;
+ $config{'crosslibn32'} = $crosslibn32;
+ $config{'crosslibsf'} = $crosslibsf;
+ $config{'crosslibx32'} = $crosslibx32;
$config{'crossinc'} = $crossinc;
$config{'crossroot'} = $crossroot;
@@ -410,6 +427,10 @@
$crosslib = $config{'crosslib'};
$crosslib64 = $config{'crosslib64'};
$crosslib32 = $config{'crosslib32'};
+ $crosslibhf = $config{'crosslibhf'};
+ $crosslibn32 = $config{'crosslibn32'};
+ $crosslibsf = $config{'crosslibsf'};
+ $crosslibx32 = $config{'crosslibx32'};
$crossinc = $config{'crossinc'};
}
@@ -463,6 +484,14 @@
$path = "$crosslib32/$'";
} elsif ($path =~ m:^(/emul/ia32-linux/(usr/)?lib/($multiarch)?):) {
$path = "$crosslib32/$'";
+ } elsif ($path =~ /^(\/usr)?\/libhf\/($multiarch)?/) {
+ $path = "$crosslibhf/$'";
+ } elsif ($path =~ /^(\/usr)?\/libn32\/($multiarch)?/) {
+ $path = "$crosslibn32/$'";
+ } elsif ($path =~ /^(\/usr)?\/libsf\/($multiarch)?/) {
+ $path = "$crosslibsf/$'";
+ } elsif ($path =~ /^(\/usr)?\/libx32\/($multiarch)?/) {
+ $path = "$crosslibx32/$'";
} elsif ($path =~ /^\/usr\/\w+-\w+(-\w+(-\w+)?)?\//) {
# leave alone
} else {
diff -Nru dpkg-cross-2.6.11/debian/changelog dpkg-cross-2.6.11+nmu1/debian/changelog
--- dpkg-cross-2.6.11/debian/changelog 2013-05-24 21:28:56.000000000 +0200
+++ dpkg-cross-2.6.11+nmu1/debian/changelog 2014-11-30 08:49:56.000000000 +0100
@@ -1,3 +1,10 @@
+dpkg-cross (2.6.11+nmu1) UNRELEASED; urgency=medium
+
+ * Non-maintainer upload.
+ * Support lib{hf,n32,sf,x32}. (Closes: #-1)
+
+ -- Helmut Grohne <[email protected]> Sun, 30 Nov 2014 08:49:39 +0100
+
dpkg-cross (2.6.11) unstable; urgency=low
* Upload changes from experimental to unstable.
diff -Nru dpkg-cross-2.6.11/dpkg-cross dpkg-cross-2.6.11+nmu1/dpkg-cross
--- dpkg-cross-2.6.11/dpkg-cross 2013-05-24 21:28:22.000000000 +0200
+++ dpkg-cross-2.6.11+nmu1/dpkg-cross 2014-11-30 08:53:56.000000000 +0100
@@ -12,7 +12,8 @@
use warnings;
use vars qw($verbose $str @removedeps $package %builds $arch $exclude
@keepdeps $dpkg_statfile $progname $debname $anyway $cross2cross $crosstype
-$crossdir $crosslib $crosslib64 $crosslib32 $crossinc $data $len
+$crossdir $crosslib $crosslib64 $crosslib32 $crosslibhf $crosslibn32
+$crosslibsf $crosslibx32 $crossinc $data $len
$retval $dpkg_cmd $mode $pkg @exlist $conffile $removedeps $keepdeps
$DPKGCROSSVERSION $keep_temp $msg $multiarchpackage $multiarch $multiarchconv);
@@ -728,6 +729,10 @@
$crosslib = $$config{'crosslib'};
$crosslib64 = $$config{'crosslib64'};
$crosslib32 = $$config{'crosslib32'};
+ $crosslibhf = $$config{'crosslibhf'};
+ $crosslibn32 = $$config{'crosslibn32'};
+ $crosslibsf = $$config{'crosslibsf'};
+ $crosslibx32 = $$config{'crosslibx32'};
# add extra regexp component for multiarch packages
if ($multiarchpackage) { $multiarch="\Q$crosstype/\E" } else {$multiarch=""};
@@ -796,6 +801,18 @@
} 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/libhf/([^/]+\.[ao])$:) {
+ # regular .a or .o file under /usr/libhf
+ link_file("$src$_", "$dst$crosslibhf/$1") or goto fail;
+ } elsif (m:^/usr/libn32/([^/]+\.[ao])$:) {
+ # regular .a or .o file under /usr/libn32
+ link_file("$src$_", "$dst$crosslibn32/$1") or goto fail;
+ } elsif (m:^/usr/libsf/([^/]+\.[ao])$:) {
+ # regular .a or .o file under /usr/libsf
+ link_file("$src$_", "$dst$crosslibsf/$1") or goto fail;
+ } elsif (m:^/usr/libx32/([^/]+\.[ao])$:) {
+ # regular .a or .o file under /usr/libx32
+ link_file("$src$_", "$dst$crosslibx32/$1") or goto fail;
} elsif (m:^(/usr)?/lib/($multiarch)?([^/]+\.so[^/]*)$:) {
# regular .so* file under /lib, /usr/lib, /lib/<triplet>, /usr/lib/<triplet>
if (is_ldscript("$src$_")) {
@@ -831,6 +848,34 @@
} else {
link_file("$src$_", "$dst$crosslib32/$1") or goto fail;
}
+ } elsif (m:^(/usr)?/libhf/([^/]+\.so[^/]*)$:) {
+ # regular .so* file under /libhf, /usr/libhf
+ if (is_ldscript("$src$_")) {
+ fix_ldscript("$src$_", "$dst$crosslibhf/$2") or goto fail;
+ } else {
+ link_file("$src$_", "$dst$crosslibhf/$2") or goto fail;
+ }
+ } elsif (m:^(/usr)?/libn32/([^/]+\.so[^/]*)$:) {
+ # regular .so* file under /libn32, /usr/libn32
+ if (is_ldscript("$src$_")) {
+ fix_ldscript("$src$_", "$dst$crosslibn32/$2") or goto fail;
+ } else {
+ link_file("$src$_", "$dst$crosslibn32/$2") or goto fail;
+ }
+ } elsif (m:^(/usr)?/libsf/([^/]+\.so[^/]*)$:) {
+ # regular .so* file under /libsf, /usr/libsf
+ if (is_ldscript("$src$_")) {
+ fix_ldscript("$src$_", "$dst$crosslibsf/$2") or goto fail;
+ } else {
+ link_file("$src$_", "$dst$crosslibsf/$2") or goto fail;
+ }
+ } elsif (m:^(/usr)?/libx32/([^/]+\.so[^/]*)$:) {
+ # regular .so* file under /libx32, /usr/libx32
+ if (is_ldscript("$src$_")) {
+ fix_ldscript("$src$_", "$dst$crosslibx32/$2") or goto fail;
+ } else {
+ link_file("$src$_", "$dst$crosslibx32/$2") or goto fail;
+ }
} elsif (m:^/usr/lib/$multiarch([^/]+\.la)$:) {
# regular .la file under /usr/lib
fix_la_file("$src$_", "$dst$crosslib/$1", $crosslib) or goto fail;