]> sigrok.org Git - sigrok-util.git/blob - cross-compile/macosx/create_dmg
sigrok-native-macosx: Fix a command-line handling issue.
[sigrok-util.git] / cross-compile / macosx / create_dmg
1 #!/bin/sh
2 ##
3 ## This file is part of the sigrok-util project.
4 ##
5 ## Copyright (C) 2017-2020 Uwe Hermann <uwe@hermann-uwe.de>
6 ##
7 ## This program is free software; you can redistribute it and/or modify
8 ## it under the terms of the GNU General Public License as published by
9 ## the Free Software Foundation; either version 2 of the License, or
10 ## (at your option) any later version.
11 ##
12 ## This program is distributed in the hope that it will be useful,
13 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
14 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 ## GNU General Public License for more details.
16 ##
17 ## You should have received a copy of the GNU General Public License
18 ## along with this program; if not, see <http://www.gnu.org/licenses/>.
19 ##
20
21 set -e
22
23 # The path where the installed sigrok libraries/binaries are located.
24 PREFIX=$HOME/sr_macosx
25
26 if [ "x$1" = "xsigrok-cli" ]; then
27         APPNAME="sigrok-cli"
28         APPNAME_BINARY="sigrok-cli"
29 else
30         APPNAME="PulseView"
31         APPNAME_BINARY="pulseview"
32 fi
33
34 # The path where to download files to and where to build packages.
35 BUILDDIR=./build_app_$APPNAME_BINARY
36
37 # We use Qt 5.5 in order to remain compatible with more versions of Mac OS X.
38 QTVER=qt@5.5
39
40 # Path to Qt5 binaries.
41 QTBINDIR=`brew list $QTVER | grep bin | head -n 1 | xargs dirname`
42 QTTRANSLATIONSDIR=`brew --prefix $QTVER`/translations
43
44 # Path to boost libraries.
45 BOOSTLIBDIR=`brew list boost | grep libboost_system | grep -v cmake | head -n 1 | xargs dirname`
46
47 # Path to Python 3 framework.
48 PYTHONFRAMEWORKDIR=`brew list python3 | grep libpython | head -n 1 | xargs dirname`/../../../..
49
50 PYVER="3.7"
51
52 # You usually don't need to change anything below this line.
53
54 # -----------------------------------------------------------------------------
55
56 # Remove build directory contents (if any) and create a new build dir.
57 rm -rf $BUILDDIR
58 mkdir $BUILDDIR
59 cd $BUILDDIR
60
61 APPVER="NIGHTLY"
62
63 CONTENTSDIR="$APPNAME.app/Contents"
64 MACOSDIR="$CONTENTSDIR/MacOS"
65 FRAMEWORKSDIR="$CONTENTSDIR/Frameworks"
66 SHARE_DIR="$CONTENTSDIR/share"
67 PYDIR="$FRAMEWORKSDIR/Python.framework/Versions/$PYVER"
68
69 mkdir -p $MACOSDIR $FRAMEWORKSDIR $SHARE_DIR
70
71 cp $PREFIX/bin/$APPNAME_BINARY $MACOSDIR
72 cp -R $PREFIX/share/libsigrokdecode $SHARE_DIR
73 rm -rf $SHARE_DIR/libsigrokdecode/decoders/**/__pycache__
74 rm -rf $SHARE_DIR/libsigrokdecode/decoders/common/**/__pycache__
75 cp -R $PREFIX/share/sigrok-firmware $SHARE_DIR
76
77 if [ "x$APPNAME_BINARY" = "xpulseview" ]; then
78         # Manually copy some boost libs that "macdeployqt" won't copy.
79         cp $BOOSTLIBDIR/libboost_timer-mt.dylib $FRAMEWORKSDIR
80         cp $BOOSTLIBDIR/libboost_chrono-mt.dylib $FRAMEWORKSDIR
81         chmod 644 $FRAMEWORKSDIR/*boost*
82         
83         # Manually copy translations ("macdeployqt" won't copy them).
84         mkdir -p $CONTENTSDIR/translations
85         for lang in "de"; do
86                 cp $QTTRANSLATIONSDIR/qt_$lang.qm $CONTENTSDIR/translations
87                 cp $QTTRANSLATIONSDIR/qtbase_$lang.qm $CONTENTSDIR/translations
88         done
89 fi
90
91 $QTBINDIR/macdeployqt $APPNAME.app
92
93 # Copy Python framework and fix it up.
94 cp -R $PYTHONFRAMEWORKDIR $FRAMEWORKSDIR
95 chmod 644 $PYDIR/lib/libpython*.dylib
96 rm -rf $PYDIR/Headers
97 rm -rf $PYDIR/bin
98 rm -rf $PYDIR/include
99 rm -rf $PYDIR/share
100 rm -rf $PYDIR/lib/pkgconfig
101 rm -rf $PYDIR/lib/python$PYVER/lib2to3
102 rm -rf $PYDIR/lib/python$PYVER/distutils
103 rm -rf $PYDIR/lib/python$PYVER/idlelib
104 rm -rf $PYDIR/lib/python$PYVER/test
105 rm -rf $PYDIR/lib/python$PYVER/**/test
106 rm -rf $PYDIR/lib/python$PYVER/tkinter
107 rm -rf $PYDIR/lib/python$PYVER/turtledemo
108 rm -rf $PYDIR/lib/python$PYVER/unittest
109 rm -rf $PYDIR/lib/python$PYVER/__pycache__
110 rm -rf $PYDIR/lib/python$PYVER/**/__pycache__
111 rm -rf $PYDIR/lib/python$PYVER/**/**/__pycache__
112 rm -rf $PYDIR/Resources
113 install_name_tool -change \
114         /usr/local/opt/python/Frameworks/Python.framework/Versions/$PYVER/Python \
115         @executable_path/../Frameworks/Python.framework/Versions/$PYVER/Python \
116         $FRAMEWORKSDIR/libsigrokdecode.*.dylib
117
118 # Add wrapper (sets PYTHONHOME/SIGROK_FIRMWARE_DIR/SIGROKDECODE_DIR).
119 mv $MACOSDIR/$APPNAME_BINARY $MACOSDIR/$APPNAME_BINARY.real
120 cp ../contrib/$APPNAME_BINARY $MACOSDIR
121 chmod 755 $MACOSDIR/$APPNAME_BINARY
122
123 cp ../contrib/Info.plist_$APPNAME_BINARY $CONTENTSDIR/Info.plist
124 cp ../contrib/$APPNAME_BINARY.icns $CONTENTSDIR/Resources
125
126 hdiutil create "${APPNAME}-${APPVER}.dmg" -volname "$APPNAME $APPVER" \
127         -fs HFS+ -srcfolder "$APPNAME.app"