www-client/google-chrome-beta: automated update (84.0.4147.30)
[gentoo.git] / dev-lang / nqp / nqp-2019.03-r1.ebuild
1 # Copyright 1999-2020 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
3
4 EAPI=6
5
6 inherit java-pkg-opt-2 multibuild
7
8 if [[ ${PV} == "9999" ]]; then
9         EGIT_REPO_URI="https://github.com/perl6/${PN}.git"
10         inherit git-r3
11         KEYWORDS=""
12 else
13         SRC_URI="https://github.com/perl6/${PN}/releases/download/${PV}/${P}.tar.gz -> ${P}.official.tar.gz"
14         KEYWORDS="~amd64 ~x86"
15 fi
16
17 DESCRIPTION="Not Quite Perl, a Perl 6 bootstrapping compiler"
18 HOMEPAGE="https://rakudo.org"
19
20 LICENSE="Artistic-2"
21 SLOT="0"
22 IUSE="doc clang java +moar test"
23 RESTRICT="!test? ( test )"
24 REQUIRED_USE="|| ( java moar )"
25
26 CDEPEND="java? (
27                 dev-java/asm:4
28                 dev-java/jline:0
29                 dev-java/jna:4
30         )
31         moar? ( ~dev-lang/moarvm-${PV}[clang=] )"
32 RDEPEND="${CDEPEND}
33         java? ( >=virtual/jre-1.8 )"
34 DEPEND="${CDEPEND}
35         clang? ( sys-devel/clang )
36         java? ( >=virtual/jdk-1.8 )
37         dev-lang/perl"
38
39 pkg_pretend() {
40         if has_version dev-lang/rakudo || has_version dev-lang/nqp; then
41                 ewarn "NQP is known to fail compilation/installation with Rakudo and/or NQP"
42                 ewarn "already being installed. So if it fails, try uninstalling both"
43                 ewarn "dev-lang/nqp and dev-lang/rakudo, then do a new installation."
44                 ewarn "(see Bug #584394)"
45         fi
46 }
47
48 java_prepare() {
49         # Don't clean stage0 jars.
50         einfo "Cleaning upstream jars"
51         java-pkg_clean 3rdparty/
52
53         # Don't use jars we just deleted.
54         sed -i -r 's/(:3rdparty[^:]*)+/:${THIRDPARTY_JARS}/g' \
55                 src/vm/jvm/runners/nqp-j || die
56 }
57
58 src_prepare() {
59         MULTIBUILD_VARIANTS=()
60         use moar && MULTIBUILD_VARIANTS+=( moar )
61         use java && MULTIBUILD_VARIANTS+=( jvm )
62
63         multibuild_copy_sources
64
65         # This will pull in conditional java_prepare
66         default
67 }
68
69 nqp_configure() {
70         pushd "${BUILD_DIR}" > /dev/null || die
71         local myconfargs=(
72                 "--backend=${MULTIBUILD_VARIANT}"
73                 "--prefix=${EPREFIX}/usr" )
74
75         perl Configure.pl "${myconfargs[@]}" || die
76         popd || die
77 }
78
79 nqp_compile() {
80         if [[ "${MULTIBUILD_VARIANT}" = jvm ]]; then
81                 emake -j1 \
82                         -C "${BUILD_DIR}" \
83                         THIRDPARTY_JARS=$(java-pkg_getjars --with-dependencies asm-4,jline,jna-4) \
84                         JAVAC="$(java-pkg_get-javac) $(java-pkg_javac-args)"
85         elif [[ "${MULTIBUILD_VARIANT}" = moar ]]; then
86                 emake -j1 \
87                         -C "${BUILD_DIR}"
88         fi
89 }
90
91 nqp_test() {
92         emake -j1 \
93                 -C "${BUILD_DIR}" \
94                 test
95 }
96
97 nqp_install() {
98         # This is the actual reason we need multibuild.eclass.
99         # We need to distinguish the install procedure for MoarVM and JVM backends.
100         case "${MULTIBUILD_VARIANT}" in
101                 moar)
102                         emake \
103                                 DESTDIR="${ED}" \
104                                 -C "${BUILD_DIR}" \
105                                 install
106                         ;;
107                 jvm)
108                         pushd "${BUILD_DIR}" > /dev/null || die
109                         # Set JAVA_PKG_JARDEST early.
110                         java-pkg_init_paths_
111
112                         # Upstream sets the classpath to this location. Perhaps it's
113                         # used to locate the additional libraries?
114                         java-pkg_addcp "${JAVA_PKG_JARDEST}"
115
116                         insinto "${JAVA_PKG_JARDEST}"
117                         local jar
118
119                         for jar in *.jar; do
120                                 if has ${jar} ${PN}.jar ${PN}-runtime.jar; then
121                                         # jars for NQP itself.
122                                         java-pkg_dojar ${jar}
123                                 else
124                                         # jars used by NQP.
125                                         doins ${jar}
126                                 fi
127                         done
128
129                         # Upstream uses -Xbootclasspath/a, which is faster due to lack
130                         # of verification, but gjl isn't flexible enough yet. :(
131                         java-pkg_dolauncher ${PN}-j --main ${PN}
132                         dosym ${PN}-j /usr/bin/${PN}
133                         dobin tools/jvm/eval-client.pl
134                         popd > /dev/null || die
135                         ;;
136                 *)
137                         die "Unknown MULTIBUILD_VARIANT ${MULTIBUILD_VARIANT}."
138                         ;;
139         esac
140 }
141
142 src_configure() {
143         multibuild_foreach_variant nqp_configure
144 }
145
146 src_compile() {
147         multibuild_foreach_variant nqp_compile
148 }
149
150 src_test() {
151         multibuild_foreach_variant nqp_test
152 }
153
154 src_install() {
155         multibuild_foreach_variant nqp_install
156
157         dodoc CREDITS README.pod
158         use doc && dodoc -r docs/*
159 }