summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2017-06-30 23:09:33 +0200
committerMichał Górny <mgorny@gentoo.org>2017-08-12 23:21:29 +0200
commit672d7885d6de8969dbc8df5b168a253afa68cbea (patch)
treed23c6209a86d6877514e458b207fd32c5c04225b /eclass
parentllvm.eclass: Check for installed package rather than executable (diff)
downloadgentoo-672d7885d6de8969dbc8df5b168a253afa68cbea.tar.gz
gentoo-672d7885d6de8969dbc8df5b168a253afa68cbea.tar.bz2
gentoo-672d7885d6de8969dbc8df5b168a253afa68cbea.zip
llvm.eclass: Support checking LLVM deps via llvm_check_deps()
Introduce the support for llvm_check_deps() function to override the default LLVM slot acceptance test (checking whether sys-devel/llvm is installed). This can be used to match more complex dependency specifications, e.g. to find a LLVM slot that has a matching clang version, or to request USE dependencies on LLVM or clang.
Diffstat (limited to 'eclass')
-rw-r--r--eclass/llvm.eclass60
1 files changed, 45 insertions, 15 deletions
diff --git a/eclass/llvm.eclass b/eclass/llvm.eclass
index 4df3825e6e31..fc09a7d9598d 100644
--- a/eclass/llvm.eclass
+++ b/eclass/llvm.eclass
@@ -37,6 +37,21 @@
# do-something-else
# }
# @CODE
+#
+# Example for a package needing LLVM+clang w/ a specific target:
+# @CODE
+# inherit cmake-utils llvm
+#
+# # note: do not use := on both clang and llvm, it can match different
+# # slots then. clang pulls llvm in, so we can skip the latter.
+# RDEPEND="
+# >=sys-devel/clang-4:=[llvm_targets_AMDGPU(+)]
+# "
+#
+# llvm_check_deps() {
+# has_version "sys-devel/clang:${LLVM_SLOT}[llvm_targets_AMDGPU(+)]"
+# }
+# @CODE
case "${EAPI:-0}" in
0|1|2|3|4|5)
@@ -68,14 +83,22 @@ declare -g -r _LLVM_KNOWN_SLOTS=( 6 5 4 )
# @FUNCTION: get_llvm_prefix
# @USAGE: [<max_slot>]
# @DESCRIPTION:
-# Prints the absolute path to an LLVM install prefix corresponding to
-# the newest installed version of LLVM that is not newer than
-# <max_slot>. If no <max_slot> is specified, there is no upper limit.
+# Find the newest LLVM install that is acceptable for the package,
+# and print an absolute path to it.
+#
+# If <max_slot> is specified, then only LLVM versions that are not newer
+# than <max_slot> will be considered. Otherwise, all LLVM versions would
+# be considered acceptable. The function does not support specifying
+# minimal supported version -- the developer must ensure that a version
+# new enough is installed via providing appropriate dependencies.
#
-# Note that the function does not support lower-bound version, so you
-# need to provide correct dependencies to ensure that a new enough
-# version will be always installed. Otherwise, the function could return
-# a version lower than required.
+# If llvm_check_deps() function is defined within the ebuild, it will
+# be called to verify whether a particular slot is accepable. Within
+# the function scope, LLVM_SLOT will be defined to the SLOT value
+# (0, 4, 5...). The function should return a true status if the slot
+# is acceptable, false otherwise. If llvm_check_deps() is not defined,
+# the function defaults to checking whether sys-devel/llvm:${LLVM_SLOT}
+# is installed.
get_llvm_prefix() {
debug-print-function ${FUNCNAME} "${@}"
@@ -91,11 +114,16 @@ get_llvm_prefix() {
fi
fi
- # check if LLVM package is installed
- if has_version "sys-devel/llvm:${slot}"; then
- echo "${EPREFIX}/usr/lib/llvm/${slot}"
- return
+ if declare -f llvm_check_deps >/dev/null; then
+ local LLVM_SLOT=${slot}
+ llvm_check_deps || continue
+ else
+ # check if LLVM package is installed
+ has_version "sys-devel/llvm:${slot}" || continue
fi
+
+ echo "${EPREFIX}/usr/lib/llvm/${slot}"
+ return
done
# max_slot should have been unset in the iteration
@@ -115,10 +143,12 @@ get_llvm_prefix() {
# @FUNCTION: llvm_pkg_setup
# @DESCRIPTION:
-# Prepend the executable directory corresponding to the newest
-# installed LLVM version that is not newer than ${LLVM_MAX_SLOT}
-# to PATH. If LLVM_MAX_SLOT is unset or empty, the newest installed
-# slot will be used.
+# Prepend the appropriate executable directory for the newest
+# acceptable LLVM slot to the PATH. For path determination logic,
+# please see the get_llvm_prefix documentation.
+#
+# The highest acceptable LLVM slot can be set in LLVM_MAX_SLOT variable.
+# If it is unset or empty, any slot is acceptable.
#
# The PATH manipulation is only done for source builds. The function
# is a no-op when installing a binary package.