Files
path-juggler/build_app_debug.sh

121 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
#
# Debug build script for Path Juggler
# Creates a standalone macOS .app bundle using Nuitka with debug output
#
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
APP_NAME="Path Juggler Debug"
BUNDLE_ID="com.pathjuggler.app.debug"
VENV_DIR="$SCRIPT_DIR/.build_venv"
DIST_DIR="$SCRIPT_DIR/dist"
echo "=== Path Juggler - Debug Build Script ==="
echo "Using Nuitka + PySide6 for a fully self-contained build"
echo ""
# Check for uv
if ! command -v uv &> /dev/null; then
echo "Error: uv is required but not found"
echo ""
echo "Install uv with:"
echo " curl -LsSf https://astral.sh/uv/install.sh | sh"
echo " or: brew install uv"
exit 1
fi
echo "Using uv version: $(uv --version)"
echo ""
# Create virtual environment
echo "=== Creating virtual environment ==="
if [ -d "$VENV_DIR" ]; then
echo "Removing existing build environment..."
rm -rf "$VENV_DIR"
fi
uv venv "$VENV_DIR" --python 3.11
source "$VENV_DIR/bin/activate"
PYTHON_VERSION=$(python -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')
echo "Python version: $PYTHON_VERSION"
# Install build dependencies
echo ""
echo "=== Installing build dependencies ==="
uv pip install --quiet PySide6 watchdog nuitka ordered-set zstandard
echo "Installed packages:"
uv pip list | grep -iE "(pyside6|watchdog|nuitka)" || true
# Build with Nuitka (debug mode - keeps console)
echo ""
echo "=== Building DEBUG application with Nuitka ==="
rm -rf "$DIST_DIR/$APP_NAME.app" 2>/dev/null || true
python -m nuitka \
--standalone \
--macos-create-app-bundle \
--macos-app-name="$APP_NAME" \
--product-name="$APP_NAME" \
--product-version="1.0.0" \
--company-name="Path Juggler" \
--enable-plugin=pyside6 \
--include-module=watchdog.observers \
--include-module=watchdog.observers.fsevents \
--include-module=watchdog.events \
--output-dir="$DIST_DIR" \
--output-filename="$APP_NAME" \
--remove-output \
--assume-yes-for-downloads \
--enable-console \
--debug \
path_juggler_gui.py
# Find the generated app
APP_PATH="$DIST_DIR/path_juggler_gui.app"
FINAL_APP_PATH="$DIST_DIR/$APP_NAME.app"
if [ -d "$APP_PATH" ]; then
mv "$APP_PATH" "$FINAL_APP_PATH"
# Update Info.plist
PLIST="$FINAL_APP_PATH/Contents/Info.plist"
if [ -f "$PLIST" ]; then
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $BUNDLE_ID" "$PLIST" 2>/dev/null || true
/usr/libexec/PlistBuddy -c "Set :CFBundleName $APP_NAME" "$PLIST" 2>/dev/null || true
fi
# Sign
echo ""
echo "=== Signing application (ad-hoc) ==="
codesign --remove-signature "$FINAL_APP_PATH" 2>/dev/null || true
codesign --force --deep --sign - "$FINAL_APP_PATH"
echo "Signature applied"
else
echo "Error: App bundle not found"
ls -la "$DIST_DIR/"
exit 1
fi
# Clean up
echo ""
echo "=== Cleaning up ==="
rm -rf "$DIST_DIR"/*.build 2>/dev/null || true
rm -rf "$DIST_DIR"/*.dist 2>/dev/null || true
deactivate
rm -rf "$VENV_DIR"
echo ""
echo "=== Debug Build complete ==="
echo ""
echo "Debug application created at:"
echo " $FINAL_APP_PATH"
echo ""
echo "Run from terminal to see output:"
echo " \"$FINAL_APP_PATH/Contents/MacOS/$APP_NAME\""