summaryrefslogtreecommitdiff
path: root/sys-devel/clang
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2022-10-11 01:37:01 +0100
committerV3n3RiX <venerix@koprulu.sector>2022-10-11 01:37:01 +0100
commit179be85ade6b2b47bf362865b5c375969ab5ddc8 (patch)
tree073bcd19b7e1bb84acd2f683936671ee88860970 /sys-devel/clang
parent948f9476d6a417da6048d4291bf36b0507293d63 (diff)
gentoo auto-resync : 11:10:2022 - 01:37:00
Diffstat (limited to 'sys-devel/clang')
-rw-r--r--sys-devel/clang/Manifest8
-rw-r--r--sys-devel/clang/clang-15.0.3.9999.ebuild88
-rw-r--r--sys-devel/clang/clang-16.0.0.9999.ebuild88
-rw-r--r--sys-devel/clang/clang-16.0.0_pre20221010.ebuild460
-rw-r--r--sys-devel/clang/metadata.xml1
5 files changed, 572 insertions, 73 deletions
diff --git a/sys-devel/clang/Manifest b/sys-devel/clang/Manifest
index c1bbcc065d3e..947647f39954 100644
--- a/sys-devel/clang/Manifest
+++ b/sys-devel/clang/Manifest
@@ -11,11 +11,13 @@ DIST llvm-project-14.0.6.src.tar.xz.sig 566 BLAKE2B cb658ad43d8ab6c43a5773aedadf
DIST llvm-project-15.0.2.src.tar.xz 112071864 BLAKE2B 96f2884d6c1007260d71e5dd41951eed029e8f50ff78f3c90f7194df13e1d4fb80ab7705c51c45a3e6b2a7714a98d9c5919fc7064d1d5f7c675e65b9b4229b65 SHA512 a0e815369c15bb4f8e8aa0fede29c3d557fcc5c8f2b39d457c03f1ef1d860082a41027238571b2aee9a158a87eb118deb08dc2ba94ce750320837a84e9908b8c
DIST llvm-project-15.0.2.src.tar.xz.sig 438 BLAKE2B 37a3a7fbc2d74db9060e85f04e159b475cf818c95a6fe2e9f5f038eb990f414d94833ecac2f9c826825a69b752876399e37e70e6934def06363f7ccb18be033a SHA512 cfe3bc400a64536ad9181c2ede7227a0953a8632fdc777d1ea1d9225c1fc4e699d90ce0b99e057ee5b87c1272d5810c4b52fb0cac167ddd2aad88f1f3ef46ee8
DIST llvm-project-5a0722e0469894564dd9b0ee1d4f8c291d09c776.tar.gz 169164627 BLAKE2B c9a8672cac0faa747baa366545d21f91b50e7611e062eb95042cbccc2dc00b74f44c5c2fcccda49b44975320dfadca5916585766235a406dfbd7321afba03025 SHA512 bad4043fab0e4f9c633bc0aa74df1f1ea886f1d20c1c7a2704bd8317371cf6325e70a770623307d7a455e815cce8c5f00be1ed4ec3f06a7b69038a2784f73243
+DIST llvm-project-ebb258d3b0785f6dcc65e1f277d0690891ddc94d.tar.gz 168823463 BLAKE2B 111afe0f6ba6cef28c3d0162c9c650d15239f981949030768780ebe308418346d0ad367e0e58417832ae43e57b27bccaf56415f81e8221c6c5e78d1113f5617b SHA512 80351d7eeac77a15bf5613b289c71d718ecaccd8a6a4ea6736ed8bfc15c8154099c771564f99ea6c8b491f99bf1ca3a45fac977d638f6a03d7f7b42ba522fa20
DIST llvmorg-13.0.1.tar.gz 147290251 BLAKE2B 2a44b012a672501761d0c27c6b3a315b69bfef0cd13b078a7e7d2fccc4a9c8c0f2bee0f164c4271c9106b0a99cb06e8b64986f66253b613336719fb86b82541b SHA512 9a8cb5d11964ba88b7624f19ec861fb28701f23956ea3c92f6ac644332d5f41fde97bd8933dd3ee70ed378058c252fa3a3887c8d1af90d219970c2b27691166f
EBUILD clang-13.0.1.ebuild 11294 BLAKE2B 33760cbd488068389efed5c011b15288021d1f93a371d5114301a5f86e815b3a1e9ae21ed6304d90916778f2312db17339d85b6d76e5e8255614706ddc3a7cf6 SHA512 b49773a02c15c4e869682664bd5703d7e08f60be9558fdbd78da19be5d5a1158093729260106cffe4cd8a6295ba740e42cc43d07da00ed8ead14dc45899ce80a
EBUILD clang-14.0.6-r1.ebuild 11719 BLAKE2B 743e26b68f15e8b4aa7acfe4f7abd095fe42a3ba6dafdff278d0bfe06f57679490e0940a1029f97d5cc3f6d4ac8b44ea63283bbad1052623ee0048fdbbeb54e0 SHA512 ec6da9dcbed9f078307e8265362a5b39dac9d97d8aadbba16395ee7ddb442d34d1d2a1e9e880da41dbdb51fcf3c741c33ac469e5f6ffa4d091adb4d1743fa12b
EBUILD clang-15.0.2.ebuild 11810 BLAKE2B 0e7f4c3e3eb9d3f238afd87100fb8bae7c4a0bf9a4fac97b6bb95822e88adf83e608e2f2fe5fcfb6b67471e4e7357ac265f33707516d7b6f054ad37b0c1940f8 SHA512 b68c91b5c0e2af3e2edfe37bf2ec56f7a054255ffc414b8e019abc9746c4519ad7bbf489a3d3e22864afe5215e069a2f8955ca2d519df2cd977a570aba7a6a36
-EBUILD clang-15.0.3.9999.ebuild 11503 BLAKE2B 58219802a09130e892b4273edd049621b6b18ab85b5eff249f4ef5296b3cc76de0efb862e987c1608bac5af2e1df61e45649bafcb0d4806bfb4266634ea57d50 SHA512 273cee814fec10fdeaa9988491500ebcb4a47840c3d2b32948445355b52508bb011e0da814a25a341547fa5a59fd0d46f1cc2b6fd932bd9d775e1224b8f0b083
-EBUILD clang-16.0.0.9999.ebuild 11474 BLAKE2B afa0b20ad7000c58b0bbb61cd1ce6fc135a46f9c72da44975990c37241fb155179fe1fbaeb0c5acc6b33ba01e64e0f43231c16af6762340284c55680e67810dd SHA512 960eb87d1d9dcab0ac983ba3d82d56249006af95a17fbdcb9ff8962074033c51c5a272a38940352104aa3db82b3c8da2520f665e78b55758a9e1715a40c94969
+EBUILD clang-15.0.3.9999.ebuild 11838 BLAKE2B 116a5c50e5f2c857503965a86461e77582dca7494523b15245ad8487bf12591aa5c5541697cfdee633711e08a4a043519277d51d8db6473257377d88229eff4c SHA512 71201c0bd1ab124adb908ce61e6862a2cf5a52b5132ad71f25782ff0463c9834b282c207768621ec3e321fbf0f9be88e1af4d654124a2b7ced5052bd1a31c9f7
+EBUILD clang-16.0.0.9999.ebuild 11809 BLAKE2B d39b4c36403a0c9c3efcc15efd0b55f16c31ed469d9b840ea75e5c98cdbad2647b130adee13b37b7db7220c9cdb4bbd444d940a64475ef5729f18f62d5823ccf SHA512 bb329d47ecae1eae9f7d745e4ebbd16a56f905bd6bab4a82242bb56a6ca8465a7230df29c6836a6b9346824a561407fdc0ef8e60e270c0b643ba6887f9fcbf17
EBUILD clang-16.0.0_pre20221006.ebuild 11474 BLAKE2B afa0b20ad7000c58b0bbb61cd1ce6fc135a46f9c72da44975990c37241fb155179fe1fbaeb0c5acc6b33ba01e64e0f43231c16af6762340284c55680e67810dd SHA512 960eb87d1d9dcab0ac983ba3d82d56249006af95a17fbdcb9ff8962074033c51c5a272a38940352104aa3db82b3c8da2520f665e78b55758a9e1715a40c94969
-MISC metadata.xml 1419 BLAKE2B 67e54312c45894825e644eec3b17f9d788a31beb8d8acf9fd5dfb604a02e35f01a0825d71547716e78b8aad9d4f7ca4d7f6a9085afc3235e3e4ed16dd46d526e SHA512 04981d6d909c239a8183cff0cd87418d88a1b3bb4c3848a88cb82164d0c5e234ab766d9a3339293502543c3ce92f7ab4fa9c3202fb45833429511e0f9d9ad584
+EBUILD clang-16.0.0_pre20221010.ebuild 11809 BLAKE2B d39b4c36403a0c9c3efcc15efd0b55f16c31ed469d9b840ea75e5c98cdbad2647b130adee13b37b7db7220c9cdb4bbd444d940a64475ef5729f18f62d5823ccf SHA512 bb329d47ecae1eae9f7d745e4ebbd16a56f905bd6bab4a82242bb56a6ca8465a7230df29c6836a6b9346824a561407fdc0ef8e60e270c0b643ba6887f9fcbf17
+MISC metadata.xml 1501 BLAKE2B 961072eb205cc00521eaffed8068733579b0c688454fa55034cbf9c271065653374d2a6c5db403e3930907ebd84a02e4c46a24dd3835406fbdafdb8ecfb9a20e SHA512 d7708ee293d78af52ad61a5a5e51a2a8047092dd837805f27622b2d4915aec65e10fdcf9ae744ab535af5b50b4483ba1ef84d1cc8701545f7c7f0500bbe15260
diff --git a/sys-devel/clang/clang-15.0.3.9999.ebuild b/sys-devel/clang/clang-15.0.3.9999.ebuild
index 2c2ced462113..782f91b3a807 100644
--- a/sys-devel/clang/clang-15.0.3.9999.ebuild
+++ b/sys-devel/clang/clang-15.0.3.9999.ebuild
@@ -16,7 +16,7 @@ HOMEPAGE="https://llvm.org/"
LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA MIT"
SLOT="${LLVM_MAJOR}/${LLVM_SOABI}"
KEYWORDS=""
-IUSE="debug doc +pie +static-analyzer test xml"
+IUSE="debug doc +extra +pie +static-analyzer test xml"
REQUIRED_USE="${PYTHON_REQUIRED_USE}"
RESTRICT="!test? ( test )"
@@ -194,42 +194,43 @@ get_distribution_components() {
clang-offload-bundler
clang-offload-packager
clang-offload-wrapper
- clang-pseudo
clang-refactor
clang-repl
clang-rename
clang-scan-deps
diagtool
hmaptool
-
- # extra tools
- clang-apply-replacements
- clang-change-namespace
- clang-doc
- clang-include-fixer
- clang-move
- clang-query
- clang-reorder-fields
- clang-tidy
- clang-tidy-headers
- clangd
- find-all-symbols
- modularize
- pp-trace
)
- if llvm_are_manpages_built; then
+ if use extra; then
out+=(
- # manpages
- docs-clang-man
- docs-clang-tools-man
+ # extra tools
+ clang-apply-replacements
+ clang-change-namespace
+ clang-doc
+ clang-include-fixer
+ clang-move
+ clang-pseudo
+ clang-query
+ clang-reorder-fields
+ clang-tidy
+ clang-tidy-headers
+ clangd
+ find-all-symbols
+ modularize
+ pp-trace
)
fi
- use doc && out+=(
- docs-clang-html
- docs-clang-tools-html
- )
+ if llvm_are_manpages_built; then
+ out+=( docs-clang-man )
+ use extra && out+=( docs-clang-tools-man )
+ fi
+
+ if use doc; then
+ out+=( docs-clang-html )
+ use extra && out+=( docs-clang-tools-html )
+ fi
use static-analyzer && out+=(
clang-check
@@ -292,13 +293,21 @@ multilib_src_configure() {
-DLLVM_BUILD_DOCS=ON
-DLLVM_ENABLE_SPHINX=ON
-DCLANG_INSTALL_SPHINX_HTML_DIR="${EPREFIX}/usr/share/doc/${PF}/html"
- -DCLANG-TOOLS_INSTALL_SPHINX_HTML_DIR="${EPREFIX}/usr/share/doc/${PF}/tools-extra"
-DSPHINX_WARNINGS_AS_ERRORS=OFF
)
+ if use extra; then
+ mycmakeargs+=(
+ -DCLANG-TOOLS_INSTALL_SPHINX_HTML_DIR="${EPREFIX}/usr/share/doc/${PF}/tools-extra"
+ )
+ fi
fi
mycmakeargs+=(
- -DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR="${WORKDIR}"/clang-tools-extra
-DCLANG_INCLUDE_DOCS=${build_docs}
+ )
+ fi
+ if multilib_native_use extra; then
+ mycmakeargs+=(
+ -DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR="${WORKDIR}"/clang-tools-extra
-DCLANG_TOOLS_EXTRA_INCLUDE_DOCS=${build_docs}
)
else
@@ -346,9 +355,14 @@ multilib_src_compile() {
multilib_src_test() {
# respect TMPDIR!
local -x LIT_PRESERVES_TMP=1
- cmake_build check-clang
- multilib_is_native_abi &&
- cmake_build check-clang-tools check-clangd
+ local test_targets=( check-clang )
+ if multilib_native_use extra; then
+ test_targets+=(
+ check-clang-tools
+ check-clangd
+ )
+ fi
+ cmake_build "${test_targets[@]}"
}
src_install() {
@@ -361,7 +375,9 @@ src_install() {
# Move runtime headers to /usr/lib/clang, where they belong
mv "${ED}"/usr/include/clangrt "${ED}"/usr/lib/clang || die
# move (remaining) wrapped headers back
- mv "${T}"/clang-tidy "${ED}"/usr/include/ || die
+ if use extra; then
+ mv "${T}"/clang-tidy "${ED}"/usr/include/ || die
+ fi
mv "${ED}"/usr/include "${ED}"/usr/lib/llvm/${LLVM_MAJOR}/include || die
# Apply CHOST and version suffix to clang tools
@@ -403,7 +419,7 @@ multilib_src_install() {
rm -rf "${ED}"/usr/include || die
mv "${ED}"/usr/lib/llvm/${LLVM_MAJOR}/include "${ED}"/usr/include || die
mv "${ED}"/usr/lib/llvm/${LLVM_MAJOR}/$(get_libdir)/clang "${ED}"/usr/include/clangrt || die
- if multilib_is_native_abi; then
+ if multilib_native_use extra; then
# don't wrap clang-tidy headers, the list is too long
# (they're fine for non-native ABI but enabling the targets is problematic)
mv "${ED}"/usr/include/clang-tidy "${T}/" || die
@@ -431,9 +447,11 @@ pkg_postinst() {
elog "You can find additional utility scripts in:"
elog " ${EROOT}/usr/lib/llvm/${LLVM_MAJOR}/share/clang"
- elog "Some of them are vim integration scripts (with instructions inside)."
- elog "The run-clang-tidy.py script requires the following additional package:"
- elog " dev-python/pyyaml"
+ if use extra; then
+ elog "Some of them are vim integration scripts (with instructions inside)."
+ elog "The run-clang-tidy.py script requires the following additional package:"
+ elog " dev-python/pyyaml"
+ fi
}
pkg_postrm() {
diff --git a/sys-devel/clang/clang-16.0.0.9999.ebuild b/sys-devel/clang/clang-16.0.0.9999.ebuild
index b7c83aeab989..1c5cd8a186b1 100644
--- a/sys-devel/clang/clang-16.0.0.9999.ebuild
+++ b/sys-devel/clang/clang-16.0.0.9999.ebuild
@@ -16,7 +16,7 @@ HOMEPAGE="https://llvm.org/"
LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA MIT"
SLOT="${LLVM_MAJOR}/${LLVM_SOABI}"
KEYWORDS=""
-IUSE="debug doc +pie +static-analyzer test xml"
+IUSE="debug doc +extra +pie +static-analyzer test xml"
REQUIRED_USE="${PYTHON_REQUIRED_USE}"
RESTRICT="!test? ( test )"
@@ -193,42 +193,43 @@ get_distribution_components() {
clang-format
clang-offload-bundler
clang-offload-packager
- clang-pseudo
clang-refactor
clang-repl
clang-rename
clang-scan-deps
diagtool
hmaptool
-
- # extra tools
- clang-apply-replacements
- clang-change-namespace
- clang-doc
- clang-include-fixer
- clang-move
- clang-query
- clang-reorder-fields
- clang-tidy
- clang-tidy-headers
- clangd
- find-all-symbols
- modularize
- pp-trace
)
- if llvm_are_manpages_built; then
+ if use extra; then
out+=(
- # manpages
- docs-clang-man
- docs-clang-tools-man
+ # extra tools
+ clang-apply-replacements
+ clang-change-namespace
+ clang-doc
+ clang-include-fixer
+ clang-move
+ clang-pseudo
+ clang-query
+ clang-reorder-fields
+ clang-tidy
+ clang-tidy-headers
+ clangd
+ find-all-symbols
+ modularize
+ pp-trace
)
fi
- use doc && out+=(
- docs-clang-html
- docs-clang-tools-html
- )
+ if llvm_are_manpages_built; then
+ out+=( docs-clang-man )
+ use extra && out+=( docs-clang-tools-man )
+ fi
+
+ if use doc; then
+ out+=( docs-clang-html )
+ use extra && out+=( docs-clang-tools-html )
+ fi
use static-analyzer && out+=(
clang-check
@@ -291,13 +292,21 @@ multilib_src_configure() {
-DLLVM_BUILD_DOCS=ON
-DLLVM_ENABLE_SPHINX=ON
-DCLANG_INSTALL_SPHINX_HTML_DIR="${EPREFIX}/usr/share/doc/${PF}/html"
- -DCLANG-TOOLS_INSTALL_SPHINX_HTML_DIR="${EPREFIX}/usr/share/doc/${PF}/tools-extra"
-DSPHINX_WARNINGS_AS_ERRORS=OFF
)
+ if use extra; then
+ mycmakeargs+=(
+ -DCLANG-TOOLS_INSTALL_SPHINX_HTML_DIR="${EPREFIX}/usr/share/doc/${PF}/tools-extra"
+ )
+ fi
fi
mycmakeargs+=(
- -DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR="${WORKDIR}"/clang-tools-extra
-DCLANG_INCLUDE_DOCS=${build_docs}
+ )
+ fi
+ if multilib_native_use extra; then
+ mycmakeargs+=(
+ -DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR="${WORKDIR}"/clang-tools-extra
-DCLANG_TOOLS_EXTRA_INCLUDE_DOCS=${build_docs}
)
else
@@ -345,9 +354,14 @@ multilib_src_compile() {
multilib_src_test() {
# respect TMPDIR!
local -x LIT_PRESERVES_TMP=1
- cmake_build check-clang
- multilib_is_native_abi &&
- cmake_build check-clang-tools check-clangd
+ local test_targets=( check-clang )
+ if multilib_native_use extra; then
+ test_targets+=(
+ check-clang-tools
+ check-clangd
+ )
+ fi
+ cmake_build "${test_targets[@]}"
}
src_install() {
@@ -360,7 +374,9 @@ src_install() {
# Move runtime headers to /usr/lib/clang, where they belong
mv "${ED}"/usr/include/clangrt "${ED}"/usr/lib/clang || die
# move (remaining) wrapped headers back
- mv "${T}"/clang-tidy "${ED}"/usr/include/ || die
+ if use extra; then
+ mv "${T}"/clang-tidy "${ED}"/usr/include/ || die
+ fi
mv "${ED}"/usr/include "${ED}"/usr/lib/llvm/${LLVM_MAJOR}/include || die
# Apply CHOST and version suffix to clang tools
@@ -402,7 +418,7 @@ multilib_src_install() {
rm -rf "${ED}"/usr/include || die
mv "${ED}"/usr/lib/llvm/${LLVM_MAJOR}/include "${ED}"/usr/include || die
mv "${ED}"/usr/lib/llvm/${LLVM_MAJOR}/$(get_libdir)/clang "${ED}"/usr/include/clangrt || die
- if multilib_is_native_abi; then
+ if multilib_native_use extra; then
# don't wrap clang-tidy headers, the list is too long
# (they're fine for non-native ABI but enabling the targets is problematic)
mv "${ED}"/usr/include/clang-tidy "${T}/" || die
@@ -430,9 +446,11 @@ pkg_postinst() {
elog "You can find additional utility scripts in:"
elog " ${EROOT}/usr/lib/llvm/${LLVM_MAJOR}/share/clang"
- elog "Some of them are vim integration scripts (with instructions inside)."
- elog "The run-clang-tidy.py script requires the following additional package:"
- elog " dev-python/pyyaml"
+ if use extra; then
+ elog "Some of them are vim integration scripts (with instructions inside)."
+ elog "The run-clang-tidy.py script requires the following additional package:"
+ elog " dev-python/pyyaml"
+ fi
}
pkg_postrm() {
diff --git a/sys-devel/clang/clang-16.0.0_pre20221010.ebuild b/sys-devel/clang/clang-16.0.0_pre20221010.ebuild
new file mode 100644
index 000000000000..1c5cd8a186b1
--- /dev/null
+++ b/sys-devel/clang/clang-16.0.0_pre20221010.ebuild
@@ -0,0 +1,460 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{8..11} )
+inherit cmake llvm llvm.org multilib multilib-minimal \
+ prefix python-single-r1 toolchain-funcs
+
+DESCRIPTION="C language family frontend for LLVM"
+HOMEPAGE="https://llvm.org/"
+
+# MSVCSetupApi.h: MIT
+# sorttable.js: MIT
+
+LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA MIT"
+SLOT="${LLVM_MAJOR}/${LLVM_SOABI}"
+KEYWORDS=""
+IUSE="debug doc +extra +pie +static-analyzer test xml"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ ~sys-devel/llvm-${PV}:${LLVM_MAJOR}=[debug=,${MULTILIB_USEDEP}]
+ static-analyzer? ( dev-lang/perl:* )
+ xml? ( dev-libs/libxml2:2=[${MULTILIB_USEDEP}] )
+"
+
+RDEPEND="
+ ${PYTHON_DEPS}
+ ${DEPEND}
+ >=sys-devel/clang-common-${PV}
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ >=dev-util/cmake-3.16
+ doc? ( $(python_gen_cond_dep '
+ dev-python/recommonmark[${PYTHON_USEDEP}]
+ dev-python/sphinx[${PYTHON_USEDEP}]
+ ') )
+ xml? ( virtual/pkgconfig )
+"
+PDEPEND="
+ sys-devel/clang-toolchain-symlinks:${LLVM_MAJOR}
+ ~sys-devel/clang-runtime-${PV}
+"
+
+LLVM_COMPONENTS=(
+ clang clang-tools-extra cmake
+ llvm/lib/Transforms/Hello
+)
+LLVM_MANPAGES=1
+LLVM_TEST_COMPONENTS=(
+ llvm/lib/Testing/Support
+ llvm/utils/{lit,llvm-lit,unittest}
+ llvm/utils/{UpdateTestChecks,update_cc_test_checks.py}
+)
+LLVM_PATCHSET=9999-r4
+LLVM_USE_TARGETS=llvm
+llvm.org_set_globals
+
+# Multilib notes:
+# 1. ABI_* flags control ABIs libclang* is built for only.
+# 2. clang is always capable of compiling code for all ABIs for enabled
+# target. However, you will need appropriate crt* files (installed
+# e.g. by sys-devel/gcc and sys-libs/glibc).
+# 3. ${CHOST}-clang wrappers are always installed for all ABIs included
+# in the current profile (i.e. alike supported by sys-devel/gcc).
+#
+# Therefore: use sys-devel/clang[${MULTILIB_USEDEP}] only if you need
+# multilib clang* libraries (not runtime, not wrappers).
+
+pkg_setup() {
+ LLVM_MAX_SLOT=${LLVM_MAJOR} llvm_pkg_setup
+ python-single-r1_pkg_setup
+}
+
+src_prepare() {
+ # create extra parent dir for relative CLANG_RESOURCE_DIR access
+ mkdir -p x/y || die
+ BUILD_DIR=${WORKDIR}/x/y/clang
+
+ llvm.org_src_prepare
+
+ # add Gentoo Portage Prefix for Darwin (see prefix-dirs.patch)
+ eprefixify \
+ lib/Lex/InitHeaderSearch.cpp \
+ lib/Driver/ToolChains/Darwin.cpp || die
+}
+
+check_distribution_components() {
+ if [[ ${CMAKE_MAKEFILE_GENERATOR} == ninja ]]; then
+ local all_targets=() my_targets=() l
+ cd "${BUILD_DIR}" || die
+
+ while read -r l; do
+ if [[ ${l} == install-*-stripped:* ]]; then
+ l=${l#install-}
+ l=${l%%-stripped*}
+
+ case ${l} in
+ # meta-targets
+ clang-libraries|distribution)
+ continue
+ ;;
+ # tools
+ clang|clangd|clang-*)
+ ;;
+ # static libraries
+ clang*|findAllSymbols)
+ continue
+ ;;
+ # conditional to USE=doc
+ docs-clang-html|docs-clang-tools-html)
+ use doc || continue
+ ;;
+ esac
+
+ all_targets+=( "${l}" )
+ fi
+ done < <(${NINJA} -t targets all)
+
+ while read -r l; do
+ my_targets+=( "${l}" )
+ done < <(get_distribution_components $"\n")
+
+ local add=() remove=()
+ for l in "${all_targets[@]}"; do
+ if ! has "${l}" "${my_targets[@]}"; then
+ add+=( "${l}" )
+ fi
+ done
+ for l in "${my_targets[@]}"; do
+ if ! has "${l}" "${all_targets[@]}"; then
+ remove+=( "${l}" )
+ fi
+ done
+
+ if [[ ${#add[@]} -gt 0 || ${#remove[@]} -gt 0 ]]; then
+ eqawarn "get_distribution_components() is outdated!"
+ eqawarn " Add: ${add[*]}"
+ eqawarn "Remove: ${remove[*]}"
+ fi
+ cd - >/dev/null || die
+ fi
+}
+
+get_distribution_components() {
+ local sep=${1-;}
+
+ local out=(
+ # common stuff
+ clang-cmake-exports
+ clang-headers
+ clang-resource-headers
+ libclang-headers
+
+ aarch64-resource-headers
+ arm-common-resource-headers
+ arm-resource-headers
+ core-resource-headers
+ cuda-resource-headers
+ hexagon-resource-headers
+ hip-resource-headers
+ hlsl-resource-headers
+ mips-resource-headers
+ opencl-resource-headers
+ openmp-resource-headers
+ ppc-htm-resource-headers
+ ppc-resource-headers
+ riscv-resource-headers
+ systemz-resource-headers
+ utility-resource-headers
+ ve-resource-headers
+ webassembly-resource-headers
+ windows-resource-headers
+ x86-resource-headers
+
+ # libs
+ clang-cpp
+ libclang
+ )
+
+ if multilib_is_native_abi; then
+ out+=(
+ # common stuff
+ bash-autocomplete
+ libclang-python-bindings
+
+ # tools
+ c-index-test
+ clang
+ clang-format
+ clang-offload-bundler
+ clang-offload-packager
+ clang-refactor
+ clang-repl
+ clang-rename
+ clang-scan-deps
+ diagtool
+ hmaptool
+ )
+
+ if use extra; then
+ out+=(
+ # extra tools
+ clang-apply-replacements
+ clang-change-namespace
+ clang-doc
+ clang-include-fixer
+ clang-move
+ clang-pseudo
+ clang-query
+ clang-reorder-fields
+ clang-tidy
+ clang-tidy-headers
+ clangd
+ find-all-symbols
+ modularize
+ pp-trace
+ )
+ fi
+
+ if llvm_are_manpages_built; then
+ out+=( docs-clang-man )
+ use extra && out+=( docs-clang-tools-man )
+ fi
+
+ if use doc; then
+ out+=( docs-clang-html )
+ use extra && out+=( docs-clang-tools-html )
+ fi
+
+ use static-analyzer && out+=(
+ clang-check
+ clang-extdef-mapping
+ scan-build
+ scan-build-py
+ scan-view
+ )
+ fi
+
+ printf "%s${sep}" "${out[@]}"
+}
+
+multilib_src_configure() {
+ local mycmakeargs=(
+ -DLLVM_CMAKE_PATH="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}/$(get_libdir)/cmake/llvm"
+ -DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}"
+ -DCMAKE_INSTALL_MANDIR="${EPREFIX}/usr/lib/llvm/${LLVM_MAJOR}/share/man"
+ -DCLANG_CONFIG_FILE_SYSTEM_DIR="${EPREFIX}/etc/clang"
+ # relative to bindir
+ -DCLANG_RESOURCE_DIR="../../../../lib/clang/${LLVM_VERSION}"
+
+ -DBUILD_SHARED_LIBS=OFF
+ -DCLANG_LINK_CLANG_DYLIB=ON
+ -DLLVM_DISTRIBUTION_COMPONENTS=$(get_distribution_components)
+
+ -DLLVM_TARGETS_TO_BUILD="${LLVM_TARGETS// /;}"
+ -DLLVM_BUILD_TESTS=$(usex test)
+
+ # these are not propagated reliably, so redefine them
+ -DLLVM_ENABLE_EH=ON
+ -DLLVM_ENABLE_RTTI=ON
+
+ -DCMAKE_DISABLE_FIND_PACKAGE_LibXml2=$(usex !xml)
+ # libgomp support fails to find headers without explicit -I
+ # furthermore, it provides only syntax checking
+ -DCLANG_DEFAULT_OPENMP_RUNTIME=libomp
+
+ # disable using CUDA to autodetect GPU, just build for all
+ -DCMAKE_DISABLE_FIND_PACKAGE_CUDA=ON
+
+ -DCLANG_DEFAULT_PIE_ON_LINUX=$(usex pie)
+
+ -DCLANG_ENABLE_ARCMT=$(usex static-analyzer)
+ -DCLANG_ENABLE_STATIC_ANALYZER=$(usex static-analyzer)
+
+ -DPython3_EXECUTABLE="${PYTHON}"
+ )
+ use test && mycmakeargs+=(
+ -DLLVM_MAIN_SRC_DIR="${WORKDIR}/llvm"
+ -DLLVM_EXTERNAL_LIT="${BUILD_DIR}/bin/llvm-lit"
+ -DLLVM_LIT_ARGS="$(get_lit_flags)"
+ )
+
+ if multilib_is_native_abi; then
+ local build_docs=OFF
+ if llvm_are_manpages_built; then
+ build_docs=ON
+ mycmakeargs+=(
+ -DLLVM_BUILD_DOCS=ON
+ -DLLVM_ENABLE_SPHINX=ON
+ -DCLANG_INSTALL_SPHINX_HTML_DIR="${EPREFIX}/usr/share/doc/${PF}/html"
+ -DSPHINX_WARNINGS_AS_ERRORS=OFF
+ )
+ if use extra; then
+ mycmakeargs+=(
+ -DCLANG-TOOLS_INSTALL_SPHINX_HTML_DIR="${EPREFIX}/usr/share/doc/${PF}/tools-extra"
+ )
+ fi
+ fi
+ mycmakeargs+=(
+ -DCLANG_INCLUDE_DOCS=${build_docs}
+ )
+ fi
+ if multilib_native_use extra; then
+ mycmakeargs+=(
+ -DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR="${WORKDIR}"/clang-tools-extra
+ -DCLANG_TOOLS_EXTRA_INCLUDE_DOCS=${build_docs}
+ )
+ else
+ mycmakeargs+=(
+ -DLLVM_TOOL_CLANG_TOOLS_EXTRA_BUILD=OFF
+ )
+ fi
+
+ if [[ -n ${EPREFIX} ]]; then
+ mycmakeargs+=(
+ -DGCC_INSTALL_PREFIX="${EPREFIX}/usr"
+ )
+ fi
+
+ if tc-is-cross-compiler; then
+ [[ -x "/usr/bin/clang-tblgen" ]] \
+ || die "/usr/bin/clang-tblgen not found or usable"
+ mycmakeargs+=(
+ -DCMAKE_CROSSCOMPILING=ON
+ -DCLANG_TABLEGEN=/usr/bin/clang-tblgen
+ )
+ fi
+
+ # LLVM can have very high memory consumption while linking,
+ # exhausting the limit on 32-bit linker executable
+ use x86 && local -x LDFLAGS="${LDFLAGS} -Wl,--no-keep-memory"
+
+ # LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844
+ use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG"
+ cmake_src_configure
+
+ multilib_is_native_abi && check_distribution_components
+}
+
+multilib_src_compile() {
+ cmake_build distribution
+
+ # provide a symlink for tests
+ if [[ ! -L ${WORKDIR}/lib/clang ]]; then
+ mkdir -p "${WORKDIR}"/lib || die
+ ln -s "${BUILD_DIR}/$(get_libdir)/clang" "${WORKDIR}"/lib/clang || die
+ fi
+}
+
+multilib_src_test() {
+ # respect TMPDIR!
+ local -x LIT_PRESERVES_TMP=1
+ local test_targets=( check-clang )
+ if multilib_native_use extra; then
+ test_targets+=(
+ check-clang-tools
+ check-clangd
+ )
+ fi
+ cmake_build "${test_targets[@]}"
+}
+
+src_install() {
+ MULTILIB_WRAPPED_HEADERS=(
+ /usr/include/clang/Config/config.h
+ )
+
+ multilib-minimal_src_install
+
+ # Move runtime headers to /usr/lib/clang, where they belong
+ mv "${ED}"/usr/include/clangrt "${ED}"/usr/lib/clang || die
+ # move (remaining) wrapped headers back
+ if use extra; then
+ mv "${T}"/clang-tidy "${ED}"/usr/include/ || die
+ fi
+ mv "${ED}"/usr/include "${ED}"/usr/lib/llvm/${LLVM_MAJOR}/include || die
+
+ # Apply CHOST and version suffix to clang tools
+ local clang_tools=( clang clang++ clang-cl clang-cpp )
+ local abi i
+
+ # cmake gives us:
+ # - clang-X
+ # - clang -> clang-X
+ # - clang++, clang-cl, clang-cpp -> clang
+ # we want to have:
+ # - clang-X
+ # - clang++-X, clang-cl-X, clang-cpp-X -> clang-X
+ # - clang, clang++, clang-cl, clang-cpp -> clang*-X
+ # also in CHOST variant
+ for i in "${clang_tools[@]:1}"; do
+ rm "${ED}/usr/lib/llvm/${LLVM_MAJOR}/bin/${i}" || die
+ dosym "clang-${LLVM_MAJOR}" "/usr/lib/llvm/${LLVM_MAJOR}/bin/${i}-${LLVM_MAJOR}"
+ dosym "${i}-${LLVM_MAJOR}" "/usr/lib/llvm/${LLVM_MAJOR}/bin/${i}"
+ done
+
+ # now create target symlinks for all supported ABIs
+ for abi in $(get_all_abis); do
+ local abi_chost=$(get_abi_CHOST "${abi}")
+ for i in "${clang_tools[@]}"; do
+ dosym "${i}-${LLVM_MAJOR}" \
+ "/usr/lib/llvm/${LLVM_MAJOR}/bin/${abi_chost}-${i}-${LLVM_MAJOR}"
+ dosym "${abi_chost}-${i}-${LLVM_MAJOR}" \
+ "/usr/lib/llvm/${LLVM_MAJOR}/bin/${abi_chost}-${i}"
+ done
+ done
+}
+
+multilib_src_install() {
+ DESTDIR=${D} cmake_build install-distribution
+
+ # move headers to /usr/include for wrapping & ABI mismatch checks
+ # (also drop the version suffix from runtime headers)
+ rm -rf "${ED}"/usr/include || die
+ mv "${ED}"/usr/lib/llvm/${LLVM_MAJOR}/include "${ED}"/usr/include || die
+ mv "${ED}"/usr/lib/llvm/${LLVM_MAJOR}/$(get_libdir)/clang "${ED}"/usr/include/clangrt || die
+ if multilib_native_use extra; then
+ # don't wrap clang-tidy headers, the list is too long
+ # (they're fine for non-native ABI but enabling the targets is problematic)
+ mv "${ED}"/usr/include/clang-tidy "${T}/" || die
+ fi
+}
+
+multilib_src_install_all() {
+ python_fix_shebang "${ED}"
+ if use static-analyzer; then
+ python_optimize "${ED}"/usr/lib/llvm/${LLVM_MAJOR}/share/scan-view
+ fi
+
+ docompress "/usr/lib/llvm/${LLVM_MAJOR}/share/man"
+ llvm_install_manpages
+ # match 'html' non-compression
+ use doc && docompress -x "/usr/share/doc/${PF}/tools-extra"
+ # +x for some reason; TODO: investigate
+ use static-analyzer && fperms a-x "/usr/lib/llvm/${LLVM_MAJOR}/share/man/man1/scan-build.1"
+}
+
+pkg_postinst() {
+ if [[ -z ${ROOT} && -f ${EPREFIX}/usr/share/eselect/modules/compiler-shadow.eselect ]] ; then
+ eselect compiler-shadow update all
+ fi
+
+ elog "You can find additional utility scripts in:"
+ elog " ${EROOT}/usr/lib/llvm/${LLVM_MAJOR}/share/clang"
+ if use extra; then
+ elog "Some of them are vim integration scripts (with instructions inside)."
+ elog "The run-clang-tidy.py script requires the following additional package:"
+ elog " dev-python/pyyaml"
+ fi
+}
+
+pkg_postrm() {
+ if [[ -z ${ROOT} && -f ${EPREFIX}/usr/share/eselect/modules/compiler-shadow.eselect ]] ; then
+ eselect compiler-shadow clean all
+ fi
+}
diff --git a/sys-devel/clang/metadata.xml b/sys-devel/clang/metadata.xml
index 9eff0810e614..565650790b47 100644
--- a/sys-devel/clang/metadata.xml
+++ b/sys-devel/clang/metadata.xml
@@ -30,6 +30,7 @@ Conformance with C/C++/ObjC and their variants</longdescription>
<flag name="default-compiler-rt">Use compiler-rt instead of libgcc as the default rtlib for clang</flag>
<flag name="default-libcxx">Use libc++ instead of libstdc++ as the default stdlib for clang</flag>
<flag name="default-lld">Use lld as the default linker for clang</flag>
+ <flag name="extra">Build extra tools (clangd, clang-tidy and a few more)</flag>
<flag name="static-analyzer">Install the Clang static analyzer</flag>
</use>
<upstream>