diff options
Diffstat (limited to 'bin/build-dist')
| -rwxr-xr-x | bin/build-dist | 39 |
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 |
