From 63b0d66c654dce7e4a75776357cac44379eba802 Mon Sep 17 00:00:00 2001 From: "Anthony G. Basile" Date: Sat, 30 Dec 2017 06:56:29 -0500 Subject: toolchain.eclass: update to EAPI=5 standards This eclass is inherited by ebuilds in sys-devel/{gcc,kgcc64,gcc-apple}, each which make use of different IUSE flags. This causes problems with `use X` constructions when X is not in the IUSE flags. At EAPI=4 this simply emitted a warning, while at EAPI=5 this is an error. We update the eclass to make use of use_if_iuse and similar constructions where necessary to bring the eclass into compliance with EAPI=5. Signed-off-by: Anthony G. Basile --- eclass/toolchain.eclass | 69 ++++++++++++++++++++++++++----------------------- 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/eclass/toolchain.eclass b/eclass/toolchain.eclass index a038303ec7f5..36d344012d44 100644 --- a/eclass/toolchain.eclass +++ b/eclass/toolchain.eclass @@ -496,7 +496,7 @@ toolchain_src_prepare() { do_gcc_PIE_patches epatch_user - if ( tc_version_is_at_least 4.8.2 || use hardened ) && ! use vanilla ; then + if ( tc_version_is_at_least 4.8.2 || use_if_iuse hardened ) && ! use vanilla ; then make_gcc_hard fi @@ -538,7 +538,7 @@ toolchain_src_prepare() { fi # >= gcc-4.3 doesn't bundle ecj.jar, so copy it - if tc_version_is_at_least 4.3 && use gcj ; then + if tc_version_is_at_least 4.3 && use_if_iuse gcj ; then if tc_version_is_at_least 4.5 ; then einfo "Copying ecj-4.5.jar" cp -pPR "${DISTDIR}/ecj-4.5.jar" "${S}/ecj.jar" || die @@ -648,20 +648,20 @@ make_gcc_hard() { # Gcc >= 6.X we can use configurations options to turn pie/ssp on as default if tc_version_is_at_least 6.0 ; then - if use pie ; then + if use_if_iuse pie ; then einfo "Updating gcc to use automatic PIE building ..." fi - if use ssp ; then + if use_if_iuse ssp ; then einfo "Updating gcc to use automatic SSP building ..." fi - if use hardened ; then + if use_if_iuse hardened ; then # Will add some optimatizion as default. gcc_hard_flags+=" -DEXTRA_OPTIONS" # rebrand to make bug reports easier BRANDING_GCC_PKGVERSION=${BRANDING_GCC_PKGVERSION/Gentoo/Gentoo Hardened} fi else - if use hardened ; then + if use_if_iuse hardened ; then # rebrand to make bug reports easier BRANDING_GCC_PKGVERSION=${BRANDING_GCC_PKGVERSION/Gentoo/Gentoo Hardened} if hardened_gcc_works ; then @@ -909,7 +909,7 @@ toolchain_src_configure() { # Use the default ("release") checking because upstream usually neglects # to test "disabled" so it has a history of breaking. #317217 - if tc_version_is_at_least 3.4 ; then + if tc_version_is_at_least 3.4 && in_iuse debug ; then # The "release" keyword is new to 4.0. #551636 local off=$(tc_version_is_at_least 4.0 && echo release || echo no) confgcc+=( --enable-checking="${GCC_CHECKS_LIST:-$(usex debug yes ${off})}" ) @@ -922,7 +922,7 @@ toolchain_src_configure() { ) # If we want hardened support with the newer piepatchset for >=gcc 4.4 - if tc_version_is_at_least 4.4 && want_minispecs ; then + if tc_version_is_at_least 4.4 && want_minispecs && in_iuse hardened ; then confgcc+=( $(use_enable hardened esp) ) fi @@ -934,7 +934,7 @@ toolchain_src_configure() { fi # Support to disable pch when building libstdcxx - if tc_version_is_at_least 6.0 && ! use pch ; then + if tc_version_is_at_least 6.0 && ! use_if_iuse pch ; then confgcc+=( --disable-libstdcxx-pch ) fi @@ -1058,12 +1058,12 @@ toolchain_src_configure() { gcc-multilib-configure # ppc altivec support - confgcc+=( $(use_enable altivec) ) + in_iuse altivec && confgcc+=( $(use_enable altivec) ) # gcc has fixed-point arithmetic support in 4.3 for mips targets that can # significantly increase compile time by several hours. This will allow # users to control this feature in the event they need the support. - tc_version_is_at_least 4.3 && confgcc+=( $(use_enable fixed-point) ) + tc_version_is_at_least 4.3 && in_iuse fixed-point && confgcc+=( $(use_enable fixed-point) ) case $(tc-is-softfloat) in yes) confgcc+=( --with-float=soft ) ;; @@ -1229,23 +1229,26 @@ toolchain_src_configure() { # graphite was added in 4.4 but we only support it in 4.8+ due to external # library issues. #448024 - if tc_version_is_at_least 5.0 ; then + if tc_version_is_at_least 5.0 && in_iuse graphite ; then confgcc+=( $(use_with graphite isl) ) use graphite && confgcc+=( --disable-isl-version-check ) - elif tc_version_is_at_least 4.8 ; then + elif tc_version_is_at_least 4.8 && in_iuse graphite ; then confgcc+=( $(use_with graphite cloog) ) use graphite && confgcc+=( --disable-isl-version-check ) elif tc_version_is_at_least 4.4 ; then confgcc+=( --without-{cloog,ppl} ) fi - if tc_version_is_at_least 4.8 ; then + if tc_version_is_at_least 4.8 && in_iuse sanitize ; then confgcc+=( $(use_enable sanitize libsanitizer) ) fi - if tc_version_is_at_least 6.0 ; then + if tc_version_is_at_least 6.0 && in_iuse pie ; then + confgcc+=( $(use_enable pie default-pie) ) + fi + + if tc_version_is_at_least 6.0 && in_iuse ssp ; then confgcc+=( - $(use_enable pie default-pie) # This defaults to -fstack-protector-strong. $(use_enable ssp default-ssp) ) @@ -1575,7 +1578,7 @@ gcc_do_make() { # resulting binaries natively ^^; GCC_MAKE_TARGET=${GCC_MAKE_TARGET-all} else - if tc_version_is_at_least 3.3 && use pgo; then + if tc_version_is_at_least 3.3 && use_if_iuse pgo; then GCC_MAKE_TARGET=${GCC_MAKE_TARGET-profiledbootstrap} else GCC_MAKE_TARGET=${GCC_MAKE_TARGET-bootstrap-lean} @@ -1619,7 +1622,7 @@ gcc_do_make() { ${GCC_MAKE_TARGET} \ || die "emake failed with ${GCC_MAKE_TARGET}" - if ! is_crosscompile && use cxx && use_if_iuse doc ; then + if ! is_crosscompile && use_if_iuse cxx && use_if_iuse doc ; then if type -p doxygen > /dev/null ; then if tc_version_is_at_least 4.3 ; then cd "${CTARGET}"/libstdc++-v3/doc @@ -1786,7 +1789,7 @@ toolchain_src_install() { # Rather install the script, else portage with changing $FILESDIR # between binary and source package borks things .... - if ! is_crosscompile ; then + if ! is_crosscompile && [[ ${PN} != "kgcc64" ]] ; then insinto "${DATAPATH#${EPREFIX}}" newins "$(prefixify_ro "${FILESDIR}"/awk/fixlafiles.awk-no_gcc_la)" fixlafiles.awk || die exeinto "${DATAPATH#${EPREFIX}}" @@ -2080,7 +2083,7 @@ toolchain_pkg_postinst() { eselect compiler-shadow update all fi - if ! is_crosscompile ; then + if ! is_crosscompile && [[ ${PN} != "kgcc64" ]] ; then echo ewarn "If you have issues with packages unable to locate libstdc++.la," ewarn "then try running 'fix_libtool_files.sh' on the old gcc versions." @@ -2245,13 +2248,13 @@ gcc-lang-supported() { is_ada() { gcc-lang-supported ada || return 1 - use ada + use_if_iuse ada } is_cxx() { gcc-lang-supported 'c++' || return 1 ! is_crosscompile && tc_version_is_at_least 4.8 && return 0 - use cxx + use_if_iuse cxx } is_d() { @@ -2261,27 +2264,27 @@ is_d() { is_f77() { gcc-lang-supported f77 || return 1 - use fortran + use_if_iuse fortran } is_f95() { gcc-lang-supported f95 || return 1 - use fortran + use_if_iuse fortran } is_fortran() { gcc-lang-supported fortran || return 1 - use fortran + use_if_iuse fortran } is_gcj() { gcc-lang-supported java || return 1 - use cxx && use_if_iuse gcj + use_if_iuse cxx && use_if_iuse gcj } is_go() { gcc-lang-supported go || return 1 - use cxx && use_if_iuse go + use_if_iuse cxx && use_if_iuse go } is_jit() { @@ -2291,7 +2294,7 @@ is_jit() { is_multilib() { tc_version_is_at_least 3 || return 1 - use multilib + use_if_iuse multilib } is_objc() { @@ -2301,7 +2304,7 @@ is_objc() { is_objcxx() { gcc-lang-supported 'obj-c++' || return 1 - use cxx && use_if_iuse objc++ + use_if_iuse cxx && use_if_iuse objc++ } # Grab a variable from the build system (taken from linux-info.eclass) @@ -2369,12 +2372,12 @@ want_minispecs() { if tc_version_is_at_least 6.0 ; then return 0 fi - if tc_version_is_at_least 4.3.2 && use hardened ; then + if tc_version_is_at_least 4.3.2 && use_if_iuse hardened ; then if ! want_pie ; then ewarn "PIE_VER or SPECS_VER is not defined in the GCC ebuild." elif use vanilla ; then ewarn "You will not get hardened features if you have the vanilla USE-flag." - elif use nopie && use nossp ; then + elif use_if_iuse nopie && use_if_iuse nossp ; then ewarn "You will not get hardened features if you have the nopie and nossp USE-flag." elif ! hardened_gcc_works ; then ewarn "Your $(tc-arch) arch is not supported." @@ -2388,11 +2391,11 @@ want_minispecs() { } want_pie() { - ! use hardened && [[ -n ${PIE_VER} ]] && use nopie && return 1 + ! use_if_iuse hardened && [[ -n ${PIE_VER} ]] && use_if_iuse nopie && return 1 [[ -n ${PIE_VER} ]] && [[ -n ${SPECS_VER} ]] && return 0 tc_version_is_at_least 4.3.2 && return 1 [[ -z ${PIE_VER} ]] && return 1 - use !nopie && return 0 + use_if_iuse nopie || return 0 return 1 } -- cgit v1.2.3-18-g5258