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

Bug#636116: Overwriting identical include header files fails from libc6-dev and libc6-dev-amd64



[ CCing aurel32, doko and vorlon ]

Hi,

I was also caught by #635685 when trying to build gcc-4.7 snapshot
("gnu/stubs-32.h" not found due to double "gnu/stubs.h" in
/usr/include and /usr/include/i386-linux-gnu).

After a bit of dealing with the libc6-dev problem, I was able to build gcc-4.7.

[0] Filelist of installed libc6-dev package

$ dpkg --listfiles libc6-dev | sort > libc6-dev_filelist.txt

This shows doubled bits/ include files.

[1] Symlinking bits/ gnu/ sys/ include-dirs

Problem here was that these include-dirs were not removed on upgrade
to -13 (see excerpt from eglibc-213_debian_11-VS-12.diff below), which
is not ideal as some programs seem to look in the "old" locations.
A better solution would be to symlink:

# l /usr/include/bits /usr/include/gnu /usr/include/sys
lrwxrwxrwx 1 root root 19 31. Jul 13:14 /usr/include/bits ->
i386-linux-gnu/bits
lrwxrwxrwx 1 root root 18 31. Jul 13:13 /usr/include/gnu ->
i386-linux-gnu/gnu
lrwxrwxrwx 1 root root 18 31. Jul 13:19 /usr/include/sys -> i386-linux-gnu/sys

Next problem was that some -dev packages had files in /usr/include/sys
which were not in /usr/include/i386-linux-gnu/sys.
So, I reinstalled them (see attached files: sys-1.txt sys-2.txt sys.diff).

# apt-get install --reinstall libacl1-dev libasound2-dev libcap-dev

[ Excerpt diffs/eglibc-213_debian_11-VS-12.diff]
diff -uprN eglibc-2.13-11/debian/debhelper.in/libc-dev-alt.preinst
eglibc-2.13-12/debian/debhelper.in/libc-dev-alt.preinst
--- eglibc-2.13-11/debian/debhelper.in/libc-dev-alt.preinst
1970-01-01 01:00:00.000000000 +0100
+++ eglibc-2.13-12/debian/debhelper.in/libc-dev-alt.preinst
2011-07-31 11:57:30.000000000 +0200
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+set -e
+
+case $1 in
+       (upgrade|install)
+       # We want /usr/include/bits and /usr/include/gnu to become
+       # symlinks
+       if test -d /usr/include/bits ; then
+               rm -rf /usr/include/bits
+       fi
+       if test -d /usr/include/gnu ; then
+               rm -rf /usr/include/gnu
+       fi
+
+       # We want /usr/include/sys to be a normal directory instead
+       # of a symlink
+       if test -h /usr/include/sys ; then
+               rm -f /usr/include/sys
+       fi
+       ;;
+       (*)
+       ;;
+esac

[2] Keep i486-linux-gnu for compatibility reasons?

I compiled my gcc-4.7 with host/buil/target type "i486-linux-gnu" (see
build-script).
i486-linux-gnu dynamic linker run-time bindings with multiarch-support
is configured via:

# cat /etc/ld.so.conf.d/i486-linux-gnu.conf
# Multiarch support
/lib/i386-linux-gnu
/usr/lib/i386-linux-gnu
/lib/i486-linux-gnu
/usr/lib/i486-linux-gnu

Following this I created some symlinks for compatibility reasons:

# l /lib/i486-linux-gnu
lrwxrwxrwx 1 root root 14 31. Jul 14:42 /lib/i486-linux-gnu ->
i386-linux-gnu

# l /usr/lib/i486-linux-gnu
lrwxrwxrwx 1 root root 14 31. Jul 14:13 /usr/lib/i486-linux-gnu ->
i386-linux-gnu

I am not sure what is with /usr/lib/i586 /usr/lib/i686 - shouldn't
that stuff move below /usr/lib/i386-linux-gnu/?

[3] Error-message: crt*.o files not found

My build broke next when "crti.o" was not found, after this "crtn.o" etc.
To catch them, I created again some symlinks:

# l /usr/lib/crt*.o
lrwxrwxrwx 1 root root 21 31. Jul 14:16 /usr/lib/crt1.o ->
i386-linux-gnu/crt1.o
lrwxrwxrwx 1 root root 21 31. Jul 14:14 /usr/lib/crti.o ->
i386-linux-gnu/crti.o
lrwxrwxrwx 1 root root 21 31. Jul 14:14 /usr/lib/crtn.o -> i386-linux-gnu/crtn.o

[ Conclusion ]

With these modifications I was able to successfully build a gcc-4.7 snapshot.
First testcase was to build mesa-from-git, which worked.
Steve (vorlon) was telling me on #multiarch about a "compatibility
package" which was not finished yet.
Hope this helps to narrow down the problem.

- Sedat -

P.S.: gcc-4.7 file location and -v output

# which gcc-4.7
/usr/bin/gcc-4.7

# l /usr/bin/gcc-4.7
lrwxrwxrwx 1 root root 24 31. Jul 14:28 /usr/bin/gcc-4.7 ->
/opt/gcc-4.7/bin/gcc-4.7

# gcc-4.7 -v
Using built-in specs.
COLLECT_GCC=gcc-4.7
COLLECT_LTO_WRAPPER=/opt/gcc-4.7/lib/gcc/i486-linux-gnu/4.7.0/lto-wrapper
Target: i486-linux-gnu
Configured with: ../gcc-4.7-20110730/configure --prefix=/opt/gcc-4.7
--libdir=/opt/gcc-4.7/lib --libexecdir=/opt/gcc-4.7/lib
--program-suffix=-4.7 --enable-clocale=gnu --enable-languages=c,c++
--enable-shared --enable-threads=posix --disable-bootstrap
--disable-libssp --disable-multilib --disable-nls --with-system-zlib
--without-cloog --without-ppl --with-arch-32=i586 --with-tune=generic
--build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.7.0 20110730 (experimental) (GCC)

Attachment: debbug-636116_from-dileks.tar.xz
Description: Binary data

Attachment: debbug-636116_from-dileks.tar.xz.sha256sum
Description: Binary data


Reply to: