summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Groffen <grobian@gentoo.org>2017-12-29 15:36:17 +0100
committerFabian Groffen <grobian@gentoo.org>2017-12-29 15:36:26 +0100
commit861716fce0066319fce54243dab1aa805e04aeff (patch)
treea29ccb9efbc23f63bba17f38eadb0edf6eaea57d /sys-libs/tapi/tapi-2.0.0.ebuild
parentwww-client/google-chrome: remove myself from metadata.xml (diff)
downloadgentoo-861716fce0066319fce54243dab1aa805e04aeff.tar.gz
gentoo-861716fce0066319fce54243dab1aa805e04aeff.tar.bz2
gentoo-861716fce0066319fce54243dab1aa805e04aeff.zip
sys-libs/tapi: version bump to support recent ld64 by Michael Weiser
I made some small changes to use a tarball because repoman does not permit a live-ebuild (one that uses git-r3) to be in the tree unmasked. Closes: https://bugs.gentoo.org/642292 Package-Manager: Portage-2.3.13, Repoman-2.3.3
Diffstat (limited to 'sys-libs/tapi/tapi-2.0.0.ebuild')
-rw-r--r--sys-libs/tapi/tapi-2.0.0.ebuild177
1 files changed, 177 insertions, 0 deletions
diff --git a/sys-libs/tapi/tapi-2.0.0.ebuild b/sys-libs/tapi/tapi-2.0.0.ebuild
new file mode 100644
index 000000000000..586bd1d95c27
--- /dev/null
+++ b/sys-libs/tapi/tapi-2.0.0.ebuild
@@ -0,0 +1,177 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+: ${CMAKE_MAKEFILE_GENERATOR:=ninja}
+
+inherit cmake-utils llvm
+
+# This is a hog: We need to carve ObjCMetadata out of Apple's clang. We also
+# need llvm-tblgen and clang-tblgen because tapi uses them to generate some
+# source. It's assumed that they're only ever needed when building LLVM and
+# clang. So they don't get installed in the system and we need to compile them
+# fresh from LLVM and clang sources. And finally we need an installed LLVM and
+# clang to build tapi against.
+
+LLVM_PV=5.0.1
+LLVM_PN=llvm
+LLVM_P=${LLVM_PN}-${LLVM_PV}
+
+CLANG_PN=cfe
+CLANG_P=${CLANG_PN}-${LLVM_PV}
+
+APPLE_LLVM_PV=800.0.42.1
+APPLE_LLVM_PN=clang
+APPLE_LLVM_P=${APPLE_LLVM_PN}-${APPLE_LLVM_PV}
+
+OBJCMD_PN=objcmetadata
+OBJCMD_P=${OBJCMD_PN}-${APPLE_LLVM_PV}
+
+DESCRIPTION="Text-based Application Programming Interface"
+HOMEPAGE="https://opensource.apple.com/source/tapi"
+SRC_URI="https://opensource.apple.com/tarballs/clang/${APPLE_LLVM_P}.tar.gz
+ http://releases.llvm.org/${LLVM_PV}/${LLVM_P}.src.tar.xz
+ http://releases.llvm.org/${LLVM_PV}/${CLANG_P}.src.tar.xz"
+
+if [[ ${PV} == 9999* ]] ; then
+ EGIT_REPO_URI="https://github.com/ributzka/tapi.git"
+ TAPI_P=${P}
+ inherit git-r3
+else
+ TAPI_COMMIT=b9205695b4edee91000383695be8de5ba8e0db41
+ SRC_URI+=" https://github.com/ributzka/${PN}/archive/${TAPI_COMMIT}.tar.gz -> ${P}.tar.gz"
+ TAPI_P=${PN}-${TAPI_COMMIT}
+fi
+
+LICENSE="|| ( UoI-NCSA MIT )"
+SLOT="0"
+KEYWORDS="~x64-macos ~x86-macos"
+
+DEPEND="sys-devel/llvm:=
+ sys-devel/clang:="
+RDEPEND="${DEPEND}"
+
+DOCS=( Readme.md )
+
+LLVM_S="${WORKDIR}"/${LLVM_P}.src
+LLVM_BUILD="${WORKDIR}"/${LLVM_P}_build
+
+CLANG_S="${WORKDIR}"/${CLANG_P}.src
+
+APPLE_LLVM_S="${WORKDIR}/${APPLE_LLVM_P}"/src
+
+TAPI_S="${WORKDIR}"/${TAPI_P}
+
+# to avoid ebuild dying
+S=${WORKDIR}
+
+TAPI_BUILD="${WORKDIR}"/${P}_build
+
+OBJCMD_S="${WORKDIR}"/${OBJCMD_P}
+OBJCMD_BUILD="${WORKDIR}"/${OBJCMD_P}_build
+# put temporary install root into tapi build dir so that it does not end up on
+# libtapi's rpath
+OBJCMD_ROOT="${TAPI_BUILD}"/${OBJCMD_PN}_root
+
+src_prepare() {
+ # carve ObjCMetadata out of llvm and make it stand on its own
+ mkdir -p "${OBJCMD_S}"/{include/llvm,lib} || die
+ cd ${OBJCMD_S} || die
+ cp -r ${APPLE_LLVM_S}/include/llvm/ObjCMetadata include/llvm || die
+ cp -r ${APPLE_LLVM_S}/lib/ObjCMetadata lib || die
+ eapply "${FILESDIR}"/${OBJCMD_PN}-800.0.42.1-standalone.patch
+ CMAKE_USE_DIR="${PWD}" \
+ cmake-utils_src_prepare
+
+ cd "${LLVM_S}" || die
+ CMAKE_USE_DIR="${PWD}" \
+ cmake-utils_src_prepare
+
+ cd "${TAPI_S}" || die
+ eapply "${FILESDIR}"/${PN}-2.0.0-standalone.patch
+ CMAKE_USE_DIR="${PWD}" \
+ cmake-utils_src_prepare
+}
+
+src_configure() {
+ # configure LLVM and clang for tablegen build
+ local mycmakeargs=(
+ # shared libs cause all kinds of problems and we don't need them just
+ # to run tblgen a couple of times
+ -DBUILD_SHARED_LIBS=OFF
+ # configure less targets to speed up configuration. We don't build them
+ # anyway.
+ -DLLVM_TARGETS_TO_BUILD=X86
+ -DLLVM_EXTERNAL_PROJECTS=clang
+ -DLLVM_EXTERNAL_CLANG_SOURCE_DIR=${CLANG_S}
+ )
+
+ cd "${LLVM_S}" || die
+ BUILD_DIR="${LLVM_BUILD}" \
+ CMAKE_USE_DIR="${PWD}" \
+ CMAKE_BUILD_TYPE=RelWithDebInfo \
+ cmake-utils_src_configure
+
+ local llvm_prefix=$(get_llvm_prefix)
+
+ # configure ObjCMetadata
+ local mycmakeargs=(
+ # fails to compile without -std=c++11
+ -DCMAKE_CXX_STANDARD=11
+ # compile against currently installed LLVM
+ -DLLVM_DIR="${llvm_prefix}/lib/cmake/llvm"
+ # install into temporary root in work dir just so we can compile and
+ # link against it. Static lib will be pulled into libtapi and tools.
+ -DCMAKE_INSTALL_PREFIX="${OBJCMD_ROOT}"
+ )
+
+ cd "${OBJCMD_S}" || die
+ BUILD_DIR="${OBJCMD_BUILD}" \
+ CMAKE_USE_DIR="${PWD}" \
+ cmake-utils_src_configure
+
+ # configure tapi
+ local mycmakeargs=(
+ # fails to compile without -std=c++11
+ -DCMAKE_CXX_STANDARD=11
+ # compile against currently installed LLVM
+ -DLLVM_DIR="${llvm_prefix}"/lib/cmake/llvm
+ # use tblgens from LLVM build directory directly. They generate source
+ # from description files. Therefore it shouldn't matter if they
+ # match up with the installed LLVM.
+ -DLLVM_TABLEGEN_EXE="${LLVM_BUILD}"/bin/llvm-tblgen
+ -DCLANG_TABLEGEN_EXE="${LLVM_BUILD}"/bin/clang-tblgen
+ # pull in includes and libs from ObjCMetadata's temporary install root
+ -DOBJCMETADATA_INCLUDE_DIRS="${OBJCMD_ROOT}"/include
+ -DOBJCMETADATA_LIBRARY_DIRS="${OBJCMD_ROOT}"/lib
+ )
+
+ cd "${TAPI_S}" || die
+ BUILD_DIR="${TAPI_BUILD}/" \
+ CMAKE_USE_DIR="${PWD}" \
+ cmake-utils_src_configure
+}
+
+src_compile() {
+ # build LLVM and clang tablegen
+ cd "${LLVM_S}" || die
+ BUILD_DIR="${LLVM_BUILD}" \
+ CMAKE_USE_DIR="${PWD}" \
+ cmake-utils_src_compile llvm-tblgen clang-tblgen
+
+ # build ObjCMetadata
+ cd "${OBJCMD_S}" || die
+ BUILD_DIR="${OBJCMD_BUILD}" \
+ CMAKE_USE_DIR="${PWD}" \
+ cmake-utils_src_compile
+ # install into temporary root in work dir
+ cd "${OBJCMD_BUILD}" || die
+ ${CMAKE_MAKEFILE_GENERATOR} install
+
+ # finally build tapi
+ cd "${TAPI_S}" || die
+ BUILD_DIR="${TAPI_BUILD}" \
+ CMAKE_USE_DIR="${PWD}" \
+ cmake-utils_src_compile
+}