commit: 9fa13744b8265023142ad7050fa67cce67ce29fa Author: Florian Schmaus <flow <AT> gentoo <DOT> org> AuthorDate: Fri Jun 24 19:58:21 2022 +0000 Commit: Florian Schmaus <flow <AT> gentoo <DOT> org> CommitDate: Wed Jun 29 06:45:21 2022 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=9fa13744
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 <AT> gentoo.org> Closes: https://github.com/gentoo/gentoo/pull/26069 eclass/java-vm-2.eclass | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/eclass/java-vm-2.eclass b/eclass/java-vm-2.eclass index 8196b1cdc72a..ad814d7efd1a 100644 --- a/eclass/java-vm-2.eclass +++ b/eclass/java-vm-2.eclass @@ -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 }
