#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" INSTALL_DIR="${INSTALL_DIR:-$ROOT_DIR/.local/microdicom}" SOURCE_DIR="" ARCHIVE_URL="" TMP_DIR="" usage() { cat <<'EOF' Usage: scripts/setup-microdicom.sh [--source-dir DIR | --archive-url URL] [--install-dir DIR] Behavior: - Copies a prepared MicroDicom directory into a local ignored directory. - With --archive-url, downloads and extracts an archive, then searches for a directory containing AUTORUN.INF and MICROD/. Example: scripts/setup-microdicom.sh --archive-url https://github.com///releases/download//microdicom.zip EOF } download() { local url="$1" local out="$2" if command -v curl >/dev/null 2>&1; then curl -fL "$url" -o "$out" elif command -v wget >/dev/null 2>&1; then wget -O "$out" "$url" else echo "need curl or wget to download $url" >&2 exit 1 fi } extract_archive() { local archive="$1" local dest="$2" case "$archive" in *.tar.gz|*.tgz) tar -xzf "$archive" -C "$dest" ;; *.tar.xz) tar -xJf "$archive" -C "$dest" ;; *.tar) tar -xf "$archive" -C "$dest" ;; *.zip) command -v unzip >/dev/null 2>&1 || { echo "unzip is required for $archive" >&2; exit 1; } unzip -q "$archive" -d "$dest" ;; *) echo "unsupported archive format: $archive" >&2 exit 1 ;; esac } while [[ $# -gt 0 ]]; do case "$1" in --source-dir) SOURCE_DIR="${2:?missing value for --source-dir}" shift 2 ;; --archive-url) ARCHIVE_URL="${2:?missing value for --archive-url}" shift 2 ;; --install-dir) INSTALL_DIR="${2:?missing value for --install-dir}" shift 2 ;; -h|--help) usage exit 0 ;; *) echo "Unknown argument: $1" >&2 usage >&2 exit 1 ;; esac done if [[ -n "$SOURCE_DIR" && -n "$ARCHIVE_URL" ]]; then echo "use only one of --source-dir or --archive-url" >&2 exit 1 fi cleanup() { [[ -n "$TMP_DIR" && -d "$TMP_DIR" ]] && rm -rf "$TMP_DIR" } trap cleanup EXIT if [[ -n "$ARCHIVE_URL" ]]; then TMP_DIR="$(mktemp -d)" archive_name="$(basename "${ARCHIVE_URL%%\?*}")" [[ -n "$archive_name" && "$archive_name" != "/" ]] || archive_name="microdicom.zip" archive="$TMP_DIR/$archive_name" download "$ARCHIVE_URL" "$archive" mkdir -p "$TMP_DIR/extracted" extract_archive "$archive" "$TMP_DIR/extracted" SOURCE_DIR="$(find "$TMP_DIR/extracted" -type f -name AUTORUN.INF -printf '%h\n' | head -n 1 || true)" fi [[ -n "$SOURCE_DIR" ]] || { echo "one of --source-dir or --archive-url is required" >&2; exit 1; } [[ -d "$SOURCE_DIR" ]] || { echo "source directory does not exist: $SOURCE_DIR" >&2; exit 1; } [[ -f "$SOURCE_DIR/AUTORUN.INF" ]] || { echo "missing AUTORUN.INF in source directory" >&2; exit 1; } [[ -d "$SOURCE_DIR/MICROD" ]] || { echo "missing MICROD/ in source directory" >&2; exit 1; } rm -rf "$INSTALL_DIR" mkdir -p "$INSTALL_DIR" cp -a "$SOURCE_DIR"/. "$INSTALL_DIR"/ echo "installed MicroDicom assets -> $INSTALL_DIR" cat <