aboutsummaryrefslogtreecommitdiff
blob: 82d2b2b5b4d4182df0d54c192c05f6e10a98b4dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI=5

inherit java-pkg-opt-2 multibuild

if [[ ${PV} == "9999" ]]; then
	EGIT_REPO_URI="https://github.com/perl6/${PN}.git"
	inherit git-r3
	KEYWORDS=""
else
	SRC_URI="https://github.com/perl6/${PN}/tarball/${PV} -> ${P}.tar.gz"
	inherit vcs-snapshot
	KEYWORDS="~amd64 ~x86"
fi

DESCRIPTION="Not Quite Perl, a Perl 6 bootstrapping compiler"
HOMEPAGE="http://rakudo.org/"

LICENSE="Artistic-2"
SLOT="0"
IUSE="doc clang java +moar test"
REQUIRED_USE="|| ( java moar )"

CDEPEND="java? (
		dev-java/asm:4
		dev-java/jline:0
		dev-java/jna:4
	)
	moar? ( ~dev-lang/moarvm-${PV}[clang=] )
	dev-libs/libffi"
RDEPEND="${CDEPEND}
	java? ( >=virtual/jre-1.7 )"
DEPEND="${CDEPEND}
	clang? ( sys-devel/clang )
	java? ( >=virtual/jdk-1.7 )
	dev-lang/perl"
PATCHES=( "${FILESDIR}/enable-external-jars.patch" )

java_prepare() {
	# Don't clean stage0 jars.
	einfo "Cleaning upstream jars"
	java-pkg_clean 3rdparty/

	# Don't use jars we just deleted.
	sed -i -r 's/(:3rdparty[^:]*)+/:${THIRDPARTY_JARS}/g' \
		src/vm/jvm/runners/nqp-j || die
}

src_prepare() {
	MULTIBUILD_VARIANTS=()
	use moar && MULTIBUILD_VARIANTS+=( moar )
	use java && MULTIBUILD_VARIANTS+=( jvm )

	multibuild_copy_sources

	# This will pull in conditional java_prepare
	default
}

nqp_configure() {
	pushd "${BUILD_DIR}" > /dev/null || die
	local myconfargs=(
		"--backend=${MULTIBUILD_VARIANT}"
		"--prefix=/usr" )

	perl Configure.pl "${myconfargs[@]}" || die
	popd || die
}

nqp_compile() {
	pushd "${BUILD_DIR}" > /dev/null || die
	if [[ "${MULTIBUILD_VARIANT}" = jvm ]]; then
		emake -j1 \
			THIRDPARTY_JARS=$(java-pkg_getjars --with-dependencies asm-4,jline,jna-4)
			JAVAC="$(java-pkg_get-javac) $(java-pkg_javac-args)"
	elif [[ "${MULTIBUILD_VARIANT}" = moar ]]; then
		emake -j1
	fi
	popd || die
}

nqp_test() {
	pushd "${BUILD_DIR}" > /dev/null || die
	emake -j1 test
	popd || die
}

nqp_install() {
	pushd "${BUILD_DIR}" > /dev/null || die
	# This is the actual reason we need multibuild.eclass.
	# We need to distinguish the install procedure for MoarVM and JVM backends.
	if [[ "${MULTIBUILD_VARIANT}" = moar ]]; then
		emake DESTDIR="${ED}" install
	elif [[ "${MULTIBUILD_VARIANT}" = jvm ]]; then
		# Set JAVA_PKG_JARDEST early.
		java-pkg_init_paths_

		# Upstream sets the classpath to this location. Perhaps it's
		# used to locate the additional libraries?
		java-pkg_addcp "${JAVA_PKG_JARDEST}"

		insinto "${JAVA_PKG_JARDEST}"
		local jar

		for jar in *.jar; do
			if has ${jar} ${PN}.jar ${PN}-runtime.jar; then
				# jars for NQP itself.
				java-pkg_dojar ${jar}
			else
				# jars used by NQP.
				doins ${jar}
			fi
		done

		# Upstream uses -Xbootclasspath/a, which is faster due to lack
		# of verification, but gjl isn't flexible enough yet. :(
		java-pkg_dolauncher ${PN}-j --main ${PN}
		dosym ${PN}-j /usr/bin/${PN}
		dobin tools/jvm/eval-client.pl
	fi
	popd || die
}

src_configure() {
	multibuild_foreach_variant nqp_configure
}

src_compile() {
	multibuild_foreach_variant nqp_compile
}

src_test() {
	multibuild_foreach_variant nqp_test
}

src_install() {
	multibuild_foreach_variant nqp_install

	dodoc CREDITS README.pod
	use doc && dodoc -r docs/*
}