Gentoo Archives: gentoo-dev

From: "Michał Górny" <mgorny@g.o>
To: gentoo-dev@l.g.o
Cc: "Michał Górny" <mgorny@g.o>
Subject: [gentoo-dev] [PATCH 3/3] llvm.eclass: Fix prepending LLVM path before system paths
Date: Tue, 26 May 2020 07:46:12
Message-Id: 20200526074432.136139-4-mgorny@gentoo.org
In Reply to: [gentoo-dev] [PATCH 0/3] llvm.eclass: Fix prepending path and add tests by "Michał Górny"
1 Do not prepend LLVM path before system path, in particular before
2 ccache/distcc paths. Instead, prepend it before the first LLVM version
3 found in PATH, or append to the end if no LLVM is found in PATH.
4
5 Closes: https://bugs.gentoo.org/627726
6 Signed-off-by: Michał Górny <mgorny@g.o>
7 ---
8 eclass/llvm.eclass | 25 +++++++++++++++++++++++--
9 eclass/tests/llvm.sh | 16 ++++++++--------
10 2 files changed, 31 insertions(+), 10 deletions(-)
11
12 diff --git a/eclass/llvm.eclass b/eclass/llvm.eclass
13 index 4f968dc39f87..61b34d4985eb 100644
14 --- a/eclass/llvm.eclass
15 +++ b/eclass/llvm.eclass
16 @@ -198,8 +198,29 @@ llvm_pkg_setup() {
17 debug-print-function ${FUNCNAME} "${@}"
18
19 if [[ ${MERGE_TYPE} != binary ]]; then
20 - local llvm_prefix=$(get_llvm_prefix "${LLVM_MAX_SLOT}")
21 - export PATH=${llvm_prefix}/bin:${PATH}
22 + local llvm_path=$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin
23 + local IFS=:
24 + local split_path=( ${PATH} )
25 + local new_path=()
26 + local x added=
27 +
28 + # prepend new path before first LLVM version found
29 + for x in "${split_path[@]}"; do
30 + if [[ ${x} == */usr/lib/llvm/*/bin ]]; then
31 + if [[ ${x} != ${llvm_path} ]]; then
32 + new_path+=( "${llvm_path}" )
33 + elif [[ ${added} && ${x} == ${llvm_path} ]]; then
34 + # deduplicate
35 + continue
36 + fi
37 + added=1
38 + fi
39 + new_path+=( "${x}" )
40 + done
41 + # ...or to the end of PATH
42 + [[ ${added} ]] || new_path+=( "${llvm_path}" )
43 +
44 + export PATH=${new_path[*]}
45 fi
46 }
47
48 diff --git a/eclass/tests/llvm.sh b/eclass/tests/llvm.sh
49 index bb8d5fc998e8..8527d81765dd 100755
50 --- a/eclass/tests/llvm.sh
51 +++ b/eclass/tests/llvm.sh
52 @@ -91,17 +91,17 @@ eindent
53 LLVM_MAX_SLOT=11 \
54 LLVM_INSTALLED_SLOT=1* \
55 PATH=${BASEPATH}:/usr/lib/llvm/11/bin \
56 - check_setup_path "/usr/lib/llvm/11/bin:${BASEPATH}:/usr/lib/llvm/11/bin"
57 + check_setup_path "${BASEPATH}:/usr/lib/llvm/11/bin"
58
59 LLVM_MAX_SLOT=10 \
60 LLVM_INSTALLED_SLOT=1* \
61 PATH=${BASEPATH}:/usr/lib/llvm/11/bin:/usr/lib/llvm/10/bin \
62 - check_setup_path "/usr/lib/llvm/10/bin:${BASEPATH}:/usr/lib/llvm/11/bin:/usr/lib/llvm/10/bin"
63 + check_setup_path "${BASEPATH}:/usr/lib/llvm/10/bin:/usr/lib/llvm/11/bin"
64
65 LLVM_MAX_SLOT=11 \
66 LLVM_INSTALLED_SLOT=10 \
67 PATH=${BASEPATH}:/usr/lib/llvm/10/bin \
68 - check_setup_path "/usr/lib/llvm/10/bin:${BASEPATH}:/usr/lib/llvm/10/bin"
69 + check_setup_path "${BASEPATH}:/usr/lib/llvm/10/bin"
70 eoutdent
71
72 ebegin "Testing pkg_setup with the other LLVM version in PATH"
73 @@ -109,12 +109,12 @@ eindent
74 LLVM_MAX_SLOT=11 \
75 LLVM_INSTALLED_SLOT=1* \
76 PATH=${BASEPATH}:/usr/lib/llvm/10/bin \
77 - check_setup_path "/usr/lib/llvm/11/bin:${BASEPATH}:/usr/lib/llvm/10/bin"
78 + check_setup_path "${BASEPATH}:/usr/lib/llvm/11/bin:/usr/lib/llvm/10/bin"
79
80 LLVM_MAX_SLOT=10 \
81 LLVM_INSTALLED_SLOT=1* \
82 PATH=${BASEPATH}:/usr/lib/llvm/11/bin \
83 - check_setup_path "/usr/lib/llvm/10/bin:${BASEPATH}:/usr/lib/llvm/11/bin"
84 + check_setup_path "${BASEPATH}:/usr/lib/llvm/10/bin:/usr/lib/llvm/11/bin"
85 eoutdent
86
87 ebegin "Testing pkg_setup with LLVM missing from PATH"
88 @@ -122,17 +122,17 @@ eindent
89 LLVM_MAX_SLOT=11 \
90 LLVM_INSTALLED_SLOT=1* \
91 PATH=${BASEPATH} \
92 - check_setup_path "/usr/lib/llvm/11/bin:${BASEPATH}"
93 + check_setup_path "${BASEPATH}:/usr/lib/llvm/11/bin"
94
95 LLVM_MAX_SLOT=10 \
96 LLVM_INSTALLED_SLOT=1* \
97 PATH=${BASEPATH} \
98 - check_setup_path "/usr/lib/llvm/10/bin:${BASEPATH}"
99 + check_setup_path "${BASEPATH}:/usr/lib/llvm/10/bin"
100
101 LLVM_MAX_SLOT=11 \
102 LLVM_INSTALLED_SLOT=10 \
103 PATH=${BASEPATH} \
104 - check_setup_path "/usr/lib/llvm/10/bin:${BASEPATH}"
105 + check_setup_path "${BASEPATH}:/usr/lib/llvm/10/bin"
106 eoutdent
107
108 texit
109 --
110 2.26.2