llvm.eclass: Fix prepending LLVM path before system paths
authorMichał Górny <mgorny@gentoo.org>
Tue, 26 May 2020 07:41:40 +0000 (09:41 +0200)
committerMichał Górny <mgorny@gentoo.org>
Thu, 28 May 2020 11:41:22 +0000 (13:41 +0200)
Do not prepend LLVM path before system path, in particular before
ccache/distcc paths.  Instead, prepend it before the first LLVM version
found in PATH, or append to the end if no LLVM is found in PATH.

Closes: https://bugs.gentoo.org/627726
Signed-off-by: Michał Górny <mgorny@gentoo.org>
eclass/llvm.eclass
eclass/tests/llvm.sh

index 4f968dc39f87ddc79a312e0e7c423f8a7251dfb2..61b34d4985eb093e364c9592d1a82c0f338195ea 100644 (file)
@@ -198,8 +198,29 @@ llvm_pkg_setup() {
        debug-print-function ${FUNCNAME} "${@}"
 
        if [[ ${MERGE_TYPE} != binary ]]; then
-               local llvm_prefix=$(get_llvm_prefix "${LLVM_MAX_SLOT}")
-               export PATH=${llvm_prefix}/bin:${PATH}
+               local llvm_path=$(get_llvm_prefix "${LLVM_MAX_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[*]}
        fi
 }
 
index bb8d5fc998e820b481db2bc4a13e3057994130cf..8527d81765dd4a896e2b6319dab237ebf0666e22 100755 (executable)
@@ -91,17 +91,17 @@ eindent
        LLVM_MAX_SLOT=11 \
        LLVM_INSTALLED_SLOT=1* \
        PATH=${BASEPATH}:/usr/lib/llvm/11/bin \
-       check_setup_path "/usr/lib/llvm/11/bin:${BASEPATH}:/usr/lib/llvm/11/bin"
+       check_setup_path "${BASEPATH}:/usr/lib/llvm/11/bin"
 
        LLVM_MAX_SLOT=10 \
        LLVM_INSTALLED_SLOT=1* \
        PATH=${BASEPATH}:/usr/lib/llvm/11/bin:/usr/lib/llvm/10/bin \
-       check_setup_path "/usr/lib/llvm/10/bin:${BASEPATH}:/usr/lib/llvm/11/bin:/usr/lib/llvm/10/bin"
+       check_setup_path "${BASEPATH}:/usr/lib/llvm/10/bin:/usr/lib/llvm/11/bin"
 
        LLVM_MAX_SLOT=11 \
        LLVM_INSTALLED_SLOT=10 \
        PATH=${BASEPATH}:/usr/lib/llvm/10/bin \
-       check_setup_path "/usr/lib/llvm/10/bin:${BASEPATH}:/usr/lib/llvm/10/bin"
+       check_setup_path "${BASEPATH}:/usr/lib/llvm/10/bin"
 eoutdent
 
 ebegin "Testing pkg_setup with the other LLVM version in PATH"
@@ -109,12 +109,12 @@ eindent
        LLVM_MAX_SLOT=11 \
        LLVM_INSTALLED_SLOT=1* \
        PATH=${BASEPATH}:/usr/lib/llvm/10/bin \
-       check_setup_path "/usr/lib/llvm/11/bin:${BASEPATH}:/usr/lib/llvm/10/bin"
+       check_setup_path "${BASEPATH}:/usr/lib/llvm/11/bin:/usr/lib/llvm/10/bin"
 
        LLVM_MAX_SLOT=10 \
        LLVM_INSTALLED_SLOT=1* \
        PATH=${BASEPATH}:/usr/lib/llvm/11/bin \
-       check_setup_path "/usr/lib/llvm/10/bin:${BASEPATH}:/usr/lib/llvm/11/bin"
+       check_setup_path "${BASEPATH}:/usr/lib/llvm/10/bin:/usr/lib/llvm/11/bin"
 eoutdent
 
 ebegin "Testing pkg_setup with LLVM missing from PATH"
@@ -122,17 +122,17 @@ eindent
        LLVM_MAX_SLOT=11 \
        LLVM_INSTALLED_SLOT=1* \
        PATH=${BASEPATH} \
-       check_setup_path "/usr/lib/llvm/11/bin:${BASEPATH}"
+       check_setup_path "${BASEPATH}:/usr/lib/llvm/11/bin"
 
        LLVM_MAX_SLOT=10 \
        LLVM_INSTALLED_SLOT=1* \
        PATH=${BASEPATH} \
-       check_setup_path "/usr/lib/llvm/10/bin:${BASEPATH}"
+       check_setup_path "${BASEPATH}:/usr/lib/llvm/10/bin"
 
        LLVM_MAX_SLOT=11 \
        LLVM_INSTALLED_SLOT=10 \
        PATH=${BASEPATH} \
-       check_setup_path "/usr/lib/llvm/10/bin:${BASEPATH}"
+       check_setup_path "${BASEPATH}:/usr/lib/llvm/10/bin"
 eoutdent
 
 texit