From 0e74b8acfdd2fb86951911a55a60d42a49bd1d4a Mon Sep 17 00:00:00 2001 From: Seth Robertson Date: Tue, 14 Jan 2025 18:26:21 -0500 Subject: [PATCH 1/2] Bug 382: Enhance davmail script to allow overrides It should be backwards compatible, but now you can pass in environmental variables (seen below) to override various default settings. Even better, if you just want to add java arguments (example: UI scaling) you can set JAVA_USER_OPTS and not have to worry about anything else. CLASSPATH EXTRA_CLASSPATH JAVA JAVA_CORE_OPTS JAVA_EXTRA2_OPTS JAVA_EXTRA_OPTS JAVA_NET_OPTS_DFL JAVA_OPTS JAVA_USER_OPTS JFX_CLASSPATH LD_LIBRARY_PATH SWT_GTK3 --- src/bin/davmail | 69 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 48 insertions(+), 21 deletions(-) mode change 100644 => 100755 src/bin/davmail diff --git a/src/bin/davmail b/src/bin/davmail old mode 100644 new mode 100755 index 980558f6..54d1d3d3 --- a/src/bin/davmail +++ b/src/bin/davmail @@ -5,9 +5,17 @@ # In case of SWT crash under JDK 9/11, uninstall SWT or remove SWT cases below # BASE=$(dirname "$0") -# set memory and enable DNS expiration -JAVA_OPTS="-Xmx512M -Dsun.net.inetaddr.ttl=60" -JAVA=java +# Set default java options (may override in environment when calling this program) +# Memory and DNS expiration +: ${JAVA_CORE_OPTS:="-Xmx512M -Dsun.net.inetaddr.ttl=60"} +# Newer java no longer expose this internal API +: ${JAVA_NET_OPTS_DFL:="--add-exports java.base/sun.net.www.protocol.https=ALL-UNNAMED"} +# User arguments (such as UI scaling) +: ${JAVA_USER_OPTS:=""} +# May also pass in CLASSPATH, JFX_CLASSPATH, EXTRA_CLASSPATH, JAVA_EXTRA_OPTS, JAVA_EXTRA2_OPTS, LD_LIBRARY_PATH, SWT_GTK3 +JAVA_NET_OPTS= +CP_PREFIX= +CP_SUFFIX= # Experimental: download Azul JRE FX with command 'davmail azul' if [ "x$1" = 'xazul' ]; then @@ -32,48 +40,67 @@ fi # check for embedded jre if [ -e "$BASE/jre/bin/java" ]; then JAVA=$BASE/jre/bin/java - JAVA_OPTS="$JAVA_OPTS --add-exports java.base/sun.net.www.protocol.https=ALL-UNNAMED" + JAVA_NET_OPTS="${JAVA_NET_OPTS_DFL}" echo "Using embedded JRE" $JAVA -version -elif java -version 2>&1 >/dev/null | grep -q "version" ; then +else + : ${JAVA:=java} + if $JAVA -version 2>&1 >/dev/null | grep -q "version" ; then echo "Using system provided JRE" - java -version + ${JAVA} -version if [ -e "/usr/lib/jvm/openjfx" ]; then echo "Enable OpenJFX" - JAVA_OPTS="$JAVA_OPTS --add-exports java.base/sun.net.www.protocol.https=ALL-UNNAMED" - JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/lib/jvm/openjfx --module-path /usr/lib/jvm/openjfx --add-modules javafx.base,javafx.controls,javafx.web,javafx.fxml,javafx.swing" + JAVA_NET_OPTS="${JAVA_NET_OPTS_DFL}" + : ${JAVA_EXTRA_OPTS:="-Djava.library.path=/usr/lib/jvm/openjfx --module-path /usr/lib/jvm/openjfx --add-modules javafx.base,javafx.controls,javafx.web,javafx.fxml,javafx.swing"} elif [ -e "/usr/share/openjfx" ]; then # matches Kubuntu echo "Enable OpenJFX" - JAVA_OPTS="$JAVA_OPTS --add-exports java.base/sun.net.www.protocol.https=ALL-UNNAMED" + JAVA_NET_OPTS="${JAVA_NET_OPTS_DFL}" else # add JFX to classpath with OpenJDK 11 - JFX_CLASSPATH=/usr/share/java/javafx-base.jar:/usr/share/java/javafx-controls.jar:/usr/share/java/javafx-fxml.jar:/usr/share/java/javafx-graphics.jar:/usr/share/java/javafx-media.jar:/usr/share/java/javafx-swing.jar:/usr/share/java/javafx-web.jar + : ${JFX_CLASSPATH:=/usr/share/java/javafx-base.jar:/usr/share/java/javafx-controls.jar:/usr/share/java/javafx-fxml.jar:/usr/share/java/javafx-graphics.jar:/usr/share/java/javafx-media.jar:/usr/share/java/javafx-swing.jar:/usr/share/java/javafx-web.jar} fi -elif [ -e "$BASE/davmail.jar" ]; then + elif [ -e "$BASE/davmail.jar" ]; then # display message for platform independent package echo "Java not found, try davmail azul to fetch latest Azul JRE" exit 1 + fi fi -# uncomment this to force JDK 8 +# uncomment this (or set JAVA variable to this when calling program) to force JDK 8 #JAVA=/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java if [ -e "$BASE/davmail.jar" ]; then # this is the platform independent package - exec "${JAVA}" $JAVA_OPTS -cp "$BASE/davmail.jar:$BASE/lib/*:${JFX_CLASSPATH}" davmail.DavGateway "$@" + CP_PREFIX="$BASE/davmail.jar:$BASE/lib/*" + elif [ -e /usr/share/java/swt.jar ]; then # SWT 3 is available - JAVA_OPTS="$JAVA_OPTS -Djdk.gtk.version=2.2" - export LD_LIBRARY_PATH=/usr/lib/jni - exec "${JAVA}" $JAVA_OPTS -cp "/usr/share/davmail/davmail.jar:/usr/share/java/swt.jar:${JFX_CLASSPATH}:/usr/share/davmail/lib/*" davmail.DavGateway "$@" + : ${JAVA_EXTRA2_OPTS:="-Djdk.gtk.version=2.2"} + : ${LD_LIBRARY_PATH:=/usr/lib/jni} + export LD_LIBRARY_PATH + CP_PREFIX="/usr/share/davmail/davmail.jar:/usr/share/java/swt.jar" + CP_SUFFIX="/usr/share/davmail/lib/*" elif [ -e /usr/share/java/swt4.jar ]; then # SWT 4 is available, force GTK 2 in SWT - JAVA_OPTS="$JAVA_OPTS -Djdk.gtk.version=2.2" - export LD_LIBRARY_PATH=/usr/lib/jni - export SWT_GTK3=0 - exec "${JAVA}" $JAVA_OPTS -cp "/usr/share/davmail/davmail.jar:/usr/share/java/swt4.jar:${JFX_CLASSPATH}:/usr/share/davmail/lib/*" davmail.DavGateway "$@" + : ${JAVA_EXTRA2_OPTS:="-Djdk.gtk.version=2.2"} + : ${LD_LIBRARY_PATH:=/usr/lib/jni} + : ${SWT_GTK3:=0} + export LD_LIBRARY_PATH SWT_GTK3 + + CP_PREFIX="/usr/share/davmail/davmail.jar:/usr/share/java/swt4.jar" + CP_SUFFIX=":/usr/share/davmail/lib/*" else - exec "${JAVA}" $JAVA_OPTS -cp "/usr/share/davmail/davmail.jar:/usr/share/davmail/lib/*:${JFX_CLASSPATH}" davmail.DavGateway "$@" + CP_PREFIX="/usr/share/davmail/davmail.jar:/usr/share/davmail/lib/*" fi + +if [ "$CLASSPATH" = "" ]; then + CLASSPATH=$CP_PREFIX + if [ "$JFX_CLASSPATH" ]; then CLASSPATH="$CLASSPATH:$JFX_CLASSPATH"; fi + if [ "$CP_SUFFIX" ]; then CLASSPATH="$CLASSPATH:$CP_SUFFIX"; fi +fi + +: ${JAVA_OPTS:=$JAVA_CORE_OPTS $JAVA_NET_OPTS $JAVA_EXTRA_OPTS $JAVA_EXTRA2_OPTS $JAVA_USER_OPTS} + +exec "${JAVA}" $JAVA_OPTS -cp "$CLASSPATH" davmail.DavGateway "$@" From 35f64b4c4652805b31d9d0d764ca8e4ae90c4165 Mon Sep 17 00:00:00 2001 From: Seth Robertson Date: Tue, 14 Jan 2025 18:44:08 -0500 Subject: [PATCH 2/2] Bug #382, forgot to commit the documented EXTRA_CLASSPATH --- src/bin/davmail | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bin/davmail b/src/bin/davmail index 54d1d3d3..4f832947 100755 --- a/src/bin/davmail +++ b/src/bin/davmail @@ -99,6 +99,7 @@ if [ "$CLASSPATH" = "" ]; then CLASSPATH=$CP_PREFIX if [ "$JFX_CLASSPATH" ]; then CLASSPATH="$CLASSPATH:$JFX_CLASSPATH"; fi if [ "$CP_SUFFIX" ]; then CLASSPATH="$CLASSPATH:$CP_SUFFIX"; fi + if [ "$EXTRA_CLASSPATH" ]; then CLASSPATH="$CLASSPATH:$EXTRA_CLASSPATH"; fi fi : ${JAVA_OPTS:=$JAVA_CORE_OPTS $JAVA_NET_OPTS $JAVA_EXTRA_OPTS $JAVA_EXTRA2_OPTS $JAVA_USER_OPTS}