summaryrefslogtreecommitdiff
path: root/bin/build-python
blob: ab0e3c27e212a1d9ec66b8c7fbf8036cebaac36e (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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/bin/bash

set -e
info_year=$( date "+%Y" )
site_packages="$(python -c "import os; print(os.path.dirname(os.__file__) + '/site-packages')")"
arch=$(uname -m)
if [ "$BUILD" = "linux" ]; then
    pyinstaller_args+="--add-binary /usr/lib/"$arch"-linux-gnu/gio/modules/libgiolibproxy.so:. "
    pyinstaller_args+="--add-binary  /usr/lib/"$arch"-linux-gnu/libproxy.so.1:. "
    pyinstaller_args+="--add-binary  /lib/"$arch"-linux-gnu/libnsl.so.1:. "
    pyinstaller_args+="--add-binary  /usr/lib/"$arch"-linux-gnu/libxcb.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 import
pyinstaller_args+="--hidden-import wx "

# We need to use the precompiled bootloader linked with graphical Mac OS X
# libraries if we develop a GUI application for Mac:
if [ "$BUILD" = "osx" -o "$BUILD" = "windows" ]; then
    pyinstaller_args+="--windowed "
fi

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

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

# This adds bundle identifier in reverse DSN format for macos
if [ "$BUILD" = "osx" ]; then
    pyinstaller_args+="--osx-bundle-identifier org.inkstitch.app "
    pyinstaller_args+="-i electron/build/icons/mac/inkstitch.icns"
    if [[ -z ${GITHUB_REF} ]]; then
        echo "Dev or Local Build"
    else
        bash bin/import-macos-keys
    fi
fi

if [ "$BUILD" = "windows" ]; then
	if [[ "$VERSION" =~ ^v[0-9][.0-9]+$ ]]; then
		# setting the file and product version for release
		# Code to remove the periods in the version number
		ENT=.
		SAL=${VERSION#v}$ENT
		INFO_VERSION=()
		while [[ $SAL ]]; do
			INFO_VERSION+=( "${SAL%%"$ENT"*}" );
			SAL=${SAL#*"$ENT"};
		done;
		sed -i'' 's/3, 2, 1,/'"${INFO_VERSION[0]}, ${INFO_VERSION[1]}, ${INFO_VERSION[2]},"'/' installer_scripts/file_version_info.txt
	fi
	 # set year and version in version_info
	sed -i'' 's/1.1.1/'"${VERSION#v}"'/' installer_scripts/file_version_info.txt
	sed -i'' 's/1234/'"${info_year}"'/' installer_scripts/file_version_info.txt
    # sets icon to inkstitch.exe
	pyinstaller_args+="--i electron/build/icons/win/inkstitch.ico "
	pyinstaller_args+="--version-file  installer_scripts/file_version_info.txt "
    python -m PyInstaller $pyinstaller_args inkstitch.py
elif [ "$BUILD" = "linux" ]; then
    # without the LD_LIBRARY_PATH, it seems that pyinstaller can't find all of
    # wxpython's shared libraries
    LD_LIBRARY_PATH="${site_packages}/wx" python -m PyInstaller $pyinstaller_args inkstitch.py;

    # We've found that stripping the _fblas library in scipy/linalg causes a bizarre
    # error:
    #
    #   ELF load command address/offset not properly aligned
    find dist/inkstitch -type f | grep -E '\.so($|\.)' | grep -v _fblas | grep -v _flapack | xargs strip
else
    LD_LIBRARY_PATH="${site_packages}/wx" python -m PyInstaller $pyinstaller_args --strip inkstitch.py;
fi

# pyinstaller put a whole mess of libraries under dist/inkstitch.  We'd like
# to put some more user-accessible stuff like examples and palettes in
# folders under inkstitch/ (see ../Makefile) so let's move the pyinstaller
# stuff into its own dir.
shopt -s dotglob
mkdir dist/bin
mv dist/inkstitch/* dist/bin
mv dist/bin dist/inkstitch