commit:     2eba65b97fdae4de9930322fbb24662335dfbb36
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Thu Apr 22 10:26:14 2021 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Thu Apr 22 11:21:36 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2eba65b9

llvm.org.eclass: Support Gentoo patchsets

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 eclass/llvm.org.eclass | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/eclass/llvm.org.eclass b/eclass/llvm.org.eclass
index e532c953cb7..394df33df04 100644
--- a/eclass/llvm.org.eclass
+++ b/eclass/llvm.org.eclass
@@ -89,6 +89,11 @@ inherit multiprocessing
 # the manpages.  If set to 'pregenerated', fetch and install
 # pregenerated manpages from the archive.
 
+# @ECLASS-VARIABLE: LLVM_PATCHSET
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# LLVM patchset version.  No patchset is used if unset.
+
 
 # == global scope logic ==
 
@@ -145,6 +150,11 @@ llvm.org_set_globals() {
                        die "Invalid LLVM_MANPAGES=${LLVM_MANPAGES}"
        esac
 
+       if [[ -n ${LLVM_PATCHSET} ]]; then
+               SRC_URI+="
+                       
https://dev.gentoo.org/~mgorny/dist/llvm/llvm-gentoo-patchset-${LLVM_PATCHSET}.tar.xz";
+       fi
+
        # === useful defaults for cmake-based packages ===
 
        # least intrusive of all
@@ -192,6 +202,15 @@ llvm.org_src_unpack() {
                        [[ ${x} != ${archive} ]] && unpack "${x}"
                done
        fi
+
+       if [[ -n ${LLVM_PATCHSET} ]]; then
+               # strip patches that don't match current components
+               local IFS='|'
+               grep -E -r -L "^Gentoo-Component:.*(${components[*]})" \
+                       "${WORKDIR}/llvm-gentoo-patchset-${LLVM_PATCHSET}" |
+                       xargs rm
+               assert
+       fi
 }
 
 # @FUNCTION: llvm.org_src_prepare
@@ -201,6 +220,13 @@ llvm.org_src_unpack() {
 # ${WORKDIR}, so that patches straight from llvm-project repository
 # work correctly with -p1.
 llvm.org_src_prepare() {
+       if [[ -n ${LLVM_PATCHSET} ]]; then
+               local PATCHES=(
+                       "${PATCHES[@]}"
+                       "${WORKDIR}/llvm-gentoo-patchset-${LLVM_PATCHSET}"
+               )
+       fi
+
        if declare -f cmake_src_prepare >/dev/null; then
                # cmake eclasses force ${S} for default_src_prepare
                # but use ${CMAKE_USE_DIR} for everything else

Reply via email to