3 SYNTAX="make_dmg.sh <environment> <builddir> <apple-id> <apple-password> <arch1> [<arch2>]"
5 # e.g. make_dmg.sh /Users/carl/osx-environment /Users/carl/cdist foo@bar.net opensesame x86_64/10.10 arm64/11.0
7 # Don't set -e here as egrep (used a few times) returns 1 if no matches
10 version=`git describe --tags --abbrev=0 | sed -e "s/v//"`
12 # DMG size in megabytes
21 # This is our work area for making up the .dmgs
22 mkdir -p build/platform/osx
25 cat <<EOF > entitlements.plist
26 <?xml version="1.0" encoding="UTF-8"?>
27 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
30 <key>com.apple.security.cs.disable-library-validation</key>
32 <key>com.apple.security.cs.allow-dyld-environment-variables</key>
39 if [ "$ARCH2" == "" ]; then
42 ln -s $(readlink $f) "$3/`basename $f`"
44 cp $f "$3/`basename $f`"
48 for f in $1/$ARCH1/$2; do
50 ln -s $(readlink $f) "$3/`basename $f`"
52 g=`echo $f | sed -e "s@/$ARCH1/@/$ARCH2/@g"`
54 lipo -create $f $g -output "$3/`basename $f`"
60 function copy_lib_root {
61 if [ "$ARCH2" == "" ]; then
62 for f in $ROOT/lib/$1*.dylib; do
64 ln -s $(readlink $f) "$2/`basename $f`"
66 cp $f "$2/`basename $f`"
70 for f in $ROOT/$ARCH1/lib/$1*.dylib; do
72 ln -s $(readlink $f) "$2/`basename $f`"
74 g=`echo $f | sed -e "s@/$ARCH1/@/$ARCH2/@g"`
76 lipo -create $f $g -output "$2/`basename $f`"
80 to_relink="$to_relink|$1"
83 function copy_lib_env {
84 for f in $ENV/$ARCH1/lib/$1*.dylib; do
86 ln -s $(readlink $f) "$2/`basename $f`"
88 if [ "$ARCH2" == "" ]; then
89 cp $f "$2/`basename $f`"
91 g=`echo $f | sed -e "s@/$ARCH1/@/$ARCH2/@g"`
93 lipo -create $f $g -output "$2/`basename $f`"
97 to_relink="$to_relink|$1"
100 # @param #1 directory to copy to
103 copy_lib_root libcxml "$dest"
104 copy_lib_root libdcp-1.0 "$dest"
105 copy_lib_root libasdcp-carl "$dest"
106 copy_lib_root libkumu-carl "$dest"
107 copy_lib_root libsub "$dest"
108 copy_lib_root libopenjp2 "$dest"
109 copy_lib_root libavdevice "$dest"
110 copy_lib_root libavformat "$dest"
111 copy_lib_root libavfilter "$dest"
112 copy_lib_root libavutil "$dest"
113 copy_lib_root libavcodec "$dest"
114 copy_lib_root libswscale "$dest"
115 copy_lib_root libpostproc "$dest"
116 copy_lib_root libswresample "$dest"
117 copy_lib_root liblwext4 "$dest"
118 copy_lib_root libblockdev "$dest"
119 copy_lib_root libleqm_nrt "$dest"
120 copy $ROOT src/dcpomatic/build/src/lib/libdcpomatic2.dylib "$dest"
121 copy $ROOT src/dcpomatic/build/src/wx/libdcpomatic2-wx.dylib "$dest"
122 copy_lib_env libboost_system "$dest"
123 copy_lib_env libboost_filesystem "$dest"
124 copy_lib_env libboost_thread "$dest"
125 copy_lib_env libboost_date_time "$dest"
126 copy_lib_env libboost_locale "$dest"
127 copy_lib_env libboost_regex "$dest"
128 copy_lib_env libxml++ "$dest"
129 copy_lib_env libxslt "$dest"
130 copy_lib_env libxml2 "$dest"
131 copy_lib_env libglibmm-2.4 "$dest"
132 copy_lib_env libgobject "$dest"
133 copy_lib_env libgthread "$dest"
134 copy_lib_env libgmodule "$dest"
135 copy_lib_env libsigc "$dest"
136 copy_lib_env libglib-2 "$dest"
137 copy_lib_env libintl "$dest"
138 copy_lib_env libsndfile "$dest"
139 copy_lib_env libssh "$dest"
140 copy_lib_env libwx "$dest"
141 copy_lib_env libfontconfig "$dest"
142 copy_lib_env libfreetype "$dest"
143 copy_lib_env libexpat "$dest"
144 copy_lib_env libltdl "$dest"
145 copy_lib_env libxmlsec1 "$dest"
146 copy_lib_env libcurl "$dest"
147 copy_lib_env libffi "$dest"
148 copy_lib_env libpango "$dest"
149 copy_lib_env libcairo "$dest"
150 copy_lib_env libpixman "$dest"
151 copy_lib_env libharfbuzz "$dest"
152 copy_lib_env libsamplerate "$dest"
153 copy_lib_env libicui18n "$dest"
154 copy_lib_env libicudata "$dest"
155 copy_lib_env libicuio "$dest"
156 copy_lib_env libicutest "$dest"
157 copy_lib_env libicutu "$dest"
158 copy_lib_env libicuuc "$dest"
159 copy_lib_env libFLAC "$dest"
160 copy_lib_env libvorbis "$dest"
161 copy_lib_env libogg "$dest"
162 copy_lib_env libxerces-c "$dest"
163 copy_lib_env libcrypto "$dest"
164 copy_lib_env libssl "$dest"
165 copy_lib_env libfribidi "$dest"
166 copy_lib_env libgio "$dest"
167 copy_lib_env libz "$dest"
170 # @param #1 directory to copy to
171 function copy_resources {
173 if [ "$ARCH2" == "" ]; then
176 local prefix=$ROOT/$ARCH1
178 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small.png "$dest"
179 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2.icns "$dest"
180 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_kdm.icns "$dest"
181 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_server.icns "$dest"
182 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_player.icns "$dest"
183 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_batch.icns "$dest"
184 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_playlist.icns "$dest"
185 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_disk.icns "$dest"
186 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_combiner.icns "$dest"
187 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults.png "$dest"
188 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults@2x.png "$dest"
189 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email.png "$dest"
190 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email@2x.png "$dest"
191 cp $prefix/src/dcpomatic/graphics/osx/preferences/email.png "$dest"
192 cp $prefix/src/dcpomatic/graphics/osx/preferences/email@2x.png "$dest"
193 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers.png "$dest"
194 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers@2x.png "$dest"
195 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms.png "$dest"
196 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms@2x.png "$dest"
197 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys.png "$dest"
198 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys@2x.png "$dest"
199 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet.png "$dest"
200 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet@2x.png "$dest"
201 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications.png "$dest"
202 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications@2x.png "$dest"
203 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound.png "$dest"
204 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound@2x.png "$dest"
205 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers.png "$dest"
206 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers@2x.png "$dest"
207 cp $prefix/src/dcpomatic/graphics/osx/preferences/general.png "$dest"
208 cp $prefix/src/dcpomatic/graphics/osx/preferences/general@2x.png "$dest"
209 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced.png "$dest"
210 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced@2x.png "$dest"
211 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations.png "$dest"
212 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations@2x.png "$dest"
213 cp $prefix/src/dcpomatic/fonts/LiberationSans-Regular.ttf "$dest"
214 cp $prefix/src/dcpomatic/fonts/LiberationSans-Italic.ttf "$dest"
215 cp $prefix/src/dcpomatic/fonts/LiberationSans-Bold.ttf "$dest"
216 cp $prefix/src/dcpomatic/fonts/fonts.conf.osx "$dest"/fonts.conf
217 cp $prefix/src/dcpomatic/graphics/splash.png "$dest"
218 cp $prefix/src/dcpomatic/graphics/zoom.png "$dest"
219 cp $prefix/src/dcpomatic/graphics/zoom_all.png "$dest"
220 cp $prefix/src/dcpomatic/graphics/select.png "$dest"
221 cp $prefix/src/dcpomatic/graphics/snap.png "$dest"
222 cp $prefix/src/dcpomatic/graphics/sequence.png "$dest"
223 cp $prefix/src/dcpomatic/graphics/me.jpg "$dest"
224 cp $prefix/src/dcpomatic/graphics/link.png "$dest"
225 cp $prefix/src/dcpomatic/graphics/tick.png "$dest"
226 cp $prefix/src/dcpomatic/graphics/no_tick.png "$dest"
227 cp -r $prefix/share/libdcp/xsd "$dest"
228 cp -r $prefix/share/libdcp/tags "$dest"
230 # i18n: DCP-o-matic .mo files
231 for lang in de_DE es_ES fr_FR it_IT sv_SE nl_NL ru_RU pl_PL da_DK pt_PT pt_BR sk_SK cs_CZ uk_UA zh_CN tr_TR; do
232 mkdir -p "$dest/$lang/LC_MESSAGES"
233 cp $prefix/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
234 cp $prefix/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
235 cp $prefix/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
238 # i18n: wxWidgets .mo files
239 for lang in de es fr it sv nl ru pl da cs; do
241 cp $ENV/$ARCH1/share/locale/$lang/LC_MESSAGES/wxstd.mo "$dest/$lang"
245 # param $1 list of things that link to other things
246 function relink_relative {
247 to_relink=`echo $to_relink | sed -e "s/\+//g"`
250 for obj in "${linkers[@]}"; do
251 deps=`otool -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu|libssh)"`
255 changes="$changes -change $dep @executable_path/../Frameworks/$base"
257 if test "x$changes" != "x"; then
258 install_name_tool $changes -id `basename "$obj"` "$obj"
263 # param $1 directory things should be relinked into
264 # $2 list of things that link to other things
265 function relink_absolute {
266 to_relink=`echo $to_relink | sed -e "s/\+//g"`
271 for obj in "${linkers[@]}"; do
272 deps=`otool -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu|libssh)"`
275 install_name_tool -change "$dep" "$target"/$base -id `basename "$obj"` "$obj"
281 codesign --deep --force --verify --verbose --options runtime --entitlements entitlements.plist --sign "Developer ID Application: Carl Hetherington (R82DXSR997)" "$1"
282 if [ "$?" != "0" ]; then
283 echo "Failed to sign $1"
289 # @param #1 .app directory
290 # @param #2 .pkg or ""
291 # @param #3 full name e.g. DCP-o-matic Batch Converter
296 tmp_dmg=dcpomatic_tmp.dmg
297 dmg="$full_name $version.dmg"
298 vol_name=DCP-o-matic-$version
302 if [ "$pkg" != "" ]; then
303 productsign --sign "Developer ID Installer: Carl Hetherington (R82DXSR997)" "$pkg" "signed_temp.pkg"
304 if [ "$?" != "0" ]; then
305 echo "Failed to sign .pkg"
308 mv signed_temp.pkg "$pkg"
312 cp -a "$appdir" $vol_name
313 if [ "$pkg" != "" ]; then
314 cp -a "$pkg" $vol_name
316 ln -s /Applications "$vol_name/Applications"
317 cat<<EOF > "$vol_name/READ ME.txt"
318 Welcome to DCP-o-matic! The first time you run the program there may be
319 a long (several-minute) delay while macOS checks the code for viruses and
320 other malware. Please be patient!
322 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
323 Beim erstmaligen Start der DCP-o-matic Anwendungen kann ein längerer
324 Verifikationsvorgang auftreten. Dies ist von der macOS Sicherheitsumgebung
325 'Gatekeeper' verursacht. Dieser je nach Rechner teils minutenlange
326 Verifikationsvorgang ist gegenwärtig normal und nicht zu umgehen,
327 es ist kein Programmfehler. Warten sie die Verifikation für jede der
328 DCP-o-matic Anwendungen ab, bei weiteren Programmstarts wird sie nicht
332 if [ "$pkg" != "" ]; then
333 cat<<EOF > "$vol_name/READ ME.txt"
335 To run this software successfully you must install $pkg before running
340 if [ "$pkg" != "" ]; then
341 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
343 To run this software successfully you must install $pkg before running
348 rm -f $tmp_dmg "$dmg"
349 hdiutil create -srcfolder $vol_name -volname $vol_name -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDRW -size $DMG_SIZE $tmp_dmg
350 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
351 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
355 tell application "Finder"
356 tell disk "'$vol_name'"
358 set current view of container window to icon view
359 set toolbar visible of container window to false
360 set statusbar visible of container window to false
361 set the bounds of container window to {400, 200, 1160, 600}
362 set the bounds of container window to {400, 200, 1160, 600}
363 set the bounds of container window to {400, 200, 1160, 600}
364 set theViewOptions to the icon view options of container window
365 set arrangement of theViewOptions to not arranged
366 set icon size of theViewOptions to 64
367 set position of item "'$appdir'" of container window to {90, 80}
368 set position of item "Applications" of container window to {265, 80}
369 set position of item "READ ME.txt" of container window to {430, 80}
370 set position of item "READ ME.de_DE.txt" of container window to {595, 80}
371 set position of item "DCP-o-matic Disk Writer.pkg" of container window to {90, 255}
374 update without registering applications
380 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
383 hdiutil eject $device
384 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
385 sips -i "$appdir/Contents/Resources/dcpomatic2.icns"
386 DeRez -only icns "$appdir/Contents/Resources/dcpomatic2.icns" > "$appdir/Contents/Resources/DCP-o-matic.rsrc"
387 Rez -append "$appdir/Contents/Resources/DCP-o-matic.rsrc" -o "$dmg"
392 codesign --verify --verbose --options runtime --entitlements entitlements.plist --sign "Developer ID Application: Carl Hetherington (R82DXSR997)" "$dmg"
402 approot="$appdir/Contents"
404 mkdir -p "$approot/MacOS"
405 mkdir -p "$approot/Frameworks"
406 mkdir -p "$approot/Resources"
408 to_relink="dcpomatic"
409 copy_libs "$approot/Frameworks"
410 copy_resources "$approot/Resources"
413 function copy_verify {
414 copy $ROOT src/libdcp/build/tools/dcpverify "$approot/MacOS"
415 mv "$approot/MacOS/dcpverify" "$approot/MacOS/dcpomatic2_verify"
416 rl=("$approot/MacOS/dcpomatic2_verify" "$approot/Frameworks/"*.dylib)
417 relink_relative "${rl[@]}"
420 if [ "$ARCH2" == "" ]; then
427 setup "DCP-o-matic 2.app"
428 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$approot/MacOS"
429 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$approot/MacOS"
430 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_create "$approot/MacOS"
431 copy $ROOT bin/ffprobe "$approot/MacOS"
432 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
434 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$approot/Info.plist"
435 rl=("$approot/MacOS/dcpomatic2" "$approot/MacOS/dcpomatic2_cli" "$approot/MacOS/dcpomatic2_create" "$approot/MacOS/ffprobe" "$approot/Frameworks/"*.dylib)
436 relink_relative "${rl[@]}"
437 make_dmg "$appdir" "" "DCP-o-matic"
439 # DCP-o-matic KDM Creator
440 setup "DCP-o-matic 2 KDM Creator.app"
441 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm "$approot/MacOS"
442 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm_cli "$approot/MacOS"
443 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
445 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$approot/Info.plist"
446 rl=("$approot/MacOS/dcpomatic2_kdm" "$approot/MacOS/dcpomatic2_kdm_cli" "$approot/Frameworks/"*.dylib)
447 relink_relative "${rl[@]}"
448 make_dmg "$appdir" "" "DCP-o-matic KDM Creator"
450 # DCP-o-matic Encode Server
451 setup "DCP-o-matic 2 Encode Server.app"
452 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server "$approot/MacOS"
453 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$approot/MacOS"
454 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
456 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_server.Info.plist "$approot/Info.plist"
457 rl=("$approot/MacOS/dcpomatic2_server" "$approot/MacOS/dcpomatic2_server_cli" "$approot/Frameworks/"*.dylib)
458 relink_relative "${rl[@]}"
459 make_dmg "$appdir" "" "DCP-o-matic Encode Server"
461 # DCP-o-matic Batch Converter
462 setup "DCP-o-matic 2 Batch converter.app"
463 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_batch "$approot/MacOS"
464 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
466 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_batch.Info.plist "$approot/Info.plist"
467 rl=("$approot/MacOS/dcpomatic2_batch" "$approot/Frameworks/"*.dylib)
468 relink_relative "${rl[@]}"
469 make_dmg "$appdir" "" "DCP-o-matic Batch Converter"
472 setup "DCP-o-matic 2 Player.app"
473 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_player "$approot/MacOS"
474 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
476 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_player.Info.plist "$approot/Info.plist"
477 rl=("$approot/MacOS/dcpomatic2_player" "$approot/Frameworks/"*.dylib)
478 relink_relative "${rl[@]}"
479 make_dmg "$appdir" "" "DCP-o-matic Player"
481 # DCP-o-matic Playlist Editor
482 setup "DCP-o-matic 2 Playlist Editor.app"
483 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_playlist "$approot/MacOS"
484 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
486 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_playlist.Info.plist "$approot/Info.plist"
487 rl=("$approot/MacOS/dcpomatic2_playlist" "$approot/Frameworks/"*.dylib)
488 relink_relative "${rl[@]}"
489 make_dmg "$appdir" "" "DCP-o-matic Playlist Editor"
491 # DCP-o-matic Combiner
492 setup "DCP-o-matic 2 Combiner.app"
493 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_combiner "$approot/MacOS"
494 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
496 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_combiner.Info.plist "$approot/Info.plist"
497 rl=("$approot/MacOS/dcpomatic2_combiner" "$approot/Frameworks/"*.dylib)
498 relink_relative "${rl[@]}"
499 make_dmg "$appdir" "" "DCP-o-matic Combiner"
501 # DCP-o-matic Disk Writer .app
502 setup "DCP-o-matic 2 Disk Writer.app"
503 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk "$approot/MacOS"
504 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
506 cp $prefix/src/dcpomatic/platform/osx/uninstall_disk.applescript "$approot/Resources"
507 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_disk.Info.plist "$approot/Info.plist"
508 rl=("$approot/MacOS/dcpomatic2_disk" "$approot/Frameworks/"*.dylib)
509 relink_relative "${rl[@]}"
511 # DCP-o-matic Disk Writer daemon .pkg
513 pkgbase=tmp-disk-writer
517 pkgroot=$pkgbase/root
519 mkdir -p $pkgroot/Library/LaunchDaemons
520 cat > $pkgroot/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist <<EOF
521 <?xml version="1.0" encoding="UTF-8"?>
522 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
523 <plist version="1.0">
526 <string>com.dcpomatic.disk.writer</string>
527 <key>ProgramArguments</key>
529 <string>/Library/Application Support/com.dcpomatic/dcpomatic2_disk_writer</string>
531 <key>EnvironmentVariables</key>
533 <key>DYLD_LIBRARY_PATH</key>
534 <string><![CDATA[/Library/Application Support/com.dcpomatic]]></string>
536 <key>StandardOutPath</key>
537 <string>/var/log/dcpomatic_disk_writer_out.log</string>
538 <key>StandardErrorPath</key>
539 <string>/var/log/dcpomatic_disk_writer_err.log</string>
540 <key>LaunchEvents</key>
542 <key>com.apple.notifyd.matching</key>
544 <key>com.dcpomatic.disk.writer.start</key>
546 <key>Notification</key>
547 <string>com.dcpomatic.disk.writer.start</string>
555 # Get the binaries together in $pkgbin then move them to the
556 # place with spaces in the filename to avoid some of the pain of escaping
559 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk_writer "$pkgbin"
562 rl=("$pkgbin/dcpomatic2_disk_writer" "$pkgbin/"*.dylib)
563 relink_absolute "/Library/Application Support/com.dcpomatic" "${rl[@]}"
565 mkdir $pkgbase/scripts
566 cat > $pkgbase/scripts/postinstall <<EOF
568 /bin/launchctl unload "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
569 /bin/launchctl load "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
572 chmod gou+x $pkgbase/scripts/postinstall
574 find "$pkgbin" -iname "*.dylib" -print0 | while IFS= read -r -d '' f; do
577 sign "$pkgbin/dcpomatic2_disk_writer"
579 mkdir -p "$pkgroot/Library/Application Support/com.dcpomatic"
580 mv $pkgbin/* "$pkgroot/Library/Application Support/com.dcpomatic/"
581 pkgbuild --root $pkgroot --identifier com.dcpomatic.disk.writer --scripts $pkgbase/scripts "DCP-o-matic Disk Writer.pkg"
583 make_dmg "$appdir" "DCP-o-matic Disk Writer.pkg" "DCP-o-matic Disk Writer"