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:
Michał Górny
2024-02-07 17:38:19 +01:00
parent 511ce42e90
commit 118145de39
3 changed files with 61 additions and 24 deletions

View File

@@ -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

View File

@@ -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
}

View File

@@ -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