mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-24 04:59:14 -07:00
llvm-utils.eclass: Split out PATH prepending logic
Split the logic prepending PATH from pkg_setup() into a dedicated llvm_prepend_path() function. Signed-off-by: Michał Górny <mgorny@gentoo.org>
This commit is contained in:
@@ -112,4 +112,40 @@ llvm_fix_tool_path() {
|
||||
${shopt_save}
|
||||
}
|
||||
|
||||
# @FUNCTION: llvm_prepend_path
|
||||
# @USAGE: <slot>
|
||||
# @DESCRIPTION:
|
||||
# Prepend the path to the specified LLVM slot to PATH variable,
|
||||
# and reexport it.
|
||||
llvm_prepend_path() {
|
||||
debug-print-function ${FUNCNAME} "${@}"
|
||||
|
||||
[[ ${#} -ne 1 ]] && die "Usage: ${FUNCNAME} <slot>"
|
||||
local slot=${1}
|
||||
|
||||
local llvm_path=${ESYSROOT}/usr/lib/llvm/${slot}/bin
|
||||
local IFS=:
|
||||
local split_path=( ${PATH} )
|
||||
local new_path=()
|
||||
local x added=
|
||||
|
||||
# prepend new path in front of the first LLVM version found
|
||||
for x in "${split_path[@]}"; do
|
||||
if [[ ${x} == */usr/lib/llvm/*/bin ]]; then
|
||||
if [[ ${x} != ${llvm_path} ]]; then
|
||||
new_path+=( "${llvm_path}" )
|
||||
elif [[ ${added} && ${x} == ${llvm_path} ]]; then
|
||||
# deduplicate
|
||||
continue
|
||||
fi
|
||||
added=1
|
||||
fi
|
||||
new_path+=( "${x}" )
|
||||
done
|
||||
# ...or to the end of PATH
|
||||
[[ ${added} ]] || new_path+=( "${llvm_path}" )
|
||||
|
||||
export PATH=${new_path[*]}
|
||||
}
|
||||
|
||||
fi
|
||||
|
||||
@@ -212,30 +212,7 @@ llvm_pkg_setup() {
|
||||
llvm_fix_tool_path LLVM_CONFIG
|
||||
fi
|
||||
|
||||
local prefix=${ESYSROOT}
|
||||
local llvm_path=${prefix}/usr/lib/llvm/${LLVM_SLOT}/bin
|
||||
local IFS=:
|
||||
local split_path=( ${PATH} )
|
||||
local new_path=()
|
||||
local x added=
|
||||
|
||||
# prepend new path before first LLVM version found
|
||||
for x in "${split_path[@]}"; do
|
||||
if [[ ${x} == */usr/lib/llvm/*/bin ]]; then
|
||||
if [[ ${x} != ${llvm_path} ]]; then
|
||||
new_path+=( "${llvm_path}" )
|
||||
elif [[ ${added} && ${x} == ${llvm_path} ]]; then
|
||||
# deduplicate
|
||||
continue
|
||||
fi
|
||||
added=1
|
||||
fi
|
||||
new_path+=( "${x}" )
|
||||
done
|
||||
# ...or to the end of PATH
|
||||
[[ ${added} ]] || new_path+=( "${llvm_path}" )
|
||||
|
||||
export PATH=${new_path[*]}
|
||||
llvm_prepend_path "${LLVM_SLOT}"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
@@ -66,6 +66,21 @@ test_fix_tool_path() {
|
||||
tend ${?}
|
||||
}
|
||||
|
||||
test_prepend_path() {
|
||||
local slot=${1}
|
||||
local -x PATH=${2}
|
||||
local expected=${3}
|
||||
|
||||
tbegin "llvm_prepend_path ${slot} to PATH=${PATH}"
|
||||
llvm_prepend_path "${slot}"
|
||||
if [[ ${PATH} != ${expected} ]]; then
|
||||
eerror "llvm_prepend_path ${var}"
|
||||
eerror " gave: ${PATH}"
|
||||
eerror "expected: ${expected}"
|
||||
fi
|
||||
tend ${?}
|
||||
}
|
||||
|
||||
test_fix_clang_version CC clang 19.0.0git78b4e7c5 clang-19
|
||||
test_fix_clang_version CC clang 17.0.6 clang-17
|
||||
test_fix_clang_version CXX clang++ 17.0.6 clang++-17
|
||||
@@ -79,4 +94,13 @@ test_fix_tool_path RANLIB llvm-ranlib 1
|
||||
test_fix_tool_path AR ar 1
|
||||
test_fix_tool_path AR ar 0
|
||||
|
||||
ESYSROOT=
|
||||
test_prepend_path 17 /usr/bin /usr/bin:/usr/lib/llvm/17/bin
|
||||
test_prepend_path 17 /usr/lib/llvm/17/bin:/usr/bin /usr/lib/llvm/17/bin:/usr/bin
|
||||
test_prepend_path 17 /usr/bin:/usr/lib/llvm/17/bin /usr/bin:/usr/lib/llvm/17/bin
|
||||
test_prepend_path 18 /usr/lib/llvm/17/bin:/usr/bin \
|
||||
/usr/lib/llvm/18/bin:/usr/lib/llvm/17/bin:/usr/bin
|
||||
test_prepend_path 18 /usr/bin:/usr/lib/llvm/17/bin \
|
||||
/usr/bin:/usr/lib/llvm/18/bin:/usr/lib/llvm/17/bin
|
||||
|
||||
texit
|
||||
|
||||
Reference in New Issue
Block a user