# Copyright 1999-2011 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.3 2010/10/08 15:33:13 flameeyes 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 (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 # prepare /etc/ld.so.conf.d/ for files mkdir -p "${ROOT}"/etc/ld.so.conf.d # 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 # we enter ${D} so to avoid trouble if the path contains # special characters; for instance if the path contains the # colon character (:), then the linker will try to split it # and look for the libraries in an unexpected place. This can # lead to unsafe code execution if the generated prefix is # within a world-writable directory # (e.g. /var/tmp/portage:${HOSTNAME}) pushd "${D}"/$(get_libdir) 2>/dev/null ./ld-*.so --library-path . ${x} > /dev/null \ || die "simple run test (${x}) failed" popd 2>/dev/null done }