public inbox for gentoo-dev@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-dev] [PATCH] java-utils-2.eclass: ECLASS_VARIABLE JAVA_PKG_NO_CLEAN
@ 2023-02-04 13:29 Volkmar W. Pogatzki
  2023-02-04 14:50 ` Yuan Liao (Leo3418)
  0 siblings, 1 reply; 2+ messages in thread
From: Volkmar W. Pogatzki @ 2023-02-04 13:29 UTC (permalink / raw
  To: gentoo-dev

The new ECLASS_VARIABLE JAVA_PKG_NO_CLEAN is defined as an array in
which those *.class or *.jar files can be listed which should not be
removed by java-pkg_clean.  This change helps in cases where only a
small parts of bundled stuff cannot be replaced with system libraries.
It also helps to visualize not yet unbundled stuff in the ebuild.

Signed-off-by: Volkmar W. Pogatzki <gentoo@pogatzki.net>
---
 eclass/java-utils-2.eclass | 27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)

diff --git a/eclass/java-utils-2.eclass b/eclass/java-utils-2.eclass
index 4f50ce39c5dc..5cd9d441f396 100644
--- a/eclass/java-utils-2.eclass
+++ b/eclass/java-utils-2.eclass
@@ -1,4 +1,4 @@
-# Copyright 2004-2022 Gentoo Authors
+# Copyright 2004-2023 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 # @ECLASS: java-utils-2.eclass
@@ -66,6 +66,18 @@ JAVA_PKG_ALLOW_VM_CHANGE=${JAVA_PKG_ALLOW_VM_CHANGE:="yes"}
 #	JAVA_PKG_FORCE_VM=openjdk-11 emerge foo
 # @CODE
 
+# @ECLASS_VARIABLE: JAVA_PKG_NO_CLEAN
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# An array of *.class or *.jar files which must not be deleted by java-pkg_clean.
+#
+# @CODE
+#	JAVA_PKG_NO_CLEAN=(
+#		apps/susidns/src/lib/jstl.jar
+#		apps/susidns/src/lib/standard.jar
+#	)
+# @CODE
+
 # @ECLASS_VARIABLE: JAVA_PKG_WANT_BUILD_VM
 # @DEFAULT_UNSET
 # @DESCRIPTION:
@@ -2928,9 +2940,16 @@ is-java-strict() {
 # Java package cleaner function. This will remove all *.class and *.jar
 # files, removing any bundled dependencies.
 java-pkg_clean() {
-	if [[ -z "${JAVA_PKG_NO_CLEAN}" ]]; then
-		find "${@}" '(' -name '*.class' -o -name '*.jar' ')' -type f -delete -print || die
-	fi
+	pushd ${S} > /dev/null || die
+		local FILES_TO_DELETE=$(find * '(' -name '*.class' -o -name '*.jar' ')')
+		for keep in "${JAVA_PKG_NO_CLEAN[@]}"; do
+			FILES_TO_DELETE=${FILES_TO_DELETE//${keep}}
+		done
+		for delete in "${FILES_TO_DELETE[@]}"; do
+			echo ""
+			rm -v ${delete} || die
+		done
+	popd > /dev/null || die
 }
 
 # @FUNCTION: java-pkg_gen-cp
-- 
2.39.1



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [gentoo-dev] [PATCH] java-utils-2.eclass: ECLASS_VARIABLE JAVA_PKG_NO_CLEAN
  2023-02-04 13:29 [gentoo-dev] [PATCH] java-utils-2.eclass: ECLASS_VARIABLE JAVA_PKG_NO_CLEAN Volkmar W. Pogatzki
@ 2023-02-04 14:50 ` Yuan Liao (Leo3418)
  0 siblings, 0 replies; 2+ messages in thread
From: Yuan Liao (Leo3418) @ 2023-02-04 14:50 UTC (permalink / raw
  To: gentoo-dev

[-- Attachment #1: Type: text/plain, Size: 2432 bytes --]

On Sat, Feb 04, 2023 at 02:29:31PM +0100, Volkmar W. Pogatzki wrote:
> @@ -2928,9 +2940,16 @@ is-java-strict() {
>  # Java package cleaner function. This will remove all *.class and *.jar
>  # files, removing any bundled dependencies.
>  java-pkg_clean() {
> -	if [[ -z "${JAVA_PKG_NO_CLEAN}" ]]; then
> -		find "${@}" '(' -name '*.class' -o -name '*.jar' ')' -type f -delete -print || die
> -	fi
> +	pushd ${S} > /dev/null || die
> +		local FILES_TO_DELETE=$(find * '(' -name '*.class' -o -name '*.jar' ')')

This could break existing ebuilds that pass argument to java-pkg_clean.
::gentoo has a few such ebuilds:

$ git grep 'java-pkg_clean.\+$'
dev-java/bcmail/bcmail-1.72.ebuild:	java-pkg_clean ..
dev-java/bcpg/bcpg-1.72.ebuild:	java-pkg_clean ..
dev-java/bcpkix/bcpkix-1.72.ebuild:	java-pkg_clean ..
dev-java/bcprov/bcprov-1.72.ebuild:	java-pkg_clean ..
dev-java/bcutil/bcutil-1.72.ebuild:	java-pkg_clean ..
dev-java/jakarta-mail-api/jakarta-mail-api-2.1.0-r1.ebuild:	java-pkg_clean ..
dev-java/javassist/javassist-3.29.2.ebuild:	java-pkg_clean javassist.jar
dev-java/osgi-annotation/osgi-annotation-8.1.0.ebuild:	java-pkg_clean org
dev-java/osgi-cmpn/osgi-cmpn-8.0.0.ebuild:	java-pkg_clean org
dev-java/osgi-core/osgi-core-8.0.0.ebuild:	java-pkg_clean org
dev-java/stringtemplate/stringtemplate-4.3.2.ebuild:	# Do not call java-pkg_clean; otherwise, it would remove
dev-java/swingx-ws/swingx-ws-1.0_p20110515-r2.ebuild:	java-pkg_clean "${WORKDIR}"
dev-java/testng/testng-6.9.10-r1.ebuild:	java-pkg_clean ! -path "./src/*"
dev-lang/nqp/nqp-2021.06.ebuild:	java-pkg_clean 3rdparty/
dev-lang/nqp/nqp-2021.08.ebuild:	java-pkg_clean 3rdparty/
dev-lang/nqp/nqp-2021.10.ebuild:	java-pkg_clean 3rdparty/
dev-lang/nqp/nqp-9999.ebuild:	java-pkg_clean 3rdparty/
eclass/java-utils-2.eclass:java-pkg_clean() {

One ebuild that fails due to this change is
dev-java/jakarta-mail-api-2.1.0-r1:

Preparing source in /var/tmp/portage/dev-java/jakarta-mail-api-2.1.0-r1/work/mail-2.1.0/api ...

rm: missing operand
Try 'rm --help' for more information.
 * ERROR: dev-java/jakarta-mail-api-2.1.0-r1::gentoo failed (prepare
 * phase):
 *   (no error message)
 * 
 * Call stack:
 *     ebuild.sh, line  136:  Called src_prepare
 *   environment, line 2476:  Called java-pkg_clean '..'
 *   environment, line 1173:  Called die
 * The specific snippet of code:
 *           rm -v ${delete} || die;

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 963 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-02-04 14:50 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-04 13:29 [gentoo-dev] [PATCH] java-utils-2.eclass: ECLASS_VARIABLE JAVA_PKG_NO_CLEAN Volkmar W. Pogatzki
2023-02-04 14:50 ` Yuan Liao (Leo3418)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox