Re: [gentoo-dev] [PATCH] gradle.eclass: add new eclass

2023-01-07 Thread Florian Schmaus

On 07/01/2023 05.29, Sam James wrote:




On 6 Jan 2023, at 17:20, Florian Schmaus  wrote:

Signed-off-by: Florian Schmaus 
---
eclass/gradle.eclass   | 149 +
eclass/tests/gradle.sh |  62 +
2 files changed, 211 insertions(+)
create mode 100644 eclass/gradle.eclass
create mode 100755 eclass/tests/gradle.sh

diff --git a/eclass/gradle.eclass b/eclass/gradle.eclass
[...]



+
+# @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_EXACT_VER
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# The exact required gradle version.
+


It feels a pity to not use the now-somewhat standard
PYTHON_COMPAT/LUA_COMPAT-style API.

Is there a reason not to?

If it doesn't fit how Gradle versioning works / the
number of targets is likely to be far too high,
It's fine as-is.


The _COMPAT-style API would work for Java LTS versions, but not for fast 
moving targets like Gradle versions.


Gradle has overall a good compatibility story, breaking changes are 
typically just introduced in new major versions. But sometimes you need 
a particular Gradle version range, like [6.2,6.8) due the mixins of 
Gradle plugins.


I expect that the number of Java projects that use Gradle will continue 
to grow. Because of that we probably need to provide a diverse range of 
Gradle versions.


- Flow



Re: [gentoo-dev] [PATCH] gradle.eclass: add new eclass

2023-01-06 Thread Anna
On 2023-01-06 18:20, Florian Schmaus wrote:
> Signed-off-by: Florian Schmaus 
> ---
>  eclass/gradle.eclass   | 149 +
>  eclass/tests/gradle.sh |  62 +
>  2 files changed, 211 insertions(+)
>  create mode 100644 eclass/gradle.eclass
>  create mode 100755 eclass/tests/gradle.sh
> 
> diff --git a/eclass/gradle.eclass b/eclass/gradle.eclass
> new file mode 100644
> index ..a321262612d0
> --- /dev/null
> +++ b/eclass/gradle.eclass
> @@ -0,0 +1,149 @@
> +# Copyright 2021-2023 Gentoo Authors
> +# Distributed under the terms of the GNU General Public License v2
> +
> +# @ECLASS: gradle.eclass

I think "gradle-utils" is a better name since the eclass does not export
any phase functions or set metadata variables (this should be noted in
the description btw).

> +# @MAINTAINER:
> +# Gentoo Java Project 
> +# @AUTHOR:
> +# Florian Schmaus 
> +# @BLURB: Utility functions for the gradle build system.

First letter should not be capitalized (for manpage reasons).

> +# @DESCRIPTION:
> +# Utility functions for the gradle build system.

Either drop description or don't repeat blurb here.

> +
> +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_EXACT_VER
> +# @DEFAULT_UNSET
> +# @DESCRIPTION:
> +# The exact required gradle version.
> +
> +# @ECLASS_VARIABLE: EGRADLE_PARALLEL
> +# @DESCRIPTION:
> +# Set to the 'true', the default, to invoke gradle with --parallel. Set
> +# to 'false' to disable parallel gradle builds.
> +: "${EGRADLE_PARALLEL=true}"

Can be deduced indeirectly (when "makeopts_jobs" equals to 1).

> +
> +# @ECLASS_VARIABLE: EGRADLE_USER_HOME
> +# @DESCRIPTION:
> +# Directroy used as the user's home directory by gradle. Defaults to
> +# ${T}/gradle_user_home
> +: "${EGRADLE_USER_HOME="${T}/gradle_user_home"}"

Can it be just ${HOME}?

> +
> +# @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}"

Any reason to export?

> + 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_EXACT_VER} ]]; then
> + ver_test "${ver}" -ne "${EGRADLE_EXACT_VER}" && continue
> +
> + selected="${candidate}"
> + selected_ver="${ver}"
> + break
> + fi
> +
> + if [[ -n ${EGRADLE_MIN} ]] \
> +&& ver_test "${ver}" -lt "${EGRADLE_MIN}"; then
> + # Candidate does not satisfy 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 with the optionally provided arguments.
> +egradle() {
> + gradle-set_EGRADLE
> +
> + local gradle_args=(
> + --console=plain
> + --info
> + --stacktrace
> + --no-daemon
> + --offline
> + 

Re: [gentoo-dev] [PATCH] gradle.eclass: add new eclass

2023-01-06 Thread Sam James


> On 6 Jan 2023, at 17:20, Florian Schmaus  wrote:
> 
> Signed-off-by: Florian Schmaus 
> ---
> eclass/gradle.eclass   | 149 +
> eclass/tests/gradle.sh |  62 +
> 2 files changed, 211 insertions(+)
> create mode 100644 eclass/gradle.eclass
> create mode 100755 eclass/tests/gradle.sh
> 
> diff --git a/eclass/gradle.eclass b/eclass/gradle.eclass
> [...]

> +
> +# @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_EXACT_VER
> +# @DEFAULT_UNSET
> +# @DESCRIPTION:
> +# The exact required gradle version.
> +

It feels a pity to not use the now-somewhat standard
PYTHON_COMPAT/LUA_COMPAT-style API.

Is there a reason not to?

If it doesn't fit how Gradle versioning works / the
number of targets is likely to be far too high,
It's fine as-is.



signature.asc
Description: Message signed with OpenPGP