summaryrefslogtreecommitdiff
path: root/bin/build-dist
diff options
context:
space:
mode:
Diffstat (limited to 'bin/build-dist')
-rwxr-xr-xbin/build-dist39
1 files changed, 39 insertions, 0 deletions
diff --git a/bin/build-dist b/bin/build-dist
new file mode 100755
index 00000000..f3090178
--- /dev/null
+++ b/bin/build-dist
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+site_packages="$(python -c "import os; print(os.path.dirname(os.__file__) + '/site-packages')")"
+
+# pyinstaller misses these two
+pyinstaller_args+="--add-binary /usr/lib/x86_64-linux-gnu/gio/modules/libgiolibproxy.so:. "
+pyinstaller_args+="--add-binary /usr/lib/x86_64-linux-gnu/libproxy.so.1:. "
+
+# This one's tricky. ink/stitch doesn't actually _use_ gi.repository.Gtk,
+# but it does use GTK (through wxPython). pyinstaller has some special
+# logic to handle GTK apps that is engaged when you import
+# gi.repository.Gtk that pulls in things like themes, icons, etc. Without
+# that, the Params dialog is unthemed and barely usable. This hidden
+# import option is actually the only reason we had to install python-gi
+# above!
+pyinstaller_args+="--hidden-import gi.repository.Gtk "
+
+# This lets pyinstaller see inkex.py, etc.
+pyinstaller_args+="-p /usr/share/inkscape/extensions "
+
+mkdir -p dist/inkstitch/bin
+for extension in "$@"; do
+ # without the LD_LIBRARY_PATH, it seems that pyinstaller can't find all of
+ # wxpython's shared libraries
+ LD_LIBRARY_PATH="${site_packages}/wx" pyinstaller $pyinstaller_args ${extension}.py;
+
+ # By default, pyinstaller will treat each of ink/stitch's extensions
+ # separately. This means it packages a lot of the same shared libraries (like
+ # wxPython) multiple times. Turns out that we can just copy the contents of
+ # the directories pyinstaller creates into one and it works fine, eliminating
+ # the duplication. This significantly decreases the size of the inkstitch
+ # tarball/zip.
+ cp -a dist/${extension}/* dist/inkstitch/bin
+ rm -rf dist/${extension}
+
+ # Inkscape doesn't let us run native binaries as extensions(?!). Instead we
+ # add this stub script which executes the binaries that pyinstaller creates.
+ cp stub.py dist/${extension}.py
+done