forked from musescore/MuseScore
-
Notifications
You must be signed in to change notification settings - Fork 0
/
package_mac
executable file
·213 lines (178 loc) · 7.22 KB
/
package_mac
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
#!/bin/bash
APPNAME=mscore
LONG_NAME=MuseScore
if [[ $1 ]]
then
LONG_NAME=MuseScoreNightly
LONGER_NAME=MuseScoreNightly
VERSION=$1
else
LONG_NAME=MuseScore
LONGER_NAME="MuseScore 3"
SCRIPT_DIR=$(cd "$(dirname ${BASH_SOURCE[0]})" && pwd)
VERSION=$(cmake -P "$SCRIPT_DIR/../config.cmake" | grep -oP 'VERSION\s+\K.*')
fi
WORKING_DIRECTORY=applebuild
BACKGROUND=build/packaging/musescore-dmg-background.tiff
APP_PATH=applebuild/${APPNAME}.app
VOLNAME=${LONG_NAME}-${VERSION}
DMGNAME=${VOLNAME}Uncompressed.dmg
COMPRESSEDDMGNAME=${VOLNAME}.dmg
function set_bundle_display_options() {
osascript <<-EOF
tell application "Finder"
set f to POSIX file ("${1}" as string) as alias
tell folder f
open
tell container window
set toolbar visible to false
set statusbar visible to false
set current view to icon view
delay 1 -- sync
set the bounds to {0, 0, 540, 300}
end tell
delay 1 -- sync
set icon size of the icon view options of container window to 128
set arrangement of the icon view options of container window to not arranged
set position of item "${LONGER_NAME}.app" to {400,110}
close
set position of item "Applications" to {150,110}
open
set background picture of the icon view options of container window to file "background.tiff" of folder "Pictures"
set the bounds of the container window to {0, 0, 540, 300}
update without registering applications
delay 5 -- sync
close
end tell
delay 5 -- sync
end tell
EOF
}
function change_rpath() {
for P in `otool -L $1 | awk '{print $1}'`
do
if [[ "$P" == *@rpath* ]]
then
if [[ "$P" == *Qt* ]]
then
PSLASH=$(echo $P | sed 's,@rpath,@loader_path/../Frameworks,g')
FNAME=$(echo $P | sed "s,@rpath,${VOLUME}/${APPNAME}.app/Contents/Frameworks,g")
install_name_tool -change $P $PSLASH $1
for P1 in `otool -L $FNAME | awk '{print $1}'`
do
if [[ "$P1" == *@rpath* ]]
then
PSLASH1=$(echo $P1 | sed "s,@rpath,@loader_path/../../..,g")
install_name_tool -change $P1 $PSLASH1 $FNAME
fi
done
else
PSLASH=$(echo $P | sed 's,@rpath,@executable_path/../Frameworks,g')
FNAME=$(echo $P | sed "s,@rpath,${VOLUME}/${APPNAME}.app/Contents/Frameworks,g")
install_name_tool -change $P $PSLASH $1
fi
fi
done
}
function change_rpath_QWebEngine() {
for P in `otool -L $1 | awk '{print $1}'`
do
if [[ "$P" == *@rpath* ]]
then
PSLASH=$(echo $P | sed 's,@rpath,@loader_path/../../../../../../..,g')
FNAME=$(echo $P | sed "s,@rpath,${VOLUME}/${APPNAME}.app/Contents/Frameworks,g")
install_name_tool -change $P $PSLASH $1
fi
done
}
rm ${WORKING_DIRECTORY}/${COMPRESSEDDMGNAME}
#tip: increase the size if error on copy or macdeployqt
hdiutil create -size 500m -fs HFS+ -volname ${VOLNAME} ${WORKING_DIRECTORY}/${DMGNAME}
# Mount the disk image
hdiutil attach ${WORKING_DIRECTORY}/${DMGNAME}
# Obtain device information
DEVS=$(hdiutil attach ${WORKING_DIRECTORY}/${DMGNAME} | cut -f 1)
DEV=$(echo $DEVS | cut -f 1 -d ' ')
VOLUME=$(mount |grep ${DEV} | cut -f 3 -d ' ')
# copy in the application bundle
cp -Rp ${APP_PATH} ${VOLUME}/${APPNAME}.app
# delete unused stuff
rm -rf ${VOLUME}/${APPNAME}.app/Contents/PlugIns/mediaservice
rm -rf ${VOLUME}/${APPNAME}.app/Contents/PlugIns/audio
rm -rf ${VOLUME}/${APPNAME}.app/Contents/PlugIns/sqldrivers
rm -rf ${VOLUME}/${APPNAME}.app/Contents/Frameworks/Enginio.*
rm -rf ${VOLUME}/${APPNAME}.app/Contents/Frameworks/QtBluetooth.*
rm -rf ${VOLUME}/${APPNAME}.app/Contents/Frameworks/QtNfc.*
rm -rf ${VOLUME}/${APPNAME}.app/Contents/Frameworks/QtLocation.*
rm -rf ${VOLUME}/${APPNAME}.app/Contents/Frameworks/QtPurchasing.*
rm -rf ${VOLUME}/${APPNAME}.app/Contents/Frameworks/QtQuickParticles.*
rm -rf ${VOLUME}/${APPNAME}.app/Contents/Resources/qml/Enginio
rm -rf ${VOLUME}/${APPNAME}.app/Contents/Resources/qml/QtBluetooth
rm -rf ${VOLUME}/${APPNAME}.app/Contents/Resources/qml/QtNfc
rm -rf ${VOLUME}/${APPNAME}.app/Contents/Resources/qml/QtLocation
rm -rf ${VOLUME}/${APPNAME}.app/Contents/Resources/qml/QtPositioning
rm -rf ${VOLUME}/${APPNAME}.app/Contents/Resources/qml/QtPurchasing
rm -rf ${VOLUME}/${APPNAME}.app/Contents/Resources/qml/QtQuick/Particles*
rm -rf ${VOLUME}/${APPNAME}.app/Contents/Resources/qml/Qt/WebSockets
find ${VOLUME}/${APPNAME}.app/Contents -type d -name "*.dSYM" -exec rm -r {} +
#homebrew libs may not be writable force it?
chmod -R +w /usr/local/Cellar/
macdeployqt ${VOLUME}/${APPNAME}.app
# fix the libs, qt5.6 has @rpath...
BIN_FILE=${VOLUME}/${APPNAME}.app/Contents/MacOS/mscore
change_rpath $BIN_FILE
# fix the QWebEngineProcess, qt5.9 has @rpath...
WebEngineProcess=${VOLUME}/${APPNAME}.app/Contents/Frameworks/QtWebEngineCore.framework/Versions/5/Helpers/QtWebEngineProcess.app/Contents/MacOS/QtWebEngineProcess
change_rpath_QWebEngine $WebEngineProcess
# Workaround:
# fix Homebrew libraries with hard coded absolute path, see QTBUG-56814
FOLDER_NAME=${VOLUME}/${APPNAME}.app/Contents/Frameworks
for P in `ls -d $FOLDER_NAME/*.* | awk '{print $1}'`
do
if [[ "$P" == *.dylib ]]
then
for P1 in `otool -L $P | awk '{print $1}'`
do
if [[ "$P1" == /usr/local/Cellar*.dylib ]]
then
PATHNAME=$(dirname $P1)
PSLASH1=$(echo $P1 | sed "s,$PATHNAME,@executable_path/../Frameworks,g")
install_name_tool -change $P1 $PSLASH1 $P
fi
done
fi
done
for f in $(find "${VOLUME}/${APPNAME}.app/Contents" -iname "*");
do
lipo -remove ppc7400 "$f" -output "$f" > /dev/null 2>&1
lipo -remove x86 "$f" -output "$f" > /dev/null 2>&1
lipo -remove ppc "$f" -output "$f" > /dev/null 2>&1
done
otool -L ${VOLUME}/${APPNAME}.app/Contents/MacOS/mscore
otool -L ${VOLUME}/${APPNAME}.app/Contents/Frameworks/QtWebEngineCore.framework/Versions/5/Helpers/QtWebEngineProcess.app/Contents/MacOS/QtWebEngineProcess
echo "Rename ${APPNAME}.app to ${VOLUME}/${LONGER_NAME}.app"
mv ${VOLUME}/${APPNAME}.app "${VOLUME}/${LONGER_NAME}.app"
echo "Copy in background image"
# copy in background image
mkdir -p ${VOLUME}/Pictures
# fixme: path
cp ${BACKGROUND} ${VOLUME}/Pictures/background.tiff
echo "symlink application"
# nssymlink application
ln -s /Applications/ ${VOLUME}/Applications
set_bundle_display_options ${VOLUME}
mv ${VOLUME}/Pictures ${VOLUME}/.Pictures
#codesign
echo "Codesign"
codesign --deep -s "Developer ID Application: MuseScore" "${VOLUME}/${LONGER_NAME}.app"
echo "spctl"
spctl --assess --type execute "${VOLUME}/${LONGER_NAME}.app"
echo "Codesign verify"
codesign --verify --deep --strict --verbose=2 "${VOLUME}/${LONGER_NAME}.app"
echo "Unmount"
# Unmount the disk image
hdiutil detach $DEV
# Convert the disk image to read-only
hdiutil convert ${WORKING_DIRECTORY}/${DMGNAME} -format UDBZ -o ${WORKING_DIRECTORY}/${COMPRESSEDDMGNAME}
shasum -a 256 ${WORKING_DIRECTORY}/${COMPRESSEDDMGNAME}
rm ${WORKING_DIRECTORY}/${DMGNAME}