feat: add build-all.sh script for all targets
Compiles photo-converter, all test binaries, and runs ctest. Supports --release/--debug, --clean, --no-gui, --no-tests flags. Auto-detects available CPU cores and skips Qt if not installed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
136
scripts/build-all.sh
Executable file
136
scripts/build-all.sh
Executable file
@@ -0,0 +1,136 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# build-all.sh — Kompiliert alle Targets des photo-converter Projekts
|
||||||
|
#
|
||||||
|
# Verwendung:
|
||||||
|
# ./scripts/build-all.sh [--release|--debug] [--clean] [--no-gui] [--no-tests]
|
||||||
|
#
|
||||||
|
# Optionen:
|
||||||
|
# --release Release-Build (Standard)
|
||||||
|
# --debug Debug-Build
|
||||||
|
# --clean Build-Verzeichnis vor dem Kompilieren löschen
|
||||||
|
# --no-gui GUI-Target überspringen
|
||||||
|
# --no-tests Tests überspringen
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# ── Farben ────────────────────────────────────────────────────────────────────
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
log_info() { echo -e "${BLUE}[build]${NC} $*"; }
|
||||||
|
log_ok() { echo -e "${GREEN}[ok]${NC} $*"; }
|
||||||
|
log_warn() { echo -e "${YELLOW}[warn]${NC} $*"; }
|
||||||
|
log_error() { echo -e "${RED}[error]${NC} $*"; }
|
||||||
|
|
||||||
|
# ── Standardwerte ─────────────────────────────────────────────────────────────
|
||||||
|
BUILD_TYPE="Release"
|
||||||
|
BUILD_DIR="build"
|
||||||
|
BUILD_GUI=ON
|
||||||
|
BUILD_TESTS=ON
|
||||||
|
CLEAN=0
|
||||||
|
JOBS=$(nproc 2>/dev/null || sysctl -n hw.logicalcpu 2>/dev/null || echo 4)
|
||||||
|
|
||||||
|
# ── Argumente parsen ──────────────────────────────────────────────────────────
|
||||||
|
for arg in "$@"; do
|
||||||
|
case "$arg" in
|
||||||
|
--release) BUILD_TYPE="Release" ;;
|
||||||
|
--debug) BUILD_TYPE="Debug"; BUILD_DIR="build-debug" ;;
|
||||||
|
--clean) CLEAN=1 ;;
|
||||||
|
--no-gui) BUILD_GUI=OFF ;;
|
||||||
|
--no-tests) BUILD_TESTS=OFF ;;
|
||||||
|
--help|-h)
|
||||||
|
sed -n '2,12p' "$0" | sed 's/^# \?//'
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
log_error "Unbekannte Option: $arg"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# ── Projektverzeichnis ermitteln ───────────────────────────────────────────────
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
||||||
|
BUILD_PATH="$PROJECT_DIR/$BUILD_DIR"
|
||||||
|
|
||||||
|
cd "$PROJECT_DIR"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
log_info "photo-converter Build"
|
||||||
|
log_info " Typ: $BUILD_TYPE"
|
||||||
|
log_info " Pfad: $BUILD_PATH"
|
||||||
|
log_info " GUI: $BUILD_GUI"
|
||||||
|
log_info " Tests: $BUILD_TESTS"
|
||||||
|
log_info " Jobs: $JOBS"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# ── Sauber bauen ──────────────────────────────────────────────────────────────
|
||||||
|
if [[ $CLEAN -eq 1 && -d "$BUILD_PATH" ]]; then
|
||||||
|
log_info "Lösche $BUILD_PATH ..."
|
||||||
|
rm -rf "$BUILD_PATH"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ── Abhängigkeiten prüfen ─────────────────────────────────────────────────────
|
||||||
|
MISSING=()
|
||||||
|
for dep in cmake ninja pkg-config; do
|
||||||
|
command -v "$dep" &>/dev/null || MISSING+=("$dep")
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ ${#MISSING[@]} -gt 0 ]]; then
|
||||||
|
log_error "Fehlende Tools: ${MISSING[*]}"
|
||||||
|
log_error "Installieren mit: sudo apt install cmake ninja-build pkg-config"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Qt nur prüfen wenn GUI gewünscht
|
||||||
|
if [[ "$BUILD_GUI" == "ON" ]]; then
|
||||||
|
if ! pkg-config --exists Qt6Widgets 2>/dev/null && ! command -v qmake6 &>/dev/null; then
|
||||||
|
log_warn "Qt6 nicht gefunden — baue ohne GUI (--no-gui um Warnung zu unterdrücken)"
|
||||||
|
BUILD_GUI=OFF
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ── CMake konfigurieren ───────────────────────────────────────────────────────
|
||||||
|
log_info "Konfiguriere CMake ..."
|
||||||
|
cmake -B "$BUILD_PATH" \
|
||||||
|
-G Ninja \
|
||||||
|
-DCMAKE_BUILD_TYPE="$BUILD_TYPE" \
|
||||||
|
-DBUILD_GUI="$BUILD_GUI" \
|
||||||
|
-DBUILD_TESTS="$BUILD_TESTS" \
|
||||||
|
2>&1 | sed "s/^/ /"
|
||||||
|
|
||||||
|
log_ok "CMake konfiguriert"
|
||||||
|
|
||||||
|
# ── Kompilieren ───────────────────────────────────────────────────────────────
|
||||||
|
log_info "Kompiliere ($JOBS parallele Jobs) ..."
|
||||||
|
cmake --build "$BUILD_PATH" --parallel "$JOBS" 2>&1 | sed "s/^/ /"
|
||||||
|
|
||||||
|
log_ok "Build erfolgreich"
|
||||||
|
|
||||||
|
# ── Ergebnisse auflisten ──────────────────────────────────────────────────────
|
||||||
|
echo ""
|
||||||
|
log_info "Erzeugte Binaries:"
|
||||||
|
find "$BUILD_PATH" -maxdepth 3 -type f \( -name "photo-converter" -o -name "test_*" \) \
|
||||||
|
| sort \
|
||||||
|
| while read -r f; do
|
||||||
|
size=$(du -sh "$f" 2>/dev/null | cut -f1)
|
||||||
|
echo -e " ${GREEN}✓${NC} $f (${size})"
|
||||||
|
done
|
||||||
|
|
||||||
|
# ── Tests ausführen ───────────────────────────────────────────────────────────
|
||||||
|
if [[ "$BUILD_TESTS" == "ON" ]]; then
|
||||||
|
echo ""
|
||||||
|
log_info "Führe Tests aus ..."
|
||||||
|
if ctest --test-dir "$BUILD_PATH" --output-on-failure -j"$JOBS" 2>&1 | sed "s/^/ /"; then
|
||||||
|
log_ok "Alle Tests bestanden"
|
||||||
|
else
|
||||||
|
log_warn "Einige Tests fehlgeschlagen (Exit-Code wird ignoriert)"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
log_ok "Fertig. Starten mit: $BUILD_PATH/photo-converter --batch --config config.ini"
|
||||||
Reference in New Issue
Block a user