add glibc 2.10.1 for arm arch
git-svn-id: https://svn.disconnected-by-peer.at/svn/linamh/trunk/linamh@1552 6952d904-891a-0410-993b-d76249ca496b
This commit is contained in:
288
sys-libs/glibc/files/eblits/common.eblit
Normal file
288
sys-libs/glibc/files/eblits/common.eblit
Normal file
@@ -0,0 +1,288 @@
|
||||
# Copyright 1999-2007 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/sys-libs/glibc/files/eblits/common.eblit,v 1.9 2009/01/28 18:11:41 vapier Exp $
|
||||
|
||||
# We need to be able to set alternative headers for
|
||||
# compiling for non-native platform
|
||||
# Will also become useful for testing kernel-headers without screwing up
|
||||
# the whole system.
|
||||
# note: intentionally undocumented.
|
||||
alt_headers() {
|
||||
if [[ -z ${ALT_HEADERS} ]] ; then
|
||||
if is_crosscompile ; then
|
||||
ALT_HEADERS="/usr/${CTARGET}/usr/include"
|
||||
else
|
||||
ALT_HEADERS="/usr/include"
|
||||
fi
|
||||
fi
|
||||
echo "${ALT_HEADERS}"
|
||||
}
|
||||
alt_build_headers() {
|
||||
if [[ -z ${ALT_BUILD_HEADERS} ]] ; then
|
||||
ALT_BUILD_HEADERS=$(alt_headers)
|
||||
if tc-is-cross-compiler ; then
|
||||
ALT_BUILD_HEADERS=${ROOT}$(alt_headers)
|
||||
if [[ ! -e ${ALT_BUILD_HEADERS}/linux/version.h ]] ; then
|
||||
local header_path=$(echo '#include <linux/version.h>' | $(tc-getCPP ${CTARGET}) ${CFLAGS} 2>&1 | grep -o '[^"]*linux/version.h')
|
||||
ALT_BUILD_HEADERS=${header_path%/linux/version.h}
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
echo "${ALT_BUILD_HEADERS}"
|
||||
}
|
||||
|
||||
alt_usrlibdir() {
|
||||
if is_crosscompile ; then
|
||||
echo /usr/${CTARGET}/usr/$(get_libdir)
|
||||
else
|
||||
echo /usr/$(get_libdir)
|
||||
fi
|
||||
}
|
||||
|
||||
setup_flags() {
|
||||
# Make sure host make.conf doesn't pollute us
|
||||
if is_crosscompile || tc-is-cross-compiler ; then
|
||||
CHOST=${CTARGET} strip-unsupported-flags
|
||||
fi
|
||||
|
||||
# Store our CFLAGS because it's changed depending on which CTARGET
|
||||
# we are building when pulling glibc on a multilib profile
|
||||
CFLAGS_BASE=${CFLAGS_BASE-${CFLAGS}}
|
||||
CFLAGS=${CFLAGS_BASE}
|
||||
CXXFLAGS_BASE=${CXXFLAGS_BASE-${CXXFLAGS}}
|
||||
CXXFLAGS=${CXXFLAGS_BASE}
|
||||
ASFLAGS_BASE=${ASFLAGS_BASE-${ASFLAGS}}
|
||||
ASFLAGS=${ASFLAGS_BASE}
|
||||
|
||||
# Over-zealous CFLAGS can often cause problems. What may work for one
|
||||
# person may not work for another. To avoid a large influx of bugs
|
||||
# relating to failed builds, we strip most CFLAGS out to ensure as few
|
||||
# problems as possible.
|
||||
strip-flags
|
||||
strip-unsupported-flags
|
||||
filter-flags -m32 -m64 -mabi=*
|
||||
|
||||
unset CBUILD_OPT CTARGET_OPT
|
||||
if has_multilib_profile ; then
|
||||
CTARGET_OPT=$(get_abi_CTARGET)
|
||||
[[ -z ${CTARGET_OPT} ]] && CTARGET_OPT=$(get_abi_CHOST)
|
||||
fi
|
||||
|
||||
case $(tc-arch) in
|
||||
x86)
|
||||
# -march needed for #185404
|
||||
local t=${CTARGET_OPT:-${CTARGET}}
|
||||
t=${t%%-*}
|
||||
if ! echo "" | $(tc-getCC) ${CFLAGS} -E -dD - | grep -qs __${t}__ ; then
|
||||
filter-flags '-march=*'
|
||||
export CFLAGS="-march=${t} ${CFLAGS}"
|
||||
fi
|
||||
;;
|
||||
amd64)
|
||||
# Punt this when amd64's 2004.3 is removed
|
||||
CFLAGS_x86="-m32"
|
||||
|
||||
# -march needed for #185404
|
||||
local t=${CTARGET_OPT:-${CTARGET}}
|
||||
t=${t%%-*}
|
||||
if ! echo "" | $(tc-getCC) ${CFLAGS} ${CFLAGS_x86} -m32 -E -dD - | grep -qs __${t}__ ; then
|
||||
filter-flags '-march=*'
|
||||
export CFLAGS_x86="${CFLAGS_x86} -march=${t}"
|
||||
fi
|
||||
;;
|
||||
ppc)
|
||||
append-flags "-freorder-blocks"
|
||||
;;
|
||||
sparc)
|
||||
# Both sparc and sparc64 can use -fcall-used-g6. -g7 is bad, though.
|
||||
filter-flags "-fcall-used-g7"
|
||||
append-flags "-fcall-used-g6"
|
||||
filter-flags "-mvis"
|
||||
|
||||
GLIBCMAJOR=$(get_version_component_range 1 ${PV})
|
||||
GLIBCMINOR=$(get_version_component_range 2 ${PV})
|
||||
|
||||
# set CTARGET_OPT so glibc can use cpu-specific .S files for better performance
|
||||
# - UltraSPARC T1 (niagara) support requires >= glibc 2.8
|
||||
# - UltraSPARC T2 (niagara2) support requires >= glibc 2.7
|
||||
|
||||
if is_crosscompile || [[ ${PROFILE_ARCH} == "sparc64" ]] || { has_multilib_profile && ! tc-is-cross-compiler; } ; then
|
||||
case ${ABI} in
|
||||
sparc64)
|
||||
filter-flags -Wa,-xarch -Wa,-A
|
||||
|
||||
if is-flagq "-mcpu=niagara2" && [[ ${GLIBCMAJOR}.${GLIBCMINOR} > 2.7 ]] ; then
|
||||
CTARGET_OPT="sparc64v2-unknown-linux-gnu"
|
||||
append-flags "-Wa,-xarch=v9b"
|
||||
export ASFLAGS="${ASFLAGS} -Wa,-xarch=v9b"
|
||||
elif { is-flagq "-mcpu=niagara" || is-flagq "-mcpu=niagara2" ; } && [[ ${GLIBCMAJOR}.${GLIBCMINOR} > 2.6 ]] ; then
|
||||
CTARGET_OPT="sparc64v-unknown-linux-gnu"
|
||||
append-flags "-Wa,-xarch=v9b"
|
||||
export ASFLAGS="${ASFLAGS} -Wa,-xarch=v9b"
|
||||
elif is-flagq "-mcpu=ultrasparc3" || is-flagq "-mcpu=niagara" || is-flagq "-mcpu=niagara2"; then
|
||||
CTARGET_OPT="sparc64b-unknown-linux-gnu"
|
||||
append-flags "-Wa,-xarch=v9b"
|
||||
export ASFLAGS="${ASFLAGS} -Wa,-xarch=v9b"
|
||||
else
|
||||
CTARGET_OPT="sparc64-unknown-linux-gnu"
|
||||
append-flags "-Wa,-xarch=v9a"
|
||||
export ASFLAGS="${ASFLAGS} -Wa,-xarch=v9a"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if is-flagq "-mcpu=niagara2" && [[ ${GLIBCMAJOR}.${GLIBCMINOR} > 2.7 ]] ; then
|
||||
CTARGET_OPT="sparcv9v2-unknown-linux-gnu"
|
||||
elif { is-flagq "-mcpu=niagara" || is-flagq "-mcpu=niagara2" ; } && [[ ${GLIBCMAJOR}.${GLIBCMINOR} > 2.6 ]] ; then
|
||||
CTARGET_OPT="sparcv9v-unknown-linux-gnu"
|
||||
elif is-flagq "-mcpu=ultrasparc3" || is-flagq "-mcpu=niagara" || is-flagq "-mcpu=niagara2"; then
|
||||
CTARGET_OPT="sparcv9b-unknown-linux-gnu"
|
||||
else
|
||||
CTARGET_OPT="sparcv9-unknown-linux-gnu"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
else
|
||||
if is-flagq "-mcpu=niagara2" && [[ ${GLIBCMAJOR}.${GLIBCMINOR} > 2.7 ]] ; then
|
||||
CTARGET_OPT="sparcv9v2-unknown-linux-gnu"
|
||||
elif { is-flagq "-mcpu=niagara" || is-flagq "-mcpu=niagara2" ; } && [[ ${GLIBCMAJOR}.${GLIBCMINOR} > 2.6 ]] ; then
|
||||
CTARGET_OPT="sparcv9v-unknown-linux-gnu"
|
||||
elif is-flagq "-mcpu=ultrasparc3" || is-flagq "-mcpu=niagara" || is-flagq "-mcpu=niagara2"; then
|
||||
CTARGET_OPT="sparcv9b-unknown-linux-gnu"
|
||||
elif { is_crosscompile && want_nptl; } || is-flagq "-mcpu=ultrasparc2" || is-flagq "-mcpu=ultrasparc"; then
|
||||
CTARGET_OPT="sparcv9-unknown-linux-gnu"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ -n ${CTARGET_OPT} && ${CBUILD} == ${CHOST} ]] && ! is_crosscompile; then
|
||||
CBUILD_OPT=${CTARGET_OPT}
|
||||
fi
|
||||
|
||||
# Lock glibc at -O2 -- linuxthreads needs it and we want to be
|
||||
# conservative here. -fno-strict-aliasing is to work around #155906
|
||||
filter-flags -O?
|
||||
append-flags -O2 -fno-strict-aliasing
|
||||
|
||||
# Cant build glibc itself with fortify code
|
||||
append-cppflags -U_FORTIFY_SOURCE
|
||||
|
||||
# building glibc with SSP is fraught with difficulty, especially
|
||||
# due to __stack_chk_fail_local which would mean significant changes
|
||||
# to the glibc build process. See bug #94325
|
||||
filter-flags -fstack-protector
|
||||
|
||||
if use hardened && gcc-specs-pie ; then
|
||||
# Force PIC macro definition for all compilations since they're all
|
||||
# either -fPIC or -fPIE with the default-PIE compiler.
|
||||
append-cppflags -DPIC
|
||||
else
|
||||
# Don't build -fPIE without the default-PIE compiler and the
|
||||
# hardened-pie patch
|
||||
filter-flags -fPIE
|
||||
fi
|
||||
}
|
||||
|
||||
want_nptl() {
|
||||
[[ -z ${LT_VER} ]] && return 0
|
||||
want_tls || return 1
|
||||
use nptl || return 1
|
||||
|
||||
# Only list the arches that cannot do NPTL
|
||||
case $(tc-arch) in
|
||||
m68k) return 1;;
|
||||
sparc)
|
||||
# >= v9 is needed for nptl.
|
||||
[[ ${PROFILE_ARCH} == "sparc" ]] && return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
want_linuxthreads() {
|
||||
[[ -z ${LT_VER} ]] && return 1
|
||||
! use nptlonly && return 0
|
||||
want_nptl || return 0
|
||||
return 1
|
||||
}
|
||||
|
||||
want_tls() {
|
||||
# Archs that can use TLS (Thread Local Storage)
|
||||
case $(tc-arch) in
|
||||
sparc)
|
||||
# 2.3.6 should have tls support on sparc64
|
||||
# when using newer binutils
|
||||
case ${CTARGET/-*} in
|
||||
sparc64*) return 1 ;;
|
||||
*) return 0 ;;
|
||||
esac
|
||||
;;
|
||||
x86)
|
||||
# requires i486 or better #106556
|
||||
[[ ${CTARGET} == i[4567]86* ]] && return 0
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
want__thread() {
|
||||
want_tls || return 1
|
||||
|
||||
# For some reason --with-tls --with__thread is causing segfaults on sparc32.
|
||||
[[ ${PROFILE_ARCH} == "sparc" ]] && return 1
|
||||
|
||||
[[ -n ${WANT__THREAD} ]] && return ${WANT__THREAD}
|
||||
|
||||
echo 'extern __thread int i;' > "${T}"/test-__thread.c
|
||||
$(tc-getCC ${CTARGET}) -c "${T}"/test-__thread.c -o "${T}"/test-__thread.o &> /dev/null
|
||||
WANT__THREAD=$?
|
||||
rm -f "${T}"/test-__thread.[co]
|
||||
|
||||
return ${WANT__THREAD}
|
||||
}
|
||||
|
||||
use_multilib() {
|
||||
case ${CTARGET} in
|
||||
sparc*|mips64*|x86_64*|powerpc64*|s390x*)
|
||||
has_multilib_profile || use multilib ;;
|
||||
*) false ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Setup toolchain variables that would be defined in the profiles for these archs.
|
||||
setup_env() {
|
||||
# silly users
|
||||
unset LD_RUN_PATH
|
||||
|
||||
if is_crosscompile || tc-is-cross-compiler ; then
|
||||
multilib_env ${CTARGET}
|
||||
if ! use multilib ; then
|
||||
MULTILIB_ABIS=${DEFAULT_ABI}
|
||||
else
|
||||
MULTILIB_ABIS=${MULTILIB_ABIS:-${DEFAULT_ABI}}
|
||||
fi
|
||||
|
||||
# If the user has CFLAGS_<CTARGET> in their make.conf, use that,
|
||||
# and fall back on CFLAGS.
|
||||
local VAR=CFLAGS_${CTARGET//[-.]/_}
|
||||
CFLAGS=${!VAR-${CFLAGS}}
|
||||
fi
|
||||
|
||||
setup_flags
|
||||
|
||||
export ABI=${ABI:-${DEFAULT_ABI:-default}}
|
||||
|
||||
if is_crosscompile || tc-is-cross-compiler ; then
|
||||
local VAR=CFLAGS_${ABI}
|
||||
# We need to export CFLAGS with abi information in them because
|
||||
# glibc's configure script checks CFLAGS for some targets (like mips)
|
||||
export CFLAGS="${!VAR} ${CFLAGS}"
|
||||
fi
|
||||
}
|
||||
|
||||
just_headers() {
|
||||
is_crosscompile && use crosscompile_opts_headers-only
|
||||
}
|
||||
29
sys-libs/glibc/files/eblits/pkg_postinst.eblit
Normal file
29
sys-libs/glibc/files/eblits/pkg_postinst.eblit
Normal file
@@ -0,0 +1,29 @@
|
||||
# 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_postinst.eblit,v 1.1 2009/03/01 21:06:22 vapier Exp $
|
||||
|
||||
eblit-glibc-pkg_postinst() {
|
||||
# nothing to do if just installing headers
|
||||
just_headers && return
|
||||
|
||||
if ! tc-is-cross-compiler && [[ -x ${ROOT}/usr/sbin/iconvconfig ]] ; then
|
||||
# Generate fastloading iconv module configuration file.
|
||||
"${ROOT}"/usr/sbin/iconvconfig --prefix="${ROOT}"
|
||||
fi
|
||||
|
||||
if ! is_crosscompile && [[ ${ROOT} == "/" ]] ; then
|
||||
# Reload init ... if in a chroot or a diff init package, ignore
|
||||
# errors from this step #253697
|
||||
/sbin/telinit U 2>/dev/null
|
||||
|
||||
# if the host locales.gen contains no entries, we'll install everything
|
||||
local locale_list="${ROOT}etc/locale.gen"
|
||||
if [[ -z $(locale-gen --list --config "${locale_list}") ]] ; then
|
||||
ewarn "Generating all locales; edit /etc/locale.gen to save time/space"
|
||||
locale_list="${ROOT}usr/share/i18n/SUPPORTED"
|
||||
fi
|
||||
local x jobs
|
||||
for x in ${MAKEOPTS} ; do [[ ${x} == -j* ]] && jobs=${x#-j} ; done
|
||||
locale-gen -j ${jobs:-1} --config "${locale_list}"
|
||||
fi
|
||||
}
|
||||
80
sys-libs/glibc/files/eblits/pkg_preinst.eblit
Normal file
80
sys-libs/glibc/files/eblits/pkg_preinst.eblit
Normal file
@@ -0,0 +1,80 @@
|
||||
# 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
|
||||
}
|
||||
67
sys-libs/glibc/files/eblits/pkg_setup.eblit
Normal file
67
sys-libs/glibc/files/eblits/pkg_setup.eblit
Normal file
@@ -0,0 +1,67 @@
|
||||
# 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_setup.eblit,v 1.4 2009/08/21 05:46:04 vapier Exp $
|
||||
|
||||
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 [[ ${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
|
||||
|
||||
# Check for broken kernels #262698
|
||||
cd "${T}"
|
||||
printf '#include <pwd.h>\nint main(){return getpwuid(0)==0;}\n' > kern-clo-test.c
|
||||
emake kern-clo-test || die
|
||||
if ! ./kern-clo-test ; 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"
|
||||
die "keeping your system alive, say thank you"
|
||||
fi
|
||||
|
||||
# Check for broken kernels #279260
|
||||
cd "${T}"
|
||||
printf '#include <unistd.h>\n#include <sys/syscall.h>\nint main(){return syscall(1000)!=-1;}\n' > kern-enosys-test.c
|
||||
emake kern-enosys-test || die
|
||||
if ! ./kern-enosys-test ; 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 [[ -n ${LT_VER} ]] ; then
|
||||
if use nptlonly && ! use nptl ; then
|
||||
eerror "If you want nptlonly, add nptl to your USE too ;p"
|
||||
die "nptlonly without nptl"
|
||||
fi
|
||||
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"
|
||||
}
|
||||
204
sys-libs/glibc/files/eblits/src_compile.eblit
Normal file
204
sys-libs/glibc/files/eblits/src_compile.eblit
Normal file
@@ -0,0 +1,204 @@
|
||||
# Copyright 1999-2007 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/sys-libs/glibc/files/eblits/src_compile.eblit,v 1.9 2009/09/04 07:20:17 vapier Exp $
|
||||
|
||||
glibc_do_configure() {
|
||||
local myconf
|
||||
|
||||
# set addons
|
||||
pushd "${S}" > /dev/null
|
||||
local ADDONS=$(echo */configure | sed \
|
||||
-e 's:/configure::g' \
|
||||
-e 's:\(linuxthreads\|nptl\|rtkaio\|glibc-compat\)\( \|$\)::g' \
|
||||
-e 's: \+$::' \
|
||||
-e 's! !,!g' \
|
||||
-e 's!^!,!' \
|
||||
-e '/^,\*$/d')
|
||||
[[ -d ports ]] && ADDONS="${ADDONS},ports"
|
||||
popd > /dev/null
|
||||
|
||||
use nls || myconf="${myconf} --disable-nls"
|
||||
myconf="${myconf} $(use_enable hardened stackguard-randomization)"
|
||||
if [[ $(<"${T}"/.ssp.compat) == "yes" ]] ; then
|
||||
myconf="${myconf} --enable-old-ssp-compat"
|
||||
else
|
||||
myconf="${myconf} --disable-old-ssp-compat"
|
||||
fi
|
||||
|
||||
use glibc-omitfp && myconf="${myconf} --enable-omitfp"
|
||||
|
||||
[[ ${CTARGET//_/-} == *-softfloat-* ]] && myconf="${myconf} --without-fp"
|
||||
|
||||
if [[ $1 == "linuxthreads" ]] ; then
|
||||
if want_tls ; then
|
||||
myconf="${myconf} --with-tls"
|
||||
|
||||
if ! want__thread || use glibc-compat20 || [[ ${LT_KER_VER} == 2.[02].* ]] ; then
|
||||
myconf="${myconf} --without-__thread"
|
||||
else
|
||||
myconf="${myconf} --with-__thread"
|
||||
fi
|
||||
else
|
||||
myconf="${myconf} --without-tls --without-__thread"
|
||||
fi
|
||||
|
||||
myconf="${myconf} --disable-sanity-checks"
|
||||
myconf="${myconf} --enable-add-ons=linuxthreads${ADDONS}"
|
||||
myconf="${myconf} --enable-kernel=${LT_KER_VER}"
|
||||
elif [[ $1 == "nptl" ]] ; then
|
||||
myconf="${myconf} --enable-add-ons=nptl${ADDONS}"
|
||||
myconf="${myconf} --enable-kernel=${NPTL_KERN_VER}"
|
||||
else
|
||||
die "invalid pthread option"
|
||||
fi
|
||||
|
||||
# Since SELinux support is only required for nscd, only enable it if:
|
||||
# 1. USE selinux
|
||||
# 2. only for the primary ABI on multilib systems
|
||||
# 3. Not a crosscompile
|
||||
if ! is_crosscompile && use selinux ; then
|
||||
if use multilib || has_multilib_profile ; then
|
||||
if is_final_abi ; then
|
||||
myconf="${myconf} --with-selinux"
|
||||
else
|
||||
myconf="${myconf} --without-selinux"
|
||||
fi
|
||||
else
|
||||
myconf="${myconf} --with-selinux"
|
||||
fi
|
||||
else
|
||||
myconf="${myconf} --without-selinux"
|
||||
fi
|
||||
|
||||
myconf="${myconf}
|
||||
--without-cvs
|
||||
--enable-bind-now
|
||||
--build=${CBUILD_OPT:-${CBUILD}}
|
||||
--host=${CTARGET_OPT:-${CTARGET}}
|
||||
$(use_enable profile)
|
||||
$(use_with gd)
|
||||
--with-headers=$(alt_build_headers)
|
||||
--prefix=/usr
|
||||
--libdir=/usr/$(get_libdir)
|
||||
--mandir=/usr/share/man
|
||||
--infodir=/usr/share/info
|
||||
--libexecdir=/usr/$(get_libdir)/misc/glibc
|
||||
${EXTRA_ECONF}"
|
||||
|
||||
# There is no configure option for this and we need to export it
|
||||
# since the glibc build will re-run configure on itself
|
||||
export libc_cv_slibdir=/$(get_libdir)
|
||||
|
||||
has_version app-admin/eselect-compiler || export CC=$(tc-getCC ${CTARGET})
|
||||
|
||||
local GBUILDDIR=${WORKDIR}/build-${ABI}-${CTARGET}-$1
|
||||
mkdir -p "${GBUILDDIR}"
|
||||
cd "${GBUILDDIR}"
|
||||
einfo "Configuring GLIBC for $1 with: ${myconf// /\n\t\t}"
|
||||
"${S}"/configure ${myconf} || die "failed to configure glibc"
|
||||
|
||||
# since we'll be punting them for cross-compilers, and they can cause
|
||||
# problems (ia64+static), we'll just skip building altogether
|
||||
is_crosscompile && sed -i '1ibuild-programs = no' config.make
|
||||
}
|
||||
|
||||
toolchain-glibc_src_compile() {
|
||||
echo
|
||||
local v
|
||||
for v in ABI CBUILD CHOST CTARGET CBUILD_OPT CTARGET_OPT CC CFLAGS ; do
|
||||
einfo " $(printf '%15s' ${v}:) ${!v}"
|
||||
done
|
||||
echo
|
||||
|
||||
if want_linuxthreads ; then
|
||||
glibc_do_configure linuxthreads
|
||||
einfo "Building GLIBC with linuxthreads..."
|
||||
make PARALLELMFLAGS="${MAKEOPTS}" || die "make for ${ABI} failed"
|
||||
fi
|
||||
if want_nptl ; then
|
||||
# ... and then do the optional nptl build
|
||||
unset LD_ASSUME_KERNEL
|
||||
glibc_do_configure nptl
|
||||
einfo "Building GLIBC with NPTL..."
|
||||
make PARALLELMFLAGS="${MAKEOPTS}" || die "make for ${ABI} failed"
|
||||
fi
|
||||
}
|
||||
|
||||
toolchain-glibc_headers_compile() {
|
||||
local GBUILDDIR=${WORKDIR}/build-${ABI}-${CTARGET}-headers
|
||||
mkdir -p "${GBUILDDIR}"
|
||||
cd "${GBUILDDIR}"
|
||||
|
||||
# if we don't have a compiler yet, we cant really test it now ...
|
||||
# hopefully they don't affect header geneation, so let's hope for
|
||||
# the best here ...
|
||||
export \
|
||||
libc_cv_386_tls=yes \
|
||||
libc_cv_asm_cfi_directives=yes \
|
||||
libc_cv_broken_visibility_attribute=no \
|
||||
libc_cv_c_cleanup=yes \
|
||||
libc_cv_forced_unwind=yes \
|
||||
libc_cv_gcc___thread=yes \
|
||||
libc_cv_mlong_double_128=yes \
|
||||
libc_cv_mlong_double_128ibm=yes \
|
||||
libc_cv_ppc_machine=yes \
|
||||
libc_cv_visibility_attribute=yes \
|
||||
libc_cv_z_combreloc=yes \
|
||||
libc_cv_z_execstack=yes \
|
||||
libc_cv_z_initfirst=yes \
|
||||
libc_cv_z_nodelete=yes \
|
||||
libc_cv_z_nodlopen=yes \
|
||||
libc_cv_z_relro=yes
|
||||
|
||||
# Pick out the correct location for build headers
|
||||
local ports="" myconf="--disable-sanity-checks --enable-hacker-mode"
|
||||
[[ -d ${S}/ports ]] && ports=",ports"
|
||||
myconf="${myconf}
|
||||
--enable-add-ons=nptl${ports}
|
||||
--without-cvs
|
||||
--enable-bind-now
|
||||
--build=${CBUILD_OPT:-${CBUILD}}
|
||||
--host=${CTARGET_OPT:-${CTARGET}}
|
||||
--with-headers=$(alt_build_headers)
|
||||
--prefix=/usr
|
||||
${EXTRA_ECONF}"
|
||||
|
||||
# Nothing is compiled here which would affect the headers for the target.
|
||||
# so forcing CC/CFLAGS is sane. unless you dont have `gcc`. then i
|
||||
# dont care :p.
|
||||
einfo "Configuring GLIBC headers with: ${myconf// /\n\t\t}"
|
||||
CC=gcc \
|
||||
CFLAGS="-O1 -pipe" \
|
||||
"${S}"/configure ${myconf} || die "failed to configure glibc"
|
||||
}
|
||||
|
||||
eblit-glibc-src_compile() {
|
||||
if just_headers ; then
|
||||
toolchain-glibc_headers_compile
|
||||
return
|
||||
fi
|
||||
|
||||
setup_env
|
||||
|
||||
if [[ -z ${OABI} ]] ; then
|
||||
local abilist=""
|
||||
if has_multilib_profile ; then
|
||||
abilist=$(get_install_abis)
|
||||
einfo "Building multilib glibc for ABIs: ${abilist}"
|
||||
elif is_crosscompile || tc-is-cross-compiler ; then
|
||||
abilist=${DEFAULT_ABI}
|
||||
fi
|
||||
if [[ -n ${abilist} ]] ; then
|
||||
OABI=${ABI}
|
||||
for ABI in ${abilist} ; do
|
||||
export ABI
|
||||
src_compile
|
||||
done
|
||||
ABI=${OABI}
|
||||
unset OABI
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
toolchain-glibc_src_compile
|
||||
}
|
||||
250
sys-libs/glibc/files/eblits/src_install-2.6.eblit
Normal file
250
sys-libs/glibc/files/eblits/src_install-2.6.eblit
Normal file
@@ -0,0 +1,250 @@
|
||||
# Copyright 1999-2007 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/sys-libs/glibc/files/eblits/src_install-2.6.eblit,v 1.2 2008/06/29 16:39:23 vapier Exp $
|
||||
|
||||
toolchain-glibc_src_install() {
|
||||
# These should not be set, else the
|
||||
# zoneinfo do not always get installed ...
|
||||
unset LANGUAGE LANG LC_ALL
|
||||
|
||||
local GBUILDDIR
|
||||
if want_linuxthreads ; then
|
||||
GBUILDDIR=${WORKDIR}/build-${ABI}-${CTARGET}-linuxthreads
|
||||
else
|
||||
GBUILDDIR=${WORKDIR}/build-${ABI}-${CTARGET}-nptl
|
||||
fi
|
||||
|
||||
local install_root=${D}
|
||||
is_crosscompile && install_root="${install_root}/usr/${CTARGET}"
|
||||
if want_linuxthreads ; then
|
||||
cd "${WORKDIR}"/build-${ABI}-${CTARGET}-linuxthreads
|
||||
einfo "Installing GLIBC ${ABI} with linuxthreads ..."
|
||||
make PARALLELMFLAGS="${MAKEOPTS}" \
|
||||
install_root="${install_root}" \
|
||||
install || die
|
||||
else # nptlonly
|
||||
cd "${WORKDIR}"/build-${ABI}-${CTARGET}-nptl
|
||||
einfo "Installing GLIBC ${ABI} with NPTL ..."
|
||||
make PARALLELMFLAGS="${MAKEOPTS}" \
|
||||
install_root="${install_root}" \
|
||||
install || die
|
||||
fi
|
||||
|
||||
if is_crosscompile ; then
|
||||
# punt all the junk not needed by a cross-compiler
|
||||
cd "${D}"/usr/${CTARGET} || die
|
||||
rm -rf ./{,usr/}{bin,etc,sbin,share} ./{,usr/}*/{gconv,misc}
|
||||
fi
|
||||
|
||||
if want_linuxthreads && want_nptl ; then
|
||||
einfo "Installing NPTL to $(alt_libdir)/tls/..."
|
||||
cd "${WORKDIR}"/build-${ABI}-${CTARGET}-nptl
|
||||
dodir $(alt_libdir)/tls $(alt_usrlibdir)/nptl
|
||||
|
||||
local l src_lib
|
||||
for l in libc libm librt libpthread libthread_db ; do
|
||||
# take care of shared lib first ...
|
||||
l=${l}.so
|
||||
if [[ -e ${l} ]] ; then
|
||||
src_lib=${l}
|
||||
else
|
||||
src_lib=$(eval echo */${l})
|
||||
fi
|
||||
cp -a ${src_lib} "${D}"$(alt_libdir)/tls/${l} || die "copying nptl ${l}"
|
||||
fperms a+rx $(alt_libdir)/tls/${l}
|
||||
dosym ${l} $(alt_libdir)/tls/$(scanelf -qSF'%S#F' ${src_lib})
|
||||
|
||||
# then grab the linker script or the symlink ...
|
||||
if [[ -L ${D}$(alt_usrlibdir)/${l} ]] ; then
|
||||
dosym $(alt_libdir)/tls/${l} $(alt_usrlibdir)/nptl/${l}
|
||||
else
|
||||
sed \
|
||||
-e "s:/${l}:/tls/${l}:g" \
|
||||
-e "s:/${l/%.so/_nonshared.a}:/nptl/${l/%.so/_nonshared.a}:g" \
|
||||
"${D}"$(alt_usrlibdir)/${l} > "${D}"$(alt_usrlibdir)/nptl/${l}
|
||||
fi
|
||||
|
||||
# then grab the static lib ...
|
||||
src_lib=${src_lib/%.so/.a}
|
||||
[[ ! -e ${src_lib} ]] && src_lib=${src_lib/%.a/_pic.a}
|
||||
cp -a ${src_lib} "${D}"$(alt_usrlibdir)/nptl/ || die "copying nptl ${src_lib}"
|
||||
src_lib=${src_lib/%.a/_nonshared.a}
|
||||
if [[ -e ${src_lib} ]] ; then
|
||||
cp -a ${src_lib} "${D}"$(alt_usrlibdir)/nptl/ || die "copying nptl ${src_lib}"
|
||||
fi
|
||||
done
|
||||
|
||||
# use the nptl linker instead of the linuxthreads one as the linuxthreads
|
||||
# one may lack TLS support and that can be really bad for business
|
||||
cp -a elf/ld.so "${D}"$(alt_libdir)/$(scanelf -qSF'%S#F' elf/ld.so) || die "copying nptl interp"
|
||||
fi
|
||||
|
||||
# We'll take care of the cache ourselves
|
||||
rm -f "${D}"/etc/ld.so.cache
|
||||
|
||||
# Some things want this, notably ash.
|
||||
dosym libbsd-compat.a $(alt_usrlibdir)/libbsd.a
|
||||
|
||||
# Handle includes for different ABIs
|
||||
prep_ml_includes $(alt_headers)
|
||||
|
||||
# When cross-compiling for a non-multilib setup, make sure we have
|
||||
# lib and a proper symlink setup
|
||||
if is_crosscompile && ! use multilib && ! has_multilib_profile && [[ $(get_libdir) != "lib" ]] ; then
|
||||
cd "${D}"$(alt_libdir)/..
|
||||
mv $(get_libdir) lib || die
|
||||
ln -s lib $(get_libdir) || die
|
||||
cd "${D}"$(alt_usrlibdir)/..
|
||||
mv $(get_libdir) lib || die
|
||||
ln -s lib $(get_libdir) || die
|
||||
fi
|
||||
|
||||
#################################################################
|
||||
# EVERYTHING AFTER THIS POINT IS FOR NATIVE GLIBC INSTALLS ONLY #
|
||||
# Make sure we install some symlink hacks so that when we build
|
||||
# a 2nd stage cross-compiler, gcc finds the target system
|
||||
# headers correctly. See gcc/doc/gccinstall.info
|
||||
if is_crosscompile ; then
|
||||
dosym usr/include /usr/${CTARGET}/sys-include
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Everything past this point just needs to be done once ...
|
||||
is_final_abi || return 0
|
||||
|
||||
# Make sure the non-native interp can be found on multilib systems
|
||||
if has_multilib_profile ; then
|
||||
case $(tc-arch) in
|
||||
amd64)
|
||||
[[ ! -e ${D}/lib ]] && dosym $(get_abi_LIBDIR amd64) /lib
|
||||
dosym ../$(get_abi_LIBDIR x86)/ld-linux.so.2 /lib/ld-linux.so.2
|
||||
;;
|
||||
ppc64)
|
||||
[[ ! -e ${D}/lib ]] && dosym $(get_abi_LIBDIR ppc64) /lib
|
||||
dosym ../$(get_abi_LIBDIR ppc)/ld.so.1 /lib/ld.so.1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Files for Debian-style locale updating
|
||||
dodir /usr/share/i18n
|
||||
sed \
|
||||
-e "/^#/d" \
|
||||
-e "/SUPPORTED-LOCALES=/d" \
|
||||
-e "s: \\\\::g" -e "s:/: :g" \
|
||||
"${S}"/localedata/SUPPORTED > "${D}"/usr/share/i18n/SUPPORTED \
|
||||
|| die "generating /usr/share/i18n/SUPPORTED failed"
|
||||
cd "${WORKDIR}"/extra/locale
|
||||
dosbin locale-gen || die
|
||||
doman *.[0-8]
|
||||
insinto /etc
|
||||
doins locale.gen || die
|
||||
|
||||
# Make sure all the ABI's can find the locales and so we only
|
||||
# have to generate one set
|
||||
local a
|
||||
keepdir /usr/$(get_libdir)/locale
|
||||
for a in $(get_install_abis) ; do
|
||||
if [[ ! -e ${D}/usr/$(get_abi_LIBDIR ${a})/locale ]] ; then
|
||||
dosym /usr/$(get_libdir)/locale /usr/$(get_abi_LIBDIR ${a})/locale
|
||||
fi
|
||||
done
|
||||
|
||||
if ! has noinfo ${FEATURES} && [[ -n ${INFOPAGE_VER} ]] ; then
|
||||
einfo "Installing info pages..."
|
||||
|
||||
make \
|
||||
-C "${GBUILDDIR}" \
|
||||
PARALLELMFLAGS="${MAKEOPTS}" \
|
||||
install_root="${install_root}" \
|
||||
info -i || die
|
||||
fi
|
||||
|
||||
if [[ -n ${MANPAGE_VER} ]] ; then
|
||||
einfo "Installing man pages..."
|
||||
|
||||
# Install linuxthreads man pages even if nptl is enabled
|
||||
cd "${WORKDIR}"/man
|
||||
doman *.3thr
|
||||
fi
|
||||
|
||||
cd "${S}"
|
||||
|
||||
# Install misc network config files
|
||||
insinto /etc
|
||||
doins nscd/nscd.conf posix/gai.conf nss/nsswitch.conf || die
|
||||
doins "${WORKDIR}"/extra/etc/*.conf || die
|
||||
doinitd "${WORKDIR}"/extra/etc/nscd || die
|
||||
|
||||
dodoc BUGS ChangeLog* CONFORMANCE FAQ NEWS NOTES PROJECTS README*
|
||||
|
||||
# Prevent overwriting of the /etc/localtime symlink. We'll handle the
|
||||
# creation of the "factory" symlink in pkg_postinst().
|
||||
rm -f "${D}"/etc/localtime
|
||||
}
|
||||
|
||||
toolchain-glibc_headers_install() {
|
||||
local GBUILDDIR=${WORKDIR}/build-${ABI}-${CTARGET}-headers
|
||||
cd "${GBUILDDIR}"
|
||||
make install_root="${D}/usr/${CTARGET}" install-headers || die "install-headers failed"
|
||||
# Copy over headers that are not part of install-headers ... these
|
||||
# are pretty much taken verbatim from crosstool, see it for more details
|
||||
insinto $(alt_headers)/bits
|
||||
doins misc/syscall-list.h bits/stdio_lim.h || die "doins include bits"
|
||||
insinto $(alt_headers)/gnu
|
||||
doins "${S}"/include/gnu/stubs.h || die "doins include gnu"
|
||||
# Make sure we install the sys-include symlink so that when
|
||||
# we build a 2nd stage cross-compiler, gcc finds the target
|
||||
# system headers correctly. See gcc/doc/gccinstall.info
|
||||
dosym usr/include /usr/${CTARGET}/sys-include
|
||||
}
|
||||
|
||||
src_strip() {
|
||||
# gdb is lame and requires some debugging information to remain in
|
||||
# libpthread, so we need to strip it by hand. libthread_db makes no
|
||||
# sense stripped as it is only used when debugging.
|
||||
local pthread=$(hasq splitdebug ${FEATURES} && echo "libthread_db" || echo "lib{pthread,thread_db}")
|
||||
env \
|
||||
-uRESTRICT \
|
||||
CHOST=${CTARGET} \
|
||||
STRIP_MASK="/*/{,tls/}${pthread}*" \
|
||||
prepallstrip
|
||||
# if user has stripping enabled and does not have split debug turned on,
|
||||
# then leave the debugging sections in libpthread.
|
||||
if ! hasq nostrip ${FEATURES} && ! hasq splitdebug ${FEATURES} ; then
|
||||
${STRIP:-${CTARGET}-strip} --strip-debug "${D}"/*/libpthread-*.so
|
||||
fi
|
||||
}
|
||||
|
||||
eblit-glibc-src_install() {
|
||||
if just_headers ; then
|
||||
toolchain-glibc_headers_install
|
||||
return
|
||||
fi
|
||||
|
||||
setup_env
|
||||
|
||||
if [[ -z ${OABI} ]] ; then
|
||||
local abilist=""
|
||||
if has_multilib_profile ; then
|
||||
abilist=$(get_install_abis)
|
||||
einfo "Installing multilib glibc for ABIs: ${abilist}"
|
||||
elif is_crosscompile || tc-is-cross-compiler ; then
|
||||
abilist=${DEFAULT_ABI}
|
||||
fi
|
||||
if [[ -n ${abilist} ]] ; then
|
||||
OABI=${ABI}
|
||||
for ABI in ${abilist} ; do
|
||||
export ABI
|
||||
eblit-glibc-src_install
|
||||
done
|
||||
ABI=${OABI}
|
||||
unset OABI
|
||||
src_strip
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
toolchain-glibc_src_install
|
||||
[[ -z ${OABI} ]] && src_strip
|
||||
}
|
||||
247
sys-libs/glibc/files/eblits/src_install.eblit
Normal file
247
sys-libs/glibc/files/eblits/src_install.eblit
Normal file
@@ -0,0 +1,247 @@
|
||||
# Copyright 1999-2007 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/sys-libs/glibc/files/eblits/src_install.eblit,v 1.7 2008/12/29 09:22:45 vapier Exp $
|
||||
|
||||
toolchain-glibc_src_install() {
|
||||
local GBUILDDIR
|
||||
if want_linuxthreads ; then
|
||||
GBUILDDIR=${WORKDIR}/build-${ABI}-${CTARGET}-linuxthreads
|
||||
else
|
||||
GBUILDDIR=${WORKDIR}/build-${ABI}-${CTARGET}-nptl
|
||||
fi
|
||||
|
||||
local install_root=${D}
|
||||
is_crosscompile && install_root="${install_root}/usr/${CTARGET}"
|
||||
if want_linuxthreads ; then
|
||||
cd "${WORKDIR}"/build-${ABI}-${CTARGET}-linuxthreads
|
||||
einfo "Installing GLIBC ${ABI} with linuxthreads ..."
|
||||
else # nptlonly
|
||||
cd "${WORKDIR}"/build-${ABI}-${CTARGET}-nptl
|
||||
einfo "Installing GLIBC ${ABI} with NPTL ..."
|
||||
fi
|
||||
make PARALLELMFLAGS="${MAKEOPTS}" \
|
||||
install_root="${install_root}" \
|
||||
install || die
|
||||
|
||||
if is_crosscompile ; then
|
||||
# punt all the junk not needed by a cross-compiler
|
||||
cd "${D}"/usr/${CTARGET} || die
|
||||
rm -rf ./{,usr/}{bin,etc,sbin,share} ./{,usr/}*/{gconv,misc}
|
||||
fi
|
||||
|
||||
if want_linuxthreads && want_nptl ; then
|
||||
einfo "Installing NPTL to $(alt_libdir)/tls/..."
|
||||
cd "${WORKDIR}"/build-${ABI}-${CTARGET}-nptl
|
||||
dodir $(alt_libdir)/tls $(alt_usrlibdir)/nptl
|
||||
|
||||
local l src_lib
|
||||
for l in libc libm librt libpthread libthread_db ; do
|
||||
# take care of shared lib first ...
|
||||
l=${l}.so
|
||||
if [[ -e ${l} ]] ; then
|
||||
src_lib=${l}
|
||||
else
|
||||
src_lib=$(eval echo */${l})
|
||||
fi
|
||||
cp -a ${src_lib} "${D}"$(alt_libdir)/tls/${l} || die "copying nptl ${l}"
|
||||
fperms a+rx $(alt_libdir)/tls/${l}
|
||||
dosym ${l} $(alt_libdir)/tls/$(scanelf -qSF'%S#F' ${src_lib})
|
||||
|
||||
# then grab the linker script or the symlink ...
|
||||
if [[ -L ${D}$(alt_usrlibdir)/${l} ]] ; then
|
||||
dosym $(alt_libdir)/tls/${l} $(alt_usrlibdir)/nptl/${l}
|
||||
else
|
||||
sed \
|
||||
-e "s:/${l}:/tls/${l}:g" \
|
||||
-e "s:/${l/%.so/_nonshared.a}:/nptl/${l/%.so/_nonshared.a}:g" \
|
||||
"${D}"$(alt_usrlibdir)/${l} > "${D}"$(alt_usrlibdir)/nptl/${l}
|
||||
fi
|
||||
|
||||
# then grab the static lib ...
|
||||
src_lib=${src_lib/%.so/.a}
|
||||
[[ ! -e ${src_lib} ]] && src_lib=${src_lib/%.a/_pic.a}
|
||||
cp -a ${src_lib} "${D}"$(alt_usrlibdir)/nptl/ || die "copying nptl ${src_lib}"
|
||||
src_lib=${src_lib/%.a/_nonshared.a}
|
||||
if [[ -e ${src_lib} ]] ; then
|
||||
cp -a ${src_lib} "${D}"$(alt_usrlibdir)/nptl/ || die "copying nptl ${src_lib}"
|
||||
fi
|
||||
done
|
||||
|
||||
# use the nptl linker instead of the linuxthreads one as the linuxthreads
|
||||
# one may lack TLS support and that can be really bad for business
|
||||
cp -a elf/ld.so "${D}"$(alt_libdir)/$(scanelf -qSF'%S#F' elf/ld.so) || die "copying nptl interp"
|
||||
fi
|
||||
|
||||
# We'll take care of the cache ourselves
|
||||
rm -f "${D}"/etc/ld.so.cache
|
||||
|
||||
# Some things want this, notably ash.
|
||||
dosym libbsd-compat.a $(alt_usrlibdir)/libbsd.a
|
||||
|
||||
# Handle includes for different ABIs if glibc itself doesn't do it
|
||||
# XXX: curr glibc should finally handle all of them correctly
|
||||
#case $(tc-arch) in
|
||||
# amd64|mips|ppc|s390) ;;
|
||||
# *) prep_ml_includes $(alt_headers) ;;
|
||||
#esac
|
||||
|
||||
# When cross-compiling for a non-multilib setup, make sure we have
|
||||
# lib and a proper symlink setup
|
||||
if is_crosscompile && ! use multilib && ! has_multilib_profile && [[ $(get_libdir) != "lib" ]] ; then
|
||||
cd "${D}"$(alt_libdir)/..
|
||||
mv $(get_libdir) lib || die
|
||||
ln -s lib $(get_libdir) || die
|
||||
cd "${D}"$(alt_usrlibdir)/..
|
||||
mv $(get_libdir) lib || die
|
||||
ln -s lib $(get_libdir) || die
|
||||
fi
|
||||
|
||||
#################################################################
|
||||
# EVERYTHING AFTER THIS POINT IS FOR NATIVE GLIBC INSTALLS ONLY #
|
||||
# Make sure we install some symlink hacks so that when we build
|
||||
# a 2nd stage cross-compiler, gcc finds the target system
|
||||
# headers correctly. See gcc/doc/gccinstall.info
|
||||
if is_crosscompile ; then
|
||||
dosym usr/include /usr/${CTARGET}/sys-include
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Everything past this point just needs to be done once ...
|
||||
is_final_abi || return 0
|
||||
|
||||
# Make sure the non-native interp can be found on multilib systems
|
||||
if has_multilib_profile ; then
|
||||
case $(tc-arch) in
|
||||
amd64)
|
||||
[[ ! -e ${D}/lib ]] && dosym $(get_abi_LIBDIR amd64) /lib
|
||||
dosym ../$(get_abi_LIBDIR x86)/ld-linux.so.2 /lib/ld-linux.so.2
|
||||
;;
|
||||
ppc64)
|
||||
[[ ! -e ${D}/lib ]] && dosym $(get_abi_LIBDIR ppc64) /lib
|
||||
dosym ../$(get_abi_LIBDIR ppc)/ld.so.1 /lib/ld.so.1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Files for Debian-style locale updating
|
||||
dodir /usr/share/i18n
|
||||
sed \
|
||||
-e "/^#/d" \
|
||||
-e "/SUPPORTED-LOCALES=/d" \
|
||||
-e "s: \\\\::g" -e "s:/: :g" \
|
||||
"${S}"/localedata/SUPPORTED > "${D}"/usr/share/i18n/SUPPORTED \
|
||||
|| die "generating /usr/share/i18n/SUPPORTED failed"
|
||||
cd "${WORKDIR}"/extra/locale
|
||||
dosbin locale-gen || die
|
||||
doman *.[0-8]
|
||||
insinto /etc
|
||||
doins locale.gen || die
|
||||
|
||||
# Make sure all the ABI's can find the locales and so we only
|
||||
# have to generate one set
|
||||
local a
|
||||
keepdir /usr/$(get_libdir)/locale
|
||||
for a in $(get_install_abis) ; do
|
||||
if [[ ! -e ${D}/usr/$(get_abi_LIBDIR ${a})/locale ]] ; then
|
||||
dosym /usr/$(get_libdir)/locale /usr/$(get_abi_LIBDIR ${a})/locale
|
||||
fi
|
||||
done
|
||||
|
||||
if ! has noinfo ${FEATURES} && [[ -n ${INFOPAGE_VER} ]] ; then
|
||||
einfo "Installing info pages..."
|
||||
|
||||
make \
|
||||
-C "${GBUILDDIR}" \
|
||||
PARALLELMFLAGS="${MAKEOPTS}" \
|
||||
install_root="${install_root}" \
|
||||
info -i || die
|
||||
fi
|
||||
|
||||
if [[ -n ${MANPAGE_VER} ]] ; then
|
||||
einfo "Installing man pages..."
|
||||
|
||||
# Install linuxthreads man pages even if nptl is enabled
|
||||
cd "${WORKDIR}"/man
|
||||
doman *.3thr
|
||||
fi
|
||||
|
||||
cd "${S}"
|
||||
|
||||
# Install misc network config files
|
||||
insinto /etc
|
||||
doins nscd/nscd.conf posix/gai.conf nss/nsswitch.conf || die
|
||||
doins "${WORKDIR}"/extra/etc/*.conf || die
|
||||
doinitd "${WORKDIR}"/extra/etc/nscd || die
|
||||
|
||||
dodoc BUGS ChangeLog* CONFORMANCE FAQ NEWS NOTES PROJECTS README*
|
||||
|
||||
# Prevent overwriting of the /etc/localtime symlink. We'll handle the
|
||||
# creation of the "factory" symlink in pkg_postinst().
|
||||
rm -f "${D}"/etc/localtime
|
||||
}
|
||||
|
||||
toolchain-glibc_headers_install() {
|
||||
local GBUILDDIR=${WORKDIR}/build-${ABI}-${CTARGET}-headers
|
||||
cd "${GBUILDDIR}"
|
||||
make install_root="${D}/usr/${CTARGET}" install-headers || die "install-headers failed"
|
||||
# Copy over headers that are not part of install-headers ... these
|
||||
# are pretty much taken verbatim from crosstool, see it for more details
|
||||
insinto $(alt_headers)/bits
|
||||
doins misc/syscall-list.h bits/stdio_lim.h || die "doins include bits"
|
||||
insinto $(alt_headers)/gnu
|
||||
doins "${S}"/include/gnu/stubs.h || die "doins include gnu"
|
||||
# Make sure we install the sys-include symlink so that when
|
||||
# we build a 2nd stage cross-compiler, gcc finds the target
|
||||
# system headers correctly. See gcc/doc/gccinstall.info
|
||||
dosym usr/include /usr/${CTARGET}/sys-include
|
||||
}
|
||||
|
||||
src_strip() {
|
||||
# gdb is lame and requires some debugging information to remain in
|
||||
# libpthread, so we need to strip it by hand. libthread_db makes no
|
||||
# sense stripped as it is only used when debugging.
|
||||
local pthread=$(hasq splitdebug ${FEATURES} && echo "libthread_db" || echo "lib{pthread,thread_db}")
|
||||
env \
|
||||
-uRESTRICT \
|
||||
CHOST=${CTARGET} \
|
||||
STRIP_MASK="/*/{,tls/}${pthread}*" \
|
||||
prepallstrip
|
||||
# if user has stripping enabled and does not have split debug turned on,
|
||||
# then leave the debugging sections in libpthread.
|
||||
if ! hasq nostrip ${FEATURES} && ! hasq splitdebug ${FEATURES} ; then
|
||||
${STRIP:-${CTARGET}-strip} --strip-debug "${D}"/*/libpthread-*.so
|
||||
fi
|
||||
}
|
||||
|
||||
eblit-glibc-src_install() {
|
||||
if just_headers ; then
|
||||
toolchain-glibc_headers_install
|
||||
return
|
||||
fi
|
||||
|
||||
setup_env
|
||||
|
||||
if [[ -z ${OABI} ]] ; then
|
||||
local abilist=""
|
||||
if has_multilib_profile ; then
|
||||
abilist=$(get_install_abis)
|
||||
einfo "Installing multilib glibc for ABIs: ${abilist}"
|
||||
elif is_crosscompile || tc-is-cross-compiler ; then
|
||||
abilist=${DEFAULT_ABI}
|
||||
fi
|
||||
if [[ -n ${abilist} ]] ; then
|
||||
OABI=${ABI}
|
||||
for ABI in ${abilist} ; do
|
||||
export ABI
|
||||
eblit-glibc-src_install
|
||||
done
|
||||
ABI=${OABI}
|
||||
unset OABI
|
||||
src_strip
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
toolchain-glibc_src_install
|
||||
[[ -z ${OABI} ]] && src_strip
|
||||
}
|
||||
42
sys-libs/glibc/files/eblits/src_test.eblit
Normal file
42
sys-libs/glibc/files/eblits/src_test.eblit
Normal file
@@ -0,0 +1,42 @@
|
||||
# Copyright 1999-2007 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/sys-libs/glibc/files/eblits/src_test.eblit,v 1.3 2008/03/23 18:06:18 vapier Exp $
|
||||
|
||||
toolchain-glibc_src_test() {
|
||||
cd "${WORKDIR}"/build-${ABI}-${CTARGET}-$1 || die "cd build-${ABI}-${CTARGET}-$1"
|
||||
unset LD_ASSUME_KERNEL
|
||||
make check && return 0
|
||||
einfo "make check failed - re-running with --keep-going to get the rest of the results"
|
||||
make -k check
|
||||
ewarn "make check failed for ${ABI}-${CTARGET}-$1"
|
||||
return 1
|
||||
}
|
||||
|
||||
eblit-glibc-src_test() {
|
||||
local ret=0
|
||||
|
||||
setup_env
|
||||
|
||||
# give tests more time to complete
|
||||
export TIMEOUTFACTOR=5
|
||||
|
||||
if [[ -z ${OABI} ]] && has_multilib_profile ; then
|
||||
OABI=${ABI}
|
||||
einfo "Testing multilib glibc for ABIs: $(get_install_abis)"
|
||||
for ABI in $(get_install_abis) ; do
|
||||
export ABI
|
||||
einfo " Testing ${ABI} glibc"
|
||||
src_test
|
||||
((ret+=$?))
|
||||
done
|
||||
ABI=${OABI}
|
||||
unset OABI
|
||||
[[ ${ret} -ne 0 ]] \
|
||||
&& die "tests failed" \
|
||||
|| return 0
|
||||
fi
|
||||
|
||||
want_linuxthreads && toolchain-glibc_src_test linuxthreads ; ((ret+=$?))
|
||||
want_nptl && toolchain-glibc_src_test nptl ; ((ret+=$?))
|
||||
return ${ret}
|
||||
}
|
||||
168
sys-libs/glibc/files/eblits/src_unpack.eblit
Normal file
168
sys-libs/glibc/files/eblits/src_unpack.eblit
Normal file
@@ -0,0 +1,168 @@
|
||||
# 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/src_unpack.eblit,v 1.8 2009/05/17 22:17:56 vapier Exp $
|
||||
|
||||
int_to_KV() {
|
||||
local version=$1 major minor micro
|
||||
major=$((version / 65536))
|
||||
minor=$(((version % 65536) / 256))
|
||||
micro=$((version % 256))
|
||||
echo ${major}.${minor}.${micro}
|
||||
}
|
||||
|
||||
eend_KV() {
|
||||
[[ $(KV_to_int $1) -ge $(KV_to_int $2) ]]
|
||||
eend $?
|
||||
}
|
||||
|
||||
get_kheader_version() {
|
||||
printf '#include <linux/version.h>\nLINUX_VERSION_CODE\n' | \
|
||||
$(tc-getCPP ${CTARGET}) -I "$(alt_build_headers)" | \
|
||||
tail -n 1
|
||||
}
|
||||
|
||||
check_nptl_support() {
|
||||
# don't care about the compiler here as we arent using it
|
||||
just_headers && return
|
||||
|
||||
local run_kv build_kv want_kv
|
||||
run_kv=$(int_to_KV $(get_KV))
|
||||
build_kv=$(int_to_KV $(get_kheader_version))
|
||||
want_kv=${NPTL_KERN_VER}
|
||||
|
||||
ebegin "Checking gcc for __thread support"
|
||||
if ! eend $(want__thread ; echo $?) ; then
|
||||
echo
|
||||
eerror "Could not find a gcc that supports the __thread directive!"
|
||||
eerror "Please update your binutils/gcc and try again."
|
||||
die "No __thread support in gcc!"
|
||||
fi
|
||||
|
||||
if ! is_crosscompile && ! tc-is-cross-compiler ; then
|
||||
# Building fails on an non-supporting kernel
|
||||
ebegin "Checking kernel version (${run_kv} >= ${want_kv})"
|
||||
if ! eend_KV ${run_kv} ${want_kv} ; then
|
||||
echo
|
||||
eerror "You need a kernel of at least ${want_kv} for NPTL support!"
|
||||
die "Kernel version too low!"
|
||||
fi
|
||||
fi
|
||||
|
||||
ebegin "Checking linux-headers version (${build_kv} >= ${want_kv})"
|
||||
if ! eend_KV ${build_kv} ${want_kv} ; then
|
||||
echo
|
||||
eerror "You need linux-headers of at least ${want_kv} for NPTL support!"
|
||||
die "linux-headers version too low!"
|
||||
fi
|
||||
}
|
||||
|
||||
unpack_pkg() {
|
||||
local a=${PN}
|
||||
[[ -n ${SNAP_VER} ]] && a="${a}-${RELEASE_VER}"
|
||||
[[ -n $1 ]] && a="${a}-$1"
|
||||
[[ -n ${SNAP_VER} ]] && a="${a}-${SNAP_VER}" || a="${a}-${RELEASE_VER}"
|
||||
unpack ${a}.tar.bz2
|
||||
[[ -n $1 ]] && mv ${a} $1
|
||||
}
|
||||
|
||||
toolchain-glibc_src_unpack() {
|
||||
# Check NPTL support _before_ we unpack things to save some time
|
||||
want_nptl && check_nptl_support
|
||||
|
||||
unpack_pkg
|
||||
|
||||
cd "${S}"
|
||||
touch locale/C-translit.h #185476 #218003
|
||||
[[ -n ${LT_VER} ]] && unpack_pkg linuxthreads ${LT_VER}
|
||||
[[ -n ${PORTS_VER} ]] && unpack_pkg ports ${PORTS_VER}
|
||||
[[ -n ${LIBIDN_VER} ]] && unpack_pkg libidn
|
||||
|
||||
if [[ -n ${PATCH_VER} ]] ; then
|
||||
cd "${WORKDIR}"
|
||||
unpack glibc-${RELEASE_VER}-patches-${PATCH_VER}.tar.bz2
|
||||
# pull out all the addons
|
||||
local d
|
||||
for d in extra/*/configure ; do
|
||||
d=${d%/configure}
|
||||
[[ -d ${S}/${d} ]] && die "${d} already exists in \${S}"
|
||||
mv "${d}" "${S}" || die "moving ${d} failed"
|
||||
done
|
||||
fi
|
||||
|
||||
# XXX: We should do the branchupdate, before extracting the manpages and
|
||||
# infopages else it does not help much (mtimes change if there is a change
|
||||
# to them with branchupdate)
|
||||
if [[ -n ${BRANCH_UPDATE} ]] ; then
|
||||
cd "${S}"
|
||||
epatch "${DISTDIR}"/glibc-${RELEASE_VER}-branch-update-${BRANCH_UPDATE}.patch.bz2
|
||||
|
||||
# Snapshot date patch
|
||||
einfo "Patching version to display snapshot date ..."
|
||||
sed -i -e "s:\(#define RELEASE\).*:\1 \"${BRANCH_UPDATE}\":" version.h
|
||||
fi
|
||||
|
||||
if [[ -n ${MANPAGE_VER} ]] ; then
|
||||
cd "${WORKDIR}"
|
||||
unpack glibc-manpages-${MANPAGE_VER}.tar.bz2
|
||||
fi
|
||||
|
||||
if [[ -n ${INFOPAGE_VER} ]] ; then
|
||||
cd "${S}"
|
||||
unpack glibc-infopages-${INFOPAGE_VER}.tar.bz2
|
||||
fi
|
||||
|
||||
# tag, glibc is it
|
||||
cd "${S}"
|
||||
[[ -e csu/Banner ]] && die "need new banner location"
|
||||
[[ -n ${SNAP_VER} ]] && echo "Gentoo snapshot ${SNAP_VER}" >> csu/Banner
|
||||
[[ -n ${BRANCH_UPDATE} ]] && echo "Gentoo branch ${BRANCH_UPDATE}" >> csu/Banner
|
||||
if [[ -n ${PATCH_VER} ]] && ! use vanilla ; then
|
||||
cd "${S}"
|
||||
EPATCH_MULTI_MSG="Applying Gentoo Glibc Patchset ${RELEASE_VER}-${PATCH_VER} ..." \
|
||||
EPATCH_EXCLUDE=${GLIBC_PATCH_EXCLUDE} \
|
||||
EPATCH_SUFFIX="patch" \
|
||||
ARCH=$(tc-arch) \
|
||||
epatch "${WORKDIR}"/patches
|
||||
echo "Gentoo patchset ${PATCH_VER}" >> csu/Banner
|
||||
fi
|
||||
|
||||
gnuconfig_update
|
||||
}
|
||||
|
||||
eblit-glibc-src_unpack() {
|
||||
setup_env
|
||||
|
||||
toolchain-glibc_src_unpack
|
||||
|
||||
# Backwards SSP support
|
||||
cd "${S}"
|
||||
# For now, we force everyone to have the extra symbols
|
||||
# einfon "Scanning system for __guard to see if we need SSP compat ... "
|
||||
# if [[ -n $(scanelf -qyls__guard -F'#s%F' | grep -v '^/lib.*/libc-2.*.so$') ]] ; then
|
||||
echo "yes" > "${T}"/.ssp.compat
|
||||
# else
|
||||
# # ok, a quick scan didnt find it, so lets do a deep scan ...
|
||||
# if [[ -n $(scanelf -qyRlps__guard -F'#s%F' | grep -v '^/lib.*/libc-2.*.so$') ]] ; then
|
||||
# echo "yes" > "${T}"/.ssp.compat
|
||||
# else
|
||||
# echo "no" > "${T}"/.ssp.compat
|
||||
# fi
|
||||
# fi
|
||||
# cat "${T}"/.ssp.compat
|
||||
|
||||
# Glibc is stupid sometimes, and doesn't realize that with a
|
||||
# static C-Only gcc, -lgcc_eh doesn't exist.
|
||||
# http://sources.redhat.com/ml/libc-alpha/2003-09/msg00100.html
|
||||
# http://sourceware.org/ml/libc-alpha/2005-02/msg00042.html
|
||||
echo 'int main(){}' > "${T}"/gcc_eh_test.c
|
||||
if ! $(tc-getCC ${CTARGET}) "${T}"/gcc_eh_test.c -lgcc_eh 2>/dev/null ; then
|
||||
sed -i -e 's:-lgcc_eh::' Makeconfig || die "sed gcc_eh"
|
||||
fi
|
||||
|
||||
cd "${WORKDIR}"
|
||||
find . -type f '(' -size 0 -o -name "*.orig" ')' -exec rm -f {} \;
|
||||
find . -name configure -exec touch {} \;
|
||||
|
||||
# Fix permissions on some of the scripts
|
||||
chmod u+x "${S}"/scripts/*.sh
|
||||
}
|
||||
Reference in New Issue
Block a user