commit: 3fc1dcf9419e7692c152ccf948357b50c266c4eb
Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sun Oct 16 12:18:11 2022 +0000
Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Wed Oct 19 11:53:20 2022 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3fc1dcf9
llvm.eclass: Fix CC/CXX version to prevent the eclass overriding it
Fix the clang executable in CC, CPP and CXX variables to include
the version number, in order to prevent the PATH manipulations done
by llvm.eclass from overriding the compiler. Otherwise, a package
requiring older LLVM libraries could cause an older compiler version
being used, effectively resulting in a system built by mixed set
of clang versions.
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>
eclass/llvm.eclass | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/eclass/llvm.eclass b/eclass/llvm.eclass
index 1effcc555905..39299d06dbe9 100644
--- a/eclass/llvm.eclass
+++ b/eclass/llvm.eclass
@@ -180,6 +180,40 @@ get_llvm_prefix() {
die "No LLVM slot${1:+ <= ${1}} satisfying the package's dependencies
found installed!"
}
+# @FUNCTION: llvm_fix_clang_version
+# @USAGE: <variable-name>...
+# @DESCRIPTION:
+# Fix the clang compiler name in specified variables to include
+# the major version, to prevent PATH alterations from forcing an older
+# clang version being used.
+llvm_fix_clang_version() {
+ debug-print-function ${FUNCNAME} "${@}"
+
+ local shopt_save=$(shopt -p -o noglob)
+ set -f
+ local var
+ for var; do
+ local split=( ${!var} )
+ case ${split[0]} in
+ *clang|*clang++|*clang-cpp)
+ local version=()
+ read -r -a version < <("${split[0]}" --version)
+ local major=${version[-1]%%.*}
+ if [[ -n ${major//[0-9]} ]]; then
+ die "${var}=${!var} produced invalid
--version: ${version[*]}"
+ fi
+
+ split[0]+=-${major}
+ if ! type -P "${split[0]}" &>/dev/null; then
+ die "${split[0]} does not seem to exist"
+ fi
+ declare -g "${var}=${split[*]}"
+ ;;
+ esac
+ done
+ ${shopt_save}
+}
+
# @FUNCTION: llvm_pkg_setup
# @DESCRIPTION:
# Prepend the appropriate executable directory for the newest
@@ -198,6 +232,8 @@ llvm_pkg_setup() {
debug-print-function ${FUNCNAME} "${@}"
if [[ ${MERGE_TYPE} != binary ]]; then
+ llvm_fix_clang_version CC CPP CXX
+
local llvm_path=$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin
local IFS=:
local split_path=( ${PATH} )