Introduce llvm.org_src_prepare() that calls appropriate src_prepare()
implementation (either cmake or default), causing patch application
to happen in ${WORKDIR} rather than ${S}.  This makes it possible
to use patches made against llvm-project git repository out of the box.

Signed-off-by: Michał Górny <mgo...@gentoo.org>
---
 eclass/llvm.org.eclass | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/eclass/llvm.org.eclass b/eclass/llvm.org.eclass
index b4b80df06d85..9fc975cd51cb 100644
--- a/eclass/llvm.org.eclass
+++ b/eclass/llvm.org.eclass
@@ -174,6 +174,9 @@ llvm.org_set_globals() {
 # == phase functions ==
 
 EXPORT_FUNCTIONS src_unpack
+if ver_test -ge 10.0.1_rc; then
+       EXPORT_FUNCTIONS src_prepare
+fi
 
 # @FUNCTION: llvm.org_src_unpack
 # @DESCRIPTION:
@@ -217,3 +220,23 @@ llvm.org_src_unpack() {
                fi
        fi
 }
+
+# @FUNCTION: llvm.org_src_prepare
+# @DESCRIPTION:
+# Call appropriate src_prepare (cmake or default) depending on inherited
+# eclasses.  Make sure that PATCHES and user patches are applied in top
+# ${WORKDIR}, so that patches straight from llvm-project repository
+# work correctly with -p1.
+llvm.org_src_prepare() {
+       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
+               CMAKE_USE_DIR=${S} \
+               S=${WORKDIR} \
+               cmake_src_prepare
+       else
+               pushd "${WORKDIR}" >/dev/null || die
+               default_src_prepare
+               popd >/dev/null || die
+       fi
+}
-- 
2.27.0


Reply via email to