126 lines
3.9 KiB
Plaintext
126 lines
3.9 KiB
Plaintext
# Copyright 1999-2014 Gentoo Foundation
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
# $Header: /var/cvsroot/gentoo-x86/sys-libs/glibc/files/eblits/pkg_setup.eblit,v 1.14 2014/10/17 17:30:04 vapier Exp $
|
|
|
|
glibc_compile_test() {
|
|
local ret save_cflags=${CFLAGS}
|
|
CFLAGS+=" $1"
|
|
shift
|
|
|
|
pushd "${T}" >/dev/null
|
|
|
|
rm -f glibc-test*
|
|
printf '%b' "$*" > glibc-test.c
|
|
|
|
_nonfatal emake -s glibc-test
|
|
ret=$?
|
|
|
|
popd >/dev/null
|
|
|
|
CFLAGS=${save_cflags}
|
|
return ${ret}
|
|
}
|
|
|
|
glibc_run_test() {
|
|
local ret
|
|
|
|
if [[ ${EMERGE_FROM} == "binary" ]] ; then
|
|
# ignore build failures when installing a binary package #324685
|
|
glibc_compile_test "" "$@" 2>/dev/null || return 0
|
|
else
|
|
if ! glibc_compile_test "" "$@" ; then
|
|
ewarn "Simple build failed ... assuming this is desired #324685"
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
pushd "${T}" >/dev/null
|
|
|
|
./glibc-test
|
|
ret=$?
|
|
rm -f glibc-test*
|
|
|
|
popd >/dev/null
|
|
|
|
return ${ret}
|
|
}
|
|
|
|
eblit-glibc-pkg_setup() {
|
|
# prevent native builds from downgrading ... maybe update to allow people
|
|
# to change between diff -r versions ? (2.3.6-r4 -> 2.3.6-r2)
|
|
if [[ ${MERGE_TYPE} != "buildonly" ]] && \
|
|
[[ ${ROOT} == "/" ]] && \
|
|
[[ ${CBUILD} == ${CHOST} ]] && \
|
|
[[ ${CHOST} == ${CTARGET} ]] ; then
|
|
if has_version '>'${CATEGORY}/${PF} ; then
|
|
eerror "Sanity check to keep you from breaking your system:"
|
|
eerror " Downgrading glibc is not supported and a sure way to destruction"
|
|
die "aborting to save your system"
|
|
fi
|
|
|
|
if ! glibc_run_test '#include <pwd.h>\nint main(){return getpwuid(0)==0;}\n'
|
|
then
|
|
eerror "Your patched vendor kernel is broken. You need to get an"
|
|
eerror "update from whoever is providing the kernel to you."
|
|
eerror "http://sourceware.org/bugzilla/show_bug.cgi?id=5227"
|
|
eerror "http://bugs.gentoo.org/262698"
|
|
die "keeping your system alive, say thank you"
|
|
fi
|
|
|
|
if ! glibc_run_test '#include <unistd.h>\n#include <sys/syscall.h>\nint main(){return syscall(1000)!=-1;}\n'
|
|
then
|
|
eerror "Your old kernel is broken. You need to update it to"
|
|
eerror "a newer version as syscall(<bignum>) will break."
|
|
eerror "http://bugs.gentoo.org/279260"
|
|
die "keeping your system alive, say thank you"
|
|
fi
|
|
fi
|
|
|
|
# users have had a chance to phase themselves, time to give em the boot
|
|
if [[ -e ${ROOT}/etc/locale.gen ]] && [[ -e ${ROOT}/etc/locales.build ]] ; then
|
|
eerror "You still haven't deleted ${ROOT}/etc/locales.build."
|
|
eerror "Do so now after making sure ${ROOT}/etc/locale.gen is kosher."
|
|
die "lazy upgrader detected"
|
|
fi
|
|
|
|
if [[ ${CTARGET} == i386-* ]] ; then
|
|
eerror "i386 CHOSTs are no longer supported."
|
|
eerror "Chances are you don't actually want/need i386."
|
|
eerror "Please read http://www.gentoo.org/doc/en/change-chost.xml"
|
|
die "please fix your CHOST"
|
|
fi
|
|
|
|
if [[ -e /proc/xen ]] && [[ $(tc-arch) == "x86" ]] && ! is-flag -mno-tls-direct-seg-refs ; then
|
|
ewarn "You are using Xen but don't have -mno-tls-direct-seg-refs in your CFLAGS."
|
|
ewarn "This will result in a 50% performance penalty when running with a 32bit"
|
|
ewarn "hypervisor, which is probably not what you want."
|
|
fi
|
|
|
|
use hardened && ! gcc-specs-pie && \
|
|
ewarn "PIE hardening not applied, as your compiler doesn't default to PIE"
|
|
|
|
# Make sure host system is up to date #394453
|
|
if has_version '<sys-libs/glibc-2.13' && \
|
|
[[ -n $(scanelf -qys__guard -F'#s%F' "${ROOT}"/lib*/l*-*.so) ]]
|
|
then
|
|
ebegin "Scanning system for __guard to see if you need to rebuild first ..."
|
|
local files=$(
|
|
scanelf -qys__guard -F'#s%F' \
|
|
"${ROOT}"/*bin/ \
|
|
"${ROOT}"/lib* \
|
|
"${ROOT}"/usr/*bin/ \
|
|
"${ROOT}"/usr/lib* | \
|
|
egrep -v \
|
|
-e "^${ROOT}/lib.*/(libc|ld)-2.*.so$" \
|
|
-e "^${ROOT}/sbin/(ldconfig|sln)$"
|
|
)
|
|
[[ -z ${files} ]]
|
|
if ! eend $? ; then
|
|
eerror "Your system still has old SSP __guard symbols. You need to"
|
|
eerror "rebuild all the packages that provide these files first:"
|
|
eerror "${files}"
|
|
die "old __guard detected"
|
|
fi
|
|
fi
|
|
}
|