home bbs files messages ]

Just a sample of the Echomail archive

Cooperative anarchy at its finest, still active today. Darkrealms is the Zone 1 Hub.

   LINUX      Torvalds farts & fans know what he ate      8,232 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 5,707 of 8,232   
   Benny Pedersen to Little Mikey   
   Beware; for I am fearless, and therefore   
   04 Aug 18 23:16:56   
   
   Hello Little!   
      
   03 Aug 2018 21:14, Little Mikey wrote to Benny Pedersen:   
      
    BP>> i have glibc from truck github if i want to use it, there is no   
    BP>> safe way back if emerged   
      
    LM> Understood.  glibc is the trickiest package to upgrade since    
    LM> everything relies on it.   
      
   +1   
      
    LM> That is why special partitions are deployed    
    LM> here for experimenting with glibc.   
      
   how is the layout with it ?   
      
   lvm2 snapshot rollbacks ?   
      
    LM> Having said that, this reply is    
    LM> being entered on a booted rootfs based on glibc-2.28 with a    
    LM> bootstrapped gcc-8.2.0 and at this writing a linux-4.17.11 kernel.     
    LM> The original post you are replying to was also from this same rootfs.   
      
   i could do this on gentoo, i know enough to hack this with gentoo portage, but   
   i dont know how cold it could be on the maunting top :)   
      
    BP>> could you test this ? :)   
    LM> Do you mean the gentoo package?   
      
      ----- glibc-9999.ebuild begins -----   
   # Copyright 1999-2018 Gentoo Foundation   
   # Distributed under the terms of the GNU General Public License v2   
      
   EAPI=6   
      
   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   
   SLOT="2.2"   
      
   EMULTILIB_PKG="true"   
      
   if [[ ${PV} == 9999* ]]; then   
           EGIT_REPO_URI="https://sourceware.org/git/glibc.git"   
           inherit git-r3   
   else   
           # KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc   
   ~ppc64 ~s390 ~sh ~sparc ~x86"   
           KEYWORDS=""   
           SRC_URI="mirror://gnu/glibc/${P}.tar.xz"   
   fi   
      
   RELEASE_VER=${PV}   
      
   GCC_BOOTSTRAP_VER=20180511   
      
   # Gentoo patchset   
   PATCH_VER=7   
      
   SRC_URI+=" https://dev.gentoo.org/~dilfridge/distfiles/${P}-patc   
   es-${PATCH_VER}.tar.bz2"   
   SRC_URI+=" multilib? ( https://dev.gentoo.org/~dilfridge/distfil   
   s/gcc-multilib-bootstrap-${GCC_BOOTSTRAP_VER}.tar.xz )"   
      
   IUSE="audit caps cet compile-locales doc gd hardened headers-only +multiarch   
   multilib nscd profile selinux suid systemtap test vanilla"   
      
   # 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   
   #  CHOST   - machine that will host the binaries   
   #  CBUILD  - machine that will build the binaries   
   # If CTARGET != CHOST, it means you want a libc for cross-compiling.   
   # If CHOST != CBUILD, it means you want to cross-compile the libc.   
   #  CBUILD = CHOST = CTARGET    - native build/install   
   #  CBUILD != (CHOST = CTARGET) - cross-compile a native build   
   #  (CBUILD = CHOST) != CTARGET - libc for cross-compiler   
   #  CBUILD != CHOST != CTARGET  - cross-compile a libc for a cross-compiler   
   # 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   
           if [[ ${CATEGORY} == cross-* ]] ; then   
                   export CTARGET=${CATEGORY#cross-}   
           fi   
   fi   
      
   # 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 )   
                   caps? ( sys-libs/libcap )   
           ) )   
           suid? ( caps? ( sys-libs/libcap ) )   
           selinux? ( sys-libs/libselinux )   
           systemtap? ( dev-util/systemtap )   
   "   
   DEPEND="${COMMON_DEPEND}   
           >=app-misc/pax-utils-0.1.10   
           sys-devel/bison   
           !=net-dns/libidn2-2.0.5 )   
   "   
   RDEPEND="${COMMON_DEPEND}   
           >=net-dns/libidn2-2.0.5   
           sys-apps/gentoo-functions   
           !sys-kernel/ps3-sources   
           !sys-libs/nss-db   
   "   
      
   if [[ ${CATEGORY} == cross-* ]] ; then   
           DEPEND+=" !headers-only? (   
                   >=${CATEGORY}/binutils-2.24   
                   >=${CATEGORY}/gcc-4.9   
           )"   
           [[ ${CATEGORY} == *-linux* ]] && DEPEND+=" ${CATEGORY}/linux-headers"   
   else   
           DEPEND+="   
                   >=sys-devel/binutils-2.24   
                   >=sys-devel/gcc-4.9   
                   virtual/os-headers   
           "   
           RDEPEND+=" vanilla? ( !sys-libs/timezone-data )"   
           PDEPEND+=" !vanilla? ( sys-libs/timezone-data )"   
   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   
   ' | $(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() {   
           # Allow user to disable runtime arch detection in multilib.   
           use multiarch || return 1   
           # 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_ in their make.conf, use   
   that,   
                   # and fall back on CFLAGS.   
                   local VAR=CFLAGS_${CTARGET//[-.]/_}   
                   CFLAGS=${!VAR-${CFLAGS}}   
                   einfo " $(printf '%15s' 'Manual CFLAGS:')   ${CFLAGS}"   
           fi   
      
           setup_flags   
      
           export ABI=${ABI:-${DEFAULT_ABI:-default}}   
      
           if use headers-only ; then   
                   # Avoid mixing host's CC and target's CFLAGS_${ABI}:   
                   # At this bootstrap stage we have only binutils for   
                   # target but not compiler yet.   
                   einfo "Skip CC ABI injection. We can't use (cross-)compiler   
   yet."   
                   return 0   
           fi   
           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}"   
           einfo " $(printf '%15s' 'Manual CC:')   ${CC}"   
   }   
      
   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   
   }   
      
   # The following Kernel version handling functions are mostly copied from   
   portage   
   # source. It's better not to use linux-info.eclass here since a) it adds too   
   # much magic, see bug 326693 for some of the arguments, and b) some of the   
   # functions are just not provided.   
      
   g_get_running_KV() {   
           uname -r   
           return $?   
   }   
      
   g_KV_major() {   
           [[ -z $1 ]] && return 1   
           local KV=$@   
           echo "${KV%%.*}"   
   }   
      
   g_KV_minor() {   
           [[ -z $1 ]] && return 1   
           local KV=$@   
           KV=${KV#*.}   
           echo "${KV%%.*}"   
   }   
      
   g_KV_micro() {   
           [[ -z $1 ]] && return 1   
           local KV=$@   
           KV=${KV#*.*.}   
           echo "${KV%%[^[:digit:]]*}"   
   }   
      
   g_KV_to_int() {   
           [[ -z $1 ]] && return 1   
           local KV_MAJOR=$(g_KV_major "$1")   
           local KV_MINOR=$(g_KV_minor "$1")   
           local KV_MICRO=$(g_KV_micro "$1")   
           local KV_int=$(( KV_MAJOR * 65536 + KV_MINOR * 256 + KV_MICRO ))   
      
           # We make version 2.2.0 the minimum version we will handle as   
           # a sanity check ... if its less, we fail ...   
           if [[ ${KV_int} -ge 131584 ]] ; then   
                   echo "${KV_int}"   
                   return 0   
           fi   
           return 1   
   }   
      
   g_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() {   
           [[ $(g_KV_to_int $1) -ge $(g_KV_to_int $2) ]]   
           eend $?   
   }   
      
   get_kheader_version() {   
           printf '#include \nLINUX_VERSION_CODE\n' | \   
           $(tc-getCPP ${CTARGET}) -I "${EPREFIX}/$(alt_build_headers)" - | \   
           tail -n 1   
   }   
      
   # We collect all sanity checks here. Consistency is not guranteed between   
   # pkg_ and src_ phases, so we call this function both in pkg_pretend and in   
   # src_unpack.   
   sanity_prechecks() {   
           # Make sure devpts is mounted correctly for use w/out setuid pt_chown   
           check_devpts   
      
           # Prevent native builds from downgrading   
           if [[ ${MERGE_TYPE} != "buildonly" ]] && \   
              [[ ${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.   
                   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 ! do_run_test '#include \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 a newer"   
                           eerror "version as syscall() will break. See   
   bug 279260."   
                           die "Old and broken kernel."   
                   fi   
           fi   
      
           # Users have had a chance to phase themselves, time to give em the boot   
           if [[ -e ${EROOT}/etc/locale.gen ]] && [[ -e ${EROOT}/et   
   /locales.build ]] ; then   
                   eerror "You still haven't deleted ${EROOT}/etc/locales.build."   
                   eerror "Do so now after making sure ${EROOT}/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 https://www.gentoo.org/doc/e   
   /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 && ! tc-enables-pie && \   
                   ewarn "PIE hardening not applied, as your compiler doesn't   
   default to PIE"   
      
           # Check for sanity of /etc/nsswitch.conf   
           if [[ -e ${EROOT}/etc/nsswitch.conf ]] ; then   
                   local entry   
                   for entry in passwd group shadow; do   
                           if ! egrep -q "^[ \t]*${entry}:.*files"    
   ${EROOT}"/etc/nsswitch.conf; then   
                                   eerror "Your ${EROOT}/etc/nsswitch.conf is out   
   of date."   
                                   eerror "Please make sure you have 'files'   
   entries for"   
                                   eerror "'passwd:', 'group:' and 'shadow:'   
   databases."   
                                   eerror "For more details see:"   
                                   eerror "  https://wiki.gentoo.or   
   /wiki/Project:Toolchain/nsswitch.conf_in_glibc-2.26"   
                                   die "nsswitch.conf has no 'files' provider in   
   '${entry}'."   
                           fi   
                   done   
           fi   
      
           # ABI-specific checks follow here. Hey, we have a lot more specific   
   conditions that   
           # we test for...   
           if ! is_crosscompile ; then   
                   if use amd64 && use multilib && [[ ${MERGE_TYPE} != "binary"   
   ]] ; then   
                           ebegin "Checking that IA32 emulation is enabled in the   
   running kernel"   
                           echo 'int main(){return 0;}' > "${T}/che   
   k-ia32-emulation.c"   
                           local STAT   
                           if "${CC-${CHOST}-gcc}" ${CFLAGS_x86} "$   
   T}/check-ia32-emulation.c" -o "${T}/check-ia32-emulation.elf32"; then   
                                   "${T}/check-ia32-emulation.elf32"   
                                   STAT=$?   
                           else   
                                   # Don't fail here to allow single->multi ABI   
   switch   
                                   # or recover from breakage like bug #646424   
                                   ewarn "Failed to compile the ABI test. Broken   
   host glibc?"   
                                   STAT=0   
                           fi   
                           rm -f "${T}/check-ia32-emulation.elf32"   
                           eend $STAT   
                           [[ $STAT -eq 0 ]] || die "CONFIG_IA32_EMULATION must   
   be enabled in the kernel to compile a multilib glibc."   
                   fi   
      
           fi   
      
           # When we actually have to compile something...   
           if ! just_headers ; then   
                   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 [[ ${CTARGET} == *-linux* ]] ; then   
                           local run_kv build_kv want_kv   
      
                           run_kv=$(g_get_running_KV)   
                           build_kv=$(g_int_to_KV $(get_kheader_version))   
                           want_kv=${MIN_KERN_VER}   
      
                           if ! is_crosscompile && ! tc-is-cross-compiler ; then   
                                   # Building fails on an non-supporting kernel   
                                   ebegin "Checking running 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   
                   fi   
           fi   
   }   
      
   #   
   # the phases   
   #   
      
   # pkg_pretend   
      
   pkg_pretend() {   
           # All the checks...   
           einfo "Checking general environment sanity."   
           sanity_prechecks   
   }   
      
   # src_unpack   
      
   src_unpack() {   
           # Consistency is not guaranteed between pkg_ and src_ ...   
           sanity_prechecks   
      
           use multilib && unpack gcc-multilib-bootstrap-${GCC_BOOT   
   TRAP_VER}.tar.xz   
      
           setup_env   
      
           if [[ -n ${EGIT_REPO_URI} ]] ; then   
                   git-r3_src_unpack   
           else   
                   unpack ${P}.tar.xz   
           fi   
      
           cd "${S}" || die   
           touch locale/C-translit.h || die #185476 #218003   
      
           cd "${WORKDIR}" || die   
           unpack glibc-${RELEASE_VER}-patches-${PATCH_VER}.tar.bz2   
   }   
      
   src_prepare() {   
           if ! use vanilla ; then   
                   elog "Applying Gentoo Glibc Patchset ${RELEASE_V   
   R}-${PATCH_VER}"   
                   eapply "${WORKDIR}"/patches   
                   einfo "Done."   
           fi   
      
           default   
      
           gnuconfig_update   
      
           cd "${WORKDIR}"   
           find . -name configure -exec touch {} +   
      
           eprefixify extra/locale/locale-gen   
      
           # Fix permissions on some of the scripts.   
           chmod u+x "${S}"/scripts/*.sh   
      
           cd "${S}"   
   }   
      
   glibc_do_configure() {   
           # Glibc does not work with gold (for various reasons) #269274.   
           tc-ld-disable-gold   
      
           # CXX isnt handled by the multilib system, so if we dont unset here   
           # we accumulate crap across abis   
           unset CXX   
      
           einfo "Configuring glibc for nptl"   
      
           if use doc ; then   
                   export MAKEINFO=makeinfo   
           else   
                   export MAKEINFO=/dev/null   
           fi   
      
           local v   
           for v in ABI CBUILD CHOST CTARGET CBUILD_OPT CTARGET_OPT CC CXX LD   
   {AS,C,CPP,CXX,LD}FLAGS MAKEINFO ; do   
                   einfo " $(printf '%15s' ${v}:)   ${!v}"   
           done   
      
           # CFLAGS can contain ABI-specific flags like -mfpu=neon, see bug   
   #657760   
           # To build .S (assembly) files with the same ABI-specific flags   
           # upstream currently recommends adding CFLAGS to CC/CXX:   
           #    https://sourceware.org/PR23273   
           # Note: Passing CFLAGS via CPPFLAGS overrides glibc's arch-specific   
   CFLAGS   
           # and breaks multiarch support. See 659030#c3 for an example.   
           # The glibc configure script doesn't properly use LDFLAGS all the time.   
           export CC="$(tc-getCC ${CTARGET}) ${CFLAGS} ${LDFLAGS}"   
           einfo " $(printf '%15s' 'Manual CC:')   ${CC}"   
      
           # Some of the tests are written in C++, so we need to force our   
   multlib abis in, bug 623548   
           export CXX="$(tc-getCXX ${CTARGET}) $(get_abi_CFLAGS) ${CFLAGS}"   
           einfo " $(printf '%15s' 'Manual CXX:')   ${CXX}"   
      
           echo   
      
           local myconf=()   
      
           case ${CTARGET} in   
                   powerpc-*)   
                           # Currently gcc on powerpc32 generates invalid code for   
                           # __builtin_return_address(0) calls. Normally programs   
                           # don't do that but malloc hooks   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca