From 2fd57282f0262ca084e05b0f2c63fbada395d02b Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Sun, 16 Jan 2022 20:27:28 +0000 Subject: gentoo resync : 16.01.2021 --- eclass/Manifest.gz | Bin 36387 -> 36216 bytes eclass/apache-2.eclass | 11 +- eclass/cargo.eclass | 4 +- eclass/distutils-r1.eclass | 433 +++++++--- eclass/dune.eclass | 2 +- eclass/ecm.eclass | 59 +- eclass/findlib.eclass | 4 +- eclass/kde.org.eclass | 1 + eclass/mercurial.eclass | 4 +- eclass/multibuild.eclass | 91 +-- eclass/multilib-build.eclass | 42 +- eclass/multilib-minimal.eclass | 17 +- eclass/openib.eclass | 3 +- eclass/python-r1.eclass | 9 +- eclass/python-single-r1.eclass | 8 +- eclass/python-utils-r1.eclass | 22 +- eclass/rust-toolchain.eclass | 5 +- eclass/tests/distutils-r1.sh | 2 +- eclass/tests/distutils-r1_single.sh | 2 +- eclass/toolchain-glibc.eclass | 1488 ----------------------------------- 20 files changed, 462 insertions(+), 1745 deletions(-) delete mode 100644 eclass/toolchain-glibc.eclass (limited to 'eclass') diff --git a/eclass/Manifest.gz b/eclass/Manifest.gz index 4e41bed6001a..27cc36b531a2 100644 Binary files a/eclass/Manifest.gz and b/eclass/Manifest.gz differ diff --git a/eclass/apache-2.eclass b/eclass/apache-2.eclass index a67597447ba3..cd930aaf54f4 100644 --- a/eclass/apache-2.eclass +++ b/eclass/apache-2.eclass @@ -1,4 +1,4 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: apache-2.eclass @@ -450,15 +450,6 @@ apache-2_pkg_setup() { elog "Make sure CONFIG_SYSVIPC=y is set." elog - if use userland_BSD; then - elog "On BSD systems you need to add the following line to /boot/loader.conf:" - elog " accf_http_load=\"YES\"" - if use ssl ; then - elog " accf_data_load=\"YES\"" - fi - elog - fi - if [[ ${EAPI} != 6 ]] && use apache2_modules_lua ; then lua-single_pkg_setup fi diff --git a/eclass/cargo.eclass b/eclass/cargo.eclass index 938511e410fc..18afd10fa0ed 100644 --- a/eclass/cargo.eclass +++ b/eclass/cargo.eclass @@ -1,4 +1,4 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: cargo.eclass @@ -6,7 +6,7 @@ # rust@gentoo.org # @AUTHOR: # Doug Goldstein -# Georgy Yakovlev +# Georgy Yakovlev # @SUPPORTED_EAPIS: 7 8 # @BLURB: common functions and variables for cargo builds diff --git a/eclass/distutils-r1.eclass b/eclass/distutils-r1.eclass index 1b50dc4e74b4..200360510f80 100644 --- a/eclass/distutils-r1.eclass +++ b/eclass/distutils-r1.eclass @@ -1,4 +1,4 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: distutils-r1.eclass @@ -78,28 +78,60 @@ esac # to be exported. It must be run in order for the eclass functions # to function properly. +# @ECLASS-VARIABLE: DISTUTILS_USE_PEP517 +# @PRE_INHERIT +# @DEFAULT_UNSET +# @DESCRIPTION: +# Enable experimental PEP 517 mode for the specified build system. +# In this mode, the complete build and install is done +# in python_compile(), venv-style install tree is provided +# to python_test() and python_install() just merges the temporary +# install tree into real fs. +# +# The variable specifies the build system used. Currently, +# the following values are supported: +# +# - flit - flit_core backend +# +# - pdm - pdm.pep517 backend +# +# - poetry - poetry-core backend +# +# - setuptools - distutils or setuptools (incl. legacy mode) +# +# - standalone - standalone build systems without external deps +# (used for bootstrapping). +# +# The variable needs to be set before the inherit line. The eclass +# adds appropriate build-time dependencies and verifies the value. + # @ECLASS-VARIABLE: DISTUTILS_USE_SETUPTOOLS +# @DEFAULT_UNSET # @PRE_INHERIT # @DESCRIPTION: # Controls adding dev-python/setuptools dependency. The allowed values # are: # # - no -- do not add the dependency (pure distutils package) +# # - bdepend -- add it to BDEPEND (the default) +# # - rdepend -- add it to BDEPEND+RDEPEND (e.g. when using pkg_resources) +# # - pyproject.toml -- use pyproject2setuptools to install a project # using pyproject.toml (flit, poetry...) +# # - manual -- do not add the dependency and suppress the checks # (assumes you will take care of doing it correctly) # # This variable is effective only if DISTUTILS_OPTIONAL is disabled. -# It needs to be set before the inherit line. -: ${DISTUTILS_USE_SETUPTOOLS:=bdepend} +# It is available only in non-PEP517 mode. It needs to be set before +# the inherit line. if [[ ! ${_DISTUTILS_R1} ]]; then [[ ${EAPI} == 6 ]] && inherit eutils xdg-utils -inherit multiprocessing toolchain-funcs +inherit multibuild multiprocessing toolchain-funcs if [[ ! ${DISTUTILS_SINGLE_IMPL} ]]; then inherit python-r1 @@ -117,25 +149,61 @@ if [[ ! ${_DISTUTILS_R1} ]]; then _distutils_set_globals() { local rdep bdep - local setuptools_dep='>=dev-python/setuptools-42.0.2[${PYTHON_USEDEP}]' + if [[ ${DISTUTILS_USE_PEP517} ]]; then + if [[ ${DISTUTILS_USE_SETUPTOOLS} ]]; then + die "DISTUTILS_USE_SETUPTOOLS is not used in PEP517 mode" + fi - case ${DISTUTILS_USE_SETUPTOOLS} in - no|manual) - ;; - bdepend) - bdep+=" ${setuptools_dep}" - ;; - rdepend) - bdep+=" ${setuptools_dep}" - rdep+=" ${setuptools_dep}" - ;; - pyproject.toml) - bdep+=' >=dev-python/pyproject2setuppy-22[${PYTHON_USEDEP}]' - ;; - *) - die "Invalid DISTUTILS_USE_SETUPTOOLS=${DISTUTILS_USE_SETUPTOOLS}" - ;; - esac + # installer is used to install the wheel + # tomli is used to read build-backend from pyproject.toml + bdep+=' + >=dev-python/installer-0.4.0_p20220115[${PYTHON_USEDEP}] + dev-python/tomli[${PYTHON_USEDEP}]' + case ${DISTUTILS_USE_PEP517} in + flit) + bdep+=' + dev-python/flit_core[${PYTHON_USEDEP}]' + ;; + pdm) + bdep+=' + dev-python/pdm-pep517[${PYTHON_USEDEP}]' + ;; + poetry) + bdep+=' + dev-python/poetry-core[${PYTHON_USEDEP}]' + ;; + setuptools) + bdep+=' + >=dev-python/setuptools-60.5.0[${PYTHON_USEDEP}] + dev-python/wheel[${PYTHON_USEDEP}]' + ;; + standalone) + ;; + *) + die "Unknown DISTUTILS_USE_PEP517=${DISTUTILS_USE_PEP517}" + ;; + esac + else + local setuptools_dep='>=dev-python/setuptools-42.0.2[${PYTHON_USEDEP}]' + + case ${DISTUTILS_USE_SETUPTOOLS:-bdepend} in + no|manual) + ;; + bdepend) + bdep+=" ${setuptools_dep}" + ;; + rdepend) + bdep+=" ${setuptools_dep}" + rdep+=" ${setuptools_dep}" + ;; + pyproject.toml) + bdep+=' >=dev-python/pyproject2setuppy-22[${PYTHON_USEDEP}]' + ;; + *) + die "Invalid DISTUTILS_USE_SETUPTOOLS=${DISTUTILS_USE_SETUPTOOLS}" + ;; + esac + fi if [[ ! ${DISTUTILS_SINGLE_IMPL} ]]; then bdep=${bdep//\$\{PYTHON_USEDEP\}/${PYTHON_USEDEP}} @@ -393,6 +461,9 @@ distutils_enable_tests() { _DISTUTILS_TEST_INSTALL= case ${1} in --install) + if [[ ${DISTUTILS_USE_PEP517} ]]; then + die "${FUNCNAME} --install is not implemented in PEP517 mode" + fi _DISTUTILS_TEST_INSTALL=1 shift ;; @@ -405,7 +476,7 @@ distutils_enable_tests() { test_pkg=">=dev-python/nose-1.3.7-r4" ;; pytest) - test_pkg=">=dev-python/pytest-4.5.0" + test_pkg=">=dev-python/pytest-6.2.5-r2" ;; setup.py) ;; @@ -465,11 +536,15 @@ esetup.py() { _python_check_EPYTHON - [[ ${BUILD_DIR} ]] && _distutils-r1_create_setup_cfg + if [[ ${BUILD_DIR} && ! ${DISTUTILS_USE_PEP517} ]]; then + _distutils-r1_create_setup_cfg + fi local setup_py=( setup.py ) if [[ ${DISTUTILS_USE_SETUPTOOLS} == pyproject.toml ]]; then setup_py=( -m pyproject2setuppy ) + elif [[ ! -f setup.py ]]; then + setup_py=( -c "from setuptools import setup; setup()" ) fi if [[ ${EAPI} != [67] && ${mydistutilsargs[@]} ]]; then @@ -483,7 +558,7 @@ esetup.py() { "${@}" || die -n local ret=${?} - if [[ ${BUILD_DIR} ]]; then + if [[ ${BUILD_DIR} && ! ${DISTUTILS_USE_PEP517} ]]; then rm "${HOME}"/.pydistutils.cfg || die -n fi @@ -521,9 +596,17 @@ esetup.py() { # # Please note that in order to test the solution properly you need # to unmerge the package first. +# +# This function is not available in PEP517 mode. The eclass provides +# a venv-style install unconditionally therefore, and therefore it +# should no longer be necessary. distutils_install_for_testing() { debug-print-function ${FUNCNAME} "${@}" + if [[ ${DISTUTILS_USE_PEP517} ]]; then + die "${FUNCNAME} is not implemented in PEP517 mode" + fi + # A few notes about --via-home mode: # 1) 'install --home' is terribly broken on pypy, so we need # to override --install-lib and --install-scripts, @@ -554,14 +637,26 @@ distutils_install_for_testing() { local add_args=() if [[ ${install_method} == venv ]]; then - "${EPYTHON}" -m venv --system-site-packages --without-pip \ - "${TEST_DIR}" || die + # create a quasi-venv + mkdir -p "${TEST_DIR}"/bin || die + ln -s "${PYTHON}" "${TEST_DIR}/bin/${EPYTHON}" || die + ln -s "${EPYTHON}" "${TEST_DIR}/bin/python3" || die + ln -s "${EPYTHON}" "${TEST_DIR}/bin/python" || die + cat > "${TEST_DIR}"/pyvenv.cfg <<-EOF || die + include-system-site-packages = true + EOF # we only do the minimal necessary subset of activate script PATH=${TEST_DIR}/bin:${PATH} # unset PYTHONPATH in order to prevent BUILD_DIR from overriding # venv packages unset PYTHONPATH + + # force root-style install (note: venv adds TEST_DIR to prefixes, + # so we need to pass --root=/) + add_args=( + --root=/ + ) else local bindir=${TEST_DIR}/scripts local libdir=${TEST_DIR}/lib @@ -596,6 +691,10 @@ distutils_install_for_testing() { # Stub out ez_setup.py and distribute_setup.py to prevent packages # from trying to download a local copy of setuptools. _distutils-r1_disable_ez_setup() { + if [[ ${DISTUTILS_USE_PEP517} ]]; then + die "${FUNCNAME} is not implemented in PEP517 mode" + fi + local stub="def use_setuptools(*args, **kwargs): pass" if [[ -f ez_setup.py ]]; then echo "${stub}" > ez_setup.py || die @@ -610,6 +709,10 @@ _distutils-r1_disable_ez_setup() { # @DESCRIPTION: # Generate setup.py for pyproject.toml if requested. _distutils-r1_handle_pyproject_toml() { + if [[ ${DISTUTILS_USE_PEP517} ]]; then + die "${FUNCNAME} is not implemented in PEP517 mode" + fi + [[ ${DISTUTILS_USE_SETUPTOOLS} == manual ]] && return if [[ ! -f setup.py && -f pyproject.toml ]]; then @@ -660,8 +763,10 @@ distutils-r1_python_prepare_all() { fi fi - _distutils-r1_disable_ez_setup - _distutils-r1_handle_pyproject_toml + if [[ ! ${DISTUTILS_USE_PEP517} ]]; then + _distutils-r1_disable_ez_setup + _distutils-r1_handle_pyproject_toml + fi if [[ ${DISTUTILS_IN_SOURCE_BUILD} && ! ${DISTUTILS_SINGLE_IMPL} ]] then @@ -678,6 +783,10 @@ distutils-r1_python_prepare_all() { # Create implementation-specific configuration file for distutils, # setting proper build-dir (and install-dir) paths. _distutils-r1_create_setup_cfg() { + if [[ ${DISTUTILS_USE_PEP517} ]]; then + die "${FUNCNAME} is not implemented in PEP517 mode" + fi + cat > "${HOME}"/.pydistutils.cfg <<-_EOF_ || die [build] build_base = ${BUILD_DIR} @@ -705,8 +814,8 @@ _distutils-r1_create_setup_cfg() { zip_safe = False _EOF_ - # we can't refer to ${D} before src_install() if [[ ${EBUILD_PHASE} == install ]]; then + # we can't refer to ${D} before src_install() cat >> "${HOME}"/.pydistutils.cfg <<-_EOF_ || die # installation paths -- allow calling extra install targets @@ -718,6 +827,7 @@ _distutils-r1_create_setup_cfg() { _EOF_ if [[ ! ${DISTUTILS_SINGLE_IMPL} ]]; then + # this gets appended to [install] cat >> "${HOME}"/.pydistutils.cfg <<-_EOF_ || die install_scripts = $(python_get_scriptdir) _EOF_ @@ -732,11 +842,44 @@ _distutils-r1_create_setup_cfg() { # egg-base in esetup.py). This way, we respect whatever's in upstream # egg-info. _distutils-r1_copy_egg_info() { + if [[ ${DISTUTILS_USE_PEP517} ]]; then + die "${FUNCNAME} is not implemented in PEP517 mode" + fi + mkdir -p "${BUILD_DIR}" || die # stupid freebsd can't do 'cp -t ${BUILD_DIR} {} +' find -name '*.egg-info' -type d -exec cp -R -p {} "${BUILD_DIR}"/ ';' || die } +# @FUNCTION: _distutils-r1_backend_to_key +# @USAGE: +# @INTERNAL +# @DESCRIPTION: +# Print the DISTUTILS_USE_PEP517 value corresponding to the backend +# passed as the only argument. +_distutils-r1_backend_to_key() { + debug-print-function ${FUNCNAME} "${@}" + + local backend=${1} + case ${backend} in + flit_core.buildapi) + echo flit + ;; + pdm.pep517.api) + echo pdm + ;; + poetry.core.masonry.api) + echo poetry + ;; + setuptools.build_meta|setuptools.build_meta:__legacy__) + echo setuptools + ;; + *) + die "Unknown backend: ${backend}" + ;; + esac +} + # @FUNCTION: distutils-r1_python_compile # @USAGE: [additional-args...] # @DESCRIPTION: @@ -751,16 +894,92 @@ distutils-r1_python_compile() { _python_check_EPYTHON - _distutils-r1_copy_egg_info + # call setup.py build when using setuptools (either via PEP517 + # or in legacy mode) + if [[ ${DISTUTILS_USE_PEP517:-setuptools} == setuptools ]]; then + if [[ ! ${DISTUTILS_USE_PEP517} ]]; then + _distutils-r1_copy_egg_info + fi - # distutils is parallel-capable since py3.5 - local jobs=$(makeopts_jobs "${MAKEOPTS}" INF) - if [[ ${jobs} == INF ]]; then - local nproc=$(get_nproc) - jobs=$(( nproc + 1 )) + # distutils is parallel-capable since py3.5 + local jobs=$(makeopts_jobs "${MAKEOPTS}" INF) + if [[ ${jobs} == INF ]]; then + local nproc=$(get_nproc) + jobs=$(( nproc + 1 )) + fi + + esetup.py build -j "${jobs}" "${@}" fi - esetup.py build -j "${jobs}" "${@}" + if [[ ${DISTUTILS_USE_PEP517} ]]; then + if [[ -n ${DISTUTILS_ARGS[@]} || -n ${mydistutilsargs[@]} ]]; then + die "DISTUTILS_ARGS are not supported in PEP-517 mode" + fi + + # python likes to compile any module it sees, which triggers sandbox + # failures if some packages haven't compiled their modules yet. + addpredict "${EPREFIX}/usr/lib/${EPYTHON}" + addpredict /usr/lib/pypy3.8 + addpredict /usr/lib/portage/pym + addpredict /usr/local # bug 498232 + + local -x WHEEL_BUILD_DIR=${BUILD_DIR}/wheel + mkdir -p "${WHEEL_BUILD_DIR}" || die + + local build_backend + if [[ -f pyproject.toml ]]; then + build_backend=$("${EPYTHON}" -c 'import tomli; \ + print(tomli.load(open("pyproject.toml", "rb")) \ + ["build-system"]["build-backend"])' 2>/dev/null) + fi + if [[ -z ${build_backend} && ${DISTUTILS_USE_PEP517} == setuptools && + -f setup.py ]] + then + # use the legacy setuptools backend + build_backend=setuptools.build_meta:__legacy__ + fi + [[ -z ${build_backend} ]] && + die "Unable to obtain build-backend from pyproject.toml" + + if [[ ${DISTUTILS_USE_PEP517} != standalone ]]; then + local expected_value=$(_distutils-r1_backend_to_key "${build_backend}") + if [[ ${DISTUTILS_USE_PEP517} != ${expected_value} ]]; then + eerror "DISTUTILS_USE_PEP517 does not match pyproject.toml!" + eerror " have: DISTUTILS_USE_PEP517=${DISTUTILS_USE_PEP517}" + eerror "expected: DISTUTILS_USE_PEP517=${expected_value}" + eerror "(backend: ${build_backend})" + die "DISTUTILS_USE_PEP517 value incorrect" + fi + fi + + einfo "Building a wheel via ${build_backend}" + "${EPYTHON}" -c "import ${build_backend%:*}; \ + import os; \ + ${build_backend/:/.}.build_wheel(os.environ['WHEEL_BUILD_DIR'])" || + die "Wheel build failed" + + local wheel=( "${WHEEL_BUILD_DIR}"/*.whl ) + if [[ ${#wheel[@]} -ne 1 ]]; then + die "Incorrect number of wheels created (${#wheel[@]}): ${wheel[*]}" + fi + + local root=${BUILD_DIR}/install + # NB: --compile-bytecode does not produce the correct paths, + # and python_optimize doesn't handle being called outside D, + # so we just defer compiling until the final merge + "${EPYTHON}" -m installer -d "${root}" "${wheel}" \ + --no-compile-bytecode || + die "installer failed" + + # enable venv magic inside the install tree + mkdir -p "${root}"/usr/bin || die + ln -s "${PYTHON}" "${root}/usr/bin/${EPYTHON}" || die + ln -s "${EPYTHON}" "${root}/usr/bin/python3" || die + ln -s "${EPYTHON}" "${root}/usr/bin/python" || die + cat > "${root}"/usr/pyvenv.cfg <<-EOF || die + include-system-site-packages = true + EOF + fi } # @FUNCTION: _distutils-r1_wrap_scripts @@ -872,59 +1091,73 @@ distutils-r1_python_install() { _python_check_EPYTHON - local root=${D%/}/_${EPYTHON} - [[ ${DISTUTILS_SINGLE_IMPL} ]] && root=${D%/} - - # inline DISTUTILS_ARGS logic from esetup.py in order to make - # argv overwriting easier - local args=( - "${DISTUTILS_ARGS[@]}" - "${mydistutilsargs[@]}" - install --skip-build --root="${root}" "${args[@]}" - "${@}" - ) - local DISTUTILS_ARGS=() - local mydistutilsargs=() - - # enable compilation for the install phase. - local -x PYTHONDONTWRITEBYTECODE= - - # python likes to compile any module it sees, which triggers sandbox - # failures if some packages haven't compiled their modules yet. - addpredict "${EPREFIX}/usr/lib/${EPYTHON}" - addpredict /usr/lib/pypy3.8 - addpredict /usr/lib/portage/pym - addpredict /usr/local # bug 498232 + local scriptdir=${EPREFIX}/usr/bin + if [[ ${DISTUTILS_USE_PEP517} ]]; then + local root=${BUILD_DIR}/install + local rscriptdir=${root}$(python_get_scriptdir) + [[ -d ${rscriptdir} ]] && + die "${rscriptdir} should not exist!" + # remove venv magic + rm "${root}"/usr/{pyvenv.cfg,bin/{python,python3,${EPYTHON}}} || die + find "${root}"/usr/bin -empty -delete || die + if [[ ! ${DISTUTILS_SINGLE_IMPL} && -d ${root}/usr/bin ]]; then + mkdir -p "${rscriptdir%/*}" || die + mv "${root}/usr/bin" "${rscriptdir}" || die + fi + else + local root=${D%/}/_${EPYTHON} + [[ ${DISTUTILS_SINGLE_IMPL} ]] && root=${D%/} + + # inline DISTUTILS_ARGS logic from esetup.py in order to make + # argv overwriting easier + local args=( + "${DISTUTILS_ARGS[@]}" + "${mydistutilsargs[@]}" + install --skip-build --root="${root}" "${args[@]}" + "${@}" + ) + local DISTUTILS_ARGS=() + local mydistutilsargs=() + + # enable compilation for the install phase. + local -x PYTHONDONTWRITEBYTECODE= + + # python likes to compile any module it sees, which triggers sandbox + # failures if some packages haven't compiled their modules yet. + addpredict "${EPREFIX}/usr/lib/${EPYTHON}" + addpredict /usr/lib/pypy3.8 + addpredict /usr/lib/portage/pym + addpredict /usr/local # bug 498232 - if [[ ! ${DISTUTILS_SINGLE_IMPL} ]]; then - # user may override --install-scripts - # note: this is poor but distutils argv parsing is dumb - local scriptdir=${EPREFIX}/usr/bin - - # rewrite all the arguments - set -- "${args[@]}" - args=() - while [[ ${@} ]]; do - local a=${1} - shift + if [[ ! ${DISTUTILS_SINGLE_IMPL} ]]; then + # user may override --install-scripts + # note: this is poor but distutils argv parsing is dumb + + # rewrite all the arguments + set -- "${args[@]}" + args=() + while [[ ${@} ]]; do + local a=${1} + shift + + case ${a} in + --install-scripts=*) + scriptdir=${a#--install-scripts=} + ;; + --install-scripts) + scriptdir=${1} + shift + ;; + *) + args+=( "${a}" ) + ;; + esac + done + fi - case ${a} in - --install-scripts=*) - scriptdir=${a#--install-scripts=} - ;; - --install-scripts) - scriptdir=${1} - shift - ;; - *) - args+=( "${a}" ) - ;; - esac - done + esetup.py "${args[@]}" fi - esetup.py "${args[@]}" - local forbidden_package_names=( examples test tests .pytest_cache .hypothesis @@ -948,8 +1181,15 @@ distutils-r1_python_install() { die "Package installs 'share' in PyPy prefix, see bug #465546." fi - if [[ ! ${DISTUTILS_SINGLE_IMPL} ]]; then + if [[ ! ${DISTUTILS_SINGLE_IMPL} || ${DISTUTILS_USE_PEP517} ]]; then multibuild_merge_root "${root}" "${D%/}" + if [[ ${DISTUTILS_USE_PEP517} ]]; then + # we need to recompile everything here in order to embed + # the correct paths + python_optimize "${D%/}$(python_get_sitedir)" + fi + fi + if [[ ! ${DISTUTILS_SINGLE_IMPL} ]]; then _distutils-r1_wrap_scripts "${scriptdir}" fi } @@ -990,12 +1230,21 @@ distutils-r1_run_phase() { fi local BUILD_DIR=${BUILD_DIR}/build fi - local -x PYTHONPATH="${BUILD_DIR}/lib:${PYTHONPATH}" - # make PATH local for distutils_install_for_testing calls - # it makes little sense to let user modify PATH in per-impl phases - # and _all() already localizes it - local -x PATH=${PATH} + if [[ ${DISTUTILS_USE_PEP517} ]]; then + local -x PATH=${BUILD_DIR}/install/usr/bin:${PATH} + else + local -x PYTHONPATH="${BUILD_DIR}/lib:${PYTHONPATH}" + + # make PATH local for distutils_install_for_testing calls + # it makes little sense to let user modify PATH in per-impl phases + # and _all() already localizes it + local -x PATH=${PATH} + + # Undo the default switch in setuptools-60+ for the time being, + # to avoid replacing .egg-info file with directory in-place. + local -x SETUPTOOLS_USE_DISTUTILS="${SETUPTOOLS_USE_DISTUTILS:-stdlib}" + fi # Bug 559644 # using PYTHONPATH when the ${BUILD_DIR}/lib is not created yet might lead to diff --git a/eclass/dune.eclass b/eclass/dune.eclass index 4653db3ae791..5b0418152da0 100644 --- a/eclass/dune.eclass +++ b/eclass/dune.eclass @@ -50,7 +50,7 @@ dune_src_compile() { dune_src_test() { ebegin "Testing" - dune runtest + dune runtest --profile release eend $? || die } diff --git a/eclass/ecm.eclass b/eclass/ecm.eclass index baece9e6e637..cd8110ab27f1 100644 --- a/eclass/ecm.eclass +++ b/eclass/ecm.eclass @@ -1,4 +1,4 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: ecm.eclass @@ -312,6 +312,55 @@ _ecm_strip_handbook_translations() { done } +# @FUNCTION: _ecm_punt_kfqt_module +# @INTERNAL +# @USAGE: +# @DESCRIPTION: +# Removes a specified dependency from a find_package call with multiple +# components. +_ecm_punt_kfqt_module() { + local prefix=${1} + local dep=${2} + + [[ ! -e "CMakeLists.txt" ]] && return + + # FIXME: dep=WebKit will result in 'Widgets' over 'WebKitWidgets' (no regression) + pcregrep -Mni "(?s)find_package\s*\(\s*${prefix}(\d+|\\$\{\w*\})[^)]*?${dep}.*?\)" \ + CMakeLists.txt > "${T}/bogus${dep}" + + # pcregrep returns non-zero on no matches/error + [[ $? -ne 0 ]] && return + + local length=$(wc -l "${T}/bogus${dep}" | cut -d " " -f 1) + local first=$(head -n 1 "${T}/bogus${dep}" | cut -d ":" -f 1) + local last=$(( length + first - 1)) + + sed -e "${first},${last}s/${dep}//" -i CMakeLists.txt || die + + if [[ ${length} -eq 1 ]] ; then + sed -e "/find_package\s*(\s*${prefix}\([0-9]\|\${[A-Z0-9_]*}\)\(\s\+\(REQUIRED\|CONFIG\|COMPONENTS\|\${[A-Z0-9_]*}\)\)\+\s*)/Is/^/# '${dep}' removed by ecm.eclass - /" \ + -i CMakeLists.txt || die + fi +} + +# @FUNCTION: ecm_punt_kf_module +# @USAGE: +# @DESCRIPTION: +# Removes a Frameworks (KF - matching any single-digit version) +# module from a find_package call with multiple components. +ecm_punt_kf_module() { + _ecm_punt_kfqt_module kf ${1} +} + +# @FUNCTION: ecm_punt_qt_module +# @USAGE: +# @DESCRIPTION: +# Removes a Qt (matching any single-digit version) module from a +# find_package call with multiple components. +ecm_punt_qt_module() { + _ecm_punt_kfqt_module qt ${1} +} + # @FUNCTION: ecm_punt_bogus_dep # @USAGE: # @DESCRIPTION: @@ -379,7 +428,7 @@ ecm_src_prepare() { cmake_comment_add_subdirectory ${ECM_HANDBOOK_DIR} if [[ ${ECM_HANDBOOK} = forceoptional ]] ; then - ecm_punt_bogus_dep KF5 DocTools + ecm_punt_kf_module DocTools sed -i -e "/kdoctools_install/I s/^/#DONT/" CMakeLists.txt || die fi fi @@ -404,18 +453,18 @@ ecm_src_prepare() { # only build unit tests when required if ! { in_iuse test && use test; } ; then if [[ ${ECM_TEST} = forceoptional ]] ; then - ecm_punt_bogus_dep Qt5 Test + ecm_punt_qt_module Test # if forceoptional, also cover non-kde categories cmake_comment_add_subdirectory autotests test tests elif [[ ${ECM_TEST} = forceoptional-recursive ]] ; then - ecm_punt_bogus_dep Qt5 Test + ecm_punt_qt_module Test local f pf="${T}/${P}"-tests-optional.patch touch ${pf} || die "Failed to touch patch file" for f in $(find . -type f -name "CMakeLists.txt" -exec \ grep -li "^\s*add_subdirectory\s*\(\s*.*\(auto|unit\)\?tests\?\s*)\s*\)" {} \;); do cp ${f} ${f}.old || die "Failed to prepare patch origfile" pushd ${f%/*} > /dev/null || die - ecm_punt_bogus_dep Qt5 Test + ecm_punt_qt_module Test sed -i CMakeLists.txt -e \ "/^#/! s/add_subdirectory\s*\(\s*.*\(auto|unit\)\?tests\?\s*)\s*\)/if(BUILD_TESTING)\n&\nendif()/I" \ || die diff --git a/eclass/findlib.eclass b/eclass/findlib.eclass index 3b19b30c57c9..0e14514e298f 100644 --- a/eclass/findlib.eclass +++ b/eclass/findlib.eclass @@ -1,4 +1,4 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: findlib.eclass @@ -23,7 +23,7 @@ _FINDLIB_ECLASS=1 QA_FLAGS_IGNORED='.*' # Required to use the ocamlopt? dep in RDEPEND below -IUSE="ocamlopt" +IUSE="+ocamlopt" # From this findlib version, there is proper stublibs support. DEPEND=">=dev-ml/findlib-1.0.4-r1" diff --git a/eclass/kde.org.eclass b/eclass/kde.org.eclass index 4128e1238d29..00ec25b071f9 100644 --- a/eclass/kde.org.eclass +++ b/eclass/kde.org.eclass @@ -198,6 +198,7 @@ _kde.org_calculate_src_uri() { kde-frameworks) _src_uri+="stable/frameworks/$(ver_cut 1-2)/" case ${PN} in + countryflags | \ kdelibs4support | \ kdesignerplugin | \ kdewebkit | \ diff --git a/eclass/mercurial.eclass b/eclass/mercurial.eclass index e984da08e330..b79b754aa68a 100644 --- a/eclass/mercurial.eclass +++ b/eclass/mercurial.eclass @@ -7,7 +7,7 @@ # @AUTHOR: # Next gen author: Krzysztof Pawlik # Original author: Aron Griffis -# @SUPPORTED_EAPIS: 7 +# @SUPPORTED_EAPIS: 7 8 # @BLURB: This eclass provides generic mercurial fetching functions # @DESCRIPTION: # This eclass provides generic mercurial fetching functions. To fetch sources @@ -16,7 +16,7 @@ # project name in all of them. case ${EAPI:-0} in - 7) ;; + [78]) ;; *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; esac diff --git a/eclass/multibuild.eclass b/eclass/multibuild.eclass index 37568ebf87cc..a0941ae02ea4 100644 --- a/eclass/multibuild.eclass +++ b/eclass/multibuild.eclass @@ -1,4 +1,4 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: multibuild.eclass @@ -6,25 +6,20 @@ # Michał Górny # @AUTHOR: # Author: Michał Górny -# @SUPPORTED_EAPIS: 4 5 6 7 8 +# @SUPPORTED_EAPIS: 6 7 8 # @BLURB: A generic eclass for building multiple variants of packages. # @DESCRIPTION: # The multibuild eclass aims to provide a generic framework for building # multiple 'variants' of a package (e.g. multilib, Python # implementations). -case "${EAPI:-0}" in - [0-3]) - die "Unsupported EAPI=${EAPI:-0} (too old) for ${ECLASS}" - ;; - [4-8]) - ;; - *) - die "Unsupported EAPI=${EAPI} (unknown) for ${ECLASS}" - ;; +case ${EAPI} in + 6|7|8) ;; + *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; esac -if [[ ! ${_MULTIBUILD} ]]; then +if [[ ! ${_MULTIBUILD_ECLASS} ]]; then +_MULTIBUILD_ECLASS=1 # @ECLASS-VARIABLE: MULTIBUILD_VARIANTS # @REQUIRED @@ -137,25 +132,6 @@ multibuild_foreach_variant() { return ${ret} } -# @FUNCTION: multibuild_parallel_foreach_variant -# @USAGE: [...] -# @DESCRIPTION: -# Run the passed command repeatedly for each of the enabled package -# variants. This used to run the commands in parallel but now it's -# just a deprecated alias to multibuild_foreach_variant. -# -# The function returns 0 if all commands return 0, or the first non-zero -# exit status otherwise. However, it performs all the invocations -# nevertheless. It is preferred to call 'die' inside of the passed -# function. -multibuild_parallel_foreach_variant() { - debug-print-function ${FUNCNAME} "${@}" - - [[ ${EAPI} == [45] ]] || die "${FUNCNAME} is banned in EAPI ${EAPI}" - - multibuild_foreach_variant "${@}" -} - # @FUNCTION: multibuild_for_best_variant # @USAGE: [...] # @DESCRIPTION: @@ -172,10 +148,7 @@ multibuild_for_best_variant() { [[ ${MULTIBUILD_VARIANTS} ]] \ || die "MULTIBUILD_VARIANTS need to be set" - # bash-4.1 can't handle negative subscripts - local MULTIBUILD_VARIANTS=( - "${MULTIBUILD_VARIANTS[$(( ${#MULTIBUILD_VARIANTS[@]} - 1 ))]}" - ) + local MULTIBUILD_VARIANTS=( "${MULTIBUILD_VARIANTS[-1]}" ) multibuild_foreach_variant "${@}" } @@ -192,15 +165,10 @@ multibuild_copy_sources() { einfo "Will copy sources from ${_MULTIBUILD_INITIAL_BUILD_DIR}" - local cp_args=() - if cp --reflink=auto --version &>/dev/null; then - # enable reflinking if possible to make this faster - cp_args+=( --reflink=auto ) - fi - _multibuild_create_source_copy() { einfo "${MULTIBUILD_VARIANT}: copying to ${BUILD_DIR}" - cp -p -R "${cp_args[@]}" \ + # enable reflinking if possible to make this faster + cp -p -R --reflink=auto \ "${_MULTIBUILD_INITIAL_BUILD_DIR}" "${BUILD_DIR}" || die } @@ -234,43 +202,14 @@ run_in_build_dir() { # (the real root). Both directories have to be real, absolute paths # (i.e. including ${D}). Source root will be removed. multibuild_merge_root() { + debug-print-function ${FUNCNAME} "${@}" + local src=${1} local dest=${2} - local ret - - if use userland_BSD; then - # Most of BSD variants fail to copy broken symlinks, #447370 - # also, they do not support --version - - tar -C "${src}" -f - -c . \ - | tar -x -f - -C "${dest}" - [[ ${PIPESTATUS[*]} == '0 0' ]] - ret=${?} - else - local cp_args=() - - if cp -a --version &>/dev/null; then - cp_args+=( -a ) - else - cp_args+=( -P -R -p ) - fi - - if cp --reflink=auto --version &>/dev/null; then - # enable reflinking if possible to make this faster - cp_args+=( --reflink=auto ) - fi - - cp "${cp_args[@]}" "${src}"/. "${dest}"/ - ret=${?} - fi - - if [[ ${ret} -ne 0 ]]; then - die "${MULTIBUILD_VARIANT:-(unknown)}: merging image failed." - fi - - rm -rf "${src}" + # enable reflinking if possible to make this faster + cp -a --reflink=auto "${src}"/. "${dest}"/ || die "${MULTIBUILD_VARIANT:-(unknown)}: merging image failed" + rm -rf "${src}" || die } -_MULTIBUILD=1 fi diff --git a/eclass/multilib-build.eclass b/eclass/multilib-build.eclass index 17cd7da0d189..a47e65611354 100644 --- a/eclass/multilib-build.eclass +++ b/eclass/multilib-build.eclass @@ -1,4 +1,4 @@ -# Copyright 2013-2021 Gentoo Authors +# Copyright 2013-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: multilib-build.eclass @@ -6,7 +6,7 @@ # Michał Górny # @AUTHOR: # Author: Michał Górny -# @SUPPORTED_EAPIS: 5 6 7 8 +# @SUPPORTED_EAPIS: 6 7 8 # @PROVIDES: multibuild # @BLURB: flags and utility functions for building multilib packages # @DESCRIPTION: @@ -19,14 +19,13 @@ # to properly request multilib enabled. case ${EAPI} in - 5|6|7|8) ;; + 6|7|8) ;; *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; esac -if [[ -z ${_MULTILIB_BUILD} ]]; then -_MULTILIB_BUILD=1 +if [[ -z ${_MULTILIB_BUILD_ECLASS} ]]; then +_MULTILIB_BUILD_ECLASS=1 -[[ ${EAPI} == 5 ]] && inherit eutils inherit multibuild multilib # @ECLASS-VARIABLE: _MULTILIB_FLAGS @@ -244,23 +243,6 @@ multilib_parallel_foreach_abi() { multibuild_foreach_variant _multilib_multibuild_wrapper "${@}" } -# @FUNCTION: multilib_for_best_abi -# @USAGE: ... -# @DESCRIPTION: -# Runs the given command with setup for the 'best' (usually native) ABI. -multilib_for_best_abi() { - debug-print-function ${FUNCNAME} "${@}" - - [[ ${EAPI} == 5 ]] || die "${FUNCNAME} is banned in EAPI ${EAPI}, use multilib_is_native_abi() instead" - - eqawarn "QA warning: multilib_for_best_abi() function is deprecated and should" - eqawarn "not be used. The multilib_is_native_abi() check may be used instead." - - local MULTIBUILD_VARIANTS=( $(multilib_get_enabled_abi_pairs) ) - - multibuild_for_best_variant _multilib_multibuild_wrapper "${@}" -} - # @FUNCTION: multilib_check_headers # @DESCRIPTION: # Check whether the header files are consistent between ABIs. @@ -583,20 +565,6 @@ multilib_is_native_abi() { [[ ${COMPLETE_MULTILIB} == yes || ${ABI} == ${DEFAULT_ABI} ]] } -# @FUNCTION: multilib_build_binaries -# @DESCRIPTION: -# Deprecated synonym for multilib_is_native_abi -multilib_build_binaries() { - debug-print-function ${FUNCNAME} "${@}" - - [[ ${EAPI} == 5 ]] || die "${FUNCNAME} is banned in EAPI ${EAPI}, use multilib_is_native_abi() instead" - - eqawarn "QA warning: multilib_build_binaries is deprecated. Please use the equivalent" - eqawarn "multilib_is_native_abi function instead." - - multilib_is_native_abi "${@}" -} - # @FUNCTION: multilib_native_use_with # @USAGE: [ []] # @DESCRIPTION: diff --git a/eclass/multilib-minimal.eclass b/eclass/multilib-minimal.eclass index 9a1efe2cc466..92968b6cf213 100644 --- a/eclass/multilib-minimal.eclass +++ b/eclass/multilib-minimal.eclass @@ -1,10 +1,10 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: multilib-minimal.eclass # @MAINTAINER: # Michał Górny -# @SUPPORTED_EAPIS: 5 6 7 8 +# @SUPPORTED_EAPIS: 6 7 8 # @PROVIDES: multilib-build # @BLURB: wrapper for multilib builds providing convenient multilib_src_* functions # @DESCRIPTION: @@ -23,18 +23,15 @@ # # If you need generic install rules, use multilib_src_install_all function. - case ${EAPI} in - 5|6|7|8) ;; + 6|7|8) ;; *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; esac - -[[ ${EAPI} == 5 ]] && inherit eutils inherit multilib-build -EXPORT_FUNCTIONS src_configure src_compile src_test src_install - +if [[ ! ${_MULTILIB_MINIMAL_ECLASS} ]]; then +_MULTILIB_MINIMAL_ECLASS=1 multilib-minimal_src_configure() { debug-print-function ${FUNCNAME} "$@" @@ -123,3 +120,7 @@ multilib-minimal_src_install() { einstalldocs fi } + +fi + +EXPORT_FUNCTIONS src_configure src_compile src_test src_install diff --git a/eclass/openib.eclass b/eclass/openib.eclass index e25418854c89..02a6b40fcd3c 100644 --- a/eclass/openib.eclass +++ b/eclass/openib.eclass @@ -1,6 +1,7 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 +# @DEAD # @ECLASS: openib.eclass # @MAINTAINER: # maintainer-needed@gentoo.org diff --git a/eclass/python-r1.eclass b/eclass/python-r1.eclass index dc624946cfc1..4b51cc18b959 100644 --- a/eclass/python-r1.eclass +++ b/eclass/python-r1.eclass @@ -1,4 +1,4 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: python-r1.eclass @@ -125,7 +125,6 @@ fi # # Example value: # @CODE -# dev-lang/python-exec:= # python_targets_python2_7? ( dev-lang/python:2.7[gdbm] ) # python_targets_pypy? ( dev-python/pypy[gdbm] ) # @CODE @@ -207,12 +206,6 @@ _python_set_globals() { local requse="|| ( ${flags[*]} )" local usedep=${optflags// /,} - # 1) well, python-exec would suffice as an RDEP - # but no point in making this overcomplex, BDEP doesn't hurt anyone - # 2) python-exec should be built with all targets forced anyway - # but if new targets were added, we may need to force a rebuild - deps+=">=dev-lang/python-exec-2:=[${usedep}]" - if [[ ${PYTHON_DEPS+1} ]]; then # IUSE is magical, so we can't really check it # (but we verify PYTHON_COMPAT already) diff --git a/eclass/python-single-r1.eclass b/eclass/python-single-r1.eclass index 228c66a77af6..5a4bcea55da4 100644 --- a/eclass/python-single-r1.eclass +++ b/eclass/python-single-r1.eclass @@ -1,4 +1,4 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: python-single-r1.eclass @@ -136,7 +136,6 @@ EXPORT_FUNCTIONS pkg_setup # # Example value: # @CODE -# dev-lang/python-exec:= # python_single_target_python2_7? ( dev-lang/python:2.7[gdbm] ) # python_single_target_pypy? ( dev-python/pypy[gdbm] ) # @CODE @@ -219,13 +218,8 @@ _python_single_set_globals() { local deps= i PYTHON_PKG_DEP for i in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do _python_export "${i}" PYTHON_PKG_DEP - # 1) well, python-exec would suffice as an RDEP - # but no point in making this overcomplex, BDEP doesn't hurt anyone - # 2) python-exec should be built with all targets forced anyway - # but if new targets were added, we may need to force a rebuild deps+="python_single_target_${i}? ( ${PYTHON_PKG_DEP} - >=dev-lang/python-exec-2:=[python_targets_${i}] ) " done diff --git a/eclass/python-utils-r1.eclass b/eclass/python-utils-r1.eclass index 22e00c56815d..aece257e8cba 100644 --- a/eclass/python-utils-r1.eclass +++ b/eclass/python-utils-r1.eclass @@ -1,4 +1,4 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: python-utils-r1.eclass @@ -416,12 +416,18 @@ _python_export() { case ${impl} in python2.7) PYTHON_PKG_DEP='>=dev-lang/python-2.7.5-r2:2.7';; + python3.8) + PYTHON_PKG_DEP=">=dev-lang/python-3.8.12_p1-r1:3.8";; + python3.9) + PYTHON_PKG_DEP=">=dev-lang/python-3.9.9-r1:3.9";; + python3.10) + PYTHON_PKG_DEP=">=dev-lang/python-3.10.0_p1-r1:3.10";; python*) PYTHON_PKG_DEP="dev-lang/python:${impl#python}";; pypy) PYTHON_PKG_DEP='>=dev-python/pypy-7.3.0:0=';; pypy3) - PYTHON_PKG_DEP='>=dev-python/pypy3-7.3.7:0=';; + PYTHON_PKG_DEP='>=dev-python/pypy3-7.3.7-r1:0=';; *) die "Invalid implementation: ${impl}" esac @@ -1291,6 +1297,16 @@ epytest() { _python_check_EPYTHON + local color + case ${NOCOLOR} in + true|yes) + color=no + ;; + *) + color=yes + ;; + esac + local args=( # verbose progress reporting and tracebacks -vv @@ -1302,6 +1318,8 @@ epytest() { # override filterwarnings=error, we do not really want -Werror # for end users, as it tends to fail on new warnings from deps -Wdefault + # override color output + "--color=${color}" ) local x for x in "${EPYTEST_DESELECT[@]}"; do diff --git a/eclass/rust-toolchain.eclass b/eclass/rust-toolchain.eclass index 64caf3a55559..8c783eaf0610 100644 --- a/eclass/rust-toolchain.eclass +++ b/eclass/rust-toolchain.eclass @@ -1,10 +1,10 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: rust-toolchain.eclass # @MAINTAINER: # Rust Project -# @SUPPORTED_EAPIS: 6 7 +# @SUPPORTED_EAPIS: 6 7 8 # @BLURB: helps map gentoo arches to rust ABIs # @DESCRIPTION: # This eclass contains a src_unpack default phase function, and @@ -14,6 +14,7 @@ case ${EAPI} in 6) : ;; 7) : ;; + 8) : ;; *) die "EAPI=${EAPI:-0} is not supported" ;; esac diff --git a/eclass/tests/distutils-r1.sh b/eclass/tests/distutils-r1.sh index 1ccb1dfbc523..cd768066bf37 100755 --- a/eclass/tests/distutils-r1.sh +++ b/eclass/tests/distutils-r1.sh @@ -97,7 +97,7 @@ tend einfo distutils_enable_tests eindent BASE_IUSE="python_targets_python3_8" -BASE_DEPS="python_targets_python3_8? ( dev-lang/python:3.8 ) >=dev-lang/python-exec-2:=[python_targets_python3_8(-)?]" +BASE_DEPS="python_targets_python3_8? ( >=dev-lang/python-3.8.12_p1-r1:3.8 )" TEST_RESTRICT="!test? ( test )" einfo "empty RDEPEND" diff --git a/eclass/tests/distutils-r1_single.sh b/eclass/tests/distutils-r1_single.sh index 56b62ca0e90f..fdeba2e2b9b2 100755 --- a/eclass/tests/distutils-r1_single.sh +++ b/eclass/tests/distutils-r1_single.sh @@ -77,7 +77,7 @@ inherit distutils-r1 einfo distutils_enable_tests eindent BASE_IUSE="+python_single_target_python3_8" -BASE_DEPS="python_single_target_python3_8? ( dev-lang/python:3.8 >=dev-lang/python-exec-2:=[python_targets_python3_8] )" +BASE_DEPS="python_single_target_python3_8? ( >=dev-lang/python-3.8.12_p1-r1:3.8 )" TEST_RESTRICT="!test? ( test )" einfo "empty RDEPEND" diff --git a/eclass/toolchain-glibc.eclass b/eclass/toolchain-glibc.eclass deleted file mode 100644 index a0a407882d60..000000000000 --- a/eclass/toolchain-glibc.eclass +++ /dev/null @@ -1,1488 +0,0 @@ -# Copyright 1999-2019 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -# @DEAD - -# @ECLASS: toolchain-glibc.eclass -# @MAINTAINER: -# -# @SUPPORTED_EAPIS: 0 1 2 3 4 5 6 -# @BLURB: Common code for sys-libs/glibc ebuilds -# @DESCRIPTION: -# This eclass contains the common phase functions migrated from -# sys-libs/glibc eblits. - -if [[ -z ${_TOOLCHAIN_GLIBC_ECLASS} ]]; then - -TMPFILES_OPTIONAL=1 - -inherit eutils versionator toolchain-funcs flag-o-matic gnuconfig \ - multilib systemd tmpfiles unpacker multiprocessing prefix - -case ${EAPI:-0} in - 0|1|2|3) EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_test \ - src_install pkg_preinst pkg_postinst;; - 2|3) EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure \ - src_compile src_test src_install pkg_preinst pkg_postinst;; - 4|5) EXPORT_FUNCTIONS pkg_pretend pkg_setup src_unpack src_prepare \ - src_configure src_compile src_test src_install \ - pkg_preinst pkg_postinst;; - 6) EXPORT_FUNCTIONS pkg_pretend;; - *) die "Unsupported EAPI=${EAPI}";; -esac - -# == common == - -alt_prefix() { - is_crosscompile && echo /usr/${CTARGET} -} - -if [[ ${EAPI:-0} == [012] ]] ; then - : ${ED:=${D}} - : ${EROOT:=${ROOT}} -fi -# This indirection is for binpkgs. #523332 -_nonfatal() { nonfatal "$@" ; } -if [[ ${EAPI:-0} == [0123] ]] ; then - nonfatal() { "$@" ; } - _nonfatal() { "$@" ; } -fi - -# 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() { - 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" -} - -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 ! glibc_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 ! glibc_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=* - filter-ldflags -Wl,-rpath=* - - # Bug 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 -- 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 - - # Can't build glibc itself with fortify code. Newer versions add - # this flag for us, so no need to do it manually. - version_is_at_least 2.16 ${PV} || append-cppflags -U_FORTIFY_SOURCE - - # building glibc <2.25 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 #293721 - # Note we have to handle both user-given CFLAGS and gcc defaults via - # spec rules here. We can't simply add -fno-stack-protector as it gets - # added before user flags, and we can't just filter-flags because - # _filter_hardened doesn't support globs. - filter-flags -fstack-protector* - if ! version_is_at_least 2.25 ; then - tc-enables-ssp && append-flags $(test-flags -fno-stack-protector) - fi - - if [[ $(gcc-major-version) -lt 6 ]]; then - # Starting with gcc-6 (and fully upstreamed pie patches) we control - # default enabled/disabled pie via use flags. So nothing to do - # here. #618160 - - 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_nptl() { - [[ -z ${LT_VER} ]] && return 0 - want_tls || return 1 - use nptl || return 1 - - # Older versions of glibc had incomplete arch support for nptl. - # But if you're building those now, you can handle USE=nptl yourself. - return 0 -} - -want_linuxthreads() { - [[ -z ${LT_VER} ]] && return 1 - use linuxthreads -} - -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 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 just_headers ; 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} -} - -just_headers() { - is_crosscompile && use headers-only -} - -glibc_banner() { - local b="Gentoo ${PVR}" - [[ -n ${SNAP_VER} ]] && b+=" snapshot ${SNAP_VER}" - [[ -n ${PATCH_VER} ]] && ! use vanilla && b+=" p${PATCH_VER}" - echo "${b}" -} - -# == phases == - -glibc_compile_test() { - local ret save_cflags=${CFLAGS} - CFLAGS+=" $1" - shift - - pushd "${T}" >/dev/null - - rm -f glibc-test* - printf '%b' "$*" > glibc-test.c - - _nonfatal emake -s glibc-test - ret=$? - - popd >/dev/null - - CFLAGS=${save_cflags} - return ${ret} -} - -glibc_run_test() { - local ret - - if [[ ${EMERGE_FROM} == "binary" ]] ; then - # ignore build failures when installing a binary package #324685 - glibc_compile_test "" "$@" 2>/dev/null || return 0 - else - if ! glibc_compile_test "" "$@" ; then - ewarn "Simple build failed ... assuming this is desired #324685" - return 0 - fi - fi - - pushd "${T}" >/dev/null - - ./glibc-test - ret=$? - rm -f glibc-test* - - popd >/dev/null - - return ${ret} -} - -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 - - # Older versions always installed setuid, so no need to check. - in_iuse suid || 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." - # Do not die on older kernels as devpts did not export these settings #489520. - if version_is_at_least 2.6.25 $(uname -r) ; then - die "mount & fix your /dev/pts settings" - fi - fi -} - -toolchain-glibc_pkg_pretend() { - if [[ ${EAPI:-0} == 6 ]]; then - eerror "We're moving code back to the ebuilds to get away from the ancient EAPI cruft." - eerror "From EAPI=6 on you'll have to define the phases in the glibc ebuilds." - die "Silly overlay authors..." - fi - - # For older EAPIs, this is run in pkg_preinst. - if [[ ${EAPI:-0} != [0123] ]] ; then - check_devpts - fi - - # 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" - [[ ${I_ALLOW_TO_BREAK_MY_SYSTEM} = yes ]] || die "Aborting to save your system." - fi - - if ! glibc_run_test '#include \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 "http://bugs.gentoo.org/262698" - die "keeping your system alive, say thank you" - fi - - if ! glibc_run_test '#include \n#include \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() 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 ${EROOT}/etc/locale.gen ]] && [[ -e ${EROOT}/etc/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 http://www.gentoo.org/doc/en/change-chost.xml" - die "please fix your CHOST" - fi - - if [[ -e /proc/xen ]] && [[ $(tc-arch) == "x86" ]] && ! is-flag -mno-tls-direct-seg-refs ; then - ewarn "You are using Xen but don't have -mno-tls-direct-seg-refs in your CFLAGS." - ewarn "This will result in a 50% performance penalty when running with a 32bit" - ewarn "hypervisor, which is probably not what you want." - fi - - # Make sure host system is up to date #394453 - if has_version '\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 aren't using it - just_headers && return - - local run_kv build_kv want_kv - run_kv=$(tc_glibc_get_KV) - build_kv=$(tc_glibc_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" - if [[ -n ${SNAP_VER} ]] ; then - a="${a}-${SNAP_VER}" - else - if [[ -n $2 ]] ; then - a="${a}-$2" - else - a="${a}-${RELEASE_VER}" - fi - fi - if has ${a}.tar.xz ${A} ; then - unpacker ${a}.tar.xz - else - unpack ${a}.tar.bz2 - fi - [[ -n $1 ]] && { mv ${a} $1 || die ; } -} - -toolchain-glibc_do_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 -} - -toolchain-glibc_src_unpack() { - setup_env - - toolchain-glibc_do_src_unpack - [[ ${EAPI:-0} == [01] ]] && cd "${S}" && toolchain-glibc_src_prepare -} - -toolchain-glibc_src_prepare() { - # tag, glibc is it - if ! version_is_at_least 2.17 ; then - [[ -e csu/Banner ]] && die "need new banner location" - glibc_banner > csu/Banner - fi - if [[ -n ${PATCH_VER} ]] && ! use vanilla ; then - 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 - fi - - if just_headers ; then - if [[ -e ports/sysdeps/mips/preconfigure ]] ; then - # mips peeps like to screw with us. if building headers, - # we don't have a real compiler, so we can't let them - # insert -mabi on us. - sed -i '/CPPFLAGS=.*-mabi/s|.*|:|' ports/sysdeps/mips/preconfigure || die - find ports/sysdeps/mips/ -name Makefile -exec sed -i '/^CC.*-mabi=/s:-mabi=.*:-D_MIPS_SZPTR=32:' {} + - fi - fi - - epatch_user - - gnuconfig_update - - # Glibc is stupid sometimes, and doesn't realize that with a - # static C-Only gcc, -lgcc_eh doesn't exist. - # https://sourceware.org/ml/libc-alpha/2003-09/msg00100.html - # https://sourceware.org/ml/libc-alpha/2005-02/msg00042.html - # But! Finally fixed in recent versions: - # https://sourceware.org/ml/libc-alpha/2012-05/msg01865.html - if ! version_is_at_least 2.16 ; then - echo 'int main(){}' > "${T}"/gcc_eh_test.c - if ! $(tc-getCC ${CTARGET}) ${CFLAGS} ${LDFLAGS} "${T}"/gcc_eh_test.c -lgcc_eh 2>/dev/null ; then - sed -i -e 's:-lgcc_eh::' Makeconfig || die "sed gcc_eh" - fi - fi - - cd "${WORKDIR}" - find . -type f '(' -size 0 -o -name "*.orig" ')' -delete - find . -name configure -exec touch {} + - - eprefixify extra/locale/locale-gen - - # Fix permissions on some of the scripts. - chmod u+x "${S}"/scripts/*.sh -} -dump_toolchain_settings() { - echo - - einfo "$*" - - local v - for v in ABI CBUILD CHOST CTARGET CBUILD_OPT CTARGET_OPT CC LD {AS,C,CPP,CXX,LD}FLAGS ; do - einfo " $(printf '%15s' ${v}:) ${!v}" - done - - # The glibc configure script doesn't properly use LDFLAGS all the time. - export CC="$(tc-getCC ${CTARGET}) ${LDFLAGS}" - einfo " $(printf '%15s' 'Manual CC:') ${CC}" - echo -} - -glibc_do_configure() { - # Glibc does not work with gold (for various reasons) #269274. - tc-ld-disable-gold - - dump_toolchain_settings "Configuring glibc for $1" - - 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+=",ports" - popd > /dev/null - - if has_version ' "${T}"/test.c - if ! $(tc-getCC ${CTARGET}) ${CFLAGS} ${LDFLAGS} "${T}"/test.c -Wl,-emain -lgcc 2>/dev/null ; then - sed -i -e '/^CC = /s:$: -B$(objdir)/../'"gcc-${GCC_BOOTSTRAP_VER}/${ABI}:" config.make || die - mkdir -p sunrpc - cp $(which rpcgen) sunrpc/cross-rpcgen || die - touch -t 202001010101 sunrpc/cross-rpcgen || die - fi - fi -} - -toolchain-glibc_headers_configure() { - export ABI=default - - local builddir=$(builddir "headers") - mkdir -p "${builddir}" - cd "${builddir}" - - # if we don't have a compiler yet, we can't really test it now ... - # hopefully they don't affect header generation, so let's hope for - # the best here ... - local v vars=( - ac_cv_header_cpuid_h=yes - libc_cv_{386,390,alpha,arm,hppa,ia64,mips,{powerpc,sparc}{,32,64},sh,x86_64}_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_ppc_rel16=yes - libc_cv_predef_fortify_source=no - 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 - libc_mips_abi=${ABI} - libc_mips_float=$([[ $(tc-is-softfloat) == "yes" ]] && echo soft || echo hard) - # These libs don't have configure flags. - ac_cv_lib_audit_audit_log_user_avc_message=no - ac_cv_lib_cap_cap_init=no - ) - if ! version_is_at_least 2.25 ; then - vars+=( - libc_cv_predef_stack_protector=no - ) - fi - einfo "Forcing cached settings:" - for v in "${vars[@]}" ; do - einfo " ${v}" - export ${v} - done - - # Blow away some random CC settings that screw things up. #550192 - if [[ -d ${S}/sysdeps/mips ]]; then - pushd "${S}"/sysdeps/mips >/dev/null - sed -i -e '/^CC +=/s:=.*:= -D_MIPS_SZPTR=32:' mips32/Makefile mips64/n32/Makefile || die - sed -i -e '/^CC +=/s:=.*:= -D_MIPS_SZPTR=64:' mips64/n64/Makefile || die - if version_is_at_least 2.21 ; then - # Force the mips ABI to the default. This is OK because the set of - # installed headers in this phase is the same between the 3 ABIs. - # If this ever changes, this hack will break, but that's unlikely - # as glibc discourages that behavior. - # https://crbug.com/647033 - sed -i -e 's:abiflag=.*:abiflag=_ABIO32:' preconfigure || die - fi - popd >/dev/null - fi - - local myconf=() - myconf+=( - --disable-sanity-checks - --enable-hacker-mode - --without-cvs - --disable-werror - --enable-bind-now - --build=${CBUILD_OPT:-${CBUILD}} - --host=${CTARGET_OPT:-${CTARGET}} - --with-headers=$(alt_build_headers) - --prefix="${EPREFIX}/usr" - ${EXTRA_ECONF} - ) - - local addons - [[ -d ${S}/ports ]] && addons+=",ports" - # Newer versions require nptl, so there is no addon for it. - version_is_at_least 2.20 || addons+=",nptl" - myconf+=( --enable-add-ons="${addons#,}" ) - - # Nothing is compiled here which would affect the headers for the target. - # So forcing CC/CFLAGS is sane. - set -- "${S}"/configure "${myconf[@]}" - echo "$@" - CC="$(tc-getBUILD_CC)" \ - CFLAGS="-O1 -pipe" \ - CPPFLAGS="-U_FORTIFY_SOURCE" \ - LDFLAGS="" \ - "$@" || die "failed to configure glibc" -} - -toolchain-glibc_do_src_configure() { - if just_headers ; then - toolchain-glibc_headers_configure - else - want_linuxthreads && glibc_do_configure linuxthreads - want_nptl && glibc_do_configure nptl - fi -} - -toolchain-glibc_src_configure() { - foreach_abi toolchain-glibc_do_src_configure -} - -toolchain-glibc_do_src_compile() { - local t - for t in linuxthreads nptl ; do - if want_${t} ; then - [[ ${EAPI:-0} == [01] ]] && glibc_do_configure ${t} - emake -C "$(builddir ${t})" || die "make ${t} for ${ABI} failed" - fi - done -} - -toolchain-glibc_src_compile() { - if just_headers ; then - [[ ${EAPI:-0} == [01] ]] && toolchain-glibc_headers_configure - return - fi - - foreach_abi toolchain-glibc_do_src_compile -} - -glibc_src_test() { - cd "$(builddir $1)" - nonfatal emake -j1 check && return 0 - einfo "make check failed - re-running with --keep-going to get the rest of the results" - nonfatal emake -j1 -k check - ewarn "make check failed for ${ABI}-${CTARGET}-$1" - return 1 -} - -toolchain-glibc_do_src_test() { - local ret=0 t - for t in linuxthreads nptl ; do - if want_${t} ; then - glibc_src_test ${t} - : $(( ret |= $? )) - fi - done - return ${ret} -} - -toolchain-glibc_src_test() { - # Give tests more time to complete. - export TIMEOUTFACTOR=5 - - foreach_abi toolchain-glibc_do_src_test || die "tests failed" -} - -toolchain-glibc_do_src_install() { - local builddir=$(builddir $(want_linuxthreads && echo linuxthreads || echo nptl)) - cd "${builddir}" - - emake install_root="${D}$(alt_prefix)" install || die - - if want_linuxthreads && want_nptl ; then - einfo "Installing NPTL to $(alt_libdir)/tls/..." - cd "$(builddir 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} "${ED}"$(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 ${ED}$(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" \ - "${ED}"$(alt_usrlibdir)/${l} > "${ED}"$(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} "${ED}"$(alt_usrlibdir)/nptl/ || die "copying nptl ${src_lib}" - src_lib=${src_lib/%.a/_nonshared.a} - if [[ -e ${src_lib} ]] ; then - cp -a ${src_lib} "${ED}"$(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 "${ED}"$(alt_libdir)/$(scanelf -qSF'%S#F' elf/ld.so) || die "copying nptl interp" - fi - - # Normally real_pv is ${PV}. Live ebuilds are exception, there we need - # to infer upstream version: - # '#define VERSION "2.26.90"' -> '2.26.90' - local upstream_pv=$(sed -n -r 's/#define VERSION "(.*)"/\1/p' "${S}"/version.h) - # Newer versions get fancy with libm linkage to include vectorized support. - # While we don't really need a ldscript here, portage QA checks get upset. - if [[ -e ${ED}$(alt_usrlibdir)/libm-${upstream_pv}.a ]] ; then - dosym ../../$(get_libdir)/libm-${upstream_pv}.so $(alt_usrlibdir)/libm-${upstream_pv}.so - fi - - # We'll take care of the cache ourselves - rm -f "${ED}"/etc/ld.so.cache - - # 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 even - # if the main library set isn't installed into the right place. Maybe - # we should query the active gcc for info instead of hardcoding it ? - local i ldso_abi ldso_name - local ldso_abi_list=( - # x86 - amd64 /lib64/ld-linux-x86-64.so.2 - x32 /libx32/ld-linux-x32.so.2 - x86 /lib/ld-linux.so.2 - # mips - o32 /lib/ld.so.1 - n32 /lib32/ld.so.1 - n64 /lib64/ld.so.1 - # powerpc - ppc /lib/ld.so.1 - # s390 - s390 /lib/ld.so.1 - s390x /lib/ld64.so.1 - # sparc - sparc32 /lib/ld-linux.so.2 - sparc64 /lib64/ld-linux.so.2 - ) - case $(tc-endian) in - little) - ldso_abi_list+=( - # arm - arm64 /lib/ld-linux-aarch64.so.1 - # ELFv2 (glibc does not support ELFv1 on LE) - ppc64 /lib64/ld64.so.2 - ) - ;; - big) - ldso_abi_list+=( - # arm - arm64 /lib/ld-linux-aarch64_be.so.1 - # ELFv1 (glibc does not support ELFv2 on BE) - ppc64 /lib64/ld64.so.1 - ) - ;; - esac - if [[ ${SYMLINK_LIB} == "yes" ]] && [[ ! -e ${ED}/$(alt_prefix)/lib ]] ; then - dosym $(get_abi_LIBDIR ${DEFAULT_ABI}) $(alt_prefix)/lib - fi - for (( i = 0; i < ${#ldso_abi_list[@]}; i += 2 )) ; do - ldso_abi=${ldso_abi_list[i]} - has ${ldso_abi} $(get_install_abis) || continue - - ldso_name="$(alt_prefix)${ldso_abi_list[i+1]}" - if [[ ! -L ${ED}/${ldso_name} && ! -e ${ED}/${ldso_name} ]] ; then - dosym ../$(get_abi_LIBDIR ${ldso_abi})/${ldso_name##*/} ${ldso_name} - fi - done - - # With devpts under Linux mounted properly, we do not need the pt_chown - # binary to be setuid. This is because the default owners/perms will be - # exactly what we want. - if in_iuse suid && ! use suid ; then - find "${ED}" -name pt_chown -exec chmod -s {} + - 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 - # We need to make sure that /lib and /usr/lib always exists. - # gcc likes to use relative paths to get to its multilibs like - # /usr/lib/../lib64/. So while we don't install any files into - # /usr/lib/, we do need it to exist. - cd "${ED}"$(alt_libdir)/.. - [[ -e lib ]] || mkdir lib - cd "${ED}"$(alt_usrlibdir)/.. - [[ -e lib ]] || mkdir lib - - dosym usr/include $(alt_prefix)/sys-include - return 0 - 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 > "${ED}"/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 ${ED}/usr/$(get_abi_LIBDIR ${a})/locale ]] ; then - dosym /usr/$(get_libdir)/locale /usr/$(get_abi_LIBDIR ${a})/locale - fi - done - - 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 - - if ! in_iuse nscd || use nscd ; then - doinitd "$(prefixify_ro "${WORKDIR}"/extra/etc/nscd)" || die - - local nscd_args=( - -e "s:@PIDFILE@:$(strings "${ED}"/usr/sbin/nscd | grep nscd.pid):" - ) - version_is_at_least 2.16 || nscd_args+=( -e 's: --foreground : :' ) - sed -i "${nscd_args[@]}" "${ED}"/etc/init.d/nscd - - # Newer versions of glibc include the nscd.service themselves. - # TODO: Drop the $FILESDIR copy once 2.19 goes stable. - if version_is_at_least 2.19 ; then - systemd_dounit nscd/nscd.service || die - newtmpfiles nscd/nscd.tmpfiles nscd.conf || die - else - systemd_dounit "${FILESDIR}"/nscd.service || die - newtmpfiles "${FILESDIR}"/nscd.tmpfilesd nscd.conf || die - fi - else - # Do this since extra/etc/*.conf above might have nscd.conf. - rm -f "${ED}"/etc/nscd.conf - fi - - echo 'LDPATH="include ld.so.conf.d/*.conf"' > "${T}"/00glibc - doenvd "${T}"/00glibc || die - - for d in BUGS ChangeLog* CONFORMANCE FAQ NEWS NOTES PROJECTS README* ; do - [[ -s ${d} ]] && dodoc ${d} - done - - # Prevent overwriting of the /etc/localtime symlink. We'll handle the - # creation of the "factory" symlink in pkg_postinst(). - rm -f "${ED}"/etc/localtime -} - -toolchain-glibc_headers_install() { - local builddir=$(builddir "headers") - cd "${builddir}" - emake install_root="${D}$(alt_prefix)" install-headers || die - if ! version_is_at_least 2.16 ; then - insinto $(alt_headers)/bits - doins bits/stdio_lim.h || die - fi - 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 $(alt_prefix)/sys-include -} - -toolchain-glibc_src_install() { - if just_headers ; then - export ABI=default - toolchain-glibc_headers_install - return - fi - - foreach_abi toolchain-glibc_do_src_install -} - -# 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 -} - -toolchain-glibc_pkg_preinst() { - # nothing to do if just installing headers - just_headers && return - - # prepare /etc/ld.so.conf.d/ for files - mkdir -p "${EROOT}"/etc/ld.so.conf.d - - # Default /etc/hosts.conf:multi to on for systems with small dbs. - if [[ $(wc -l < "${EROOT}"/etc/hosts) -lt 1000 ]] ; then - sed -i '/^multi off/s:off:on:' "${ED}"/etc/host.conf - elog "Defaulting /etc/host.conf:multi to on" - fi - - [[ ${ROOT} != "/" ]] && return 0 - [[ -d ${ED}/$(get_libdir) ]] || return 0 - [[ -z ${BOOTSTRAP_RAP} ]] && glibc_sanity_check - - # For newer EAPIs, this was run in pkg_pretend. - if [[ ${EAPI:-0} == [0123] ]] ; then - check_devpts - fi -} - -toolchain-glibc_pkg_postinst() { - # nothing to do if just installing headers - just_headers && return - - if ! tc-is-cross-compiler && [[ -x ${EROOT}/usr/sbin/iconvconfig ]] ; then - # Generate fastloading iconv module configuration file. - "${EROOT}"/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="${EROOT}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="${EROOT}usr/share/i18n/SUPPORTED" - fi - locale-gen -j $(makeopts_jobs) --config "${locale_list}" - fi -} - -_TOOLCHAIN_GLIBC_ECLASS=1 -fi -- cgit v1.2.3