/[gentoo-x86]/eclass/java-ant-2.eclass
Gentoo

Diff of /eclass/java-ant-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.2 Revision 1.10
1# eclass for ant based Java packages 1# eclass for ant based Java packages
2# 2#
3# Copyright (c) 2004-2005, Thomas Matthijs <axxo@gentoo.org> 3# Copyright (c) 2004-2005, Thomas Matthijs <axxo@gentoo.org>
4# Copyright (c) 2004-2005, Gentoo Foundation 4# Copyright (c) 2004-2005, Gentoo Foundation
5# Changes:
6# December 2006:
7# I pretty much rewrote the logic of the bsfix functions
8# and xml-rewrite.py because they were so slow
9# Petteri R├Ąty (betelgeuse@gentoo.org)
5# 10#
6# Licensed under the GNU General Public License, v2 11# Licensed under the GNU General Public License, v2
7# 12#
13# $Header: /var/cvsroot/gentoo-x86/eclass/java-ant-2.eclass,v 1.10 2006/12/27 18:46:01 betelgeuse Exp $
8 14
9inherit java-utils-2 15inherit java-utils-2
10 16
11# This eclass provides functionality for Java packages which use 17# This eclass provides functionality for Java packages which use
12# ant to build. In particular, it will attempt to fix build.xml files, so that 18# ant to build. In particular, it will attempt to fix build.xml files, so that
14 20
15# We need some tools from javatoolkit. We also need portage 2.1 for phase hooks 21# We need some tools from javatoolkit. We also need portage 2.1 for phase hooks
16DEPEND=">=dev-java/javatoolkit-0.1.5 ${JAVA_PKG_PORTAGE_DEP}" 22DEPEND=">=dev-java/javatoolkit-0.1.5 ${JAVA_PKG_PORTAGE_DEP}"
17 23
18# ------------------------------------------------------------------------------ 24# ------------------------------------------------------------------------------
19# @global JAVA_ANT_BSFIX 25# @global JAVA_PKG_BSFIX
20# 26#
21# Should we attempt to 'fix' ant build files to include the source/target 27# Should we attempt to 'fix' ant build files to include the source/target
22# attributes when calling javac? 28# attributes when calling javac?
23# 29#
24# default: on 30# default: on
25# ------------------------------------------------------------------------------ 31# ------------------------------------------------------------------------------
26JAVA_ANT_BSFIX=${JAVA_PKG_BSFIX:="on"} 32JAVA_PKG_BSFIX=${JAVA_PKG_BSFIX:-"on"}
27 33
28# ------------------------------------------------------------------------------ 34# ------------------------------------------------------------------------------
29# @global JAVA_ANT_BSFIX_ALL 35# @global JAVA_PKG_BSFIX_ALL
30# 36#
31# If we're fixing build files, should we try to fix all the ones we can find? 37# If we're fixing build files, should we try to fix all the ones we can find?
32# 38#
33# default: yes 39# default: yes
34# ------------------------------------------------------------------------------ 40# ------------------------------------------------------------------------------
35JAVA_ANT_BSFIX_ALL=${JAVA_PKG_BSFIX_ALL:="yes"} 41JAVA_PKG_BSFIX_ALL=${JAVA_PKG_BSFIX_ALL:-"yes"}
36 42
37# ------------------------------------------------------------------------------ 43# ------------------------------------------------------------------------------
38# @global JAVA_ANT_BSFIX_NAME 44# @global JAVA_PKG_BSFIX_NAME
39# 45#
40# Filename of build files to fix/search for 46# Filename of build files to fix/search for
41# 47#
42# default: build.xml 48# default: build.xml
43# ------------------------------------------------------------------------------ 49# ------------------------------------------------------------------------------
44JAVA_ANT_BSFIX_NAME=${JAVA_PKG_BSFIX_NAME:="build.xml"} 50JAVA_PKG_BSFIX_NAME=${JAVA_PKG_BSFIX_NAME:-"build.xml"}
45 51
46# ------------------------------------------------------------------------------ 52# ------------------------------------------------------------------------------
47# @global JAVA_ANT_BSFIX_TARGETS_TAGS 53# @global JAVA_PKG_BSFIX_TARGETS_TAGS
48# 54#
49# Targets to fix the 'source' attribute in 55# Targets to fix the 'source' attribute in
50# 56#
51# default: javac xjavac javac.preset 57# default: javac xjavac javac.preset
52# ------------------------------------------------------------------------------ 58# ------------------------------------------------------------------------------
53JAVA_ANT_BSFIX_TARGET_TAGS=${JAVA_PKG_BSFIX_TARGET_TAGS:="javac xjavac javac.preset"} 59JAVA_PKG_BSFIX_TARGET_TAGS=${JAVA_PKG_BSFIX_TARGET_TAGS:-"javac xjavac javac.preset"}
54 60
55# ------------------------------------------------------------------------------ 61# ------------------------------------------------------------------------------
56# @global JAVA_ANT_BSFIX_SOURCE_TAGS 62# @global JAVA_PKG_BSFIX_SOURCE_TAGS
57# 63#
58# Targets to fix the 'target' attribute in 64# Targets to fix the 'target' attribute in
59# 65#
60# default: javacdoc javac xjavac javac.preset 66# default: javacdoc javac xjavac javac.preset
61# ------------------------------------------------------------------------------ 67# ------------------------------------------------------------------------------
62JAVA_ANT_BSFIX_SOURCE_TAGS=${JAVA_PKG_BSFIX_SOURCE_TAGS:="javadoc javac xjavac javac.preset"} 68JAVA_PKG_BSFIX_SOURCE_TAGS=${JAVA_PKG_BSFIX_SOURCE_TAGS:-"javadoc javac xjavac javac.preset"}
63 69
64# ------------------------------------------------------------------------------ 70# ------------------------------------------------------------------------------
65# @public java-ant_src_unpack 71# @public java-ant_src_unpack
66# 72#
67# Unpacks the source, and attempts to fix build files. 73# Unpacks the source, and attempts to fix build files.
93# Attempts to fix build files. The following variables will affect its behavior 99# Attempts to fix build files. The following variables will affect its behavior
94# as listed above: 100# as listed above:
95# JAVA_PKG_BSFIX 101# JAVA_PKG_BSFIX
96# JAVA_PKG_BSFIX_ALL 102# JAVA_PKG_BSFIX_ALL
97# JAVA_PKG_BSFIX_NAME, 103# JAVA_PKG_BSFIX_NAME,
98# JAVA_PKG_BSFIX_SOURCE_TAGS
99# JAVA_PKG_BSFIX_TARGET_TAGS)
100# ------------------------------------------------------------------------------ 104# ------------------------------------------------------------------------------
101java-ant_bsfix() { 105java-ant_bsfix() {
102 debug-print-function ${FUNCNAME} $* 106 debug-print-function ${FUNCNAME} $*
103 107
104 [[ "${JAVA_PKG_BSFIX}" != "on" ]] && return 108 [[ "${JAVA_PKG_BSFIX}" != "on" ]] && return
105 if ! java-pkg_needs-vm; then 109 if ! java-pkg_needs-vm; then
106 echo "QA Notice: Package is using java-ant, but doesn't depend on a Java VM" 110 echo "QA Notice: Package is using java-ant, but doesn't depend on a Java VM"
107 fi 111 fi
108 112
109 cd "${S}" 113 pushd "${S}" >/dev/null
110 114
111 local find_args="-type f" 115 local find_args=""
112 if [[ "${JAVA_PKG_BSFIX_ALL}" == "yes" ]]; then 116 [[ "${JAVA_PKG_BSFIX_ALL}" == "yes" ]] || find_args="-maxdepth 1"
117
113 find_args="${find_args} -name ${JAVA_PKG_BSFIX_NAME// / -o -name }" 118 find_args="${find_args} -type f -name ${JAVA_PKG_BSFIX_NAME// / -o -name } "
114 else
115 find_args="${find_args} -maxdepth 1 -name ${JAVA_PKG_BSFIX_NAME// / -o -name } "
116 fi
117 119
118 local i=0 120 # This voodoo is done for paths with spaces
119 local -a bsfix_these 121 local bsfix_these
120 while read line; do 122 while read line; do
121 [[ -z ${line} ]] && continue 123 [[ -z ${line} ]] && continue
122 bsfix_these[${i}]="${line}" 124 bsfix_these="${bsfix_these} '${line}'"
123 let i+=1
124 done <<-EOF 125 done <<-EOF
125 $(find ${find_args}) 126 $(find . ${find_args})
126 EOF 127 EOF
128
129 [[ "${bsfix_these// /}" ]] && eval java-ant_bsfix_files ${bsfix_these}
130
131 popd > /dev/null
132}
133
134# ------------------------------------------------------------------------------
135# @public java-ant_bsfix_files
136#
137# Attempts to fix named build files. The following variables will affect its behavior
138# as listed above:
139# JAVA_PKG_BSFIX_SOURCE_TAGS
140# JAVA_PKG_BSFIX_TARGET_TAGS
141#
142# When changing this function, make sure that it works with paths with spaces in
143# them.
144# ------------------------------------------------------------------------------
145java-ant_bsfix_files() {
146 debug-print-function ${FUNCNAME} $*
147
148 [[ ${#} = 0 ]] && die "${FUNCNAME} called without arguments"
127 149
128 local want_source="$(java-pkg_get-source)" 150 local want_source="$(java-pkg_get-source)"
129 local want_target="$(java-pkg_get-target)" 151 local want_target="$(java-pkg_get-target)"
130 152
131 debug-print "bsfix: target: ${want_target} source: ${want_source}" 153 debug-print "${FUNCNAME}: target: ${want_target} source: ${want_source}"
132 154
133 if [ -z "${want_source}" -o -z "${want_target}" ]; then 155 if [ -z "${want_source}" -o -z "${want_target}" ]; then
134 eerror "Could not find valid -source/-target values" 156 eerror "Could not find valid -source/-target values"
135 eerror "Please file a bug about this on bugs.gentoo.org" 157 eerror "Please file a bug about this on bugs.gentoo.org"
136 die "Could not find valid -source/-target values" 158 die "Could not find valid -source/-target values"
137 else 159 else
138 for (( i = 0 ; i < ${#bsfix_these[@]} ; i++ )); do 160 local files
139 local file="${bsfix_these[${i}]}" 161
140 echo "Rewriting ${file}" 162 [[ -x "/usr/bin/xml-rewrite-2.py" ]] && local using_new="true"
163
164 for file in "${@}"; do
141 debug-print "bsfix: ${file}" 165 debug-print "${FUNCNAME}: ${file}"
142
143 cp "${file}" "${file}.orig" || die "failed to copy ${file}"
144
145 chmod u+w "${file}"
146
147 xml-rewrite.py -f "${file}" -c -e ${JAVA_PKG_BSFIX_SOURCE_TAGS// / -e } -a source -v ${want_source} || die "xml-rewrite failed: ${file}"
148 xml-rewrite.py -f "${file}" -c -e ${JAVA_PKG_BSFIX_TARGET_TAGS// / -e } -a target -v ${want_target} || die "xml-rewrite failed: ${file}"
149 166
150 if [[ -n "${JAVA_PKG_DEBUG}" ]]; then 167 if [[ -n "${JAVA_PKG_DEBUG}" ]]; then
151 diff -NurbB "${file}.orig" "${file}" 168 cp "${file}" "${file}.orig" || die "failed to copy ${file}"
169 fi
170
171 if [[ ! -w "${file}" ]]; then
172 chmod u+w "${file}" || die "chmod u+w ${file} failed"
173 fi
174
175 files="${files} -f '${file}'"
176
177 if [[ -z "${using_new}" ]]; then
178 vecho "Rewriting $file (using xml-rewrite.py)"
179 # Doing this twice because otherwise the source attributes would
180 # get added to target tags too and javadoc does not like target
181 xml-rewrite.py -f "${file}" -c -e ${JAVA_PKG_BSFIX_SOURCE_TAGS// / -e } -a source -v ${want_source} || die "xml-rewrite failed: ${file}"
182 xml-rewrite.py -f "${file}" -c -e ${JAVA_PKG_BSFIX_TARGET_TAGS// / -e } -a target -v ${want_target} || die "xml-rewrite failed: ${file}"
152 fi 183 fi
153 done 184 done
185
186 if [[ "${using_new}" ]]; then
187 quiet_mode && local output=">/dev/null"
188 vecho "Rewriting source attributes"
189 eval xml-rewrite-2.py ${files} \
190 -c -e ${JAVA_PKG_BSFIX_SOURCE_TAGS// / -e } \
191 -a source -v ${want_source} ${output} || die "xml-rewrite2 failed: ${file}"
192
193 vecho "Rewriting target attributes"
194 eval xml-rewrite-2.py ${files} \
195 -c -e ${JAVA_PKG_BSFIX_TARGET_TAGS// / -e } \
196 -a target -v ${want_target} ${output} || die "xml-rewrite2 failed: ${file}"
154 fi 197 fi
198
199 if [[ -n "${JAVA_PKG_DEBUG}" ]]; then
200 for file in "${@}"; do
201 diff -NurbB "${file}.orig" "${file}"
202 done
203 fi
204 fi
155} 205}
206
207
208# ------------------------------------------------------------------------------
209# @public java-ant_bsfix_one
210#
211# Attempts to fix named build file. The following variables will affect its behavior
212# as listed above:
213# JAVA_PKG_BSFIX_SOURCE_TAGS
214# JAVA_PKG_BSFIX_TARGET_TAGS
215# ------------------------------------------------------------------------------
216java-ant_bsfix_one() {
217 debug-print-function ${FUNCNAME} $*
218
219 if [ -z "${1}" ]; then
220 eerror "${FUNCNAME} needs one argument"
221 die "${FUNCNAME} needs one argument"
222 fi
223
224 java-ant_bsfix_files "${1}"
225}
226
227# ------------------------------------------------------------------------------
228# @public java-ant_rewrite-classpath
229#
230# Adds 'classpath="${gentoo.classpath}"' to specified build file.
231# ------------------------------------------------------------------------------
232java-ant_rewrite-classpath() {
233 debug-print-function ${FUNCNAME} $*
234
235 if [ -z "${1}" ]; then
236 eerror "java-ant_rewrite-classpath needs one argument"
237 die "java-ant_rewrite-classpath needs one argument"
238 fi
239
240 local file="${1}"
241 echo "Adding gentoo.classpath to ${file}"
242 debug-print "java-ant_rewrite-classpath: ${file}"
243
244 cp "${file}" "${file}.orig" || die "failed to copy ${file}"
245
246 chmod u+w "${file}"
247
248 xml-rewrite.py -f "${file}" --change -e javac -e xjavac -a classpath -v '${gentoo.classpath}' || die "xml-rewrite failed: ${file}"
249
250 if [[ -n "${JAVA_PKG_DEBUG}" ]]; then
251 diff -NurbB "${file}.orig" "${file}"
252 fi
253}

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.10

  ViewVC Help
Powered by ViewVC 1.1.20