#!/bin/sh

# Use the same verbose variable as CMake
[ "$VERBOSE" = "1" ] && set -x

# Exit on unset variables or pipe errors
set -uo pipefail

B_MACOS="Barrier.app/Contents/MacOS"
B_VERSION="@BARRIER_VERSION@"
B_BINDIR="@CMAKE_RUNTIME_OUTPUT_DIRECTORY@"
B_BUILDTYPE="@CMAKE_BUILD_TYPE@"
B_BARRIERC="Barrier.app/Contents/MacOS/barrierc"
B_BARRIERS="Barrier.app/Contents/MacOS/barriers"

# Colorized output
info() { tput bold; echo "$@"; tput sgr0 ; }
error() { tput bold; tput setaf 1; echo "$@"; tput sgr0 ; }
success() { tput bold; tput setaf 2; echo "$@"; tput sgr0 ; }
warn() { tput bold; tput setaf 3; echo "$@"; tput sgr0 ; }

info "Checking for bundle contents"
if [ ! -d "Barrier.app/Contents" ]; then
    error "Please make sure that the build completed successfully"
    error "before trying to create the installer."
    exit 1
fi

if [ -d "$B_MACOS" ]; then
    info "Removing old binaries from bundle"
    rm -r "$B_MACOS"
fi

info "Copying binaries into bundle"
# Copy the folder instead of globbing unquoted path
cp -r "$B_BINDIR" "$B_MACOS" || exit 1

# Check for macdeployqt on MacPorts
if which -s port ; then
    info "MacPorts found, searching for macdeployqt"
    DEPLOYQT="$(port contents qt5-qttools | grep --only --max-count 1 '/.*macdeployqt')"
    if [ ! -x "$DEPLOYQT" ]; then
        error "Please install package qt5-qttools"
        exit 1
    fi
fi

# Check for macdeployqt on Homebrew
if which -s brew ; then
    info "Homebrew found, searching for macdeployqt"
    DEPLOYQT="$(brew list qt@5 | grep --only '/.*macdeployqt' | head -1)"
    if [ ! -x "$DEPLOYQT" ]; then
        error "Please install package qt"
        exit 1
    fi
fi

# Use macdeployqt to include libraries and create dmg
if [ "$B_BUILDTYPE" = "Release" ]; then
    info "Building Release disk image (dmg)"
    "$DEPLOYQT" Barrier.app -dmg \
    -executable="$B_BARRIERC" \
    -executable="$B_BARRIERS" || exit 1
    mv "Barrier.dmg" "Barrier-$B_VERSION.dmg" || exit 1
    success "Created Barrier-$B_VERSION.dmg"
else
    warn "Disk image (dmg) only created for Release builds"
    info "Building debug bundle"
    "$DEPLOYQT" Barrier.app -no-strip \
    -executable="$B_BARRIERC" \
    -executable="$B_BARRIERS" || exit 1
    success "Bundle created successfully"
fi
