summaryrefslogtreecommitdiffstats
path: root/packaging/macos/220-inkscape_package.sh
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xpackaging/macos/220-inkscape_package.sh184
1 files changed, 184 insertions, 0 deletions
diff --git a/packaging/macos/220-inkscape_package.sh b/packaging/macos/220-inkscape_package.sh
new file mode 100755
index 0000000..02400dc
--- /dev/null
+++ b/packaging/macos/220-inkscape_package.sh
@@ -0,0 +1,184 @@
+#!/usr/bin/env bash
+#
+# SPDX-FileCopyrightText: 2021 René de Hesselle <dehesselle@web.de>
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+### description ################################################################
+
+# Create the application bundle and make everything relocatable.
+
+### shellcheck #################################################################
+
+# Nothing here.
+
+### dependencies ###############################################################
+
+source "$(dirname "${BASH_SOURCE[0]}")"/jhb/etc/jhb.conf.sh
+
+source "$(dirname "${BASH_SOURCE[0]}")"/src/ink.sh
+source "$(dirname "${BASH_SOURCE[0]}")"/src/svg2icns.sh
+
+bash_d_include error
+bash_d_include lib
+
+### variables ##################################################################
+
+SELF_DIR=$(dirname "$(greadlink -f "$0")")
+
+### functions ##################################################################
+
+# Nothing here.
+
+### main #######################################################################
+
+error_trace_enable
+
+#----------------------------------------------------- create application bundle
+
+( # run gtk-mac-bundler
+
+ cp "$SELF_DIR"/src/inkscape.bundle "$INK_BLD_DIR"
+ cp "$SELF_DIR"/res/inkscape.plist "$INK_BLD_DIR"
+
+ cd "$INK_BLD_DIR" || exit 1
+ export ARTIFACT_DIR=$ARTIFACT_DIR # referenced in inkscape.bundle
+ jhb run gtk-mac-bundler inkscape.bundle
+)
+
+# Rename to get from lowercase "i" to capitalized "I" as the app bundle name
+# depends on the main binary (and that was lowercase in 0.9x).
+mv "$INK_APP_DIR" "$INK_APP_DIR".tmp # requires case-insensitive filesysystem
+mv "$INK_APP_DIR".tmp "$INK_APP_DIR"
+
+#----------------------------------------------------- adjust library link paths
+
+# Add rpath according to our app bundle structure.
+lib_clear_rpath "$INK_APP_EXE_DIR"/inkscape
+lib_add_rpath @executable_path/../Resources/lib "$INK_APP_EXE_DIR"/inkscape
+lib_add_rpath @executable_path/../Resources/lib/inkscape \
+ "$INK_APP_EXE_DIR"/inkscape
+
+# Libraries in INK_APP_LIB_DIR can reference each other directly.
+lib_change_siblings "$INK_APP_LIB_DIR"
+
+# Point GTK modules towards INK_APP_LIB_DIR using @loader_path.
+lib_change_paths @loader_path/../../.. "$INK_APP_LIB_DIR" \
+ "$INK_APP_LIB_DIR"/gtk-3.0/3.0.0/immodules/*.so \
+ "$INK_APP_LIB_DIR"/gtk-3.0/3.0.0/printbackends/*.so
+
+# Point enchant's applespell plugin towards INK_APP_LIB_DIR using @loader_path.
+lib_change_paths @loader_path/.. "$INK_APP_LIB_DIR" \
+ "$INK_APP_LIB_DIR"/enchant-2/enchant_applespell.so
+
+# Point Ghostscript towards INK_APP_LIB_DIR using @executable_path.
+lib_change_paths \
+ @executable_path/../lib \
+ "$INK_APP_LIB_DIR" \
+ "$INK_APP_BIN_DIR"/gs
+
+#------------------------------------------------------ use rpath in cache files
+
+sed -i '' \
+ 's|@executable_path/../Resources/lib|@rpath|g' \
+ "$INK_APP_LIB_DIR"/gtk-3.0/3.0.0/immodules.cache
+sed -i '' \
+ 's|@executable_path/../Resources/lib|@rpath|g' \
+ "$INK_APP_LIB_DIR"/gdk-pixbuf-2.0/2.10.0/loaders.cache
+
+#------------------------------------------------------------- modify Info.plist
+
+# update Inkscape version information
+/usr/libexec/PlistBuddy \
+ -c "Set CFBundleShortVersionString '$(ink_get_version)'" \
+ "$INK_APP_PLIST"
+/usr/libexec/PlistBuddy \
+ -c "Set CFBundleVersion '$INK_BUILD'" \
+ "$INK_APP_PLIST"
+
+# update minimum system version according to deployment target
+/usr/libexec/PlistBuddy \
+ -c "Set LSMinimumSystemVersion $SYS_SDK_VER" \
+ "$INK_APP_PLIST"
+
+# add some metadata to make CI identifiable
+if $CI_GITLAB; then
+ for var in PROJECT_NAME PROJECT_URL COMMIT_BRANCH COMMIT_SHA COMMIT_SHORT_SHA\
+ JOB_ID JOB_URL JOB_NAME PIPELINE_ID PIPELINE_URL; do
+ # use awk to create camel case strings (e.g. PROJECT_NAME to ProjectName)
+ /usr/libexec/PlistBuddy -c "Add CI$(\
+ echo $var | awk -F _ '{
+ for (i=1; i<=NF; i++)
+ printf "%s", toupper(substr($i,1,1)) tolower(substr($i,2))
+ }'
+ ) string $(eval echo \$CI_$var)" "$INK_APP_PLIST"
+ done
+fi
+
+#----------------------------------------------------- generate application icon
+
+svg2icns \
+ "$INK_DIR"/share/branding/inkscape-mac.svg \
+ "$INK_APP_RES_DIR"/inkscape.icns
+
+#----------------------------------------------------------- add file type icons
+
+cp "$INK_DIR"/packaging/macos/res/*.icns "$INK_APP_RES_DIR"
+
+#------------------------------------------------------- add Python and packages
+
+# Install externally built Python framework.
+ink_install_python
+
+# Add rpath to find libraries.
+lib_add_rpath @executable_path/../../../../../Resources/lib \
+ "$INK_APP_FRA_DIR"/Python.framework/Versions/Current/bin/\
+python"$INK_PYTHON_VER"
+lib_add_rpath @executable_path/../../../../../../../../Resources/lib \
+ "$INK_APP_FRA_DIR"/Python.framework/Versions/Current/Resources/\
+Python.app/Contents/MacOS/Python
+
+# Install wheels.
+ink_pipinstall INK_PYTHON_PKG_APPDIRS # extension manager
+ink_pipinstall INK_PYTHON_PKG_BEAUTIFULSOUP4 # extension manager
+ink_pipinstall INK_PYTHON_PKG_CACHECONTROL # extension manager
+ink_pipinstall INK_PYTHON_PKG_CSSSELECT
+ink_pipinstall INK_PYTHON_PKG_LXML
+ink_pipinstall INK_PYTHON_PKG_NUMPY
+ink_pipinstall INK_PYTHON_PKG_PILLOW # export raster extension
+ink_pipinstall INK_PYTHON_PKG_PYGOBJECT
+ink_pipinstall INK_PYTHON_PKG_PYSERIAL
+ink_pipinstall INK_PYTHON_PKG_SCOUR
+
+#----------------------------------------------------- remove Python cache files
+
+rm -rf "$INK_APP_RES_DIR"/share/glib-2.0/codegen/__pycache__
+
+#-------------------------------------------------- add fontconfig configuration
+
+# Mimic the behavior of having all files under 'share' and linking the
+# active ones to 'etc'.
+cd "$INK_APP_ETC_DIR"/fonts/conf.d || exit 1
+
+for file in ./*.conf; do
+ ln -sf ../../../share/fontconfig/conf.avail/"$(basename "$file")" .
+done
+
+# Our customized version loses all the non-macOS paths and sets a cache
+# directory below '$HOME/Library/Application Support/Inkscape'.
+cp "$SELF_DIR"/res/fonts.conf "$INK_APP_ETC_DIR"/fonts
+
+#-------------------------------- use rpath for GObject introspection repository
+
+for gir in "$INK_APP_RES_DIR"/share/gir-1.0/*.gir; do
+ sed "s|@executable_path/..|@rpath|g" "$gir" > "$TMP_DIR/$(basename "$gir")"
+done
+
+mv "$TMP_DIR"/*.gir "$INK_APP_RES_DIR"/share/gir-1.0
+
+# compile *.gir into *.typelib files
+for gir in "$INK_APP_RES_DIR"/share/gir-1.0/*.gir; do
+ jhb run g-ir-compiler \
+ -o "$INK_APP_LIB_DIR/girepository-1.0/$(basename -s .gir "$gir")".typelib \
+ "$gir"
+done