summaryrefslogtreecommitdiff
path: root/dev-util/clang-extract/clang-extract-9999.ebuild
diff options
context:
space:
mode:
Diffstat (limited to 'dev-util/clang-extract/clang-extract-9999.ebuild')
-rw-r--r--dev-util/clang-extract/clang-extract-9999.ebuild114
1 files changed, 114 insertions, 0 deletions
diff --git a/dev-util/clang-extract/clang-extract-9999.ebuild b/dev-util/clang-extract/clang-extract-9999.ebuild
new file mode 100644
index 000000000000..892787e428de
--- /dev/null
+++ b/dev-util/clang-extract/clang-extract-9999.ebuild
@@ -0,0 +1,114 @@
+# Copyright 2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+LLVM_COMPAT=( {16..18} )
+PYTHON_COMPAT=( python3_{10..13} )
+inherit flag-o-matic llvm-r1 meson python-any-r1
+
+DESCRIPTION="Tool to extract code content from source files"
+HOMEPAGE="https://github.com/SUSE/clang-extract"
+
+if [[ ${PV} == 9999 ]] ; then
+ EGIT_REPO_URI="https://github.com/SUSE/clang-extract.git"
+ inherit git-r3
+else
+ CLANG_EXTRACT_COMMIT="ec46efd739f15ee49f99834ba56c019cbf69e4ed"
+ SRC_URI="
+ https://github.com/SUSE/clang-extract/archive/${CLANG_EXTRACT_COMMIT}.tar.gz -> ${P}.gh.tar.gz
+ "
+ S="${WORKDIR}"/${PN}-${CLANG_EXTRACT_COMMIT}
+
+ KEYWORDS="~amd64"
+fi
+
+LICENSE="UoI-NCSA"
+SLOT="0"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ $(llvm_gen_dep '
+ sys-devel/clang:${LLVM_SLOT}
+ sys-devel/llvm:${LLVM_SLOT}
+ ')
+"
+RDEPEND="
+ ${DEPEND}
+"
+BDEPEND="
+ $(llvm_gen_dep '
+ sys-devel/clang:${LLVM_SLOT}
+ ')
+ test? ( ${PYTHON_DEPS} )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-meson.patch
+)
+
+pkg_setup() {
+ use test && python-any-r1_pkg_setup
+ llvm-r1_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ # There's no need to manually add --gcc-install-dir to Clang invocations;
+ # we already have this setup properly via our Clang config files in
+ # /etc/clang.
+ sed -i -e '/add_project_argument.*gcc-install-dir/d' meson.build || die
+
+ # Testsuite makes some (bad) assumptions about layout
+ BUILD_DIR="${S}"/build
+}
+
+src_configure() {
+ # Use whatever CC/CXX llvm-r1 found for us, as meson.build
+ # asserts on GCC being used.
+ export CC=clang
+ export CXX=clang++
+ export PKG_CONFIG_PATH="$(get_llvm_prefix)/$(get_libdir)/pkgconfig:${PKG_CONFIG_PATH}"
+ # User flags may be expecting GCC
+ strip-unsupported-flags
+
+ meson_src_configure
+}
+
+src_test() {
+ # These hacks are inspired by dev-util/clazy.
+ #
+ # clang-extract wants to be installed in the directory of the clang binary,
+ # so it can find the llvm/clang via relative paths.
+ #
+ # Setup the directories and symlink the system include dir for that.
+ local -x LLVM_ROOT="$(get_llvm_prefix)"
+ local -x CLANG_ROOT="${LLVM_ROOT//llvm/clang}"
+
+ mkdir -p "${BUILD_DIR}${CLANG_ROOT}" || die
+ ln -s "${CLANG_ROOT}/include" "${BUILD_DIR}${CLANG_ROOT}/include" || die
+ mkdir -p "${BUILD_DIR}${LLVM_ROOT}/bin" || die
+ ln -s "${BUILD_DIR}"/clang-extract "${BUILD_DIR}${LLVM_ROOT}/bin" || die
+ ln -s "${BUILD_DIR}"/ce-inline "${BUILD_DIR}${LLVM_ROOT}/bin" || die
+
+ # Wrap runtest.py so we always pass -bin-path.
+ #
+ # This is gnarly but we already have to make sure it uses the
+ # right Python, so it was quicker to just do the bash wrapper.
+ mv testsuite/lib/runtest.py{,.real} || die
+ cat <<-EOF > testsuite/lib/runtest.py || die
+ #!/bin/bash
+ export CLANG_NO_DEFAULT_CONFIG=1
+ ${EPYTHON} "${S}"/testsuite/lib/runtest.py.real \
+ -bin-path "${BUILD_DIR}${LLVM_ROOT}/bin/" \
+ "\$@"
+ EOF
+ chmod +x testsuite/lib/runtest.py || die
+
+ local -x PATH="${BUILD_DIR}/${LLVM_ROOT}/bin:${BUILD_DIR}/bin:${PATH}"
+ local -x LD_LIBRARY_PATH="${BUILD_DIR}/lib:${LD_LIBRARY_PATH}"
+
+ meson_src_test
+}