aboutsummaryrefslogtreecommitdiff
blob: ad7b1440631405465f1ac453f01fd00c1909485f (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
# Copyright 2021-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

# @ECLASS: gradle.eclass
# @MAINTAINER:
# Gentoo Java Project <java@gentoo.org>
# @AUTHOR:
# Florian Schmaus <flow@gentoo.org>
# @BLURB: Utility functions for the gradle build system.
# @DESCRIPTION:
# Utility functions for the gradle build system.
# WARNING: This eclass is currently experimental and
# subject to change.

case ${EAPI} in
	7|8) ;;
	*) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
esac

if [[ -z ${_GRADLE_ECLASS} ]] ; then
_GRADLE_ECLASS=1

inherit edo

# @ECLASS_VARIABLE: EGRADLE_MIN
# @DEFAULT_UNSET
# @DESCRIPTION:
# Minimum required gradle version.

# @ECLASS_VARIABLE: EGRADLE_MAX_EXCLUSIVE
# @DEFAULT_UNSET
# @DESCRIPTION:
# First gradle version that is not supported.

# @ECLASS_VARIABLE: EGRADLE_OVERWRITE
# @USER_VARIABLE
# @DEFAULT_UNSET
# @DESCRIPTION:
# User-specified overwrite of the used gradle binary.

# @FUNCTION: gradle-set_EGRADLE
# @DESCRIPTION:
# Set the EGRADLE environment variable.
gradle-set_EGRADLE() {
	[[ -n ${EGRADLE} ]] && return

	if [[ -n ${EGRADLE_OVERWRITE} ]]; then
		export EGRADLE="${EGRADLE_OVERWRITE}"
		return
	fi

	local candidates candidate selected selected_ver

	candidates=$(compgen -c gradle-)
	for candidate in ${candidates}; do
		if [[ ! ${candidate} =~ gradle(-bin)?-([.0-9]+) ]]; then
			continue
		fi

		local ver
		if (( ${#BASH_REMATCH[@]} == 3 )); then
			ver="${BASH_REMATCH[2]}"
		else
			ver="${BASH_REMATCH[1]}"
		fi

		if [[ -n ${EGRADLE_MIN} ]] \
			   && ver_test "${ver}" -lt "${EGRADLE_MIN}"; then
			# Candidate does not stisfy EGRADLE_MIN condition.
			continue
		fi

		if [[ -n ${EGRADLE_MAX_EXCLUSIVE} ]] \
			   && ver_test "${ver}" -ge "${EGRADLE_MAX_EXCLUSIVE}"; then
			# Candidate does not satisfy EGRADLE_MAX_EXCLUSIVE condition.
			continue
		fi

		if [[ -n ${selected_ver} ]] \
			   && ver_test "${selected_ver}" -gt "${ver}"; then
			# Candidate is older than the currently selected candidate.
			continue
		fi

		selected="${candidate}"
		selected_ver="${ver}"
	done

	if [[ -z ${selected} ]]; then
		die "Could not find (suitable) gradle installation in PATH"
	fi

	export EGRADLE="${selected}"
	export EGRADLE_VER="${ver}"
}

# @FUNCTION: egradle
# @USAGE: [gradle-args]
# @DESCRIPTION
# Invoke gradle
egradle() {
	gradle-set_EGRADLE

	# TODO --no-build-cache ?
	local gradle_args=(
		--console=plain
		--info
		--stacktrace
		--no-daemon
		--offline
		--no-build-cache
		--gradle-user-home "${T}/gradle_user_home"
		--project-cache-dir "${T}/gradle_project_cache"
	)

	edo "${EGRADLE}" "${gradle_args[@]}" ${@}
}

fi