81 lines
3.2 KiB
Plaintext
81 lines
3.2 KiB
Plaintext
|
# Copyright 1999-2009 Gentoo Foundation
|
||
|
# Distributed under the terms of the GNU General Public License v2
|
||
|
# $Header: /var/cvsroot/gentoo-x86/sys-libs/glibc/files/eblits/pkg_preinst.eblit,v 1.1 2009/03/01 21:06:22 vapier Exp $
|
||
|
|
||
|
fix_lib64_symlinks() {
|
||
|
# the original Gentoo/AMD64 devs decided that since 64bit is the native
|
||
|
# bitdepth for AMD64, lib should be used for 64bit libraries. however,
|
||
|
# this ignores the FHS and breaks multilib horribly... especially
|
||
|
# since it wont even work without a lib64 symlink anyways. *rolls eyes*
|
||
|
# see bug 59710 for more information.
|
||
|
# Travis Tilley <lv@gentoo.org> (08 Aug 2004)
|
||
|
if [ -L ${ROOT}/lib64 ] ; then
|
||
|
ewarn "removing /lib64 symlink and moving lib to lib64..."
|
||
|
ewarn "dont hit ctrl-c until this is done"
|
||
|
rm ${ROOT}/lib64
|
||
|
# now that lib64 is gone, nothing will run without calling ld.so
|
||
|
# directly. luckily the window of brokenness is almost non-existant
|
||
|
use amd64 && /lib/ld-linux-x86-64.so.2 /bin/mv ${ROOT}/lib ${ROOT}/lib64
|
||
|
use ppc64 && /lib/ld64.so.1 /bin/mv ${ROOT}/lib ${ROOT}/lib64
|
||
|
# all better :)
|
||
|
ldconfig
|
||
|
ln -s lib64 ${ROOT}/lib
|
||
|
einfo "done! :-)"
|
||
|
einfo "fixed broken lib64/lib symlink in ${ROOT}"
|
||
|
fi
|
||
|
if [ -L ${ROOT}/usr/lib64 ] ; then
|
||
|
rm ${ROOT}/usr/lib64
|
||
|
mv ${ROOT}/usr/lib ${ROOT}/usr/lib64
|
||
|
ln -s lib64 ${ROOT}/usr/lib
|
||
|
einfo "fixed broken lib64/lib symlink in ${ROOT}/usr"
|
||
|
fi
|
||
|
if [ -L ${ROOT}/usr/X11R6/lib64 ] ; then
|
||
|
rm ${ROOT}/usr/X11R6/lib64
|
||
|
mv ${ROOT}/usr/X11R6/lib ${ROOT}/usr/X11R6/lib64
|
||
|
ln -s lib64 ${ROOT}/usr/X11R6/lib
|
||
|
einfo "fixed broken lib64/lib symlink in ${ROOT}/usr/X11R6"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
eblit-glibc-pkg_preinst() {
|
||
|
# nothing to do if just installing headers
|
||
|
just_headers && return
|
||
|
|
||
|
# PPC64+others may want to eventually be added to this logic if they
|
||
|
# decide to be multilib compatible and FHS compliant. note that this
|
||
|
# chunk of FHS compliance only applies to 64bit archs where 32bit
|
||
|
# compatibility is a major concern (not IA64, for example).
|
||
|
|
||
|
# amd64's 2005.0 is the first amd64 profile to not need this code.
|
||
|
# 2005.0 is setup properly, and this is executed as part of the
|
||
|
# 2004.3 -> 2005.0 upgrade script.
|
||
|
# It can be removed after 2004.3 has been purged from portage.
|
||
|
{ use amd64 || use ppc64; } && [ "$(get_libdir)" == "lib64" ] && ! has_multilib_profile && fix_lib64_symlinks
|
||
|
|
||
|
# it appears that /lib/tls is sometimes not removed. See bug
|
||
|
# 69258 for more info.
|
||
|
if [[ -d ${ROOT}/$(alt_libdir)/tls ]] && [[ ! -d ${D}/$(alt_libdir)/tls ]] ; then
|
||
|
ewarn "nptlonly or -nptl in USE, removing /${ROOT}$(alt_libdir)/tls..."
|
||
|
rm -r "${ROOT}"/$(alt_libdir)/tls || die
|
||
|
fi
|
||
|
|
||
|
# simple test to make sure our new glibc isnt completely broken.
|
||
|
# make sure we don't test with statically built binaries since
|
||
|
# they will fail. also, skip if this glibc is a cross compiler.
|
||
|
[[ ${ROOT} != "/" ]] && return 0
|
||
|
[[ -d ${D}/$(get_libdir) ]] || return 0
|
||
|
cd / #228809
|
||
|
local x striptest
|
||
|
for x in date env ls true uname ; do
|
||
|
x=$(type -p ${x})
|
||
|
[[ -z ${x} ]] && continue
|
||
|
striptest=$(LC_ALL="C" file -L ${x} 2>/dev/null)
|
||
|
[[ -z ${striptest} ]] && continue
|
||
|
[[ ${striptest} == *"statically linked"* ]] && continue
|
||
|
"${D}"/$(get_libdir)/ld-*.so \
|
||
|
--library-path "${D}"/$(get_libdir) \
|
||
|
${x} > /dev/null \
|
||
|
|| die "simple run test (${x}) failed"
|
||
|
done
|
||
|
}
|