2026-08-25 14:47:05 -04:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
|
|
|
MISE_BIN="${MISE_BIN:-$HOME/.local/bin/mise}"
|
|
|
|
|
|
2026-08-25 16:25:42 -04:00
|
|
|
# Default to the on-disk BDMV folder; pass an explicit path to override (a
|
|
|
|
|
# folder or an .iso). The folder is just the simpler preview target -- a real
|
|
|
|
|
# player reads the JAR from the ISO's disc filesystem directly.
|
2026-08-25 14:57:31 -04:00
|
|
|
TARGET="${1:-$ROOT_DIR/build/disc}"
|
|
|
|
|
|
|
|
|
|
if [[ -d "$TARGET" && ! -d "$TARGET/BDMV" ]]; then
|
|
|
|
|
echo "Not a BDMV folder (no BDMV/ inside): $TARGET" >&2
|
|
|
|
|
echo "Run: make" >&2
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [[ ! -e "$TARGET" ]]; then
|
|
|
|
|
echo "Missing disc target: $TARGET" >&2
|
2026-08-25 14:47:05 -04:00
|
|
|
echo "Run: make" >&2
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [[ -x "$MISE_BIN" ]]; then
|
|
|
|
|
JDK8_HOME="$("$MISE_BIN" where java@temurin-8.0.502+7 2>/dev/null || true)"
|
|
|
|
|
else
|
|
|
|
|
JDK8_HOME=""
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [[ -z "$JDK8_HOME" && -d "$ROOT_DIR/vendor/bdj-sdk/host/jdk8" ]]; then
|
|
|
|
|
JDK8_HOME="$(cd "$ROOT_DIR/vendor/bdj-sdk/host/jdk8" && pwd)"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [[ -n "$JDK8_HOME" ]]; then
|
|
|
|
|
export JAVA_HOME="$JDK8_HOME/jre"
|
|
|
|
|
export JDK_HOME="$JDK8_HOME"
|
|
|
|
|
export LD_LIBRARY_PATH="$JDK8_HOME/jre/lib/amd64/server:${LD_LIBRARY_PATH:-}"
|
|
|
|
|
fi
|
|
|
|
|
|
2026-08-25 16:25:42 -04:00
|
|
|
# Note: no VLC_PLUGIN_PATH juggling. This system's VLC already ships the bluray
|
|
|
|
|
# access plugin (/usr/lib/vlc/plugins/access/liblibbluray_plugin.so); the old
|
|
|
|
|
# tools/vlc-plugins copy was only needed for split-package installs that lack it.
|
|
|
|
|
|
|
|
|
|
# Give libbluray writable BD-J storage roots, and -- the important part -- put
|
|
|
|
|
# the BD-J VFS cache *under* the cache (BUDA) root.
|
|
|
|
|
#
|
|
|
|
|
# libbluray copies the disc's JAR and fonts into a VFS cache under java.io.tmpdir
|
|
|
|
|
# (default /tmp/libbluray-bdj-cache). Its BD-J SecurityManager.canWrite() checks
|
|
|
|
|
# roots in this order: budaRoot -> persistentRoot -> (if an Xlet context is
|
|
|
|
|
# active: DENY) -> cacheRoot. That extraction often runs while an Xlet context is
|
|
|
|
|
# live on the thread, so the write is denied before the cacheRoot allowance is
|
|
|
|
|
# ever reached -- the flaky "error creating .../libbluray-bdj-cache" /
|
|
|
|
|
# "failed to create temporary cache directory" cascade that stops the Xlet (menu)
|
|
|
|
|
# from loading. budaRoot/persistentRoot are allowed unconditionally, so pointing
|
|
|
|
|
# TMPDIR (== java.io.tmpdir == the VFS cache's base) at the buda root makes the
|
|
|
|
|
# cache path start with budaRoot and always pass the write check.
|
|
|
|
|
BDJ_RUN_DIR="$ROOT_DIR/build/bdj-runtime"
|
|
|
|
|
export LIBBLURAY_CACHE_ROOT="$BDJ_RUN_DIR/cache"
|
|
|
|
|
export LIBBLURAY_PERSISTENT_ROOT="$BDJ_RUN_DIR/persistent"
|
|
|
|
|
export TMPDIR="$LIBBLURAY_CACHE_ROOT"
|
|
|
|
|
mkdir -p "$LIBBLURAY_CACHE_ROOT" "$LIBBLURAY_PERSISTENT_ROOT"
|
|
|
|
|
# start each preview from a clean VFS cache
|
|
|
|
|
rm -rf "$LIBBLURAY_CACHE_ROOT/libbluray-bdj-cache"
|
2026-08-25 14:47:05 -04:00
|
|
|
|
2026-08-25 14:57:31 -04:00
|
|
|
if [[ -d "$TARGET" ]]; then
|
|
|
|
|
ABS_TARGET="$(cd "$TARGET" && pwd)"
|
|
|
|
|
else
|
|
|
|
|
ABS_TARGET="$(cd "$(dirname "$TARGET")" && pwd)/$(basename "$TARGET")"
|
|
|
|
|
fi
|
2026-08-25 16:25:42 -04:00
|
|
|
exec vlc --bluray-menu "bluray://$ABS_TARGET"
|