#!/bin/bash # Build osdialog static library for Linux (zenity backend) set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" OSDIALOG_DIR="$SCRIPT_DIR/vendor/osdialog" OUTPUT_DIR="$SCRIPT_DIR/build" mkdir -p "$OUTPUT_DIR" ensure_osdialog_submodule() { if [ -f "$OSDIALOG_DIR/osdialog.c" ] && [ -f "$OSDIALOG_DIR/osdialog_zenity.c" ]; then return 0 fi echo "osdialog sources not found at: $OSDIALOG_DIR" echo "Attempting to initialize git submodules..." if command -v git >/dev/null 2>&1; then git -C "$REPO_ROOT" submodule update --init --recursive odin/vendor/osdialog || true fi if [ ! -f "$OSDIALOG_DIR/osdialog.c" ] || [ ! -f "$OSDIALOG_DIR/osdialog_zenity.c" ]; then echo "error: osdialog submodule is missing. Run: git submodule update --init --recursive" >&2 exit 1 fi } ensure_osdialog_submodule LIB_OUT="$OUTPUT_DIR/libosdialog.a" # Only rebuild if sources changed SOURCES=("$OSDIALOG_DIR/osdialog.c" "$OSDIALOG_DIR/osdialog_zenity.c") NEED_REBUILD=false for src in "${SOURCES[@]}"; do if [ "$src" -nt "$LIB_OUT" ] 2>/dev/null; then NEED_REBUILD=true break fi done if [ "$NEED_REBUILD" = false ] && [ -f "$LIB_OUT" ]; then echo "osdialog already built. Skipping." exit 0 fi echo "Building osdialog (zenity backend)..." for src in "${SOURCES[@]}"; do obj="${OUTPUT_DIR}/$(basename "${src%.c}.o")" echo " CC $src" gcc -c -O2 -std=c99 -I"$OSDIALOG_DIR" "$src" -o "$obj" done if [ "$(uname -s)" = "Darwin" ]; then libtool -static -o "$LIB_OUT" "$OUTPUT_DIR"/osdialog.o "$OUTPUT_DIR"/osdialog_zenity.o else ar rcs "$LIB_OUT" "$OUTPUT_DIR"/osdialog.o "$OUTPUT_DIR"/osdialog_zenity.o fi echo " AR $LIB_OUT" echo "osdialog build complete."