dev-qt/qttest: stable 5.14.2 for ppc, bug #719732
[gentoo.git] / sys-libs / tapi / tapi-2.0.0.ebuild
1 # Copyright 1999-2017 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3
4 EAPI=6
5
6 : ${CMAKE_MAKEFILE_GENERATOR:=ninja}
7
8 inherit cmake-utils llvm
9
10 # This is a hog: We need to carve ObjCMetadata out of Apple's clang. We also
11 # need llvm-tblgen and clang-tblgen because tapi uses them to generate some
12 # source. It's assumed that they're only ever needed when building LLVM and
13 # clang. So they don't get installed in the system and we need to compile them
14 # fresh from LLVM and clang sources. And finally we need an installed LLVM and
15 # clang to build tapi against.
16
17 LLVM_PV=5.0.1
18 LLVM_PN=llvm
19 LLVM_P=${LLVM_PN}-${LLVM_PV}
20
21 CLANG_PN=cfe
22 CLANG_P=${CLANG_PN}-${LLVM_PV}
23
24 APPLE_LLVM_PV=800.0.42.1
25 APPLE_LLVM_PN=clang
26 APPLE_LLVM_P=${APPLE_LLVM_PN}-${APPLE_LLVM_PV}
27
28 OBJCMD_PN=objcmetadata
29 OBJCMD_P=${OBJCMD_PN}-${APPLE_LLVM_PV}
30
31 DESCRIPTION="Text-based Application Programming Interface"
32 HOMEPAGE="https://opensource.apple.com/source/tapi"
33 SRC_URI="https://opensource.apple.com/tarballs/clang/${APPLE_LLVM_P}.tar.gz
34         http://releases.llvm.org/${LLVM_PV}/${LLVM_P}.src.tar.xz
35         http://releases.llvm.org/${LLVM_PV}/${CLANG_P}.src.tar.xz"
36
37 if [[ ${PV} == 9999* ]] ; then
38         EGIT_REPO_URI="https://github.com/ributzka/tapi.git"
39         TAPI_P=${P}
40         inherit git-r3
41 else
42         TAPI_COMMIT=b9205695b4edee91000383695be8de5ba8e0db41
43         SRC_URI+=" https://github.com/ributzka/${PN}/archive/${TAPI_COMMIT}.tar.gz -> ${P}.tar.gz"
44         TAPI_P=${PN}-${TAPI_COMMIT}
45 fi
46
47 LICENSE="|| ( UoI-NCSA MIT )"
48 SLOT="0"
49 KEYWORDS="~x64-macos ~x86-macos"
50
51 DEPEND="sys-devel/llvm:=
52         sys-devel/clang:="
53 RDEPEND="${DEPEND}"
54
55 DOCS=( Readme.md )
56
57 LLVM_S="${WORKDIR}"/${LLVM_P}.src
58 LLVM_BUILD="${WORKDIR}"/${LLVM_P}_build
59
60 CLANG_S="${WORKDIR}"/${CLANG_P}.src
61
62 APPLE_LLVM_S="${WORKDIR}/${APPLE_LLVM_P}"/src
63
64 S="${WORKDIR}"/${TAPI_P}
65
66 TAPI_BUILD="${WORKDIR}"/${P}_build
67
68 OBJCMD_S="${WORKDIR}"/${OBJCMD_P}
69 OBJCMD_BUILD="${WORKDIR}"/${OBJCMD_P}_build
70 # put temporary install root into tapi build dir so that it does not end up on
71 # libtapi's rpath
72 OBJCMD_ROOT="${TAPI_BUILD}"/${OBJCMD_PN}_root
73
74 src_prepare() {
75         # carve ObjCMetadata out of llvm and make it stand on its own
76         mkdir -p "${OBJCMD_S}"/{include/llvm,lib} || die
77         cd ${OBJCMD_S} || die
78         cp -r ${APPLE_LLVM_S}/include/llvm/ObjCMetadata include/llvm || die
79         cp -r ${APPLE_LLVM_S}/lib/ObjCMetadata lib || die
80         eapply "${FILESDIR}"/${OBJCMD_PN}-800.0.42.1-standalone.patch
81         CMAKE_USE_DIR="${PWD}" \
82                 cmake-utils_src_prepare
83
84         cd "${LLVM_S}" || die
85         CMAKE_USE_DIR="${PWD}" \
86                 cmake-utils_src_prepare
87
88         cd "${S}" || die
89         eapply "${FILESDIR}"/${PN}-2.0.0-standalone.patch
90         CMAKE_USE_DIR="${PWD}" \
91                 cmake-utils_src_prepare
92 }
93
94 src_configure() {
95         # configure LLVM and clang for tablegen build
96         local mycmakeargs=(
97                 # shared libs cause all kinds of problems and we don't need them just
98                 # to run tblgen a couple of times
99                 -DBUILD_SHARED_LIBS=OFF
100                 # configure less targets to speed up configuration. We don't build them
101                 # anyway.
102                 -DLLVM_TARGETS_TO_BUILD=X86
103                 -DLLVM_EXTERNAL_PROJECTS=clang
104                 -DLLVM_EXTERNAL_CLANG_SOURCE_DIR=${CLANG_S}
105         )
106
107         cd "${LLVM_S}" || die
108         BUILD_DIR="${LLVM_BUILD}" \
109                 CMAKE_USE_DIR="${PWD}" \
110                 CMAKE_BUILD_TYPE=RelWithDebInfo \
111                 cmake-utils_src_configure
112
113         local llvm_prefix=$(get_llvm_prefix)
114
115         # configure ObjCMetadata
116         local mycmakeargs=(
117                 # fails to compile without -std=c++11
118                 -DCMAKE_CXX_STANDARD=11
119                 # compile against currently installed LLVM
120                 -DLLVM_DIR="${llvm_prefix}/lib/cmake/llvm"
121                 # install into temporary root in work dir just so we can compile and
122                 # link against it. Static lib will be pulled into libtapi and tools.
123                 -DCMAKE_INSTALL_PREFIX="${OBJCMD_ROOT}"
124         )
125
126         cd "${OBJCMD_S}" || die
127         BUILD_DIR="${OBJCMD_BUILD}" \
128                 CMAKE_USE_DIR="${PWD}" \
129                 cmake-utils_src_configure
130
131         # configure tapi
132         local mycmakeargs=(
133                 # fails to compile without -std=c++11
134                 -DCMAKE_CXX_STANDARD=11
135                 # compile against currently installed LLVM
136                 -DLLVM_DIR="${llvm_prefix}"/lib/cmake/llvm
137                 # use tblgens from LLVM build directory directly. They generate source
138                 # from description files. Therefore it shouldn't matter if they
139                 # match up with the installed LLVM.
140                 -DLLVM_TABLEGEN_EXE="${LLVM_BUILD}"/bin/llvm-tblgen
141                 -DCLANG_TABLEGEN_EXE="${LLVM_BUILD}"/bin/clang-tblgen
142                 # pull in includes and libs from ObjCMetadata's temporary install root
143                 -DOBJCMETADATA_INCLUDE_DIRS="${OBJCMD_ROOT}"/include
144                 -DOBJCMETADATA_LIBRARY_DIRS="${OBJCMD_ROOT}"/lib
145         )
146
147         cd "${S}" || die
148         BUILD_DIR="${TAPI_BUILD}/" \
149                 CMAKE_USE_DIR="${PWD}" \
150                 cmake-utils_src_configure
151 }
152
153 src_compile() {
154         # build LLVM and clang tablegen
155         cd "${LLVM_S}" || die
156         BUILD_DIR="${LLVM_BUILD}" \
157                 CMAKE_USE_DIR="${PWD}" \
158                 cmake-utils_src_compile llvm-tblgen clang-tblgen
159
160         # build ObjCMetadata
161         cd "${OBJCMD_S}" || die
162         BUILD_DIR="${OBJCMD_BUILD}" \
163                 CMAKE_USE_DIR="${PWD}" \
164                 cmake-utils_src_compile
165         # install into temporary root in work dir
166         cd "${OBJCMD_BUILD}" || die
167                 ${CMAKE_MAKEFILE_GENERATOR} install
168
169         # finally build tapi
170         cd "${S}" || die
171         BUILD_DIR="${TAPI_BUILD}" \
172                 CMAKE_USE_DIR="${PWD}" \
173                 cmake-utils_src_compile
174 }