mirror of
https://anongit.gentoo.org/git/repo/gentoo.git
synced 2025-07-23 15:37:58 +02:00
188 lines
4.2 KiB
Bash
Executable file
188 lines
4.2 KiB
Bash
Executable file
#!/bin/bash
|
|
# Copyright 2024 Gentoo Authors
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
|
|
source tests-common.sh || exit
|
|
|
|
EAPI=8
|
|
|
|
test_globals() {
|
|
local compat=${1}
|
|
local expected_iuse=${2}
|
|
local expected_required_use=${3}
|
|
local expected_usedep=${4}
|
|
local x
|
|
|
|
tbegin "LLVM_COMPAT=( ${compat} )"
|
|
|
|
(
|
|
local fail=0
|
|
local LLVM_COMPAT=( ${compat} )
|
|
|
|
inherit llvm-r2
|
|
|
|
if [[ ${IUSE%% } != ${expected_iuse} ]]; then
|
|
eerror " IUSE: ${IUSE%% }"
|
|
eerror "does not match: ${expected_iuse}"
|
|
fail=1
|
|
fi
|
|
|
|
if [[ ${REQUIRED_USE} != ${expected_required_use} ]]; then
|
|
eerror " REQUIRED_USE: ${REQUIRED_USE}"
|
|
eerror "does not match: ${expected_required_use}"
|
|
fail=1
|
|
fi
|
|
|
|
if [[ ${LLVM_USEDEP} != ${expected_usedep} ]]; then
|
|
eerror " LLVM_USEDEP: ${LLVM_USEDEP}"
|
|
eerror "does not match: ${expected_usedep}"
|
|
fail=1
|
|
fi
|
|
|
|
exit "${fail}"
|
|
)
|
|
|
|
tend "${?}"
|
|
}
|
|
|
|
test_gen_dep() {
|
|
local arg=${1}
|
|
local expected
|
|
read -r -d '' expected
|
|
|
|
tbegin "llvm_gen_dep ${arg}"
|
|
local value=$(llvm_gen_dep "${arg}")
|
|
|
|
if [[ ${value} != ${expected} ]]; then
|
|
eerror "llvm_gen_dep ${arg}"
|
|
eerror "gave:"
|
|
eerror " ${value}"
|
|
eerror "expected:"
|
|
eerror " ${expected}"
|
|
fi
|
|
tend ${?}
|
|
}
|
|
|
|
LLVM_CONFIG_OPTIONS=(
|
|
--assertion-mode
|
|
--bindir
|
|
--build-mode
|
|
--build-system
|
|
--cflags
|
|
--cmakedir
|
|
--components
|
|
--cppflags
|
|
--cxxflags
|
|
--has-rtti
|
|
--host-target
|
|
--ignore-libllvm
|
|
--includedir
|
|
--ldflags
|
|
--libdir
|
|
--libfiles
|
|
--libnames
|
|
--libs
|
|
--link-shared
|
|
--link-static
|
|
--obj-root
|
|
--prefix
|
|
--shared-mode
|
|
--system-libs
|
|
--targets-built
|
|
--version
|
|
)
|
|
|
|
normalize_list() {
|
|
"${@}" |
|
|
sed -e 's:\s\+:\n:g' |
|
|
sed -e '/^$/d' |
|
|
sort
|
|
local ps=${PIPESTATUS[*]}
|
|
[[ ${ps} == '0 0 0 0' ]] || die "normalize_list pipe failed: ${ps}"
|
|
}
|
|
|
|
test_llvm_config() {
|
|
einfo "llvm-config for slot ${LLVM_SLOT}, libdir ${LLVM_LIBDIR}"
|
|
eindent
|
|
|
|
generate_llvm_config > "${TMP}/llvm-config" || die
|
|
local triple=$(sh "${TMP}/llvm-config" --host-target || die)
|
|
local llvm_config=/usr/lib/llvm/${LLVM_SLOT}/bin/${triple}-llvm-config
|
|
|
|
local option res
|
|
for option in "${LLVM_CONFIG_OPTIONS[@]}"; do
|
|
tbegin "${option}"
|
|
|
|
normalize_list sh "${TMP}/llvm-config" "${option}" > "${TMP}/our"
|
|
normalize_list "${llvm_config}" "${option}" > "${TMP}/upstream"
|
|
case ${option} in
|
|
--components)
|
|
# our components are a superset of what llvm-config yields
|
|
res=$(comm -13 "${TMP}/our" "${TMP}/upstream")
|
|
;;
|
|
*)
|
|
# expect all elements to match
|
|
res=$(comm -3 "${TMP}/our" "${TMP}/upstream")
|
|
;;
|
|
esac
|
|
|
|
if [[ -z ${res} ]]; then
|
|
tend 0
|
|
else
|
|
eerror "$(diff -u "${TMP}/our" "${TMP}/upstream")"
|
|
tend 1
|
|
fi
|
|
done
|
|
|
|
eoutdent
|
|
}
|
|
|
|
# full range
|
|
test_globals '14 15 16 17 18 19' \
|
|
"+llvm_slot_19 llvm_slot_15 llvm_slot_16 llvm_slot_17 llvm_slot_18" \
|
|
"^^ ( llvm_slot_15 llvm_slot_16 llvm_slot_17 llvm_slot_18 llvm_slot_19 )" \
|
|
"llvm_slot_15(-)?,llvm_slot_16(-)?,llvm_slot_17(-)?,llvm_slot_18(-)?,llvm_slot_19(-)?"
|
|
test_globals '14 15 16 17 18' \
|
|
"+llvm_slot_18 llvm_slot_15 llvm_slot_16 llvm_slot_17" \
|
|
"^^ ( llvm_slot_15 llvm_slot_16 llvm_slot_17 llvm_slot_18 )" \
|
|
"llvm_slot_15(-)?,llvm_slot_16(-)?,llvm_slot_17(-)?,llvm_slot_18(-)?"
|
|
# older than stable
|
|
test_globals '14 15 16' \
|
|
"+llvm_slot_16 llvm_slot_15" \
|
|
"^^ ( llvm_slot_15 llvm_slot_16 )" \
|
|
"llvm_slot_15(-)?,llvm_slot_16(-)?"
|
|
# old + newer than current stable
|
|
test_globals '15 20' \
|
|
"+llvm_slot_15 llvm_slot_20" \
|
|
"^^ ( llvm_slot_15 llvm_slot_20 )" \
|
|
"llvm_slot_15(-)?,llvm_slot_20(-)?"
|
|
# newer than current stable
|
|
test_globals '19' \
|
|
"+llvm_slot_19" \
|
|
"^^ ( llvm_slot_19 )" \
|
|
"llvm_slot_19(-)?"
|
|
|
|
LLVM_COMPAT=( {14..18} )
|
|
inherit llvm-r2
|
|
|
|
test_gen_dep 'llvm-core/llvm:${LLVM_SLOT} llvm-core/clang:${LLVM_SLOT}' <<-EOF
|
|
llvm_slot_15? ( llvm-core/llvm:15 llvm-core/clang:15 )
|
|
llvm_slot_16? ( llvm-core/llvm:16 llvm-core/clang:16 )
|
|
llvm_slot_17? ( llvm-core/llvm:17 llvm-core/clang:17 )
|
|
llvm_slot_18? ( llvm-core/llvm:18 llvm-core/clang:18 )
|
|
EOF
|
|
|
|
TMP=$(mktemp -d || die)
|
|
trap 'rm -rf \"${TMP}\"' EXIT
|
|
get_libdir() { echo "${LLVM_LIBDIR}"; }
|
|
|
|
for installed_llvm_cmake in /usr/lib/llvm/*/lib*/cmake; do
|
|
installed_llvm_libdir=${installed_llvm_cmake%/*}
|
|
LLVM_LIBDIR=${installed_llvm_libdir##*/}
|
|
installed_llvm=${installed_llvm_libdir%/*}
|
|
LLVM_SLOT=${installed_llvm##*/}
|
|
|
|
test_llvm_config
|
|
done
|
|
|
|
texit
|