3 SYNTAX="make_dmg.sh <environment> <builddir> <type> <apple-id> <apple-password>"
4 # where <type> is universal or thin
6 # e.g. make_dmg.sh /Users/carl/osx-environment /Users/carl/cdist universal foo@bar.net opensesame
8 # Don't set -e here as egrep (used a few times) returns 1 if no matches
11 version=`git describe --tags --abbrev=0 | sed -e "s/v//"`
13 # DMG size in megabytes
21 if [ "$TYPE" != "universal" -a "$TYPE" != "thin" ]; then
23 echo "where <type> is universal or thin"
27 # This is our work area for making up the .dmgs
28 mkdir -p build/platform/osx
36 ln -s $(readlink $f) "$3/`basename $f`"
38 g=`echo $f | sed -e "s/\/32\//\/64\//g"`
40 lipo -create $f $g -output "$3/`basename $f`"
46 ln -s $(readlink $1/$2) "$3/`basename $f`"
54 function copy_lib_root {
57 for f in $ROOT/32/lib/$1*.dylib; do
59 ln -s $(readlink $f) "$2/`basename $f`"
61 g=`echo $f | sed -e "s/\/32\//\/64\//g"`
63 lipo -create $f $g -output "$2/`basename $f`"
68 for f in $ROOT/lib/$1*.dylib; do
70 ln -s $(readlink $f) "$2/`basename $f`"
78 to_relink="$to_relink|$1"
81 function copy_lib_env {
84 for f in $ENV/32/lib/$1*.dylib; do
86 ln -s $(readlink $f) "$2/`basename $f`"
88 g=`echo $f | sed -e "s/\/32\//\/64\//g"`
90 lipo -create $f $g -output "$2/`basename $f`"
95 for f in $ENV/64/lib/$1*.dylib; do
97 ln -s $(readlink $f) "$2/`basename $f`"
105 to_relink="$to_relink|$1"
108 # @param #1 directory to copy to
111 copy_lib_root libcxml "$dest"
112 copy_lib_root libdcp-1.0 "$dest"
113 copy_lib_root libasdcp-carl "$dest"
114 copy_lib_root libkumu-carl "$dest"
115 copy_lib_root libsub "$dest"
116 copy_lib_root libopenjp2 "$dest"
117 copy_lib_root libavdevice "$dest"
118 copy_lib_root libavformat "$dest"
119 copy_lib_root libavfilter "$dest"
120 copy_lib_root libavutil "$dest"
121 copy_lib_root libavcodec "$dest"
122 copy_lib_root libswscale "$dest"
123 copy_lib_root libpostproc "$dest"
124 copy_lib_root libswresample "$dest"
125 copy_lib_root liblwext4 "$dest"
126 copy_lib_root libblockdev "$dest"
127 copy_lib_root libleqm_nrt "$dest"
128 copy $ROOT src/dcpomatic/build/src/lib/libdcpomatic2.dylib "$dest"
129 copy $ROOT src/dcpomatic/build/src/wx/libdcpomatic2-wx.dylib "$dest"
130 copy_lib_env libboost_system "$dest"
131 copy_lib_env libboost_filesystem "$dest"
132 copy_lib_env libboost_thread "$dest"
133 copy_lib_env libboost_date_time "$dest"
134 copy_lib_env libboost_locale "$dest"
135 copy_lib_env libboost_regex "$dest"
136 copy_lib_env libxml++ "$dest"
137 copy_lib_env libxslt "$dest"
138 copy_lib_env libxml2 "$dest"
139 copy_lib_env libglibmm-2.4 "$dest"
140 copy_lib_env libgobject "$dest"
141 copy_lib_env libgthread "$dest"
142 copy_lib_env libgmodule "$dest"
143 copy_lib_env libsigc "$dest"
144 copy_lib_env libglib-2 "$dest"
145 copy_lib_env libintl "$dest"
146 copy_lib_env libsndfile "$dest"
147 copy_lib_env libssh "$dest"
148 copy_lib_env libwx "$dest"
149 copy_lib_env libfontconfig "$dest"
150 copy_lib_env libfreetype "$dest"
151 copy_lib_env libexpat "$dest"
152 copy_lib_env libltdl "$dest"
153 copy_lib_env libxmlsec1 "$dest"
154 copy_lib_env libcurl "$dest"
155 copy_lib_env libffi "$dest"
156 copy_lib_env libpango "$dest"
157 copy_lib_env libcairo "$dest"
158 copy_lib_env libpixman "$dest"
159 copy_lib_env libharfbuzz "$dest"
160 copy_lib_env libsamplerate "$dest"
161 copy_lib_env libicui18n "$dest"
162 copy_lib_env libicudata "$dest"
163 copy_lib_env libicuio "$dest"
164 copy_lib_env libicule "$dest"
165 copy_lib_env libiculx "$dest"
166 copy_lib_env libicutest "$dest"
167 copy_lib_env libicutu "$dest"
168 copy_lib_env libicuuc "$dest"
169 copy_lib_env libFLAC "$dest"
170 copy_lib_env libvorbis "$dest"
171 copy_lib_env libogg "$dest"
172 copy_lib_env libxerces-c "$dest"
175 # @param #1 directory to copy to
176 function copy_resources {
180 local prefix=$ROOT/32
186 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small.png "$dest"
187 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2.icns "$dest"
188 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_kdm.icns "$dest"
189 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_server.icns "$dest"
190 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_player.icns "$dest"
191 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_batch.icns "$dest"
192 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_playlist.icns "$dest"
193 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_disk.icns "$dest"
194 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_combiner.icns "$dest"
195 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults.png "$dest"
196 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults@2x.png "$dest"
197 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email.png "$dest"
198 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email@2x.png "$dest"
199 cp $prefix/src/dcpomatic/graphics/osx/preferences/email.png "$dest"
200 cp $prefix/src/dcpomatic/graphics/osx/preferences/email@2x.png "$dest"
201 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers.png "$dest"
202 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers@2x.png "$dest"
203 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms.png "$dest"
204 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms@2x.png "$dest"
205 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys.png "$dest"
206 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys@2x.png "$dest"
207 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet.png "$dest"
208 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet@2x.png "$dest"
209 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications.png "$dest"
210 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications@2x.png "$dest"
211 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound.png "$dest"
212 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound@2x.png "$dest"
213 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers.png "$dest"
214 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers@2x.png "$dest"
215 cp $prefix/src/dcpomatic/graphics/osx/preferences/general.png "$dest"
216 cp $prefix/src/dcpomatic/graphics/osx/preferences/general@2x.png "$dest"
217 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced.png "$dest"
218 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced@2x.png "$dest"
219 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations.png "$dest"
220 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations@2x.png "$dest"
221 cp $prefix/src/dcpomatic/fonts/LiberationSans-Regular.ttf "$dest"
222 cp $prefix/src/dcpomatic/fonts/LiberationSans-Italic.ttf "$dest"
223 cp $prefix/src/dcpomatic/fonts/LiberationSans-Bold.ttf "$dest"
224 cp $prefix/src/dcpomatic/fonts/fonts.conf.osx "$dest"/fonts.conf
225 cp $prefix/src/dcpomatic/graphics/splash.png "$dest"
226 cp $prefix/src/dcpomatic/graphics/zoom.png "$dest"
227 cp $prefix/src/dcpomatic/graphics/zoom_all.png "$dest"
228 cp $prefix/src/dcpomatic/graphics/select.png "$dest"
229 cp $prefix/src/dcpomatic/graphics/snap.png "$dest"
230 cp $prefix/src/dcpomatic/graphics/sequence.png "$dest"
231 cp $prefix/src/dcpomatic/graphics/me.jpg "$dest"
232 cp $prefix/src/dcpomatic/graphics/link.png "$dest"
233 cp -r $prefix/share/libdcp/xsd "$dest"
235 # i18n: DCP-o-matic .mo files
236 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
237 mkdir -p "$dest/$lang/LC_MESSAGES"
238 cp $prefix/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
239 cp $prefix/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
240 cp $prefix/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
243 # i18n: wxWidgets .mo files
244 for lang in de es fr it sv nl ru pl da cs; do
246 cp $ENV/64/share/locale/$lang/LC_MESSAGES/wxstd.mo "$dest/$lang"
250 # param $1 list of things that link to other things
251 function relink_relative {
252 to_relink=`echo $to_relink | sed -e "s/\+//g"`
255 for obj in "${linkers[@]}"; do
256 deps=`otool -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu)"`
260 if [ "$TYPE" == "universal" ]; then
261 # $dep will be a path within 64/; make a 32/ path too
262 dep32=`echo $dep | sed -e "s/\/64\//\/32\//g"`
263 changes="$changes -change $dep @executable_path/../Frameworks/$base -change $dep32 @executable_path/../Frameworks/$base"
265 changes="$changes -change $dep @executable_path/../Frameworks/$base"
268 if test "x$changes" != "x"; then
269 install_name_tool $changes -id `basename "$obj"` "$obj"
274 # param $1 directory things should be relinked into
275 # $2 list of things that link to other things
276 function relink_absolute {
277 to_relink=`echo $to_relink | sed -e "s/\+//g"`
282 for obj in "${linkers[@]}"; do
283 deps=`otool -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu)"`
286 install_name_tool -change "$dep" "$target"/$base -id `basename "$obj"` "$obj"
292 codesign --deep --force --verify --verbose --options runtime --sign "Developer ID Application: Carl Hetherington (R82DXSR997)" "$1"
293 if [ "$?" != "0" ]; then
294 echo "Failed to sign $1"
300 # @param #1 .app directory
301 # @param #2 .pkg or ""
302 # @param #3 full name e.g. DCP-o-matic Batch Converter
303 # @param #4 bundle id e.g. com.dcpomatic.batch
309 tmp_dmg=dcpomatic_tmp.dmg
310 dmg="$full_name $version.dmg"
311 vol_name=DCP-o-matic-$version
315 if [ "$pkg" != "" ]; then
316 productsign --sign "Developer ID Installer: Carl Hetherington (R82DXSR997)" "$pkg" "signed_temp.pkg"
317 if [ "$?" != "0" ]; then
318 echo "Failed to sign .pkg"
321 mv signed_temp.pkg "$pkg"
325 cp -a "$appdir" $vol_name
326 if [ "$pkg" != "" ]; then
327 cp -a "$pkg" $vol_name
329 ln -s /Applications "$vol_name/Applications"
330 cat<<EOF > "$vol_name/READ ME.txt"
331 Welcome to DCP-o-matic! The first time you run the program there may be
332 a long (several-minute) delay while OS X checks the code for viruses and
333 other malware. Please be patient!
335 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
336 Beim erstmaligen Start der DCP-o-matic Anwendungen kann ein längerer
337 Verifikationsvorgang auftreten. Dies ist von der OS X Sicherheitsumgebung
338 'Gatekeeper' verursacht. Dieser je nach Rechner teils minutenlange
339 Verifikationsvorgang ist gegenwärtig normal und nicht zu umgehen,
340 es ist kein Programmfehler. Warten sie die Verifikation für jede der
341 DCP-o-matic Anwendungen ab, bei weiteren Programmstarts wird sie nicht
345 if [ "$pkg" != "" ]; then
346 cat<<EOF > "$vol_name/READ ME.txt"
348 To run this software successfully you must install $pkg before running
353 if [ "$pkg" != "" ]; then
354 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
356 To run this software successfully you must install $pkg before running
361 rm -f $tmp_dmg "$dmg"
362 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
363 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
364 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
368 tell application "Finder"
369 tell disk "'$vol_name'"
371 set current view of container window to icon view
372 set toolbar visible of container window to false
373 set statusbar visible of container window to false
374 set the bounds of container window to {400, 200, 1160, 600}
375 set the bounds of container window to {400, 200, 1160, 600}
376 set the bounds of container window to {400, 200, 1160, 600}
377 set theViewOptions to the icon view options of container window
378 set arrangement of theViewOptions to not arranged
379 set icon size of theViewOptions to 64
380 set position of item "'$appdir'" of container window to {90, 80}
381 set position of item "Applications" of container window to {265, 80}
382 set position of item "READ ME.txt" of container window to {430, 80}
383 set position of item "READ ME.de_DE.txt" of container window to {595, 80}
384 set position of item "DCP-o-matic Disk Writer.pkg" of container window to {90, 255}
387 update without registering applications
393 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
396 hdiutil eject $device
397 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
398 sips -i "$appdir/Contents/Resources/dcpomatic2.icns"
399 DeRez -only icns "$appdir/Contents/Resources/dcpomatic2.icns" > "$appdir/Contents/Resources/DCP-o-matic.rsrc"
400 Rez -append "$appdir/Contents/Resources/DCP-o-matic.rsrc" -o "$dmg"
405 codesign --verify --verbose --options runtime --sign "Developer ID Application: Carl Hetherington (R82DXSR997)" "$dmg"
407 # We only notarize thin builds, as if we're building universal binaries we must be on an OS
408 # sufficiently old that it can't notarize anyway
409 if [ "$TYPE" == "thin" ]; then
411 id=$(xcrun altool --notarize-app -t osx -f "$dmg" --primary-bundle-id $bundle_id -u $APPLE_ID -p $APPLE_PASSWORD --output-format xml | grep -C1 RequestUUID | tail -n 1 | sed -e "s/<string>//g" | sed -e "s/<\/string>//g")
414 echo "Checking up on $id"
416 status=$(xcrun altool --notarization-info $id -u $APPLE_ID -p $APPLE_PASSWORD --output-format xml)
418 summary=$(echo "$status" | grep -C1 "<key>Status</key>" | tail -n 1 | sed -e "s/ .//g")
420 if [ "$summary" == "<string>invalid</string>" ]; then
421 echo "Notarization failed."
425 if [ "$summary" == "<string>success</string>" ]; then
430 if [ "$N" == "30" ]; then
431 echo "Timed out waiting for notarization"
436 xcrun stapler staple "$dmg"
447 approot="$appdir/Contents"
449 mkdir -p "$approot/MacOS"
450 mkdir -p "$approot/Frameworks"
451 mkdir -p "$approot/Resources"
453 to_relink="dcpomatic"
454 copy_libs "$approot/Frameworks"
455 copy_resources "$approot/Resources"
468 setup "DCP-o-matic 2.app"
469 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$approot/MacOS"
470 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$approot/MacOS"
471 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_create "$approot/MacOS"
472 copy $ROOT bin/ffprobe "$approot/MacOS"
473 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
474 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$approot/Info.plist"
475 rl=("$approot/MacOS/dcpomatic2" "$approot/MacOS/dcpomatic2_cli" "$approot/MacOS/dcpomatic2_create" "$approot/MacOS/ffprobe" "$approot/Frameworks/"*.dylib)
476 relink_relative "${rl[@]}"
477 make_dmg "$appdir" "" "DCP-o-matic" com.dcpomatic
479 # DCP-o-matic KDM Creator
480 setup "DCP-o-matic 2 KDM Creator.app"
481 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm "$approot/MacOS"
482 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm_cli "$approot/MacOS"
483 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
484 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$approot/Info.plist"
485 rl=("$approot/MacOS/dcpomatic2_kdm" "$approot/MacOS/dcpomatic2_kdm_cli" "$approot/Frameworks/"*.dylib)
486 relink_relative "${rl[@]}"
487 make_dmg "$appdir" "" "DCP-o-matic KDM Creator" com.dcpomatic.kdm
489 # DCP-o-matic Encode Server
490 setup "DCP-o-matic 2 Encode Server.app"
491 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server "$approot/MacOS"
492 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$approot/MacOS"
493 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
494 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_server.Info.plist "$approot/Info.plist"
495 rl=("$approot/MacOS/dcpomatic2_server" "$approot/MacOS/dcpomatic2_server_cli" "$approot/Frameworks/"*.dylib)
496 relink_relative "${rl[@]}"
497 make_dmg "$appdir" "" "DCP-o-matic Encode Server" com.dcpomatic.server
499 # DCP-o-matic Batch Converter
500 setup "DCP-o-matic 2 Batch converter.app"
501 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_batch "$approot/MacOS"
502 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
503 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_batch.Info.plist "$approot/Info.plist"
504 rl=("$approot/MacOS/dcpomatic2_batch" "$approot/Frameworks/"*.dylib)
505 relink_relative "${rl[@]}"
506 make_dmg "$appdir" "" "DCP-o-matic Batch Converter" com.dcpomatic.batch
509 setup "DCP-o-matic 2 Player.app"
510 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_player "$approot/MacOS"
511 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
512 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_player.Info.plist "$approot/Info.plist"
513 rl=("$approot/MacOS/dcpomatic2_player" "$approot/Frameworks/"*.dylib)
514 relink_relative "${rl[@]}"
515 make_dmg "$appdir" "" "DCP-o-matic Player" com.dcpomatic.player
517 # DCP-o-matic Playlist Editor
518 setup "DCP-o-matic 2 Playlist Editor.app"
519 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_playlist "$approot/MacOS"
520 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
521 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_playlist.Info.plist "$approot/Info.plist"
522 rl=("$approot/MacOS/dcpomatic2_playlist" "$approot/Frameworks/"*.dylib)
523 relink_relative "${rl[@]}"
524 make_dmg "$appdir" "" "DCP-o-matic Playlist Editor" com.dcpomatic.playlist
526 # DCP-o-matic Combiner
527 setup "DCP-o-matic 2 Combiner.app"
528 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_combiner "$approot/MacOS"
529 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
530 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_combiner.Info.plist "$approot/Info.plist"
531 rl=("$approot/MacOS/dcpomatic2_combiner" "$approot/Frameworks/"*.dylib)
532 relink_relative "${rl[@]}"
533 make_dmg "$appdir" "" "DCP-o-matic Combiner" com.dcpomatic.combiner
535 # DCP-o-matic Disk Writer .app
536 setup "DCP-o-matic 2 Disk Writer.app"
537 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk "$approot/MacOS"
538 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
539 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_disk.Info.plist "$approot/Info.plist"
540 rl=("$approot/MacOS/dcpomatic2_disk" "$approot/Frameworks/"*.dylib)
541 relink_relative "${rl[@]}"
543 # DCP-o-matic Disk Writer daemon .pkg
545 pkgbase=tmp-disk-writer
549 pkgroot=$pkgbase/root
551 mkdir -p $pkgroot/Library/LaunchDaemons
552 cat > $pkgroot/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist <<EOF
553 <?xml version="1.0" encoding="UTF-8"?>
554 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
555 <plist version="1.0">
558 <string>com.dcpomatic.disk.writer</string>
559 <key>ProgramArguments</key>
561 <string>/Library/Application Support/com.dcpomatic/dcpomatic2_disk_writer</string>
563 <key>EnvironmentVariables</key>
565 <key>DYLD_LIBRARY_PATH</key>
566 <string><![CDATA[/Library/Application Support/com.dcpomatic]]></string>
568 <key>StandardOutPath</key>
569 <string>/var/log/dcpomatic_disk_writer_out.log</string>
570 <key>StandardErrorPath</key>
571 <string>/var/log/dcpomatic_disk_writer_err.log</string>
572 <key>LaunchEvents</key>
574 <key>com.apple.notifyd.matching</key>
576 <key>com.dcpomatic.disk.writer.start</key>
578 <key>Notification</key>
579 <string>com.dcpomatic.disk.writer.start</string>
587 # Get the binaries together in $pkgbin then move them to the
588 # place with spaces in the filename to avoid some of the pain of escaping
591 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk_writer "$pkgbin"
594 rl=("$pkgbin/dcpomatic2_disk_writer" "$pkgbin/"*.dylib)
595 relink_absolute "/Library/Application Support/com.dcpomatic" "${rl[@]}"
597 mkdir $pkgbase/scripts
598 cat > $pkgbase/scripts/postinstall <<EOF
600 /bin/launchctl unload "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
601 /bin/launchctl load "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
604 chmod gou+x $pkgbase/scripts/postinstall
606 find "$pkgbin" -iname "*.dylib" -print0 | while IFS= read -r -d '' f; do
609 sign "$pkgbin/dcpomatic2_disk_writer"
611 mkdir -p "$pkgroot/Library/Application Support/com.dcpomatic"
612 mv $pkgbin/* "$pkgroot/Library/Application Support/com.dcpomatic/"
613 pkgbuild --root $pkgroot --identifier com.dcpomatic.disk.writer --scripts $pkgbase/scripts "DCP-o-matic Disk Writer.pkg"
615 make_dmg "$appdir" "DCP-o-matic Disk Writer.pkg" "DCP-o-matic Disk Writer" com.dcpomatic.disk