summaryrefslogtreecommitdiff
path: root/bin/build-dist
blob: a1fa82d9b5be1e5cdf5d6320bb40744317a90596 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/bin/bash

set -e

site_packages="$(python -c "import os; print(os.path.dirname(os.__file__) + '/site-packages')")"

if [ "$TRAVIS_OS_NAME" = "linux" -a "$BUILD" != "windows" ]; then
    # 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:. "
fi

# 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 "

# mac and windows build seem to miss wx and libembroidery import
pyinstaller_args+="--hidden-import wx --hidden-import libembroidery "

if [ -d windows-libembroidery ]; then
    pyinstaller_args+="-p windows-libembroidery "
else
    pyinstaller_args+="-p embroidermodder/experimental/python/binding "
fi

# This lets pyinstaller see inkex.py, etc.
pyinstaller_args+="-p inkscape-0.92.2/share/extensions "

# output useful debugging info that helps us trace library dependency issues
pyinstaller_args+="--log-level DEBUG "

mkdir -p dist/inkstitch/bin
for extension in "$@"; do
    if [ "$BUILD" = "windows" ]; then
        wine c:\\Python\\scripts\\pyinstaller.exe $pyinstaller_args ${extension}.py
    else
        # 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;
    fi

	# 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