#!/bin/sh
# MIT-0 launcher; upstream dependencies retain their own licenses.
# Use shell built-ins only before Java: Click confinement can deny coreutils.
set -eu
case "$0" in
   */*) HERE=${0%/*} ;;
   *) HERE=. ;;
esac
HERE=$(CDPATH= cd -P -- "${HERE:-/}" && pwd -P)
: "${SIGNAL_APP_DATA:?Missing confined application data directory}"
: "${SIGNAL_APP_CACHE:?Missing confined application cache directory}"
umask 077
JAVA_TMP="$SIGNAL_APP_CACHE/java-tmp"
# Engine::start creates and protects this directory using Qt, not /bin/mkdir.
if [ ! -d "$JAVA_TMP" ] || [ -L "$JAVA_TMP" ] || [ ! -w "$JAVA_TMP" ] || [ ! -x "$JAVA_TMP" ]; then
   printf '%s\n' '[runtime] private Java temporary directory is missing, unsafe or not writable; start through Signal Unofficial' >&2
   exit 126
fi
unset JAVA_TOOL_OPTIONS _JAVA_OPTIONS JDK_JAVA_OPTIONS SIGNAL_CLI_CONFIG
export LC_ALL=C.UTF-8
if [ ! -x "$HERE/jre/bin/java" ]; then
   printf '%s\n' '[runtime] packaged Java runtime is missing or not executable' >&2
   exit 126
fi
if [ ! -f "$HERE/native/libsignal_jni.so" ]; then
   printf '%s\n' '[runtime] packaged libsignal JNI library is missing' >&2
   exit 126
fi
if [ ! -f "$HERE/native/libsqlitejdbc.so" ] || [ -L "$HERE/native/libsqlitejdbc.so" ] || [ ! -r "$HERE/native/libsqlitejdbc.so" ] || [ ! -s "$HERE/native/libsqlitejdbc.so" ]; then
   printf '%s\n' '[runtime] packaged SQLite JNI library is missing, empty or unsafe; rebuild the complete Click package' >&2
   exit 78
fi
if [ ! -f "$HERE/bootstrap/org/barrydegraaff/signalunofficial/EngineBootstrap.class" ]; then
   printf '%s\n' '[runtime] packaged SQLite startup checker is missing; rebuild the complete Click package' >&2
   exit 78
fi
if [ ! -d "$HERE/signal-cli/lib" ]; then
   printf '%s\n' '[runtime] packaged signal-cli library directory is missing' >&2
   exit 126
fi
printf '%s\n' '[runtime] packaged runtime preflight ok; starting SQLite check with UTF-8' >&2
exec "$HERE/jre/bin/java" \
   -Djava.awt.headless=true \
   -Dfile.encoding=UTF-8 \
   -Dsun.jnu.encoding=UTF-8 \
   -Duser.home="$SIGNAL_APP_DATA" \
   -Djava.io.tmpdir="$JAVA_TMP" \
   -Dorg.sqlite.tmpdir="$JAVA_TMP" \
   -Dorg.sqlite.lib.path="$HERE/native" \
   -Dorg.sqlite.lib.name=libsqlitejdbc.so \
   -Djava.library.path="$HERE/native" \
   -XX:-UsePerfData -Xms16m -Xmx384m \
   --enable-native-access=ALL-UNNAMED \
   -cp "$HERE/bootstrap:$HERE/signal-cli/lib/*" org.barrydegraaff.signalunofficial.EngineBootstrap "$@"
