#!/bin/bash # --------------------------------------------------------------------------- # BareCode – Build-Skript # Verwendung: ./bauen.sh [release|debug|clean|install] # --------------------------------------------------------------------------- set -e SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" cd "$SCRIPT_DIR" BUILD_TYPE="${1:-release}" BUILD_DIR="build" # Farben RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' info() { echo -e "${BLUE}==>${NC} $1"; } success() { echo -e "${GREEN}==>${NC} $1"; } warn() { echo -e "${YELLOW}==>${NC} $1"; } error() { echo -e "${RED}==>${NC} $1"; exit 1; } # --------------------------------------------------------------------------- # clean # --------------------------------------------------------------------------- if [ "$BUILD_TYPE" = "clean" ]; then info "Build-Verzeichnis wird gelöscht…" rm -rf "$BUILD_DIR" success "Fertig." exit 0 fi # --------------------------------------------------------------------------- # Abhängigkeiten prüfen # --------------------------------------------------------------------------- info "Prüfe Abhängigkeiten…" command -v cmake &>/dev/null || error "cmake nicht gefunden. Installation: sudo pacman -S cmake" command -v ninja &>/dev/null || error "ninja nicht gefunden. Installation: sudo pacman -S ninja" command -v lrelease &>/dev/null || \ command -v lrelease-qt6 &>/dev/null || \ error "lrelease nicht gefunden. Installation: sudo pacman -S qt6-tools" # Qt6 prüfen if ! pkg-config --exists Qt6Core 2>/dev/null; then if ! cmake --find-package -DNAME=Qt6 -DCOMPILER_ID=GNU \ -DLANGUAGE=CXX -DMODE=EXIST &>/dev/null 2>&1; then warn "Qt6 konnte nicht automatisch geprüft werden — cmake wird es versuchen." fi fi success "Abhängigkeiten OK." # --------------------------------------------------------------------------- # CMake-Build-Typ # --------------------------------------------------------------------------- case "$BUILD_TYPE" in release|Release) CMAKE_BUILD_TYPE="Release" ;; debug|Debug) CMAKE_BUILD_TYPE="Debug" ;; install) CMAKE_BUILD_TYPE="Release" ;; *) error "Unbekannter Build-Typ: '$BUILD_TYPE'. Erlaubt: release, debug, clean, install" ;; esac # --------------------------------------------------------------------------- # Konfigurieren # --------------------------------------------------------------------------- info "Konfiguriere mit CMake (${CMAKE_BUILD_TYPE})…" cmake -B "$BUILD_DIR" \ -G Ninja \ -DCMAKE_BUILD_TYPE="$CMAKE_BUILD_TYPE" \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ 2>&1 || error "CMake-Konfiguration fehlgeschlagen." success "Konfiguration OK." # --------------------------------------------------------------------------- # Bauen # --------------------------------------------------------------------------- JOBS=$(nproc 2>/dev/null || sysctl -n hw.logicalcpu 2>/dev/null || echo 4) info "Baue mit $JOBS parallelen Jobs…" cmake --build "$BUILD_DIR" -j"$JOBS" 2>&1 || error "Build fehlgeschlagen." success "Build erfolgreich!" # --------------------------------------------------------------------------- # Installieren (optional) # --------------------------------------------------------------------------- if [ "$BUILD_TYPE" = "install" ]; then info "Installiere nach /usr (sudo erforderlich)…" sudo cmake --install "$BUILD_DIR" || error "Installation fehlgeschlagen." success "BareCode wurde installiert." echo "" echo " Starten: BareCode" exit 0 fi # --------------------------------------------------------------------------- # Fertig # --------------------------------------------------------------------------- BINARY="$BUILD_DIR/BareCode" if [ -f "$BINARY" ]; then # .qm-Dateien neben die Binary kopieren damit sie gefunden werden mkdir -p "$BUILD_DIR/translations" if compgen -G "$BUILD_DIR/translations/barecode_*.qm" > /dev/null 2>&1; then success "Übersetzungen bereits vorhanden." else # Aus dem cmake-Zwischenverzeichnis holen find "$BUILD_DIR" -name "barecode_*.qm" -not -path "$BUILD_DIR/translations/*" \ -exec cp {} "$BUILD_DIR/translations/" \; 2>/dev/null || true fi echo "" success "BareCode ist bereit:" echo " Starten: ./$BINARY" echo " Installieren: ./bauen.sh install" echo " Debug-Build: ./bauen.sh debug" echo " Aufräumen: ./bauen.sh clean" fi