java-vm-2.eclass: use "eselect java-vm update" if available

Note that IDEPEND="app-eselect/eselect-java" is not absolutely
perfect. This is for two reasons. First, IDEPEND is an EAPI 8 feature,
while the java-vm-2.eclass currently also supports older EAPIs. However,
in those older EAPIs there is no equivalent of IDEPEND. Furthermore,
even with EAPIs supporting IDEPEND, while the install-time dependencies
specified with IDEPEND are allowed to be called in pkg_preinst and
pkg_postinst, the Package Manger Specification (PMS) stats that for the
pkg_*rm phases, "ebuilds … must not rely on them being available" [1].
And the java-vm-2.eclass only calls "eselect java-vm update" in
pkg_postrm. Therefore, a PMS adhering package manager is able to unmerge
IDEPEND packages before any of the pkg_*rm phases are invoked.

However, declaring an IDEPEND on eselect-java is the next best thing we
can do. Also, a typical package manager will likely not pro-actively
remove IDEPEND dependencies, so those are available in the pkg_*rm
phases. And since there is no harm in stating the IDEPEND, we declare
it.

Thanks to Mike Gilbert (floppym) for valuable feedback.

1: PMS 2021-06-13 § 8.1 Dependency Classes - https://projects.gentoo.org/pms/8/pms.html#x1-720008.1

Closes: https://bugs.gentoo.org/853928
Signed-off-by: Florian Schmaus <flow@gentoo.org>
Closes: https://github.com/gentoo/gentoo/pull/26069
This commit is contained in:
Florian Schmaus
2022-06-24 21:58:21 +02:00
parent 5a7a25258c
commit 9fa13744b8

View File

@@ -25,6 +25,7 @@ RDEPEND="
"
DEPEND="${RDEPEND}"
BDEPEND="app-arch/unzip"
IDEPEND="app-eselect/eselect-java"
if [[ ${EAPI} == 6 ]]; then
DEPEND+=" ${BDEPEND}"
@@ -88,14 +89,35 @@ java-vm-2_pkg_postinst() {
xdg_desktop_database_update
}
# @FUNCTION: has_eselect_java-vm_update
# @INTERNAL
# @DESCRIPTION:
# Checks if an eselect-java version providing "eselect java-vm update"
# is available.
# @RETURN: 0 if >=app-eselect/eselect-java-0.5 is installed, 1 otherwise.
has_eselect_java-vm_update() {
local has_version_args="-b"
if [[ ${EAPI} == 6 ]]; then
has_version_args="--host-root"
fi
has_version "${has_version_args}" ">=app-eselect/eselect-java-0.5"
}
# @FUNCTION: java-vm-2_pkg_prerm
# @DESCRIPTION:
# default pkg_prerm
#
# Warn user if removing system-vm.
# Does nothing if eselect-java-0.5 or newer is available. Otherwise,
# warn user if removing system-vm.
java-vm-2_pkg_prerm() {
if has_eselect_java-vm_update; then
# We will potentially switch to a new Java system VM in
# pkg_postrm().
return
fi
if [[ $(GENTOO_VM= java-config -f 2>/dev/null) == ${VMHANDLE} && -z ${REPLACED_BY_VERSION} ]]; then
ewarn "It appears you are removing your system-vm! Please run"
ewarn "\"eselect java-vm list\" to list available VMs, then use"
@@ -108,10 +130,14 @@ java-vm-2_pkg_prerm() {
# @DESCRIPTION:
# default pkg_postrm
#
# Update mime database.
# Invoke "eselect java-vm update" if eselect-java 0.5, or newer, is
# available. Also update the mime database.
java-vm-2_pkg_postrm() {
xdg_desktop_database_update
if has_eselect_java-vm_update; then
eselect java-vm update
fi
}