From 48adcf33ee30ca06647a9604fb3ce39642f7b165 Mon Sep 17 00:00:00 2001 From: Keith Smith Date: Tue, 8 Sep 2026 13:29:35 -0600 Subject: [PATCH] packaging: add macOS dmg build script Co-Authored-By: Claude Sonnet 5 --- packaging/macos/build-dmg.sh | 51 ++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100755 packaging/macos/build-dmg.sh diff --git a/packaging/macos/build-dmg.sh b/packaging/macos/build-dmg.sh new file mode 100755 index 0000000..9857ef2 --- /dev/null +++ b/packaging/macos/build-dmg.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +BUILD_DIR="${1:-$ROOT_DIR/build}" +DIST_DIR="${2:-$ROOT_DIR/dist/macos}" +STAGE_DIR="$DIST_DIR/dmg-staging" +INSTALL_PREFIX="$DIST_DIR/install" +APP_BUNDLE="OrbitHub.app" + +if [[ ! -f "$BUILD_DIR/CMakeCache.txt" ]]; then + echo "Build directory not configured: $BUILD_DIR" >&2 + echo "Run: cmake -S \"$ROOT_DIR\" -B \"$BUILD_DIR\" -G Ninja" >&2 + exit 1 +fi + +VERSION="$(sed -n 's/^CMAKE_PROJECT_VERSION:STATIC=//p' "$BUILD_DIR/CMakeCache.txt" | head -n1)" +if [[ -z "$VERSION" ]]; then + echo "Unable to determine project version from $BUILD_DIR/CMakeCache.txt" >&2 + exit 1 +fi + +MACDEPLOYQT="$(brew --prefix qt@6)/bin/macdeployqt" +if [[ ! -x "$MACDEPLOYQT" ]]; then + echo "macdeployqt not found at $MACDEPLOYQT" >&2 + echo "Install it: brew install qt@6" >&2 + exit 1 +fi + +mkdir -p "$DIST_DIR" +rm -rf "$STAGE_DIR" "$INSTALL_PREFIX" +mkdir -p "$STAGE_DIR" + +cmake --build "$BUILD_DIR" -j +cmake --install "$BUILD_DIR" --prefix "$INSTALL_PREFIX" + +if [[ ! -d "$INSTALL_PREFIX/$APP_BUNDLE" ]]; then + echo "Expected app bundle not found: $INSTALL_PREFIX/$APP_BUNDLE" >&2 + exit 1 +fi + +"$MACDEPLOYQT" "$INSTALL_PREFIX/$APP_BUNDLE" + +cp -R "$INSTALL_PREFIX/$APP_BUNDLE" "$STAGE_DIR/$APP_BUNDLE" +ln -s /Applications "$STAGE_DIR/Applications" + +OUTPUT_DMG="$DIST_DIR/OrbitHub-${VERSION}.dmg" +rm -f "$OUTPUT_DMG" +hdiutil create -volname "OrbitHub" -srcfolder "$STAGE_DIR" -ov -format UDZO "$OUTPUT_DMG" + +echo "Created $OUTPUT_DMG"