summaryrefslogtreecommitdiff
blob: ce20a2aa76767fbe4e03b4472ce80247ac0c4933 (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
145
# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/dev-java/jruby/jruby-1.0.3.ebuild,v 1.1 2007/12/17 13:58:17 caleb Exp $

JAVA_PKG_IUSE="doc source test"
inherit eutils java-pkg-2 java-ant-2

DESCRIPTION="Java based ruby interpreter implementation"
HOMEPAGE="http://jruby.codehaus.org/"
SRC_URI="http://dist.codehaus.org/${PN}/${PN}-src-${PV}.tar.gz"

LICENSE="|| ( CPL-1.0 GPL-2 LGPL-2.1 )"
SLOT="0"
KEYWORDS="~amd64 ~ppc ~x86"
IUSE="bsf"

COMMON_DEPEND=">=dev-java/jline-0.9.91
	=dev-java/asm-2.2*
	dev-java/backport-util-concurrent"
RDEPEND=">=virtual/jre-1.4
	${COMMON_DEPEND}"

DEPEND=">=virtual/jdk-1.4
	bsf? ( >=dev-java/bsf-2.3 )
	test? (
		=dev-java/junit-3*
		dev-java/ant-junit
		dev-java/ant-trax
	)
	${COMMON_DEPEND}"
PDEPEND="dev-ruby/rubygems
	>=dev-ruby/rake-0.7.3
	>=dev-ruby/rspec-1.0.4"

RUBY_HOME=/usr/share/${PN}/lib/ruby
SITE_RUBY=${RUBY_HOME}/site_ruby
GEMS=${RUBY_HOME}/gems

pkg_setup() {
	java-pkg-2_pkg_setup

	if [[ -d ${SITE_RUBY} && ! -L ${SITE_RUBY} ]]; then
		ewarn "dev-java/jruby now uses dev-lang/ruby's site_ruby directory by creating symlinks."
		ewarn "${SITE_RUBY} is a directory right now, which will cause problems when being merged onto the filesystem."
	fi
	if [[ -d ${GEMS} && ! -L ${GEMS} ]]; then
		ewarn "dev-java/jruby now uses dev-lang/ruby's gems directory by creating symlinks."
		ewarn "${GEMS} is a directory right now, which will cause problems when being merged onto the filesystem."
	fi

	# only use javac, see http://jira.codehaus.org/browse/JRUBY-675
	java-pkg_force-compiler javac
}

src_unpack() {
	unpack ${A}
	cd "${S}"
	# prevents /root/.jruby being created at build time with
	# FEATURES="-userpriv"
	# see http://bugs.gentoo.org/show_bug.cgi?id=170058
	epatch "${FILESDIR}"/${PN}-0.9.8-sandbox.patch
	# search only lib, kills jdk1.4+ property which we set manually
	java-ant_ignore-system-classes

	cd "${S}"/lib
	rm -v *.jar || die

	java-pkg_jar-from --build-only ant-core ant.jar
	java-pkg_jar-from asm-2.2 asm.jar
	java-pkg_jar-from asm-2.2 asm-commons.jar
	java-pkg_jar-from jline
	java-pkg_jar-from backport-util-concurrent
	use test && java-pkg_jar-from --build-only junit

	# build-only because it's just BSF adapter classes and won't be used
	# unless invoked from bsf itself, so no need to pollute classpath
	if use bsf; then
		java-pkg_jar-from --build-only bsf-2.3
	else
		cd "${S}"
		# testcases depending on bsf
		rm test/org/jruby/test/TestAdoptedThreading.java || die
		rm test/org/jruby/javasupport/test/TestBSF.java || die
		sed -i -e '/TestBSF.class/d' \
			test/org/jruby/javasupport/test/JavaSupportTestSuite.java || die
		sed -i -e '/TestAdoptedThreading.class/d' \
			test/org/jruby/test/MainTestSuite.java || die
	fi
}

src_compile() {
	eant jar $(use_doc create-apidocs) -Djruby.home="${T}"/.jruby -Djdk1.4+=true
}

src_test() {
	# needs bsf's runtime deps to work
	use bsf && java-pkg_jar-from --into lib --with-dependencies bsf-2.3
	ANT_TASKS="ant-junit ant-trax" eant test -Djdk1.4+=true
}

src_install() {
	java-pkg_dojar lib/${PN}.jar

	dodoc README docs/{*.txt,README.*,BeanScriptingFramework} || die
	dohtml docs/getting_involved.html || die

	if use doc; then
		java-pkg_dojavadoc docs/api
	fi
	use source && java-pkg_dosrc src/org
	java-pkg_dolauncher ${PN} \
		--main 'org.jruby.Main' \
		--java_args '-Djruby.base=/usr/share/jruby -Djruby.home=/usr/share/jruby -Djruby.lib=/usr/share/jruby/lib -Djruby.script=jruby -Djruby.shell=/bin/sh'
	dobin "${S}"/bin/jirb

	dodir "/usr/share/${PN}/lib"
	insinto "/usr/share/${PN}/lib"
	doins -r "${S}/lib/ruby"

	# Share gems with regular ruby
	rm -r "${D}"/usr/share/${PN}/lib/ruby/gems || die
	dosym /usr/lib/ruby/gems /usr/share/${PN}/lib/ruby/gems || die

	# Share site_ruby with regular ruby
	rm -r "${D}"/usr/share/${PN}/lib/ruby/site_ruby || die
	dosym /usr/lib/ruby/site_ruby /usr/share/${PN}/lib/ruby/site_ruby || die
}

pkg_preinst() {
	local bad_directory=0

	if [[ -d ${SITE_RUBY} && ! -L ${SITE_RUBY} ]]; then
		eerror "${SITE_RUBY} is a directory. Please move this directory out of the way, and then emerge --resume."
		bad_directory=1
	fi

	if [[ -d ${GEMS} && ! -L ${GEMS} ]]; then
		eerror "${GEMS} is a directory. Please move this directory out of the way, and then emerge --resume."
		bad_directory=1
	fi

	if [[ ! ${bad_directory} ]]; then
		die "Please address the above errors, then emerge --resume."
	fi
}