summaryrefslogtreecommitdiff
blob: 3c3360f2021064c0a00ccf91f1daeb236d46848b (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
146
147
148
149
150
151
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI="5"

# repoman gives LIVEVCS.unmasked even with EGIT_COMMIT, so create snapshot
inherit eutils java-pkg-2 # git-r3

L_PN="sbt-launch"
L_P="${L_PN}-${PV}"

B_PV="0.13.7"
BL_P="${L_PN}-${B_PV}"
B_P="${PN}-${B_PV}"

SV="2.10"

# creating the sbt src snapshot:
# git clone https://github.com/sbt/sbt.git sbt-0.13.8
# cd sbt-0.13.8
# git checkout v0.13.8
# cd ..
# tar --owner=portage --group=portage -cjf sbt-0.13.8-src.tar.bz2 sbt-0.13.8

# creating the binary:
# cd $WORDKIR
# tar -cjf sbt-0.13.8-gentoo-binary.tar.bz2 sbt-0.13.8/sbt-launch/target/sbt-launch.jar

DESCRIPTION="sbt is a build tool for Scala and Java projects that aims to do the basics well"
HOMEPAGE="http://www.scala-sbt.org/"
EGIT_COMMIT="v${PV}"
EGIT_REPO_URI="https://github.com/sbt/sbt.git"
SRC_URI="!binary?
(
	https://dev.gentoo.org/~gienah/snapshots/${P}-src.tar.bz2
	https://dev.gentoo.org/~gienah/snapshots/${P}-ivy2-deps.tar.bz2
	https://dev.gentoo.org/~gienah/snapshots/${P}-sbt-deps.tar.bz2
	https://dev.gentoo.org/~gienah/snapshots/${P}-test-deps.tar.bz2
	http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/${L_PN}/${PV}/${L_PN}.jar -> ${BL_P}.jar
)
binary? ( https://dev.gentoo.org/~gienah/files/dist/${P}-gentoo-binary.tar.bz2 )"

LICENSE="BSD"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="binary"

DEPEND="=virtual/jdk-1.7*
	>=dev-lang/scala-2.10.4-r1:${SV}"
RDEPEND=">=virtual/jre-1.7
	dev-lang/scala:*"

# test hangs or fails
RESTRICT="test"

src_unpack() {
	# if ! use binary; then
	# 	git-r3_src_unpack
	# fi
	# Unpack tar files only.
	for f in ${A} ; do
		[[ ${f} == *".tar."* ]] && unpack ${f}
	done
}

java_prepare() {
	if ! use binary; then
		# Note: to bump sbt, some things to try are:
		# 1. remove the https://dev.gentoo.org/~gienah/snapshots/${P}-ivy2-deps.tar.bz2
		# https://dev.gentoo.org/~gienah/snapshots/${P}-sbt-deps.tar.bz2 and
		# https://dev.gentoo.org/~gienah/snapshots/${P}-test-deps.tar.bz2 from SRC_URI
		# 2. Comment the sbt publishLocal line in src_compile.
		# 3. try:
		# FEATURES='noclean -test' emerge -v dev-java/sbt
		# It should fail in src_install since the sbt publishLocal is not done.
		# Check if it downloads more stuff in
		# src_compile to ${WORKDIR}/.ivy2 and ${WORKDIR}/.sbt.
		# 4. If some of the downloads fail, it might be necessary to run the sbt compile
		# again manually to obtain all the dependencies, if so (with jdk 1.6):
		# cd to ${S}
		# export EROOT=/
		# export WORKDIR='/var/tmp/portage/dev-java/sbt-0.13.8/work'
		# export SV="2.10"
		# export B_P=sbt-0.13.7
		# export PATH="/usr/share/scala-${SV}/bin:${WORKDIR}/${B_P}:${PATH}"
		# sbt compile
		# cd ${WORKDIR}
		# find .ivy2 .sbt -uid 0 -exec chown portage:portage {} \;
		# 5. cd ${WORKDIR}
		# tar -cjf sbt-0.13.8-ivy2-deps.tar.bz2 .ivy2
		# tar -cjf sbt-0.13.8-sbt-deps.tar.bz2 .sbt
		# 6. It downloads more dependencies for src_test, however the presence of some of these may cause
		# the src_compile to fail.  So download them seperately as root so we can identify the
		# additional files.  Note: src_test creates some files in ${WORKDIR}/.m2 which are can
		# hopefully be ignored. As root:
		# cd ${S}
		# sbt test
		# cd ${WORKDIR}
		# find .ivy2 .sbt -uid 0 -print
		# Then add those files to sbt-0.13.8-ivy2-test-deps.tar.bz2 except the files in the directories
		# .ivy2/local
		# .ivy2/cache/org.scala-sbt
		# Something like:
		# tar --owner=portage --group=portage -cjf sbt-0.13.8-test-deps.tar.bz2 <list of files as described above>
		# 7. Undo the earlier temporary edits to the ebuild.

		mkdir "${WORKDIR}/${B_P}" || die
		cp -p "${DISTDIR}/${BL_P}.jar" "${WORKDIR}/${B_P}/${L_PN}.jar" || die
		cat <<- EOF > "${WORKDIR}/${B_P}/sbt"
			#!/bin/sh
			SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=512M"
			java -Djavac.args="-encoding UTF-8" -Duser.home="${WORKDIR}" \${SBT_OPTS} -jar "${WORKDIR}/${B_P}/sbt-launch.jar" "\$@"
		EOF
		chmod u+x "${WORKDIR}/${B_P}/sbt" || die
		local SCALA_PVR="$(java-config --query=PVR --package=scala-${SV})"
		local SFV="${SCALA_PVR/-*}"
		sed -e "s@scalaVersion := \"2.10.4\",@scalaVersion := \"${SFV}\",\n  scalaHome := Some(file(\"/usr/share/scala-${SV}\")),@" \
			-i "${S}/build.sbt" || die
	fi
}

src_compile() {
	if ! use binary; then
		export PATH="${EROOT}usr/share/scala-${SV}/bin:${WORKDIR}/${B_P}:${PATH}"
		einfo "=== sbt compile ..."
		"${WORKDIR}/${B_P}/sbt" -Dsbt.log.noformat=true compile || die
		einfo "=== sbt publishLocal ..."
		cat <<- EOF | "${WORKDIR}/${B_P}/sbt" -Dsbt.log.noformat=true || die
			set every javaVersionPrefix in javaVersionCheck := Some("1.7")
			publishLocal
		EOF
	fi
}

src_test() {
	if ! use binary; then
		export PATH="${EROOT}usr/share/scala-${SV}/bin:${WORKDIR}/${B_P}:${PATH}"
		"${WORKDIR}/${B_P}/sbt" -Dsbt.log.noformat=true test || die
	fi
}

src_install() {
	if ! use binary; then
		pushd sbt-launch/target || die
		mv ${L_P}.jar ${L_PN}.jar || die
		popd
	fi
	java-pkg_dojar sbt-launch/target/${L_PN}.jar
	java-pkg_dolauncher sbt --main xsbt.boot.Boot --java_args "-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=512M"
}