2018-01-14 01:18:50 +00:00
|
|
|
#!/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 "
|
|
|
|
|
2018-01-24 01:13:37 +00:00
|
|
|
# for libembroidery
|
|
|
|
pyinstaller_args+="-p embroidermodder/experimental/python/binding "
|
|
|
|
|
2018-01-14 01:18:50 +00:00
|
|
|
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
|