#!/usr/dbpware/bin/bash # Usage: ./build-package.sh set -e PKG="$1" if [ -z "$PKG" ]; then echo "Usage: $0 " exit 1 fi # --- Host-level lock --- LOCKDIR="/tmp/build-host.lock" while ! mkdir "$LOCKDIR" 2>/dev/null; do echo "Another build is running on this host. Waiting..." sleep 10 done trap "rmdir '$LOCKDIR'" EXIT echo "Acquired host lock, starting build of $PKG" # --- Navigate to package directory --- cd "$BUILDPKG_BASE/$PKG" # --- Read package metadata from build.sh --- topdir=$(ggrep -E '^topdir=' build.sh | cut -d= -f2) version=$(ggrep -E '^version=' build.sh | cut -d= -f2) pkgver=$(ggrep -E '^pkgver=' build.sh | cut -d= -f2) secname="$topdir" # --- Check if package already exists --- PKGFILE=$(ls -1 ${secname}-${version}-${pkgver}.dbp*.gz 2>/dev/null | head -n1 || true) if [ -n "$PKGFILE" ]; then echo "Package already built: $PKGFILE. Skipping." exit 0 fi # --- Run the build --- LOGFILE=$(bash build.sh all 2>&1 | tee /tmp/build-$secname.log | ggrep -oE '[^ ]+\.log' | gtail -n1) if [ -n "$LOGFILE" ] && [ -f "$LOGFILE" ]; then echo "Tailing logfile: $LOGFILE" gtail -f "$LOGFILE" & TAIL_PID=$! else echo "ERROR: No logfile detected for $PKG" exit 1 fi wait -n EXIT_CODE=$? kill $TAIL_PID || true if [ $EXIT_CODE -eq 0 ]; then echo "Build succeeded for $PKG, deleting logfile." rm -f "$LOGFILE" || true else echo "Build FAILED for $PKG, keeping logfile: $LOGFILE" exit $EXIT_CODE fi echo "=== Finished build of $PKG ==="