summaryrefslogtreecommitdiff
path: root/sys-libs/glibc
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2018-01-16 17:34:21 +0000
committerV3n3RiX <venerix@redcorelinux.org>2018-01-16 17:34:21 +0000
commit02e2208f46f4e2c00fb9743cbc47350bdd233bfa (patch)
tree132dd60828854db4f65f30f9230f43d9602507ff /sys-libs/glibc
parent8be70107efbb417f839292165ee39d07a062046f (diff)
gentoo resync : 16.01.2018
Diffstat (limited to 'sys-libs/glibc')
-rw-r--r--sys-libs/glibc/Manifest4
-rw-r--r--sys-libs/glibc/glibc-9999.ebuild587
2 files changed, 545 insertions, 46 deletions
diff --git a/sys-libs/glibc/Manifest b/sys-libs/glibc/Manifest
index ca4184a53804..244bd2859bae 100644
--- a/sys-libs/glibc/Manifest
+++ b/sys-libs/glibc/Manifest
@@ -34,7 +34,7 @@ DIST glibc-2.25.tar.xz 13873900 BLAKE2B 73ef792fff059f6ad154c9af2155ea15b7869ec1
DIST glibc-2.26-patches-4.tar.bz2 315447 BLAKE2B 038926c8c187cfea5c00a7017a486356adf0f0959dc8868847f26877b4b441bd76629f20d52967f9da878f69a1ac2859332ed3984b4ebb5cb528d50e0b012736 SHA512 04d229e5f9342d62f2fce039c70489609886782d8aabd49403863a1a679e3b0890ca26c129088738a4af7ef6d95c74f24fb3c4d03695bf7ba6e45eca4de1a5f0
DIST glibc-2.26-patches-5.tar.bz2 357699 BLAKE2B 98a0cb231bf35a132747f1fa6e654a9ad2eff8b445f002a0239c9a45f5a896ad490570aedee2b43e6cfa94794ae5c8b5e312e369838c3770823f28b61b51b592 SHA512 0040469e4a85f5c2aac972e42aeb06b0adfc3a132b32b19306be9f1877339fe6651a2fbd4d90d502b07ae4460f74efbd1cd103d38a2038df9402b0a380f03c2a
DIST glibc-2.26.tar.xz 14682748 BLAKE2B c1c9dbec110dd4e25b2f463a96d8afc43b8e3ebfe3c958107032beaa879710252be3bc4122bb62166408725d43785f233544df6159d29cce0fc5b2c08f45adbe SHA512 6ed368523bc55f00976f96c5177f114e3f714b27273d7bffc252812c8b98fb81970403c1f5b5f0a61da678811532fb446530745492d2b49bfefc0d5bd71ce8c0
-DIST glibc-9999-patches-3.tar.bz2 19892 BLAKE2B e0a51f376e7142f56ae2a0862a7723343ee378275c1a0c6c3a69607b5bb7f9bd655f0a68f8f9cfc32008e06852d0eb0a9e16c85ea9a395dc36b428f1ea6100d8 SHA512 75084b86a83d447d3a4b3959fa2a93d849e304ba9473ebec5570ca4fb5e2f8dfb38548faf3abc9fbd29b529f2c608b52eb2ef2e6e9a2ad5bea9a9298a19ef596
+DIST glibc-9999-patches-4.tar.bz2 15159 BLAKE2B e17e9efa196a1acf27dd1535bb43a8999eb4f76e7aecb47ee7fb1fb5258870ddc024a4a5d3fb514d3d37ce28326d3bae93f3c6f534c048b57a6369a1a135e0af SHA512 6e0f8ff9ee125e936a0e43f830423b13ac5350c9a8a83f1c4bb367084e9f2c81cf740f3d97e8bd451890ade46fadfe21154afecca739d00cf6ce1127dba4bb7b
EBUILD glibc-2.18-r1.ebuild 5514 BLAKE2B 2b007c0f935df77d35d74adceab874eeab55306c1fc69eee3c0f45a5d9cd02e6b4dcf7ab25d2bb450fd07fe7f20a827a774a6e15322f7b8a447726acdf31a3f7 SHA512 b306c31227f15cbf0dbf518195736856f30949544dac12fb4b5b0aabd3e421f040663aacea159181b61f92777a19519241f5c05f6e65576b26f6406df85ef83b
EBUILD glibc-2.19-r1.ebuild 5471 BLAKE2B 8531139c723de6358daa971e96f98db628eec14c696b004a4e8a4a7efc8a0c610d713625655c55293c94898d13ac9aea5ae1a58134aedb30b1b695859748a964 SHA512 aae5bcdaa10cf6a3026e28b406046bd7297fdacfa8d0ace60f76177aa2efed6b0f82b639f5e6db6bd42d99440d12644d62e9b14cf49ced7284f011cb3c406775
EBUILD glibc-2.20-r2.ebuild 4947 BLAKE2B 24062f002678df912ced724a3d919bc2f07476c98000092cb3fa3f2be1836db57348c88b6fc1da7a9364103136eecbe687fe365d131f10c82de3cb0edd3eb8c5 SHA512 ff76e9173ab6bfccb1c659f79cefb93f6fa6266adab40a3816f56acddb7866cee67ba6bfa8d1b9988eff755e9d1a879e62973fc332566c185f019af5e17a9f1d
@@ -46,5 +46,5 @@ EBUILD glibc-2.25-r10.ebuild 5012 BLAKE2B 86753e126c049ba2407529668b82094650a718
EBUILD glibc-2.25-r9.ebuild 4999 BLAKE2B 6c0784aa614374954c0747deb7a33fdba0f8b1935cc28c62af29880d64991cc93740eddefe8dca971d6c1bbba14161e10db75e00a91d73282e0c0bf094004b94 SHA512 3b5dc2073ae44e6cf5a4f8f64a3c3fd837ebaa222009ee617105259765ff4222fb3960be1c537d4fde6c7e928bd85325d9070cb668b31cb6afb03368c079141f
EBUILD glibc-2.26-r3.ebuild 25337 BLAKE2B 7d35bc98ff62279aaf8221a5366d6624c9c51344d3550a827739d700f32de23ac2a8f9b08f7a8d6437d61a200aeedfa041f68425675881c676642cc5499ac822 SHA512 71a2d63ec8772548d8b88576f6088f394dc364a864aab4e803c6d02600c296c629408fab94ca1b5402d1cfa5503c5a8409f2aed7e5d6afc5e16b98a0eb715765
EBUILD glibc-2.26-r5.ebuild 25543 BLAKE2B d6f427a7c876a264fc7b14516c7e36adf97a594d291ff34b90f69397fa097968a38db2fbfd19854fedf55d59e7d1b8ff757b525cf6f33182cd3633f0044ef254 SHA512 364a561a54f81d4e40298310acec3c7bd976276abae24549d891de58146739964bb73e91b53c193fae8e6328dccbda0b57fbfca2b7e27912d1654c18ab62e13c
-EBUILD glibc-9999.ebuild 25767 BLAKE2B 0c5ddf6b25ca3bb5303fc3bfc977f70273a98e533380d770df3dfbd683a06a37ebb335d138bc49831b92eee416e63227b609e8c621ac9f81e26e52cd71091b51 SHA512 94dd656d151ebbe0a8eeecd4a2470a7f758279751aa6de9a55631112152829136674ad40e77d57ba5dac24204f4d4c2f0ddb9b5dfa334e68460fb5db61c2eb82
+EBUILD glibc-9999.ebuild 39783 BLAKE2B efacbc5c74f742ac63485a880228781b5f09f1613fc9b760a6072421dc17493ec9726e8a0987a0a4eed971822663fdef9b8f4d3e78c157ca75ad828dc8bb28aa SHA512 8619067d0ffbdd3f5180b1cab7f7f23b75af73ac442ad66d35c5413ebaaaaea9ca6b4d2c803114e9a612af5711b23d86644609efe7337a798cacf016a3f5b88f
MISC metadata.xml 1054 BLAKE2B dbc091e54130729385bc02aaa1025885f101caa88d601b1f7670974d89e7e24aae5d37fd6699278a37c0064e1f3232c04954dc127869427317b5d80b499f3813 SHA512 65474b7d32ceb6bafe8ae0e18aa0b46b68cefecce5570a0e8d4a0117019e6540f2feae35cecbebad382b4f06d6e5ae1dfa9b8a61889881e8534956dd42df8e4b
diff --git a/sys-libs/glibc/glibc-9999.ebuild b/sys-libs/glibc/glibc-9999.ebuild
index 5d7f3a9fbe9d..0b6f444f7711 100644
--- a/sys-libs/glibc/glibc-9999.ebuild
+++ b/sys-libs/glibc/glibc-9999.ebuild
@@ -3,16 +3,14 @@
EAPI=6
-inherit prefix toolchain-glibc
+inherit prefix eutils versionator toolchain-funcs flag-o-matic gnuconfig \
+ multilib systemd multiprocessing
DESCRIPTION="GNU libc C library"
HOMEPAGE="https://www.gnu.org/software/libc/"
-
LICENSE="LGPL-2.1+ BSD HPND ISC inner-net rc PCRE"
RESTRICT="strip" # Strip ourself #46186
-EMULTILIB_PKG="true"
-
-# Configuration variables
+SLOT="2.2"
if [[ ${PV} == 9999* ]]; then
EGIT_REPO_URI="https://sourceware.org/git/glibc.git"
@@ -28,15 +26,15 @@ RELEASE_VER=${PV}
GCC_BOOTSTRAP_VER="4.7.3-r1"
# Gentoo patchset
-PATCH_VER="3"
+PATCH_VER=4
SRC_URI+=" https://dev.gentoo.org/~dilfridge/distfiles/${P}-patches-${PATCH_VER}.tar.bz2"
SRC_URI+=" multilib? ( https://dev.gentoo.org/~dilfridge/distfiles/gcc-${GCC_BOOTSTRAP_VER}-multilib-bootstrap.tar.bz2 )"
IUSE="audit caps compile-locales debug doc gd hardened multilib nscd selinux systemtap profile suid vanilla headers-only"
-# Min kernel version glibc requires
-: ${NPTL_KERN_VER:="3.2.0"}
+# Minimum kernel version that glibc requires
+MIN_KERN_VER="3.2.0"
# Here's how the cross-compile logic breaks down ...
# CTARGET - machine that will target the binaries
@@ -51,7 +49,7 @@ IUSE="audit caps compile-locales debug doc gd hardened multilib nscd selinux sys
# For install paths:
# CHOST = CTARGET - install into /
# CHOST != CTARGET - install into /usr/CTARGET/
-
+#
export CBUILD=${CBUILD:-${CHOST}}
export CTARGET=${CTARGET:-${CHOST}}
if [[ ${CTARGET} == ${CHOST} ]] ; then
@@ -60,18 +58,8 @@ if [[ ${CTARGET} == ${CHOST} ]] ; then
fi
fi
-is_crosscompile() {
- [[ ${CHOST} != ${CTARGET} ]]
-}
-
-just_headers() {
- is_crosscompile && use headers-only
-}
-
-SLOT="2.2"
-
-# General: We need a new-enough binutils/gcc to match upstream baseline.
-# arch: we need to make sure our binutils/gcc supports TLS.
+# We need a new-enough binutils/gcc to match upstream baseline.
+# Also we need to make sure our binutils/gcc supports TLS.
COMMON_DEPEND="
nscd? ( selinux? (
audit? ( sys-process/audit )
@@ -88,8 +76,8 @@ DEPEND="${COMMON_DEPEND}
doc? ( sys-apps/texinfo )
"
RDEPEND="${COMMON_DEPEND}
- !sys-kernel/ps3-sources
sys-apps/gentoo-functions
+ !sys-kernel/ps3-sources
!sys-libs/nss-db
"
@@ -110,6 +98,475 @@ else
fi
#
+# Small helper functions
+#
+
+is_crosscompile() {
+ [[ ${CHOST} != ${CTARGET} ]]
+}
+
+just_headers() {
+ is_crosscompile && use headers-only
+}
+
+alt_prefix() {
+ is_crosscompile && echo /usr/${CTARGET}
+}
+
+# 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.
+alt_headers() {
+ echo ${ALT_HEADERS:=$(alt_prefix)/usr/include}
+}
+
+alt_build_headers() {
+ if [[ -z ${ALT_BUILD_HEADERS} ]] ; then
+ ALT_BUILD_HEADERS="${EPREFIX}$(alt_headers)"
+ if tc-is-cross-compiler ; then
+ ALT_BUILD_HEADERS=${SYSROOT}$(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_libdir() {
+ echo $(alt_prefix)/$(get_libdir)
+}
+alt_usrlibdir() {
+ echo $(alt_prefix)/usr/$(get_libdir)
+}
+
+builddir() {
+ echo "${WORKDIR}/build-${ABI}-${CTARGET}-$1"
+}
+
+do_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}
+}
+
+do_run_test() {
+ local ret
+
+ if [[ ${MERGE_TYPE} == "binary" ]] ; then
+ # ignore build failures when installing a binary package #324685
+ do_compile_test "" "$@" 2>/dev/null || return 0
+ else
+ if ! do_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}
+}
+
+setup_target_flags() {
+ # This largely mucks with compiler flags. None of which should matter
+ # when building up just the headers.
+ just_headers && return 0
+
+ case $(tc-arch) in
+ x86)
+ # -march needed for #185404 #199334
+ # TODO: When creating the first glibc cross-compile, this test will
+ # always fail as it does a full link which in turn requires glibc.
+ # Probably also applies when changing multilib profile settings (e.g.
+ # enabling x86 when the profile was amd64-only previously).
+ # We could change main to _start and pass -nostdlib here so that we
+ # only test the gcc code compilation. Or we could do a compile and
+ # then look for the symbol via scanelf.
+ if ! do_compile_test "" 'void f(int i, void *p) {if (__sync_fetch_and_add(&i, 1)) f(i, p);}\nint main(){return 0;}\n' 2>/dev/null ; then
+ local t=${CTARGET_OPT:-${CTARGET}}
+ t=${t%%-*}
+ filter-flags '-march=*'
+ export CFLAGS="-march=${t} ${CFLAGS}"
+ einfo "Auto adding -march=${t} to CFLAGS #185404"
+ fi
+ ;;
+ amd64)
+ # -march needed for #185404 #199334
+ # Note: This test only matters when the x86 ABI is enabled, so we could
+ # optimize a bit and elide it.
+ # TODO: See cross-compile issues listed above for x86.
+ if ! do_compile_test "${CFLAGS_x86}" 'void f(int i, void *p) {if (__sync_fetch_and_add(&i, 1)) f(i, p);}\nint main(){return 0;}\n' 2>/dev/null ; then
+ local t=${CTARGET_OPT:-${CTARGET}}
+ t=${t%%-*}
+ # Normally the target is x86_64-xxx, so turn that into the -march that
+ # gcc actually accepts. #528708
+ [[ ${t} == "x86_64" ]] && t="x86-64"
+ filter-flags '-march=*'
+ # ugly, ugly, ugly. ugly.
+ CFLAGS_x86=$(CFLAGS=${CFLAGS_x86} filter-flags '-march=*'; echo "${CFLAGS}")
+ export CFLAGS_x86="${CFLAGS_x86} -march=${t}"
+ einfo "Auto adding -march=${t} to CFLAGS_x86 #185404"
+ fi
+ ;;
+ mips)
+ # The mips abi cannot support the GNU style hashes. #233233
+ filter-ldflags -Wl,--hash-style=gnu -Wl,--hash-style=both
+ ;;
+ sparc)
+ # Both sparc and sparc64 can use -fcall-used-g6. -g7 is bad, though.
+ filter-flags "-fcall-used-g7"
+ append-flags "-fcall-used-g6"
+
+ # If the CHOST is the basic one (e.g. not sparcv9-xxx already),
+ # try to pick a better one so glibc can use cpu-specific .S files.
+ # We key off the CFLAGS to get a good value. Also need to handle
+ # version skew.
+ # We can't force users to set their CHOST to their exact machine
+ # as many of these are not recognized by config.sub/gcc and such :(.
+ # Note: If the mcpu values don't scale, we might try probing CPP defines.
+ # Note: Should we factor in -Wa,-AvXXX flags too ? Or -mvis/etc... ?
+
+ local cpu
+ case ${CTARGET} in
+ sparc64-*)
+ case $(get-flag mcpu) in
+ niagara[234])
+ if version_is_at_least 2.8 ; then
+ cpu="sparc64v2"
+ elif version_is_at_least 2.4 ; then
+ cpu="sparc64v"
+ elif version_is_at_least 2.2.3 ; then
+ cpu="sparc64b"
+ fi
+ ;;
+ niagara)
+ if version_is_at_least 2.4 ; then
+ cpu="sparc64v"
+ elif version_is_at_least 2.2.3 ; then
+ cpu="sparc64b"
+ fi
+ ;;
+ ultrasparc3)
+ cpu="sparc64b"
+ ;;
+ *)
+ # We need to force at least v9a because the base build doesn't
+ # work with just v9.
+ # https://sourceware.org/bugzilla/show_bug.cgi?id=19477
+ [[ -z ${cpu} ]] && append-flags "-Wa,-xarch=v9a"
+ ;;
+ esac
+ ;;
+ sparc-*)
+ case $(get-flag mcpu) in
+ niagara[234])
+ if version_is_at_least 2.8 ; then
+ cpu="sparcv9v2"
+ elif version_is_at_least 2.4 ; then
+ cpu="sparcv9v"
+ elif version_is_at_least 2.2.3 ; then
+ cpu="sparcv9b"
+ else
+ cpu="sparcv9"
+ fi
+ ;;
+ niagara)
+ if version_is_at_least 2.4 ; then
+ cpu="sparcv9v"
+ elif version_is_at_least 2.2.3 ; then
+ cpu="sparcv9b"
+ else
+ cpu="sparcv9"
+ fi
+ ;;
+ ultrasparc3)
+ cpu="sparcv9b"
+ ;;
+ v9|ultrasparc)
+ cpu="sparcv9"
+ ;;
+ v8|supersparc|hypersparc|leon|leon3)
+ cpu="sparcv8"
+ ;;
+ esac
+ ;;
+ esac
+ [[ -n ${cpu} ]] && CTARGET_OPT="${cpu}-${CTARGET#*-}"
+ ;;
+ esac
+}
+
+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=*'
+
+ # glibc aborts if rpath is set by LDFLAGS
+ filter-ldflags '-Wl,-rpath=*'
+
+ # #492892
+ filter-flags -frecord-gcc-switches
+
+ unset CBUILD_OPT CTARGET_OPT
+ if use multilib ; then
+ CTARGET_OPT=$(get_abi_CTARGET)
+ [[ -z ${CTARGET_OPT} ]] && CTARGET_OPT=$(get_abi_CHOST)
+ fi
+
+ setup_target_flags
+
+ if [[ -n ${CTARGET_OPT} && ${CBUILD} == ${CHOST} ]] && ! is_crosscompile; then
+ CBUILD_OPT=${CTARGET_OPT}
+ fi
+
+ # Lock glibc at -O2; we want to be conservative here.
+ # -fno-strict-aliasing is to work around #155906.
+ filter-flags '-O?'
+ append-flags -O2 -fno-strict-aliasing
+
+ filter-flags '-fstack-protector*'
+
+ # Starting with gcc-6 (and fully upstreamed pie patches) we control
+ # default enabled/disabled pie via use flags. So nothing to do
+ # here then. #618160
+ if [[ $(gcc-major-version) -lt 6 ]]; then
+ if use hardened && tc-enables-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
+ fi
+}
+
+want_tls() {
+ # Archs that can use TLS (Thread Local Storage)
+ case $(tc-arch) in
+ 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}
+
+ # only test gcc -- can't test linking yet
+ tc-has-tls -c ${CTARGET}
+ WANT__THREAD=$?
+
+ return ${WANT__THREAD}
+}
+
+use_multiarch() {
+ # Make sure binutils is new enough to support indirect functions,
+ # #336792. This funky sed supports gold and bfd linkers.
+ local bver nver
+ bver=$($(tc-getLD ${CTARGET}) -v | sed -n -r '1{s:[^0-9]*::;s:^([0-9.]*).*:\1:;p}')
+ case $(tc-arch ${CTARGET}) in
+ amd64|x86) nver="2.20" ;;
+ arm) nver="2.22" ;;
+ hppa) nver="2.23" ;;
+ ppc|ppc64) nver="2.20" ;;
+ # ifunc support was added in 2.23, but glibc also needs
+ # machinemode which is in 2.24.
+ s390) nver="2.24" ;;
+ sparc) nver="2.21" ;;
+ *) return 1 ;;
+ esac
+ version_is_at_least ${nver} ${bver}
+}
+
+# Setup toolchain variables that had historically been defined in the
+# profiles for these archs.
+setup_env() {
+ # silly users
+ unset LD_RUN_PATH
+ unset LD_ASSUME_KERNEL
+
+ if is_crosscompile || tc-is-cross-compiler ; then
+ multilib_env ${CTARGET_OPT:-${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}}
+
+ 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). Keep
+ # around the original clean value to avoid appending multiple ABIs on
+ # top of each other.
+ : ${__GLIBC_CC:=$(tc-getCC ${CTARGET_OPT:-${CTARGET}})}
+ export __GLIBC_CC CC="${__GLIBC_CC} ${!VAR}"
+}
+
+foreach_abi() {
+ setup_env
+
+ local ret=0
+ local abilist=""
+ if use multilib ; then
+ abilist=$(get_install_abis)
+ else
+ abilist=${DEFAULT_ABI}
+ fi
+ local -x ABI
+ for ABI in ${abilist:-default} ; do
+ setup_env
+ einfo "Running $1 for ABI ${ABI}"
+ $1
+ : $(( ret |= $? ))
+ done
+ return ${ret}
+}
+
+glibc_banner() {
+ local b="Gentoo ${PVR}"
+ [[ -n ${PATCH_VER} ]] && ! use vanilla && b+=" p${PATCH_VER}"
+ echo "${b}"
+}
+
+check_devpts() {
+ # Make sure devpts is mounted correctly for use w/out setuid pt_chown.
+
+ # If merely building the binary package, then there's nothing to verify.
+ [[ ${MERGE_TYPE} == "buildonly" ]] && return
+
+ # Only sanity check when installing the native glibc.
+ [[ ${ROOT} != "/" ]] && return
+
+ # If they're opting in to the old suid code, then no need to check.
+ use suid && return
+
+ if awk '$3 == "devpts" && $4 ~ /[, ]gid=5[, ]/ { exit 1 }' /proc/mounts ; then
+ eerror "In order to use glibc with USE=-suid, you must make sure that"
+ eerror "you have devpts mounted at /dev/pts with the gid=5 option."
+ eerror "Openrc should do this for you, so you should check /etc/fstab"
+ eerror "and make sure you do not have any invalid settings there."
+ die "mount & fix your /dev/pts settings"
+ fi
+}
+
+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 "${EPREFIX}/$(alt_build_headers)" - | \
+ tail -n 1
+}
+
+check_nptl_support() {
+ # We don't care about the compiler here as we aren't using it
+ just_headers && return
+
+ local run_kv build_kv want_kv
+
+ # TODO: this needs to be replaced somehow
+ run_kv=$(int_to_KV $(get_KV))
+
+ build_kv=$(int_to_KV $(get_kheader_version))
+ want_kv=${MIN_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}!"
+ 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}!"
+ die "linux-headers version too low!"
+ fi
+}
+
+#
# the phases
#
@@ -124,31 +581,19 @@ pkg_pretend() {
[[ ${ROOT} == "/" ]] && \
[[ ${CBUILD} == ${CHOST} ]] && \
[[ ${CHOST} == ${CTARGET} ]] ; then
- # The high rev # is to allow people to downgrade between -r# versions.
- # We want to block 2.20->2.19, but 2.20-r3->2.20-r2 should be fine.
- # Hopefully we never actually use a r# this high.
+
+ # The high rev # is to allow people to downgrade between -r#
+ # versions. We want to block 2.20->2.19, but 2.20-r3->2.20-r2
+ # should be fine. Hopefully we never actually use a r# this
+ # high.
if has_version ">${CATEGORY}/${P}-r10000" ; 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 "https://sourceware.org/bugzilla/show_bug.cgi?id=5227"
- eerror "https://bugs.gentoo.org/262698"
- die "Keeping your system alive, say thank you"
+ eerror " Downgrading glibc is not supported and a sure way to destruction."
+ die "Aborting to save your system."
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 "https://bugs.gentoo.org/279260"
- die "Keeping your system alive, say thank you"
- fi
+ # removed check for #262698 since it's about kernel 2.6.18 ...
+ # removed check for #279260 since it's about kernel <2.6.28 ...
fi
# Users have had a chance to phase themselves, time to give em the boot
@@ -355,7 +800,7 @@ glibc_do_configure() {
[[ $(tc-is-softfloat) == "yes" ]] && myconf+=( --without-fp )
- myconf+=( --enable-kernel=${NPTL_KERN_VER} )
+ myconf+=( --enable-kernel=${MIN_KERN_VER} )
# Since SELinux support is only required for nscd, only enable it if:
# 1. USE selinux
@@ -789,6 +1234,23 @@ glibc_headers_install() {
dosym usr/include $(alt_prefix)/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=$(has 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 ! has nostrip ${FEATURES} && ! has splitdebug ${FEATURES} ; then
+ ${STRIP:-${CTARGET}-strip} --strip-debug "${ED}"/*/libpthread-*.so
+ fi
+}
+
src_install() {
if just_headers ; then
export ABI=default
@@ -800,6 +1262,43 @@ src_install() {
src_strip
}
+# Simple test to make sure our new glibc isn't 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.
+#
+# If coreutils is built with USE=multicall, some of these files
+# will just be wrapper scripts, not actual ELFs we can test.
+glibc_sanity_check() {
+ cd / #228809
+
+ # We enter ${ED} 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 "${ED}"/$(get_libdir) >/dev/null
+
+ local x striptest
+ for x in cal date env free ls true uname uptime ; do
+ x=$(type -p ${x})
+ [[ -z ${x} || ${x} != ${EPREFIX}/* ]] && continue
+ striptest=$(LC_ALL="C" file -L ${x} 2>/dev/null) || continue
+ case ${striptest} in
+ *"statically linked"*) continue;;
+ *"ASCII text"*) continue;;
+ esac
+ # We need to clear the locale settings as the upgrade might want
+ # incompatible locale data. This test is not for verifying that.
+ LC_ALL=C \
+ ./ld-*.so --library-path . ${x} > /dev/null \
+ || die "simple run test (${x}) failed"
+ done
+
+ popd >/dev/null
+}
+
pkg_preinst() {
# nothing to do if just installing headers
just_headers && return