Files
jpexs-decompiler/resources/run-java.sh
Jindra Petřík 4e63384f56 ffdec-cli as separate executable, project
ffdec executable on linux
2024-08-05 11:17:25 +02:00

133 lines
3.7 KiB
Bash

#!/usr/bin/env bash
# This is a comment, it starts with "#".
# Uncomment following and set it to higher value if you want more memory
# You need 64 bit OS and 64 bit java to set it to higher values
# FFDEC_MEMORY=1024m
# Uncomment following when you encounter StackOverFlowErrors.
# If the app then terminates with OutOfMemory you can experiment with lower value.
# FFDEC_STACK_SIZE=32m
# FFDec requires Oracle Java 8
# Look for java in these directories
LOOKUP_JRE_DIRS="/usr/lib/jvm/* /opt/java* /opt/jre*"
# Required version
REQ_JVER1=1
REQ_JVER2=8
REQ_JVER3=0
REQ_JVER4=0
if [ -z ${FFDEC_JARFILENAME+x} ]; then
FFDEC_JARFILENAME=ffdec.jar
fi
search_jar_file() {
JAR_FILE_CANDIDATES="./${FFDEC_JARFILENAME} ../dist/${FFDEC_JARFILENAME} /usr/share/java/${FFDEC_JARFILENAME} /usr/share/java/ffdec/${FFDEC_JARFILENAME} /usr/share/java/jpexs-decompiler/${FFDEC_JARFILENAME}"
for f in $JAR_FILE_CANDIDATES ; do
[ -r "$f" ] && JAR_FILE="$f" && return 0
done
echo Unable to find ${FFDEC_JARFILE} in the following locations:
echo "${JAR_FILE_CANDIDATES// /$'\n'}"
return 1
}
check_java_version () {
JVER1=$(echo $JAVA_VERSION_OUTPUT | sed 's/java version "\([0-9]*\)\.[0-9]*\.[0-9]*\(_[0-9]*\)\?".*/\1/')
JVER2=$(echo $JAVA_VERSION_OUTPUT | sed 's/java version "[0-9]*\.\([0-9]*\)\.[0-9]*\(_[0-9]*\)\?".*/\1/')
JVER3=$(echo $JAVA_VERSION_OUTPUT | sed 's/java version "[0-9]*\.[0-9]*\.\([0-9]*\)\(_[0-9]*\)\?".*/\1/')
JVER4=$(echo $JAVA_VERSION_OUTPUT | sed 's/java version "[0-9]*\.[0-9]*\.[0-9]*\(_\([0-9]*\)\)\?".*/\2/' | sed 's/^$/0/')
if [ "$JVER1" -gt $REQ_JVER1 ]; then
return 0
elif [ "$JVER1" -lt $REQ_JVER1 ]; then
return 1
fi
if [ "$JVER2" -gt $REQ_JVER2 ]; then
return 0
elif [ "$JVER2" -lt $REQ_JVER2 ]; then
return 1
fi
if [ "$JVER3" -gt $REQ_JVER3 ]; then
return 0
elif [ "$JVER3" -lt $REQ_JVER3 ]; then
return 1
fi
if [ "$JVER4" -lt $REQ_JVER4 ]; then
return 1
fi
return 0
}
# Handle symlinks
PROGRAM="$0"
while [ -L "$PROGRAM" ]; do
PROGRAM=$(readlink -f "$PROGRAM")
done
pushd "$(dirname "$PROGRAM")" > /dev/null
search_jar_file || exit 1
if [ "${JAR_FILE:0:1}" != '/' ] ; then
JAR_FILE=$(pwd)/$JAR_FILE
fi
popd > /dev/null
if [ -z ${FFDEC_MEMORY+x} ]; then
FFDEC_MEMORY=1024m
fi
STACK_SIZE_PARAM=""
MEMORY_PARAM=""
if [ -n "$FFDEC_STACK_SIZE" ]; then
STACK_SIZE_PARAM=" -Xss$FFDEC_STACK_SIZE"
fi
if [ -n "$FFDEC_MEMORY" ]; then
MEMORY_PARAM=" -Xmx$FFDEC_MEMORY"
fi
args=(-Djava.net.preferIPv4Stack=true${MEMORY_PARAM}${STACK_SIZE_PARAM} -jar $JAR_FILE "$@")
if [ "$(uname)" = "Darwin" ]; then
args=(-Xdock:name=FFDec -Xdock:icon=icon.png "${args[@]}")
fi
# Check default java
if [ -x "$(which java)" ]; then
JAVA_VERSION_OUTPUT=$(java -version 2>&1)
JAVA_VERSION_OUTPUT=$(echo $JAVA_VERSION_OUTPUT | sed 's/openjdk version/java version/')
check_java_version && exec java "${args[@]}"
fi
# Test other possible Java locations
for JRE_PATH in $LOOKUP_JRE_DIRS; do
if [ -x "$JRE_PATH/bin/java" ]; then
JAVA_VERSION_OUTPUT=$("$JRE_PATH/bin/java" -version 2>&1)
JAVA_VERSION_OUTPUT=`echo $JAVA_VERSION_OUTPUT | sed 's/openjdk version/java version/'`
check_java_version && {
export JRE_PATH
exec "$JRE_PATH/bin/java" "${args[@]}"
}
fi
done
# Failed
if [ -x "$(which xmessage)" ]; then
xmessage -nearmouse -file - <<EOF
Failed to find a suitable java version.
Required: $REQ_JVER1.$REQ_JVER2.$REQ_JVER3.$REQ_JVER4 or newer.
EOF
else
echo Failed to find a suitable java version.
echo Required: $REQ_JVER1.$REQ_JVER2.$REQ_JVER3.$REQ_JVER4 or newer.
fi
exit 1