Package: binutils
Version: 2.19-1~exp2
Followup-For: Bug #497603
I finally had a chance to look at this. The problem appears to be
that binutils-multiarch does not provide diversions to point the .so
links to the multiarch shared libraries.
I think the best thing to do is to create a binutils-multiarch-dev
package which installs and diverts the static libraries and the
correct shared library links. It depends on the binutils-multiarch
and binutils-dev (this approach allows binutils-multiarch to not pull
in binutils-dev).
With the attached patch, I get the following behaviour
1) system in normal state, no -dev packages
r...@jj:/tmp# ls -l /usr/lib/libbfd* /usr/lib/libopcode*
-rw-r--r-- 1 root root 942680 2008-11-30 05:03 /usr/lib/libbfd-2.19.so
-rw-r--r-- 1 root root 552376 2008-11-30 05:03 /usr/lib/libopcodes-2.19.so
2) dpkg -i binutils-dev_2.19-1~exp2_i386.deb
Dev package install static libraries and "normal" links to shared
libraries.
r...@jj:/tmp# ls -l /usr/lib/libbfd* /usr/lib/libopcode*
-rw-r--r-- 1 root root 942680 2008-11-30 05:03 /usr/lib/libbfd-2.19.so
-rw-r--r-- 1 root root 6818868 2008-12-24 13:57 /usr/lib/libbfd.a
lrwxrwxrwx 1 root root 14 2008-12-24 14:03 /usr/lib/libbfd.so ->
libbfd-2.19.so
-rw-r--r-- 1 root root 552376 2008-11-30 05:03 /usr/lib/libopcodes-2.19.so
-rw-r--r-- 1 root root 928604 2008-12-24 13:57 /usr/lib/libopcodes.a
lrwxrwxrwx 1 root root 18 2008-12-24 14:03 /usr/lib/libopcodes.so ->
libopcodes-2.19.so
3) dpkg -i binutils-multiarch_2.19-1~exp2_i386.deb
Tools are diverted to the multiarch versions
4) dpkg -i binutils-multiarch-dev_2.19-1~exp2_i386.deb
Static libraries and dev library .so links point to multiarch versions
r...@jj:/tmp# ls -l /usr/lib/libbfd* /usr/lib/libopcode*
-rw-r--r-- 1 root root 2546840 2008-12-24 13:57
/usr/lib/libbfd-2.19-multiarch.so
-rw-r--r-- 1 root root 942680 2008-11-30 05:03 /usr/lib/libbfd-2.19.so
-rw-r--r-- 1 root root 15265334 2008-12-24 13:57 /usr/lib/libbfd.a
-rw-r--r-- 1 root root 6818868 2008-12-24 13:57 /usr/lib/libbfd-single.a
lrwxrwxrwx 1 root root 14 2008-12-24 14:03 /usr/lib/libbfd-single.so ->
libbfd-2.19.so
lrwxrwxrwx 1 root root 24 2008-12-24 14:03 /usr/lib/libbfd.so ->
libbfd-2.19-multiarch.so
-rw-r--r-- 1 root root 1582700 2008-12-24 13:57
/usr/lib/libopcodes-2.19-multiarch.so
-rw-r--r-- 1 root root 552376 2008-11-30 05:03 /usr/lib/libopcodes-2.19.so
-rw-r--r-- 1 root root 3601860 2008-12-24 13:57 /usr/lib/libopcodes.a
-rw-r--r-- 1 root root 928604 2008-12-24 13:57 /usr/lib/libopcodes-single.a
lrwxrwxrwx 1 root root 18 2008-12-24 14:03 /usr/lib/libopcodes-single.so
-> libopcodes-2.19.so
lrwxrwxrwx 1 root root 28 2008-12-24 14:03 /usr/lib/libopcodes.so ->
libopcodes-2.19-multiarch.so
5) dpkg --remove binutils-multiarch-dev
Links return to normal
r...@jj:/tmp# ls -l /usr/lib/libbfd* /usr/lib/libopcode*
-rw-r--r-- 1 root root 2546840 2008-12-24 13:57
/usr/lib/libbfd-2.19-multiarch.so
-rw-r--r-- 1 root root 942680 2008-11-30 05:03 /usr/lib/libbfd-2.19.so
-rw-r--r-- 1 root root 6818868 2008-12-24 13:57 /usr/lib/libbfd.a
lrwxrwxrwx 1 root root 14 2008-12-24 14:03 /usr/lib/libbfd.so ->
libbfd-2.19.so
-rw-r--r-- 1 root root 1582700 2008-12-24 13:57
/usr/lib/libopcodes-2.19-multiarch.so
-rw-r--r-- 1 root root 552376 2008-11-30 05:03 /usr/lib/libopcodes-2.19.so
-rw-r--r-- 1 root root 928604 2008-12-24 13:57 /usr/lib/libopcodes.a
lrwxrwxrwx 1 root root 18 2008-12-24 14:03 /usr/lib/libopcodes.so ->
libopcodes-2.19.so
It also removes some old attempts at moving the libraries, and
comments out the ld diversion which is currently disabled.
As to Peter's comment about multiarch providing binutils - it doesn't
create a universal assembler so it's not quite a complete 'provides'.
Thanks,
-i
binutils-multiarch-dev.postrm | 20 ++++++++++++++++++++
binutils-multiarch-dev.preinst | 20 ++++++++++++++++++++
binutils-multiarch.preinst | 21 ++++++++-------------
control | 13 +++++++++++++
rules | 39 ++++++++++++++++++++++++++++-----------
5 files changed, 89 insertions(+), 24 deletions(-)
-- System Information:
Debian Release: 5.0
APT prefers unstable
APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: i386 (i686)
Kernel: Linux 2.6.27.9
Locale: LANG=en_AU, LC_CTYPE=en_AU (charmap=ISO-8859-1)
Shell: /bin/sh linked to /bin/bash
Versions of packages binutils depends on:
ii libc6 2.7-16 GNU C Library: Shared libraries
ii zlib1g 1:1.2.3.3.dfsg-12 compression library - runtime
binutils recommends no packages.
Versions of packages binutils suggests:
pn binutils-doc <none> (no description available)
-- no debconf information
Index: binutils-2.19/debian/binutils-multiarch.preinst
===================================================================
--- binutils-2.19.orig/debian/binutils-multiarch.preinst 2008-12-24 22:40:43.000000000 -0800
+++ binutils-2.19/debian/binutils-multiarch.preinst 2008-12-24 22:40:55.000000000 -0800
@@ -11,19 +11,14 @@
--divert /usr/bin/$f.single /usr/bin/$f
done
- for l in bfd opcodes; do
- dpkg-divert --package binutils-multiarch \
- --add --rename \
- --divert /usr/lib/lib$l-single.a /usr/lib/lib$l.a
- done
-
- if [ -x /usr/bin/ld.single ]; then
- rm -f /usr/bin/ld
- dpkg-divert --package binutils-multiarch \
- --remove --rename \
- --divert /usr/bin/ld.single /usr/bin/ld \
- | grep -v '^No diversion' || true
- fi
+# multiarch ld not shipped
+# if [ -x /usr/bin/ld.single ]; then
+# rm -f /usr/bin/ld
+# dpkg-divert --package binutils-multiarch \
+# --remove --rename \
+# --divert /usr/bin/ld.single /usr/bin/ld \
+# | grep -v '^No diversion' || true
+# fi
fi
Index: binutils-2.19/debian/control
===================================================================
--- binutils-2.19.orig/debian/control 2008-12-24 22:39:50.000000000 -0800
+++ binutils-2.19/debian/control 2008-12-24 22:40:05.000000000 -0800
@@ -44,6 +44,19 @@
NORMAL USERS SHOULD NOT INSTALL THIS PACKAGE. It's meant only for those
requiring support for reading info from binaries from other architectures.
+Package: binutils-multiarch-dev
+Architecture: any
+Priority: extra
+Depends: binutils-multiarch (= ${binary:Version}), binutils-dev (= ${binary:Version})
+Description: Binary utilities that support multi-arch targets (BFD development files)
+ The programs in this package are used to manipulate binary and object
+ files that may have been created on other architectures. This
+ package is primarily for multi-architecture developers and
+ cross-compilers and is not needed by normal users or developers.
+ NORMAL USERS SHOULD NOT INSTALL THIS PACKAGE. It's meant only for
+ those requiring support for reading info from binaries from other
+ architectures.
+
Package: binutils-gold
Architecture: amd64 i386 powerpc sparc
Priority: extra
Index: binutils-2.19/debian/rules
===================================================================
--- binutils-2.19.orig/debian/rules 2008-12-24 22:40:12.000000000 -0800
+++ binutils-2.19/debian/rules 2008-12-24 22:40:20.000000000 -0800
@@ -18,6 +18,7 @@
p_bin = binutils
p_dev = $(p_bin)-dev
p_mul = $(p_bin)-multiarch
+p_muldev = $(p_bin)-multiarch-dev
p_gold = $(p_bin)-gold
p_doc = $(p_bin)-doc
p_hppa64 = $(p_bin)-hppa64
@@ -29,6 +30,7 @@
d_bin = $(d)
d_dev = debian/$(p_dev)
d_mul = debian/$(p_mul)
+d_muldev = debian/$(p_muldev)
d_gold = debian/$(p_gold)
d_doc = debian/$(p_doc)
d_hppa64 = debian/$(p_hppa64)
@@ -143,7 +145,7 @@
-rm -fr builddir-multi builddir-single builddir-hppa64 builddir-spu builddir-gold
-find . -name \*.gmo -o -name \*~ -o -name \*.info | xargs rm -f
-rm -f $(pwd)/test-summary*
- -rm -fr $(d_bin) $(d_dev) $(d_mul) $(d_doc) $(d_hppa64) $(d_src) $(d_spu) $(d_gold)
+ -rm -fr $(d_bin) $(d_dev) $(d_mul) $(d_muldev) $(d_doc) $(d_hppa64) $(d_src) $(d_spu) $(d_gold)
-rm -rf debian/patched debian/tmp debian/files* debian/substvars
chmod 644 debian/patches/*.dpatch
-rm -f *-stamp
@@ -370,8 +372,8 @@
install-stamp: checkroot build-stamp
$(checkdir)
- rm -fr $(d_bin) $(d_dev) $(d_mul) $(d_doc) $(d_src)
- $(install_dir) $(d_bin) $(d_dev) $(d_mul) $(d_doc) $(d_src)
+ rm -fr $(d_bin) $(d_dev) $(d_mul) $(d_muldev) $(d_doc) $(d_src)
+ $(install_dir) $(d_bin) $(d_dev) $(d_mul) $(d_muldev) $(d_doc) $(d_src)
: # install binutils and -dev stuff
$(MAKE) -C builddir-single \
@@ -397,6 +399,11 @@
: # *sigh*, bugs.debian.org/213524
rm -f $(d_doc)/usr/share/info/dir*
+ $(install_dir) $(d_dev)/usr/include/ $(d_dev)/usr/lib/
+ mv $(d_bin)/usr/include/* $(d_dev)/usr/include/
+ mv $(d_bin)/usr/lib/*.a $(d_bin)/usr/lib/libbfd.so $(d_bin)/usr/lib/libopcodes.so \
+ $(d_dev)/usr/lib/
+
: # Now get rid of just about everything in binutils-multiarch
rm -rf $(d_mul)/usr/man $(d_mul)/usr/info $(d_mul)/usr/include
rm -rf $(d_mul)/usr/share/man $(d_mul)/usr/share/info $(d_mul)/usr/share/locale
@@ -410,14 +417,15 @@
rm -f $(d_mul)/usr/bin/embedspu
endif
- $(install_dir) $(d_dev)/usr/include/ $(d_dev)/usr/lib/
- mv $(d_bin)/usr/include/* $(d_dev)/usr/include/
- mv $(d_bin)/usr/lib/*.a $(d_bin)/usr/lib/libbfd.so $(d_bin)/usr/lib/libopcodes.so \
- $(d_dev)/usr/lib/
-
+ : # copy multiarch development files to multiarch-dev dir
+ rm -f $(d_mul)/usr/lib*/libiberty*
+ $(install_dir) $(d_muldev)/usr/lib
+ mv $(d_mul)/usr/lib/*.a $(d_mul)/usr/lib/libbfd.so $(d_mul)/usr/lib/libopcodes.so \
+ $(d_muldev)/usr/lib
+ : # now get rid of dev files from multiarch packaging
rm -f $(d_mul)/usr/lib/libbfd.so $(d_mul)/usr/lib/libopcodes.so
rm -f $(d_mul)/usr/lib/*.la $(d_mul)/usr/lib/*.a
- rm -f $(d_mul)/usr/lib*/libiberty*
+
: # Get rid of .la files since libtool obviously has no idea about transient paths
rm -f $(d_bin)/usr/lib/*.la
@@ -651,6 +659,10 @@
$(install_script) debian/binutils-multiarch.preinst $(d_mul)/DEBIAN/preinst
$(install_file) debian/binutils-multiarch.shlibs $(d_mul)/DEBIAN/shlibs
+ $(install_dir) $(d_muldev)/DEBIAN
+ $(install_script) debian/binutils-multiarch-dev.preinst $(d_muldev)/DEBIAN/preinst
+ $(install_script) debian/binutils-multiarch-dev.postrm $(d_muldev)/DEBIAN/postrm
+
ifeq ($(with_gold),yes)
$(install_dir) $(d_gold)/DEBIAN
$(install_script) debian/binutils-gold.postrm $(d_gold)/DEBIAN/postrm
@@ -676,6 +688,7 @@
$(install_file) debian/copyright $(d_bin)/usr/share/doc/$(p_bin)/
$(install_dir) $(d_dev)/usr/share/doc/ $(d_mul)/usr/share/doc/
+ $(install_dir) $(d_dev)/usr/share/doc/ $(d_muldev)/usr/share/doc/
ln -sf $(p_bin) $(d_dev)/usr/share/doc/$(p_dev)
ln -sf $(p_bin) $(d_mul)/usr/share/doc/$(p_mul)
ifeq ($(with_gold),yes)
@@ -737,6 +750,9 @@
find $(d_mul) -type f | xargs file | grep ELF | cut -d: -f 1 | xargs dpkg-shlibdeps
dpkg-gencontrol -isp -P$(d_mul) -p$(p_mul)
+ rm -f debian/substvars
+ dpkg-gencontrol -isp -P$(d_muldev) -p$(p_muldev)
+
ifeq ($(with_gold),yes)
rm -f debian/substvars
find $(d_gold) -type f | xargs file | grep ELF | cut -d: -f 1 | xargs dpkg-shlibdeps
@@ -753,11 +769,12 @@
dpkg-gencontrol -isp -P$(d_spu) -p$(p_spu)
endif
- chown -R root:root $(d_bin) $(d_dev) $(d_mul)
- chmod -R go=rX $(d_bin) $(d_dev) $(d_mul)
+ chown -R root:root $(d_bin) $(d_dev) $(d_mul) $(d_muldev)
+ chmod -R go=rX $(d_bin) $(d_dev) $(d_mul) $(d_muldev)
dpkg --build $(d_bin) ..
dpkg --build $(d_dev) ..
dpkg --build $(d_mul) ..
+ dpkg --build $(d_muldev) ..
ifeq ($(with_gold),yes)
chown -R root:root $(d_gold)
chmod -R go=rX $(d_gold)
Index: binutils-2.19/debian/binutils-multiarch-dev.postrm
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils-2.19/debian/binutils-multiarch-dev.postrm 2008-12-24 22:44:15.000000000 -0800
@@ -0,0 +1,20 @@
+#! /bin/sh
+
+set -e
+
+if [ "$1" = "remove" -o "$1" = "abort-install" ]; then
+
+ for l in bfd opcodes; do
+ dpkg-divert --package binutils-multiarch-dev \
+ --remove --rename \
+ --divert /usr/lib/lib$l-single.a /usr/lib/lib$l.a
+ done
+
+ # undivert .so links
+ for l in bfd opcodes; do
+ dpkg-divert --package binutils-multiarch-dev \
+ --remove --rename \
+ --divert /usr/lib/lib$l-single.so /usr/lib/lib$l.so
+ done
+
+fi
\ No newline at end of file
Index: binutils-2.19/debian/binutils-multiarch-dev.preinst
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils-2.19/debian/binutils-multiarch-dev.preinst 2008-12-24 22:44:15.000000000 -0800
@@ -0,0 +1,20 @@
+#! /bin/sh
+
+set -e
+
+if [ install = "$1" -o upgrade = "$1" ]; then
+
+ # divert static libraries
+ for l in bfd opcodes; do
+ dpkg-divert --package binutils-multiarch-dev \
+ --add --rename \
+ --divert /usr/lib/lib$l-single.a /usr/lib/lib$l.a
+ done
+
+ # divert .so links
+ for l in bfd opcodes; do
+ dpkg-divert --package binutils-multiarch-dev \
+ --add --rename \
+ --divert /usr/lib/lib$l-single.so /usr/lib/lib$l.so
+ done
+fi
\ No newline at end of file