1 |
Signed-off-by: Florian Schmaus <flow@g.o> |
2 |
--- |
3 |
eclass/gradle.eclass | 149 +++++++++++++++++++++++++++++++++++++++++ |
4 |
eclass/tests/gradle.sh | 62 +++++++++++++++++ |
5 |
2 files changed, 211 insertions(+) |
6 |
create mode 100644 eclass/gradle.eclass |
7 |
create mode 100755 eclass/tests/gradle.sh |
8 |
|
9 |
diff --git a/eclass/gradle.eclass b/eclass/gradle.eclass |
10 |
new file mode 100644 |
11 |
index 000000000000..a321262612d0 |
12 |
--- /dev/null |
13 |
+++ b/eclass/gradle.eclass |
14 |
@@ -0,0 +1,149 @@ |
15 |
+# Copyright 2021-2023 Gentoo Authors |
16 |
+# Distributed under the terms of the GNU General Public License v2 |
17 |
+ |
18 |
+# @ECLASS: gradle.eclass |
19 |
+# @MAINTAINER: |
20 |
+# Gentoo Java Project <java@g.o> |
21 |
+# @AUTHOR: |
22 |
+# Florian Schmaus <flow@g.o> |
23 |
+# @BLURB: Utility functions for the gradle build system. |
24 |
+# @DESCRIPTION: |
25 |
+# Utility functions for the gradle build system. |
26 |
+ |
27 |
+case ${EAPI} in |
28 |
+ 7|8) ;; |
29 |
+ *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; |
30 |
+esac |
31 |
+ |
32 |
+if [[ -z ${_GRADLE_ECLASS} ]] ; then |
33 |
+_GRADLE_ECLASS=1 |
34 |
+ |
35 |
+inherit edo |
36 |
+ |
37 |
+# @ECLASS_VARIABLE: EGRADLE_MIN |
38 |
+# @DEFAULT_UNSET |
39 |
+# @DESCRIPTION: |
40 |
+# Minimum required gradle version. |
41 |
+ |
42 |
+# @ECLASS_VARIABLE: EGRADLE_MAX_EXCLUSIVE |
43 |
+# @DEFAULT_UNSET |
44 |
+# @DESCRIPTION: |
45 |
+# First gradle version that is not supported. |
46 |
+ |
47 |
+# @ECLASS_VARIABLE: EGRADLE_EXACT_VER |
48 |
+# @DEFAULT_UNSET |
49 |
+# @DESCRIPTION: |
50 |
+# The exact required gradle version. |
51 |
+ |
52 |
+# @ECLASS_VARIABLE: EGRADLE_PARALLEL |
53 |
+# @DESCRIPTION: |
54 |
+# Set to the 'true', the default, to invoke gradle with --parallel. Set |
55 |
+# to 'false' to disable parallel gradle builds. |
56 |
+: "${EGRADLE_PARALLEL=true}" |
57 |
+ |
58 |
+# @ECLASS_VARIABLE: EGRADLE_USER_HOME |
59 |
+# @DESCRIPTION: |
60 |
+# Directroy used as the user's home directory by gradle. Defaults to |
61 |
+# ${T}/gradle_user_home |
62 |
+: "${EGRADLE_USER_HOME="${T}/gradle_user_home"}" |
63 |
+ |
64 |
+# @ECLASS_VARIABLE: EGRADLE_OVERWRITE |
65 |
+# @USER_VARIABLE |
66 |
+# @DEFAULT_UNSET |
67 |
+# @DESCRIPTION: |
68 |
+# User-specified overwrite of the used gradle binary. |
69 |
+ |
70 |
+# @FUNCTION: gradle-set_EGRADLE |
71 |
+# @DESCRIPTION: |
72 |
+# Set the EGRADLE environment variable. |
73 |
+gradle-set_EGRADLE() { |
74 |
+ [[ -n ${EGRADLE} ]] && return |
75 |
+ |
76 |
+ if [[ -n ${EGRADLE_OVERWRITE} ]]; then |
77 |
+ export EGRADLE="${EGRADLE_OVERWRITE}" |
78 |
+ return |
79 |
+ fi |
80 |
+ |
81 |
+ local candidates candidate selected selected_ver |
82 |
+ |
83 |
+ candidates=$(compgen -c gradle-) |
84 |
+ for candidate in ${candidates}; do |
85 |
+ if [[ ! ${candidate} =~ gradle(-bin)?-([.0-9]+) ]]; then |
86 |
+ continue |
87 |
+ fi |
88 |
+ |
89 |
+ local ver |
90 |
+ if (( ${#BASH_REMATCH[@]} == 3 )); then |
91 |
+ ver="${BASH_REMATCH[2]}" |
92 |
+ else |
93 |
+ ver="${BASH_REMATCH[1]}" |
94 |
+ fi |
95 |
+ |
96 |
+ if [[ -n ${EGRADLE_EXACT_VER} ]]; then |
97 |
+ ver_test "${ver}" -ne "${EGRADLE_EXACT_VER}" && continue |
98 |
+ |
99 |
+ selected="${candidate}" |
100 |
+ selected_ver="${ver}" |
101 |
+ break |
102 |
+ fi |
103 |
+ |
104 |
+ if [[ -n ${EGRADLE_MIN} ]] \ |
105 |
+ && ver_test "${ver}" -lt "${EGRADLE_MIN}"; then |
106 |
+ # Candidate does not satisfy EGRADLE_MIN condition. |
107 |
+ continue |
108 |
+ fi |
109 |
+ |
110 |
+ if [[ -n ${EGRADLE_MAX_EXCLUSIVE} ]] \ |
111 |
+ && ver_test "${ver}" -ge "${EGRADLE_MAX_EXCLUSIVE}"; then |
112 |
+ # Candidate does not satisfy EGRADLE_MAX_EXCLUSIVE condition. |
113 |
+ continue |
114 |
+ fi |
115 |
+ |
116 |
+ if [[ -n ${selected_ver} ]] \ |
117 |
+ && ver_test "${selected_ver}" -gt "${ver}"; then |
118 |
+ # Candidate is older than the currently selected candidate. |
119 |
+ continue |
120 |
+ fi |
121 |
+ |
122 |
+ selected="${candidate}" |
123 |
+ selected_ver="${ver}" |
124 |
+ done |
125 |
+ |
126 |
+ if [[ -z ${selected} ]]; then |
127 |
+ die "Could not find (suitable) gradle installation in PATH" |
128 |
+ fi |
129 |
+ |
130 |
+ export EGRADLE="${selected}" |
131 |
+ export EGRADLE_VER="${ver}" |
132 |
+} |
133 |
+ |
134 |
+# @FUNCTION: egradle |
135 |
+# @USAGE: [gradle-args] |
136 |
+# @DESCRIPTION: |
137 |
+# Invoke gradle with the optionally provided arguments. |
138 |
+egradle() { |
139 |
+ gradle-set_EGRADLE |
140 |
+ |
141 |
+ local gradle_args=( |
142 |
+ --console=plain |
143 |
+ --info |
144 |
+ --stacktrace |
145 |
+ --no-daemon |
146 |
+ --offline |
147 |
+ --no-build-cache |
148 |
+ --gradle-user-home "${EGRADLE_USER_HOME}" |
149 |
+ --project-cache-dir "${T}/gradle_project_cache" |
150 |
+ ) |
151 |
+ |
152 |
+ if $EGRADLE_PARALLEL; then |
153 |
+ gradle_args+=( --parallel ) |
154 |
+ fi |
155 |
+ |
156 |
+ local -x JAVA_TOOL_OPTIONS="-Duser.home=\"$T\"" |
157 |
+ # TERM needed, otherwise gradle may fail on terms it does not know about |
158 |
+ TERM=xterm \ |
159 |
+ edo \ |
160 |
+ "${EGRADLE}" "${gradle_args[@]}" "${@}" |
161 |
+} |
162 |
+ |
163 |
+fi |
164 |
diff --git a/eclass/tests/gradle.sh b/eclass/tests/gradle.sh |
165 |
new file mode 100755 |
166 |
index 000000000000..61666c1bc60e |
167 |
--- /dev/null |
168 |
+++ b/eclass/tests/gradle.sh |
169 |
@@ -0,0 +1,62 @@ |
170 |
+#!/usr/bin/env bash |
171 |
+# Copyright 2022-2023 Gentoo Authors |
172 |
+# Distributed under the terms of the GNU General Public License v2 |
173 |
+ |
174 |
+EAPI=8 |
175 |
+ |
176 |
+SCRIPT_DIR=$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd) |
177 |
+cd "${SCRIPT_DIR}" |
178 |
+ |
179 |
+source tests-common.sh || exit |
180 |
+ |
181 |
+inherit gradle |
182 |
+ |
183 |
+# TODO: hack because tests-common don't implement ver_cut |
184 |
+EAPI=6 inherit eapi7-ver |
185 |
+ |
186 |
+test_set_EGRADLE() { |
187 |
+ local expected_EGRADLE="${1}" |
188 |
+ |
189 |
+ shift |
190 |
+ |
191 |
+ local tmpdir |
192 |
+ tmpdir=$(mktemp -d || die) |
193 |
+ for pseudo_gradle in "${@}"; do |
194 |
+ local pseudo_gradle_path="${tmpdir}/${pseudo_gradle}" |
195 |
+ touch "${pseudo_gradle_path}" |
196 |
+ chmod 755 "${pseudo_gradle_path}" |
197 |
+ done |
198 |
+ |
199 |
+ local saved_PATH="${PATH}" |
200 |
+ PATH="${tmpdir}" |
201 |
+ |
202 |
+ local test_desc=( |
203 |
+ test_set_EGRADLE |
204 |
+ ) |
205 |
+ [[ -v EGRADLE_MIN ]] && test_desc+=( "EGRADLE_MIN=${EGRADLE_MIN}" ) |
206 |
+ [[ -v EGRADLE_MAX_EXCLUSIVE ]] && test_desc+=( "EGRADLE_MAX_EXCLUSIVE=${EGRADLE_MAX_EXCLUSIVE}" ) |
207 |
+ test_desc+=( $@ ) |
208 |
+ |
209 |
+ tbegin "${test_desc[@]}" |
210 |
+ gradle-set_EGRADLE |
211 |
+ |
212 |
+ local saved_EGRADLE="${EGRADLE}" |
213 |
+ unset EGRADLE |
214 |
+ |
215 |
+ PATH="${saved_PATH}" |
216 |
+ rm -rf "${tmpdir}" |
217 |
+ |
218 |
+ [[ "${saved_EGRADLE}" == "${expected_EGRADLE}" ]] |
219 |
+ tend $? |
220 |
+ |
221 |
+ if (( $? > 0 )); then |
222 |
+ >&2 echo -e "\t expected=${expected_EGRADLE} actual=${saved_EGRADLE}" |
223 |
+ fi |
224 |
+} |
225 |
+ |
226 |
+test_set_EGRADLE gradle-2.0 gradle-1.0 gradle-2.0 |
227 |
+EGRADLE_MIN=2.0 test_set_EGRADLE gradle-2.2.3 gradle-1.0 gradle-2.0 gradle-2.2.3 |
228 |
+EGRADLE_MAX_EXCLUSIVE=2.2 test_set_EGRADLE gradle-2.0 gradle-1.0 gradle-2.0 gradle-2.2.3 |
229 |
+ |
230 |
+ |
231 |
+texit |
232 |
-- |
233 |
2.38.2 |