Files
hcie-rust-v3.05/run-qt.sh
2026-07-09 02:59:53 +03:00

106 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
# run-qt.sh — Build and run the HCIE Qt6 image editor.
#
# Usage:
# ./run-qt.sh — build + run
# ./run-qt.sh build — build only
# ./run-qt.sh run — run only (skip build)
# ./run-qt.sh clean — clean build directory
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
QT_DIR="$SCRIPT_DIR/hcie-qt-app"
BUILD_DIR="$QT_DIR/build"
# ── Colors ────────────────────────────────────────────────────────────────
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m'
info() { echo -e "${CYAN}[INFO]${NC} $*"; }
ok() { echo -e "${GREEN}[OK]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
err() { echo -e "${RED}[ERROR]${NC} $*"; }
# ── Engine static library check ───────────────────────────────────────────
ENGINE_LIB="$SCRIPT_DIR/target/debug/libhcie_engine_api.a"
ensure_engine_lib() {
if [ ! -f "$ENGINE_LIB" ]; then
warn "Engine static library not found at $ENGINE_LIB"
info "Building engine with cargo..."
cargo build -p hcie-engine-api 2>&1
if [ ! -f "$ENGINE_LIB" ]; then
err "Failed to build engine library. Aborting."
exit 1
fi
ok "Engine library built."
fi
}
# ── Build ─────────────────────────────────────────────────────────────────
do_build() {
info "Ensuring engine static library exists..."
ensure_engine_lib
info "Configuring CMake..."
mkdir -p "$BUILD_DIR"
cmake -S "$QT_DIR" -B "$BUILD_DIR" \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
info "Building hcie-qt..."
cmake --build "$BUILD_DIR" -j"$(nproc 2>/dev/null || echo 4)"
ok "Build complete: $BUILD_DIR/hcie-qt"
}
# ── Run ───────────────────────────────────────────────────────────────────
do_run() {
BINARY="$BUILD_DIR/hcie-qt"
if [ ! -f "$BINARY" ]; then
err "Binary not found at $BINARY. Run './run-qt.sh build' first."
exit 1
fi
# Detect display server
if [ -n "$DISPLAY" ] || [ -n "$WAYLAND_DISPLAY" ]; then
info "Launching hcie-qt (windowed mode)..."
exec "$BINARY" "$@"
else
info "No display detected. Launching in offscreen mode..."
info "Press Ctrl+C to quit."
QT_QPA_PLATFORM=offscreen exec "$BINARY" "$@"
fi
}
# ── Clean ─────────────────────────────────────────────────────────────────
do_clean() {
info "Removing build directory..."
rm -rf "$BUILD_DIR"
ok "Clean complete."
}
# ── Main ──────────────────────────────────────────────────────────────────
ACTION="${1:-all}"
case "$ACTION" in
build)
do_build
;;
run)
do_run
;;
clean)
do_clean
;;
all|*)
do_build
echo ""
do_run
;;
esac