summaryrefslogtreecommitdiff
path: root/eclass/ant-tasks.eclass
blob: e008e6eaea81053d9383787e1b84bc0953277724 (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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License, v2 or later

# @ECLASS: ant-tasks.eclass
# @MAINTAINER:
# java@gentoo.org
# @AUTHOR:
# Vlastimil Babka <caster@gentoo.org>
# @BLURB: Eclass for building dev-java/ant-* packages
# @DESCRIPTION:
# This eclass provides functionality and default ebuild variables for building
# dev-java/ant-* packages easily.


# we set ant-core dep ourselves, restricted
JAVA_ANT_DISABLE_ANT_CORE_DEP=true
# rewriting build.xml for are the testcases has no reason atm
JAVA_PKG_BSFIX_ALL=no
inherit versionator java-pkg-2 java-ant-2

EXPORT_FUNCTIONS src_unpack src_compile src_install

# @ECLASS-VARIABLE: ANT_TASK_JDKVER
# @DESCRIPTION:
# Affects the >=virtual/jdk version set in DEPEND string. Defaults to 1.5, can
# be overridden from ebuild BEFORE inheriting this eclass.
ANT_TASK_JDKVER=${ANT_TASK_JDKVER-1.5}

# @ECLASS-VARIABLE: ANT_TASK_JREVER
# @DESCRIPTION:
# Affects the >=virtual/jre version set in DEPEND string. Defaults to 1.5, can
# be overridden from ebuild BEFORE inheriting this eclass.
ANT_TASK_JREVER=${ANT_TASK_JREVER-1.5}

# @ECLASS-VARIABLE: ANT_TASK_NAME
# @DESCRIPTION:
# The name of this ant task as recognized by ant's build.xml, derived from $PN
# by removing the ant- prefix. Read-only.
ANT_TASK_NAME="${PN#ant-}"

# @ECLASS-VARIABLE: ANT_TASK_DEPNAME
# @DESCRIPTION:
# Specifies JAVA_PKG_NAME (PN{-SLOT} used with java-pkg_jar-from) of the package
# that this one depends on. Defaults to the name of ant task, ebuild can
# override it before inheriting this eclass.
ANT_TASK_DEPNAME=${ANT_TASK_DEPNAME-${ANT_TASK_NAME}}

# @ECLASS-VARIABLE: ANT_TASK_DISABLE_VM_DEPS
# @DEFAULT_UNSET
# @DESCRIPTION:
# If set, no JDK/JRE deps are added.

# @VARIABLE: ANT_TASK_PV
# @INTERNAL
# Version of ant-core this task is intended to register and thus load with.
ANT_TASK_PV="${PV}"

# special care for beta/RC releases
if [[ ${PV} == *beta2* ]]; then
	MY_PV=${PV/_beta2/beta}
	UPSTREAM_PREFIX="http://people.apache.org/dist/ant/v1.7.1beta2/src"
	GENTOO_PREFIX="https://dev.gentoo.org/~caster/distfiles"
	ANT_TASK_PV=$(get_version_component_range 1-3)
elif [[ ${PV} == *_rc* ]]; then
	MY_PV=${PV/_rc/RC}
	UPSTREAM_PREFIX="https://dev.gentoo.org/~caster/distfiles"
	GENTOO_PREFIX="https://dev.gentoo.org/~caster/distfiles"
	ANT_TASK_PV=$(get_version_component_range 1-3)
else
	# default for final releases
	MY_PV=${PV}
	case ${PV} in
	1.9.*)
		UPSTREAM_PREFIX="https://archive.apache.org/dist/ant/source"
		GENTOO_PREFIX="https://dev.gentoo.org/~tomwij/files/dist"
		;;
	*)
		UPSTREAM_PREFIX="mirror://apache/ant/source"
		GENTOO_PREFIX="https://dev.gentoo.org/~caster/distfiles"
		;;
	esac
fi

# source/workdir name
MY_P="apache-ant-${MY_PV}"

# Default values for standard ebuild variables, can be overridden from ebuild.
DESCRIPTION="Apache Ant's optional tasks depending on ${ANT_TASK_DEPNAME}"
HOMEPAGE="http://ant.apache.org/"
SRC_URI="${UPSTREAM_PREFIX}/${MY_P}-src.tar.bz2
	${GENTOO_PREFIX}/ant-${PV}-gentoo.tar.bz2"
LICENSE="Apache-2.0"
SLOT="0"

RDEPEND="~dev-java/ant-core-${PV}:0"
DEPEND="${RDEPEND}"

if [[ -z "${ANT_TASK_DISABLE_VM_DEPS}" ]]; then
	RDEPEND+=" >=virtual/jre-${ANT_TASK_JREVER}"
	DEPEND+=" >=virtual/jdk-${ANT_TASK_JDKVER}"
fi

# we need direct blockers with old ant-tasks for file collisions - bug #252324
if version_is_at_least 1.7.1 ; then
	DEPEND+=" !dev-java/ant-tasks"
fi

# Would run the full ant test suite for every ant task
RESTRICT="test"

S="${WORKDIR}/${MY_P}"

# @FUNCTION: ant-tasks_src_unpack
# @USAGE: [ base ] [ jar-dep ] [ all ]
# @DESCRIPTION:
# The function Is split into two parts, defaults to both of them ('all').
#
# base: performs the unpack, build.xml replacement and symlinks ant.jar from
#	ant-core
#
# jar-dep: symlinks the jar file(s) from dependency package
ant-tasks_src_unpack() {
	[[ -z "${1}" ]] && ant-tasks_src_unpack all

	while [[ -n "${1}" ]]; do
		case ${1} in
			base)
				unpack ${A}
				cd "${S}"

				# replace build.xml with our modified for split building
				mv -f "${WORKDIR}"/build.xml .

				cd lib
				# remove bundled xerces
				rm -f *.jar

				# ant.jar to build against
				java-pkg_jar-from --build-only ant-core ant.jar;;
			jar-dep)
				# get jar from the dependency package
				if [[ -n "${ANT_TASK_DEPNAME}" ]]; then
					java-pkg_jar-from ${ANT_TASK_DEPNAME}
				fi;;
			all)
				ant-tasks_src_unpack base jar-dep;;
		esac
		shift
	done

}

# @FUNCTION: ant-tasks_src_compile
# @DESCRIPTION:
# Compiles the jar with installed ant-core.
ant-tasks_src_compile() {
	ANT_TASKS="none" eant -Dbuild.dep=${ANT_TASK_NAME} jar-dep
}

# @FUNCTION: ant-tasks_src_install
# @DESCRIPTION:
# Installs the jar and registers its presence for the ant launcher script.
# Version param ensures it won't get loaded (thus break) when ant-core is
# updated to newer version.
ant-tasks_src_install() {
	java-pkg_dojar build/lib/${PN}.jar
	java-pkg_register-ant-task --version "${ANT_TASK_PV}"

	# create the compatibility symlink
	if version_is_at_least 1.7.1_beta2; then
		dodir /usr/share/ant/lib
		dosym /usr/share/${PN}/lib/${PN}.jar /usr/share/ant/lib/${PN}.jar
	fi
}