move deploy process to a shell script

This commit is contained in:
uncor3
2025-11-16 20:36:27 -08:00
parent 02df9bb863
commit 3cec540e45
2 changed files with 160 additions and 82 deletions
+157
View File
@@ -0,0 +1,157 @@
#!/bin/bash
set -euo pipefail
ARCH="${1:-x86_64}"
BUILD_DIR="build"
APP_PATH="${BUILD_DIR}/iDescriptor.app"
echo "Starting deployment for architecture: ${ARCH}"
# Deploy Qt dependencies
echo "Deploying Qt dependencies..."
macdeployqt "${APP_PATH}" -qmldir=qml -verbose=2
# Bundle GStreamer
echo "Bundling GStreamer..."
GST_PLUGIN_DIR="${APP_PATH}/Contents/Frameworks/gstreamer"
mkdir -p "${GST_PLUGIN_DIR}"
PLUGINS=(
"libgstapp"
"libgstaudioconvert"
"libgstautodetect"
"libgstavi"
"libgstcoreelements"
"libgstlevel"
"libgstlibav"
"libgstosxaudio"
"libgstplayback"
"libgstvolume"
)
for plugin in "${PLUGINS[@]}"; do
cp "$(brew --prefix gstreamer)/lib/gstreamer-1.0/${plugin}.dylib" "${GST_PLUGIN_DIR}/"
done
cp "$(brew --prefix gstreamer)/libexec/gstreamer-1.0/gst-plugin-scanner" "${APP_PATH}/Contents/Frameworks/"
# Bundle libjxl_cms
echo "Bundling libjxl_cms..."
cp "$(brew --prefix)/lib/libjxl_cms.0.11.dylib" "${APP_PATH}/Contents/Frameworks/"
install_name_tool -id "@rpath/libjxl_cms.0.11.dylib" "${APP_PATH}/Contents/Frameworks/libjxl_cms.0.11.dylib"
install_name_tool -change "$(brew --prefix)/lib/libjxl_cms.0.11.dylib" "@rpath/libjxl_cms.0.11.dylib" "${APP_PATH}/Contents/Frameworks/libjxl.0.11.dylib"
# Add rpath to main executable
echo "Adding rpath to main executable..."
install_name_tool -add_rpath "@executable_path/../Frameworks" "${APP_PATH}/Contents/MacOS/iDescriptor"
# Fix GStreamer library paths
echo "Fixing GStreamer library paths..."
FRAMEWORKS_DIR="${APP_PATH}/Contents/Frameworks"
BREW_PREFIX="$(brew --prefix)"
# Copy GStreamer core libraries
GST_LIBS=(
"libgstreamer-1.0.0.dylib"
"libgstbase-1.0.0.dylib"
"libgstaudio-1.0.0.dylib"
"libgstvideo-1.0.0.dylib"
"libgstapp-1.0.0.dylib"
"libgstpbutils-1.0.0.dylib"
"libgsttag-1.0.0.dylib"
"libgstriff-1.0.0.dylib"
"libgstcodecparsers-1.0.0.dylib"
"libglib-2.0.0.dylib"
"libgobject-2.0.0.dylib"
"libgmodule-2.0.0.dylib"
"libgio-2.0.0.dylib"
"libgthread-2.0.0.dylib"
)
for lib in "${GST_LIBS[@]}"; do
if [ -f "${BREW_PREFIX}/lib/${lib}" ]; then
cp "${BREW_PREFIX}/lib/${lib}" "${FRAMEWORKS_DIR}/"
install_name_tool -id "@rpath/${lib}" "${FRAMEWORKS_DIR}/${lib}"
echo "Copied and fixed ID for ${lib}"
fi
done
# For some reason libavfilter sometimes doesnt get copied by macdeployqt
FFMPEG_LIB_DIR="$(brew --prefix ffmpeg)/lib"
cp "${FFMPEG_LIB_DIR}"/libavfilter.*.dylib "${FRAMEWORKS_DIR}/"
# Copy additional audio-related libraries that are missing
echo "Bundling additional audio libraries..."
ADDITIONAL_LIBS=(
"libarchive.13.dylib"
"libass.9.dylib"
"libb2.1.dylib"
"libfribidi.0.dylib"
"libgif.dylib"
"libgraphite2.3.dylib"
"libharfbuzz.0.dylib"
"libjpeg.8.dylib"
"liblcms2.2.dylib"
"libleptonica.6.dylib"
"liblz4.1.dylib"
"librubberband.3.dylib"
"libsamplerate.0.dylib"
"libtesseract.5.dylib"
"libtiff.6.dylib"
"libunibreak.6.dylib"
"libvidstab.1.2.dylib"
"libzimg.2.dylib"
)
for lib in "${ADDITIONAL_LIBS[@]}"; do
if [ -f "${BREW_PREFIX}/lib/${lib}" ]; then
cp "${BREW_PREFIX}/lib/${lib}" "${FRAMEWORKS_DIR}/"
install_name_tool -id "@rpath/${lib}" "${FRAMEWORKS_DIR}/${lib}"
else
echo "Warning: ${lib} not found, skipping..."
fi
done
# Fix dependencies in all GStreamer plugins
echo "Fixing GStreamer plugin dependencies..."
for plugin in "${GST_PLUGIN_DIR}"/*.dylib; do
echo "Fixing plugin: $(basename "${plugin}")"
# Get all dependencies and fix them
otool -L "${plugin}" | grep -E "${BREW_PREFIX}" | awk '{print $1}' | while read dep; do
depname=$(basename "${dep}")
echo " Changing ${depname}"
install_name_tool -change "${dep}" "@rpath/${depname}" "${plugin}" 2>/dev/null || true
done
done
# Fix dependencies in GStreamer core libraries themselves
echo "Fixing GStreamer core library dependencies..."
for lib in "${FRAMEWORKS_DIR}"/libgst*.dylib "${FRAMEWORKS_DIR}"/libglib*.dylib "${FRAMEWORKS_DIR}"/libgobject*.dylib "${FRAMEWORKS_DIR}"/libgmodule*.dylib "${FRAMEWORKS_DIR}"/libgio*.dylib "${FRAMEWORKS_DIR}"/libgthread*.dylib; do
if [ -f "${lib}" ]; then
echo "Fixing library: $(basename "${lib}")"
otool -L "${lib}" | grep -E "${BREW_PREFIX}" | awk '{print $1}' | while read dep; do
depname=$(basename "${dep}")
echo " Changing ${depname}"
install_name_tool -change "${dep}" "@rpath/${depname}" "${lib}" 2>/dev/null || true
done
fi
done
# Create DMG
echo "Creating DMG..."
create-dmg \
--volname "iDescriptor" \
--volicon "resources/icons/app-icon/icon.icns" \
--window-pos 200 120 \
--window-size 600 400 \
--icon-size 100 \
--icon "iDescriptor.app" 175 190 \
--hide-extension "iDescriptor.app" \
--app-drop-link 425 190 \
"${BUILD_DIR}/iDescriptor-macOS-${ARCH}.dmg" \
"${APP_PATH}"
echo "Deployment complete for architecture: ${ARCH}"