commit:     43a24d68531ab4ca9ad83d686a620cd2937dbf4f
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Fri Aug 18 02:06:05 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Aug 18 09:22:32 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=43a24d68

sys-devel/clang-common: only add default configs (e.g. -fPIE) for native tools

We don't want to add our configs to 'clang', 'clang++', etc because that might
be used for crosscompilation.

Use the prefixed CHOST versions instead.

[I suspect I didn't do this before because the old config logic, before we 
improved
it upstream, didn't have the fallback behaviour for clang->${CHOST}-clang or 
similar.]

Closes: https://bugs.gentoo.org/901247
Closes: https://bugs.gentoo.org/912237
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../clang-common/clang-common-17.0.0.9999.ebuild   |   5 +-
 .../clang-common/clang-common-17.0.0_rc2-r1.ebuild |   5 +-
 .../clang-common/clang-common-18.0.0.9999.ebuild   |   5 +-
 .../clang-common-18.0.0_pre20230803.ebuild         |   5 +-
 ...d => clang-common-18.0.0_pre20230810-r1.ebuild} |   5 +-
 .../clang-common-18.0.0_pre20230810.ebuild         | 191 ---------------------
 6 files changed, 20 insertions(+), 196 deletions(-)

diff --git a/sys-devel/clang-common/clang-common-17.0.0.9999.ebuild 
b/sys-devel/clang-common/clang-common-17.0.0.9999.ebuild
index a64e6b0f2602..aed6e024eff7 100644
--- a/sys-devel/clang-common/clang-common-17.0.0.9999.ebuild
+++ b/sys-devel/clang-common/clang-common-17.0.0.9999.ebuild
@@ -169,8 +169,11 @@ src_install() {
                EOF
        fi
 
+       # We only install config files for ${CHOST} because unprefixed tools
+       # might be used for crosscompilation where e.g. PIE may not be 
supported.
+       # See bug #912237 and bug #901247.
        local tool
-       for tool in clang{,++,-cpp}; do
+       for tool in ${CHOST}-clang{,++,-cpp}; do
                newins - "${tool}.cfg" <<-EOF
                        # This configuration file is used by ${tool} driver.
                        @gentoo-common.cfg

diff --git a/sys-devel/clang-common/clang-common-17.0.0_rc2-r1.ebuild 
b/sys-devel/clang-common/clang-common-17.0.0_rc2-r1.ebuild
index a64e6b0f2602..aed6e024eff7 100644
--- a/sys-devel/clang-common/clang-common-17.0.0_rc2-r1.ebuild
+++ b/sys-devel/clang-common/clang-common-17.0.0_rc2-r1.ebuild
@@ -169,8 +169,11 @@ src_install() {
                EOF
        fi
 
+       # We only install config files for ${CHOST} because unprefixed tools
+       # might be used for crosscompilation where e.g. PIE may not be 
supported.
+       # See bug #912237 and bug #901247.
        local tool
-       for tool in clang{,++,-cpp}; do
+       for tool in ${CHOST}-clang{,++,-cpp}; do
                newins - "${tool}.cfg" <<-EOF
                        # This configuration file is used by ${tool} driver.
                        @gentoo-common.cfg

diff --git a/sys-devel/clang-common/clang-common-18.0.0.9999.ebuild 
b/sys-devel/clang-common/clang-common-18.0.0.9999.ebuild
index a64e6b0f2602..aed6e024eff7 100644
--- a/sys-devel/clang-common/clang-common-18.0.0.9999.ebuild
+++ b/sys-devel/clang-common/clang-common-18.0.0.9999.ebuild
@@ -169,8 +169,11 @@ src_install() {
                EOF
        fi
 
+       # We only install config files for ${CHOST} because unprefixed tools
+       # might be used for crosscompilation where e.g. PIE may not be 
supported.
+       # See bug #912237 and bug #901247.
        local tool
-       for tool in clang{,++,-cpp}; do
+       for tool in ${CHOST}-clang{,++,-cpp}; do
                newins - "${tool}.cfg" <<-EOF
                        # This configuration file is used by ${tool} driver.
                        @gentoo-common.cfg

diff --git a/sys-devel/clang-common/clang-common-18.0.0_pre20230803.ebuild 
b/sys-devel/clang-common/clang-common-18.0.0_pre20230803.ebuild
index a64e6b0f2602..aed6e024eff7 100644
--- a/sys-devel/clang-common/clang-common-18.0.0_pre20230803.ebuild
+++ b/sys-devel/clang-common/clang-common-18.0.0_pre20230803.ebuild
@@ -169,8 +169,11 @@ src_install() {
                EOF
        fi
 
+       # We only install config files for ${CHOST} because unprefixed tools
+       # might be used for crosscompilation where e.g. PIE may not be 
supported.
+       # See bug #912237 and bug #901247.
        local tool
-       for tool in clang{,++,-cpp}; do
+       for tool in ${CHOST}-clang{,++,-cpp}; do
                newins - "${tool}.cfg" <<-EOF
                        # This configuration file is used by ${tool} driver.
                        @gentoo-common.cfg

diff --git a/sys-devel/clang-common/clang-common-17.0.0.9999.ebuild 
b/sys-devel/clang-common/clang-common-18.0.0_pre20230810-r1.ebuild
similarity index 96%
copy from sys-devel/clang-common/clang-common-17.0.0.9999.ebuild
copy to sys-devel/clang-common/clang-common-18.0.0_pre20230810-r1.ebuild
index a64e6b0f2602..aed6e024eff7 100644
--- a/sys-devel/clang-common/clang-common-17.0.0.9999.ebuild
+++ b/sys-devel/clang-common/clang-common-18.0.0_pre20230810-r1.ebuild
@@ -169,8 +169,11 @@ src_install() {
                EOF
        fi
 
+       # We only install config files for ${CHOST} because unprefixed tools
+       # might be used for crosscompilation where e.g. PIE may not be 
supported.
+       # See bug #912237 and bug #901247.
        local tool
-       for tool in clang{,++,-cpp}; do
+       for tool in ${CHOST}-clang{,++,-cpp}; do
                newins - "${tool}.cfg" <<-EOF
                        # This configuration file is used by ${tool} driver.
                        @gentoo-common.cfg

diff --git a/sys-devel/clang-common/clang-common-18.0.0_pre20230810.ebuild 
b/sys-devel/clang-common/clang-common-18.0.0_pre20230810.ebuild
deleted file mode 100644
index a64e6b0f2602..000000000000
--- a/sys-devel/clang-common/clang-common-18.0.0_pre20230810.ebuild
+++ /dev/null
@@ -1,191 +0,0 @@
-# Copyright 1999-2023 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-inherit bash-completion-r1 llvm.org
-
-DESCRIPTION="Common files shared between multiple slots of clang"
-HOMEPAGE="https://llvm.org/";
-
-LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA"
-SLOT="0"
-KEYWORDS=""
-IUSE="
-       default-compiler-rt default-libcxx default-lld llvm-libunwind
-       hardened stricter
-"
-
-PDEPEND="
-       sys-devel/clang:*
-       default-compiler-rt? (
-               sys-devel/clang-runtime[compiler-rt]
-               llvm-libunwind? ( sys-libs/llvm-libunwind[static-libs] )
-               !llvm-libunwind? ( sys-libs/libunwind[static-libs] )
-       )
-       !default-compiler-rt? ( sys-devel/gcc )
-       default-libcxx? ( >=sys-libs/libcxx-${PV}[static-libs] )
-       !default-libcxx? ( sys-devel/gcc )
-       default-lld? ( sys-devel/lld )
-       !default-lld? ( sys-devel/binutils )
-"
-IDEPEND="
-       !default-compiler-rt? ( sys-devel/gcc-config )
-       !default-libcxx? ( sys-devel/gcc-config )
-"
-
-LLVM_COMPONENTS=( clang/utils )
-llvm.org_set_globals
-
-pkg_pretend() {
-       [[ ${CLANG_IGNORE_DEFAULT_RUNTIMES} ]] && return
-
-       local flag missing_flags=()
-       for flag in default-{compiler-rt,libcxx,lld}; do
-               if ! use "${flag}" && has_version "sys-devel/clang[${flag}]"; 
then
-                       missing_flags+=( "${flag}" )
-               fi
-       done
-
-       if [[ ${missing_flags[@]} ]]; then
-               eerror "It seems that you have the following flags set on 
sys-devel/clang:"
-               eerror
-               eerror "  ${missing_flags[*]}"
-               eerror
-               eerror "The default runtimes are now set via flags on 
sys-devel/clang-common."
-               eerror "The build is being aborted to prevent breakage.  Please 
either set"
-               eerror "the respective flags on this ebuild, e.g.:"
-               eerror
-               eerror "  sys-devel/clang-common ${missing_flags[*]}"
-               eerror
-               eerror "or build with CLANG_IGNORE_DEFAULT_RUNTIMES=1."
-               die "Mismatched defaults detected between sys-devel/clang and 
sys-devel/clang-common"
-       fi
-}
-
-src_install() {
-       newbashcomp bash-autocomplete.sh clang
-
-       insinto /etc/clang
-       newins - gentoo-runtimes.cfg <<-EOF
-               # This file is initially generated by sys-devel/clang-runtime.
-               # It is used to control the default runtimes using by clang.
-
-               --rtlib=$(usex default-compiler-rt compiler-rt libgcc)
-               --unwindlib=$(usex default-compiler-rt libunwind libgcc)
-               --stdlib=$(usex default-libcxx libc++ libstdc++)
-               -fuse-ld=$(usex default-lld lld bfd)
-       EOF
-
-       newins - gentoo-gcc-install.cfg <<-EOF
-               # This file is maintained by gcc-config.
-               # It is used to specify the selected GCC installation.
-       EOF
-
-       newins - gentoo-common.cfg <<-EOF
-               # This file contains flags common to clang, clang++ and 
clang-cpp.
-               @gentoo-runtimes.cfg
-               @gentoo-gcc-install.cfg
-               @gentoo-hardened.cfg
-               # bug #870001
-               -include "${EPREFIX}/usr/include/gentoo/maybe-stddefs.h"
-       EOF
-
-       # Baseline hardening (bug #851111)
-       newins - gentoo-hardened.cfg <<-EOF
-               # Some of these options are added unconditionally, regardless of
-               # USE=hardened, for parity with sys-devel/gcc.
-               -fstack-clash-protection
-               -fstack-protector-strong
-               -fPIE
-               -include "${EPREFIX}/usr/include/gentoo/fortify.h"
-       EOF
-
-       dodir /usr/include/gentoo
-
-       cat >> "${ED}/usr/include/gentoo/maybe-stddefs.h" <<-EOF || die
-       /* __has_include is an extension, but it's fine, because this is only
-       for Clang anyway. */
-       #if defined __has_include && __has_include (<stdc-predef.h>) && 
!defined(__GLIBC__)
-       # include <stdc-predef.h>
-       #endif
-       EOF
-
-       local fortify_level=$(usex hardened 3 2)
-       # We have to do this because glibc's headers warn if F_S is set
-       # without optimization and that would at the very least be very noisy
-       # during builds and at worst trigger many -Werror builds.
-       cat >> "${ED}/usr/include/gentoo/fortify.h" <<- EOF || die
-       #ifdef __clang__
-       # pragma clang system_header
-       #endif
-       #ifndef _FORTIFY_SOURCE
-       # if defined(__has_feature)
-       #  define __GENTOO_HAS_FEATURE(x) __has_feature(x)
-       # else
-       #  define __GENTOO_HAS_FEATURE(x) 0
-       # endif
-       #
-       # if defined(__OPTIMIZE__) && __OPTIMIZE__ > 0
-       #  if !defined(__SANITIZE_ADDRESS__) && 
!__GENTOO_HAS_FEATURE(address_sanitizer) && 
!__GENTOO_HAS_FEATURE(memory_sanitizer)
-       #   define _FORTIFY_SOURCE ${fortify_level}
-       #  endif
-       # endif
-       # undef __GENTOO_HAS_FEATURE
-       #endif
-       EOF
-
-       if use hardened ; then
-               cat >> "${ED}/etc/clang/gentoo-hardened.cfg" <<-EOF || die
-                       # Options below are conditional on USE=hardened.
-                       -D_GLIBCXX_ASSERTIONS
-
-                       # Analogue to GLIBCXX_ASSERTIONS
-                       # 
https://libcxx.llvm.org/UsingLibcxx.html#assertions-mode
-                       # 
https://libcxx.llvm.org/Hardening.html#using-hardened-mode
-                       -D_LIBCPP_ENABLE_HARDENED_MODE=1
-               EOF
-       fi
-
-       if use stricter; then
-               newins - gentoo-stricter.cfg <<-EOF
-                       # This file increases the strictness of older clang 
versions
-                       # to match the newest upstream version.
-
-                       # clang-16 defaults
-                       -Werror=implicit-function-declaration
-                       -Werror=implicit-int
-                       -Werror=incompatible-function-pointer-types
-
-                       # constructs banned by C2x
-                       -Werror=deprecated-non-prototype
-
-                       # deprecated but large blast radius
-                       #-Werror=strict-prototypes
-               EOF
-
-               cat >> "${ED}/etc/clang/gentoo-common.cfg" <<-EOF || die
-                       @gentoo-stricter.cfg
-               EOF
-       fi
-
-       local tool
-       for tool in clang{,++,-cpp}; do
-               newins - "${tool}.cfg" <<-EOF
-                       # This configuration file is used by ${tool} driver.
-                       @gentoo-common.cfg
-               EOF
-       done
-}
-
-pkg_preinst() {
-       if has_version -b sys-devel/gcc-config && has_version sys-devel/gcc
-       then
-               local gcc_path=$(gcc-config --get-lib-path 2>/dev/null)
-               if [[ -n ${gcc_path} ]]; then
-                       cat >> "${ED}/etc/clang/gentoo-gcc-install.cfg" <<-EOF
-                               --gcc-install-dir="${gcc_path%%:*}"
-                       EOF
-               fi
-       fi
-}

Reply via email to