Files
2026-05-11 19:29:55 +01:00

163 lines
5.3 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
PACKAGE_DIR=""
PLUGIN_DIR=""
PLUGIN_CACHE_DIR=""
ALLOW_MISSING_LINUX_PLUGIN=0
while [[ $# -gt 0 ]]; do
case "$1" in
-PackageDir)
PACKAGE_DIR="${2:-}"
shift 2
;;
-PluginDir)
PLUGIN_DIR="${2:-}"
shift 2
;;
-PluginCacheDir)
PLUGIN_CACHE_DIR="${2:-}"
shift 2
;;
-AllowMissingLinuxPlugin)
ALLOW_MISSING_LINUX_PLUGIN=1
shift
;;
*)
echo "unknown argument: $1" >&2
exit 2
;;
esac
done
if [[ -z "$PLUGIN_DIR" ]]; then
PLUGIN_DIR="$PACKAGE_DIR"
fi
if [[ -z "$PLUGIN_DIR" ]]; then
echo "PluginDir is required" >&2
exit 2
fi
APP_SUPPORT_DIR="$HOME/Library/Application Support/OrcaSlicer/macos-bridge"
RUNTIME_DIR="${PJARCZAK_MAC_RUNTIME_DIR:-$APP_SUPPORT_DIR/runtime}"
trim_file() {
local path="$1"
if [[ ! -f "$path" ]]; then
return 1
fi
LC_ALL=C tr -d '
' < "$path" | head -n 1 | sed 's/^[[:space:]]*//;s/[[:space:]]*$//'
}
find_limactl() {
if [[ -n "${PJARCZAK_LIMACTL:-}" && -x "${PJARCZAK_LIMACTL}" ]]; then
printf '%s
' "$PJARCZAK_LIMACTL"
return 0
fi
if command -v limactl >/dev/null 2>&1; then
command -v limactl
return 0
fi
local local_bin="$APP_SUPPORT_DIR/lima/bin/limactl"
if [[ -x "$local_bin" ]]; then
printf '%s
' "$local_bin"
return 0
fi
for candidate in /opt/homebrew/bin/limactl /usr/local/bin/limactl; do
if [[ -x "$candidate" ]]; then
printf '%s
' "$candidate"
return 0
fi
done
return 1
}
require_file() {
local path="$1"
local label="$2"
if [[ ! -f "$path" ]]; then
echo "missing required file: $label" >&2
exit 1
fi
}
compare_required_file() {
local src="$1"
local dst="$2"
local label="$3"
if [[ ! -f "$src" || ! -f "$dst" ]]; then
echo "runtime payload file missing: $label" >&2
exit 1
fi
if ! cmp -s "$src" "$dst"; then
echo "runtime payload out of date: $label" >&2
exit 1
fi
}
mkdir -p "$APP_SUPPORT_DIR"
require_file "$PLUGIN_DIR/install_runtime_macos.sh" "install_runtime_macos.sh"
require_file "$PLUGIN_DIR/verify_runtime_macos.sh" "verify_runtime_macos.sh"
require_file "$PLUGIN_DIR/pjarczak_lima_instance.txt" "pjarczak_lima_instance.txt"
require_file "$PLUGIN_DIR/pjarczak-bambu-linux-host-wrapper" "pjarczak-bambu-linux-host-wrapper"
if [[ "$ALLOW_MISSING_LINUX_PLUGIN" -eq 0 ]]; then
require_file "$PLUGIN_DIR/libbambu_networking.so" "libbambu_networking.so"
require_file "$PLUGIN_DIR/libBambuSource.so" "libBambuSource.so"
fi
require_file "$PLUGIN_DIR/pjarczak_bambu_linux_host" "pjarczak_bambu_linux_host"
require_file "$PLUGIN_DIR/pjarczak_bambu_linux_host_abi1" "pjarczak_bambu_linux_host_abi1"
require_file "$PLUGIN_DIR/pjarczak_bambu_linux_host_abi0" "pjarczak_bambu_linux_host_abi0"
require_file "$PLUGIN_DIR/ca-certificates.crt" "ca-certificates.crt"
require_file "$PLUGIN_DIR/slicer_base64.cer" "slicer_base64.cer"
require_file "$RUNTIME_DIR/libbambu_networking.so" "runtime/libbambu_networking.so"
require_file "$RUNTIME_DIR/libBambuSource.so" "runtime/libBambuSource.so"
require_file "$RUNTIME_DIR/pjarczak_bambu_linux_host" "runtime/pjarczak_bambu_linux_host"
require_file "$RUNTIME_DIR/pjarczak_bambu_linux_host_abi1" "runtime/pjarczak_bambu_linux_host_abi1"
require_file "$RUNTIME_DIR/pjarczak_bambu_linux_host_abi0" "runtime/pjarczak_bambu_linux_host_abi0"
require_file "$RUNTIME_DIR/ca-certificates.crt" "runtime/ca-certificates.crt"
require_file "$RUNTIME_DIR/slicer_base64.cer" "runtime/slicer_base64.cer"
compare_required_file "$PLUGIN_DIR/libbambu_networking.so" "$RUNTIME_DIR/libbambu_networking.so" "libbambu_networking.so"
compare_required_file "$PLUGIN_DIR/libBambuSource.so" "$RUNTIME_DIR/libBambuSource.so" "libBambuSource.so"
compare_required_file "$PLUGIN_DIR/pjarczak_bambu_linux_host" "$RUNTIME_DIR/pjarczak_bambu_linux_host" "pjarczak_bambu_linux_host"
compare_required_file "$PLUGIN_DIR/pjarczak_bambu_linux_host_abi1" "$RUNTIME_DIR/pjarczak_bambu_linux_host_abi1" "pjarczak_bambu_linux_host_abi1"
compare_required_file "$PLUGIN_DIR/pjarczak_bambu_linux_host_abi0" "$RUNTIME_DIR/pjarczak_bambu_linux_host_abi0" "pjarczak_bambu_linux_host_abi0"
compare_required_file "$PLUGIN_DIR/ca-certificates.crt" "$RUNTIME_DIR/ca-certificates.crt" "ca-certificates.crt"
compare_required_file "$PLUGIN_DIR/slicer_base64.cer" "$RUNTIME_DIR/slicer_base64.cer" "slicer_base64.cer"
for optional_file in liblive555.so libagora_rtc_sdk.so libagora-fdkaac.so; do
if [[ -f "$PLUGIN_DIR/$optional_file" ]]; then
compare_required_file "$PLUGIN_DIR/$optional_file" "$RUNTIME_DIR/$optional_file" "$optional_file"
fi
done
LIMACTL=$(find_limactl || true)
if [[ -z "$LIMACTL" ]]; then
echo "limactl not found" >&2
exit 1
fi
INSTANCE="${PJARCZAK_MAC_LIMA_INSTANCE:-}"
if [[ -z "$INSTANCE" ]]; then
INSTANCE=$(trim_file "$PLUGIN_DIR/pjarczak_lima_instance.txt" || true)
fi
if [[ -z "$INSTANCE" ]]; then
echo "Lima instance name is not configured" >&2
exit 1
fi
if ! "$LIMACTL" shell "$INSTANCE" -- /usr/bin/env true >/dev/null 2>&1; then
echo "Lima instance '$INSTANCE' is not ready" >&2
exit 1
fi
printf 'runtime ok
'