summaryrefslogtreecommitdiff
blob: f7540588ca054fd8df90de4043cd45b8fd3cb72d (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
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

# Don't depend on itself.
JAVA_ANT_DISABLE_ANT_CORE_DEP="true"

# Rewriting build.xml files for the testcases has no use at the moment.
JAVA_PKG_BSFIX_ALL="no"
JAVA_PKG_IUSE="doc source"
MAVEN_ID="org.apache.ant:ant:1.10.9"

inherit java-pkg-2 java-ant-2 prefix

MY_P="apache-ant-${PV}"

DESCRIPTION="Java-based build tool similar to 'make' that uses XML configuration files"
HOMEPAGE="https://ant.apache.org/"
SRC_URI="https://archive.apache.org/dist/ant/source/${MY_P}-src.tar.bz2
	https://dev.gentoo.org/~fordfrog/distfiles/ant-${PV}-gentoo.tar.bz2"

LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="amd64 ~arm arm64 ppc64 x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"

CDEPEND=">=virtual/jdk-1.8:*"
DEPEND="${CDEPEND}
	doc? (
		dev-java/bcel:0
		dev-java/bsf:2.3
		dev-java/commons-logging:0
		dev-java/commons-net:0
		dev-java/jakarta-activation-api:1
		dev-java/jakarta-regexp:1.4
		dev-java/jakarta-oro:2.0
		dev-java/jdepend:0
		dev-java/jsch:0
		dev-java/log4j-12-api:2
		dev-java/javax-mail:0
		dev-java/sun-jai-bin:0
		dev-java/xalan:0
		dev-java/xml-commons-resolver:0
		dev-java/xz-java:0
	)"
RDEPEND="${CDEPEND}"

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

RESTRICT="test"

PATCHES=(
	"${WORKDIR}/${PV}-build.patch"
	"${WORKDIR}/${PV}-launch.patch"
)

src_prepare() {
	default

	eprefixify "${S}/src/script/ant"

	# Fixes bug 556008.
	java-ant_xml-rewrite -f build.xml \
		-c -e javadoc \
		-a failonerror \
		-v "false"

	# See bug #196080 for more details.
	java-ant_bsfix_one build.xml
	java-pkg-2_src_prepare

	# Remove JDK9+ stuff
	einfo "Removing JDK9+ classes (Jmod and Link)"
	rm "${S}"/src/main/org/apache/tools/ant/taskdefs/modules/{Jmod,Link}.java
}

src_compile() {
	export ANT_HOME=""
	# Avoid error message that package ant-core was not found
	export ANT_TASKS="none"

	local bsyscp

	# This ensures that when building ant with bootstrapped ant,
	# only the source is used for resolving references, and not
	# the classes in bootstrapped ant but jikes in kaffe has issues with this...
	if ! java-pkg_current-vm-matches kaffe; then
		bsyscp="-Dbuild.sysclasspath=ignore"
	fi

	CLASSPATH="$(java-config -t)" ./build.sh ${bsyscp} jars dist-internal ||
		die "build failed"

	if use doc; then
		# All Java packages imported by the source files need to present in
		# the classpath, otherwise it would be https://bugs.gentoo.org/780531
		local doc_deps=(
			bcel
			bsf-2.3
			commons-logging
			commons-net
			jakarta-activation-api-1
			jakarta-oro-2.0
			jakarta-regexp-1.4
			jdepend
			jsch
			log4j-12-api-2
			javax-mail
			sun-jai-bin
			xalan
			xml-commons-resolver
			xz-java
		)
		for dep in "${doc_deps[@]}"; do
			java-pkg_jar-from --build-only --into lib/optional/ "${dep}"
		done
		# This file imports netrexx.lang.Rexx, which is not available
		# from ::gentoo.  Fortunately, there is not a dev-java/ant-*
		# package for it, so even if we could generate documentation
		# for it, it would be irrelevant
		rm src/main/org/apache/tools/ant/taskdefs/optional/NetRexxC.java ||
			die "Failed to remove Java source file blocking Javadoc generation"
		./build.sh ${bsyscp} javadocs || die "Javadoc build failed"
	fi
}

src_install() {
	dodir /usr/share/ant/lib

	for jar in ant.jar ant-bootstrap.jar ant-launcher.jar ; do
		java-pkg_dojar build/lib/${jar}
		dosym ../../${PN}/lib/${jar} /usr/share/ant/lib/${jar}
	done

	dobin src/script/ant

	dodir /usr/share/${PN}/bin
	for each in antRun antRun.pl runant.pl runant.py ; do
		dobin "${S}/src/script/${each}"
		dosym ../../../bin/${each} /usr/share/${PN}/bin/${each}
	done
	dosym ../${PN}/bin /usr/share/ant/bin

	insinto /usr/share/${PN}
	doins -r dist/etc
	dosym ../${PN}/etc /usr/share/ant/etc

	echo "ANT_HOME=\"${EPREFIX}/usr/share/ant\"" > "${T}/20ant"
	doenvd "${T}/20ant"

	dodoc NOTICE README WHATSNEW KEYS

	if use doc; then
		dodoc -r manual/*
		java-pkg_dojavadoc --symlink manual/api build/javadocs
	fi

	use source && java-pkg_dosrc src/main/*
}