#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" INSTALL_DIR="${INSTALL_DIR:-$ROOT_DIR/.local/dcmtk-bin}" REQUIRED_BINS=(storescp movescu storescu findscu dcmdump dcmodify getscu echoscu dcmj2pnm) usage() { cat <<'EOF' Usage: scripts/setup-dcmtk.sh [--source-dir DIR] [--install-dir DIR] Behavior: - Copies required DCMTK binaries into a local ignored directory. - If --source-dir is omitted, binaries are resolved from PATH. Examples: scripts/setup-dcmtk.sh --source-dir /opt/dcmtk/bin scripts/setup-dcmtk.sh --install-dir /data/dcmtk-bin EOF } SOURCE_DIR="" while [[ $# -gt 0 ]]; do case "$1" in --source-dir) SOURCE_DIR="${2:?missing value for --source-dir}" 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 mkdir -p "$INSTALL_DIR" resolve_bin() { local name="$1" if [[ -n "$SOURCE_DIR" ]]; then local candidate="$SOURCE_DIR/$name" [[ -x "$candidate" ]] || { echo "missing executable: $candidate" >&2; return 1; } printf '%s\n' "$candidate" return 0 fi command -v "$name" >/dev/null 2>&1 || { echo "binary not found in PATH: $name" >&2; return 1; } command -v "$name" } for bin in "${REQUIRED_BINS[@]}"; do src="$(resolve_bin "$bin")" install -m 0755 "$src" "$INSTALL_DIR/$bin" echo "installed $bin -> $INSTALL_DIR/$bin" done cat <