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"
234 cp -r $prefix/share/libdcp/tags "$dest"
236 # i18n: DCP-o-matic .mo files
237 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
238 mkdir -p "$dest/$lang/LC_MESSAGES"
239 cp $prefix/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
240 cp $prefix/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
241 cp $prefix/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
244 # i18n: wxWidgets .mo files
245 for lang in de es fr it sv nl ru pl da cs; do
247 cp $ENV/64/share/locale/$lang/LC_MESSAGES/wxstd.mo "$dest/$lang"
251 # param $1 list of things that link to other things
252 function relink_relative {
253 to_relink=`echo $to_relink | sed -e "s/\+//g"`
256 for obj in "${linkers[@]}"; do
257 deps=`otool -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu)"`
261 if [ "$TYPE" == "universal" ]; then
262 # $dep will be a path within 64/; make a 32/ path too
263 dep32=`echo $dep | sed -e "s/\/64\//\/32\//g"`
264 changes="$changes -change $dep @executable_path/../Frameworks/$base -change $dep32 @executable_path/../Frameworks/$base"
266 changes="$changes -change $dep @executable_path/../Frameworks/$base"
269 if test "x$changes" != "x"; then
270 install_name_tool $changes -id `basename "$obj"` "$obj"
275 # param $1 directory things should be relinked into
276 # $2 list of things that link to other things
277 function relink_absolute {
278 to_relink=`echo $to_relink | sed -e "s/\+//g"`
283 for obj in "${linkers[@]}"; do
284 deps=`otool -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu)"`
287 install_name_tool -change "$dep" "$target"/$base -id `basename "$obj"` "$obj"
293 codesign --deep --force --verify --verbose --options runtime --sign "Developer ID Application: Carl Hetherington (R82DXSR997)" "$1"
294 if [ "$?" != "0" ]; then
295 echo "Failed to sign $1"
301 # @param #1 .app directory
302 # @param #2 .pkg or ""
303 # @param #3 full name e.g. DCP-o-matic Batch Converter
304 # @param #4 bundle id e.g. com.dcpomatic.batch
310 tmp_dmg=dcpomatic_tmp.dmg
311 dmg="$full_name $version.dmg"
312 vol_name=DCP-o-matic-$version
316 if [ "$pkg" != "" ]; then
317 productsign --sign "Developer ID Installer: Carl Hetherington (R82DXSR997)" "$pkg" "signed_temp.pkg"
318 if [ "$?" != "0" ]; then
319 echo "Failed to sign .pkg"
322 mv signed_temp.pkg "$pkg"
326 cp -a "$appdir" $vol_name
327 if [ "$pkg" != "" ]; then
328 cp -a "$pkg" $vol_name
330 ln -s /Applications "$vol_name/Applications"
331 cat<<EOF > "$vol_name/READ ME.txt"
332 Welcome to DCP-o-matic! The first time you run the program there may be
333 a long (several-minute) delay while OS X checks the code for viruses and
334 other malware. Please be patient!
336 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
337 Beim erstmaligen Start der DCP-o-matic Anwendungen kann ein längerer
338 Verifikationsvorgang auftreten. Dies ist von der OS X Sicherheitsumgebung
339 'Gatekeeper' verursacht. Dieser je nach Rechner teils minutenlange
340 Verifikationsvorgang ist gegenwärtig normal und nicht zu umgehen,
341 es ist kein Programmfehler. Warten sie die Verifikation für jede der
342 DCP-o-matic Anwendungen ab, bei weiteren Programmstarts wird sie nicht
346 if [ "$pkg" != "" ]; then
347 cat<<EOF > "$vol_name/READ ME.txt"
349 To run this software successfully you must install $pkg before running
354 if [ "$pkg" != "" ]; then
355 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
357 To run this software successfully you must install $pkg before running
362 rm -f $tmp_dmg "$dmg"
363 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
364 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
365 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
369 tell application "Finder"
370 tell disk "'$vol_name'"
372 set current view of container window to icon view
373 set toolbar visible of container window to false
374 set statusbar visible of container window to false
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 the bounds of container window to {400, 200, 1160, 600}
378 set theViewOptions to the icon view options of container window
379 set arrangement of theViewOptions to not arranged
380 set icon size of theViewOptions to 64
381 set position of item "'$appdir'" of container window to {90, 80}
382 set position of item "Applications" of container window to {265, 80}
383 set position of item "READ ME.txt" of container window to {430, 80}
384 set position of item "READ ME.de_DE.txt" of container window to {595, 80}
385 set position of item "DCP-o-matic Disk Writer.pkg" of container window to {90, 255}
388 update without registering applications
394 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
397 hdiutil eject $device
398 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
399 sips -i "$appdir/Contents/Resources/dcpomatic2.icns"
400 DeRez -only icns "$appdir/Contents/Resources/dcpomatic2.icns" > "$appdir/Contents/Resources/DCP-o-matic.rsrc"
401 Rez -append "$appdir/Contents/Resources/DCP-o-matic.rsrc" -o "$dmg"
406 codesign --verify --verbose --options runtime --sign "Developer ID Application: Carl Hetherington (R82DXSR997)" "$dmg"
408 # We only notarize thin builds, as if we're building universal binaries we must be on an OS
409 # sufficiently old that it can't notarize anyway
410 if [ "$TYPE" == "thin" ]; then
412 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")
415 echo "Checking up on $id"
417 status=$(xcrun altool --notarization-info $id -u $APPLE_ID -p $APPLE_PASSWORD --output-format xml)
419 summary=$(echo "$status" | grep -C1 "<key>Status</key>" | tail -n 1 | sed -e "s/ .//g")
421 if [ "$summary" == "<string>invalid</string>" ]; then
422 echo "Notarization failed."
426 if [ "$summary" == "<string>success</string>" ]; then
431 if [ "$N" == "30" ]; then
432 echo "Timed out waiting for notarization"
437 xcrun stapler staple "$dmg"
448 approot="$appdir/Contents"
450 mkdir -p "$approot/MacOS"
451 mkdir -p "$approot/Frameworks"
452 mkdir -p "$approot/Resources"
454 to_relink="dcpomatic"
455 copy_libs "$approot/Frameworks"
456 copy_resources "$approot/Resources"
469 setup "DCP-o-matic 2.app"
470 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$approot/MacOS"
471 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$approot/MacOS"
472 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_create "$approot/MacOS"
473 copy $ROOT bin/ffprobe "$approot/MacOS"
474 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
475 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$approot/Info.plist"
476 rl=("$approot/MacOS/dcpomatic2" "$approot/MacOS/dcpomatic2_cli" "$approot/MacOS/dcpomatic2_create" "$approot/MacOS/ffprobe" "$approot/Frameworks/"*.dylib)
477 relink_relative "${rl[@]}"
478 make_dmg "$appdir" "" "DCP-o-matic" com.dcpomatic
480 # DCP-o-matic KDM Creator
481 setup "DCP-o-matic 2 KDM Creator.app"
482 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm "$approot/MacOS"
483 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm_cli "$approot/MacOS"
484 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
485 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$approot/Info.plist"
486 rl=("$approot/MacOS/dcpomatic2_kdm" "$approot/MacOS/dcpomatic2_kdm_cli" "$approot/Frameworks/"*.dylib)
487 relink_relative "${rl[@]}"
488 make_dmg "$appdir" "" "DCP-o-matic KDM Creator" com.dcpomatic.kdm
490 # DCP-o-matic Encode Server
491 setup "DCP-o-matic 2 Encode Server.app"
492 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server "$approot/MacOS"
493 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$approot/MacOS"
494 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
495 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_server.Info.plist "$approot/Info.plist"
496 rl=("$approot/MacOS/dcpomatic2_server" "$approot/MacOS/dcpomatic2_server_cli" "$approot/Frameworks/"*.dylib)
497 relink_relative "${rl[@]}"
498 make_dmg "$appdir" "" "DCP-o-matic Encode Server" com.dcpomatic.server
500 # DCP-o-matic Batch Converter
501 setup "DCP-o-matic 2 Batch converter.app"
502 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_batch "$approot/MacOS"
503 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
504 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_batch.Info.plist "$approot/Info.plist"
505 rl=("$approot/MacOS/dcpomatic2_batch" "$approot/Frameworks/"*.dylib)
506 relink_relative "${rl[@]}"
507 make_dmg "$appdir" "" "DCP-o-matic Batch Converter" com.dcpomatic.batch
510 setup "DCP-o-matic 2 Player.app"
511 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_player "$approot/MacOS"
512 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
513 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_player.Info.plist "$approot/Info.plist"
514 rl=("$approot/MacOS/dcpomatic2_player" "$approot/Frameworks/"*.dylib)
515 relink_relative "${rl[@]}"
516 make_dmg "$appdir" "" "DCP-o-matic Player" com.dcpomatic.player
518 # DCP-o-matic Playlist Editor
519 setup "DCP-o-matic 2 Playlist Editor.app"
520 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_playlist "$approot/MacOS"
521 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
522 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_playlist.Info.plist "$approot/Info.plist"
523 rl=("$approot/MacOS/dcpomatic2_playlist" "$approot/Frameworks/"*.dylib)
524 relink_relative "${rl[@]}"
525 make_dmg "$appdir" "" "DCP-o-matic Playlist Editor" com.dcpomatic.playlist
527 # DCP-o-matic Combiner
528 setup "DCP-o-matic 2 Combiner.app"
529 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_combiner "$approot/MacOS"
530 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
531 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_combiner.Info.plist "$approot/Info.plist"
532 rl=("$approot/MacOS/dcpomatic2_combiner" "$approot/Frameworks/"*.dylib)
533 relink_relative "${rl[@]}"
534 make_dmg "$appdir" "" "DCP-o-matic Combiner" com.dcpomatic.combiner
536 # DCP-o-matic Disk Writer .app
537 setup "DCP-o-matic 2 Disk Writer.app"
538 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk "$approot/MacOS"
539 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
540 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_disk.Info.plist "$approot/Info.plist"
541 rl=("$approot/MacOS/dcpomatic2_disk" "$approot/Frameworks/"*.dylib)
542 relink_relative "${rl[@]}"
544 # DCP-o-matic Disk Writer daemon .pkg
546 pkgbase=tmp-disk-writer
550 pkgroot=$pkgbase/root
552 mkdir -p $pkgroot/Library/LaunchDaemons
553 cat > $pkgroot/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist <<EOF
554 <?xml version="1.0" encoding="UTF-8"?>
555 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
556 <plist version="1.0">
559 <string>com.dcpomatic.disk.writer</string>
560 <key>ProgramArguments</key>
562 <string>/Library/Application Support/com.dcpomatic/dcpomatic2_disk_writer</string>
564 <key>EnvironmentVariables</key>
566 <key>DYLD_LIBRARY_PATH</key>
567 <string><![CDATA[/Library/Application Support/com.dcpomatic]]></string>
569 <key>StandardOutPath</key>
570 <string>/var/log/dcpomatic_disk_writer_out.log</string>
571 <key>StandardErrorPath</key>
572 <string>/var/log/dcpomatic_disk_writer_err.log</string>
573 <key>LaunchEvents</key>
575 <key>com.apple.notifyd.matching</key>
577 <key>com.dcpomatic.disk.writer.start</key>
579 <key>Notification</key>
580 <string>com.dcpomatic.disk.writer.start</string>
588 # Get the binaries together in $pkgbin then move them to the
589 # place with spaces in the filename to avoid some of the pain of escaping
592 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk_writer "$pkgbin"
595 rl=("$pkgbin/dcpomatic2_disk_writer" "$pkgbin/"*.dylib)
596 relink_absolute "/Library/Application Support/com.dcpomatic" "${rl[@]}"
598 mkdir $pkgbase/scripts
599 cat > $pkgbase/scripts/postinstall <<EOF
601 /bin/launchctl unload "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
602 /bin/launchctl load "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
605 chmod gou+x $pkgbase/scripts/postinstall
607 find "$pkgbin" -iname "*.dylib" -print0 | while IFS= read -r -d '' f; do
610 sign "$pkgbin/dcpomatic2_disk_writer"
612 mkdir -p "$pkgroot/Library/Application Support/com.dcpomatic"
613 mv $pkgbin/* "$pkgroot/Library/Application Support/com.dcpomatic/"
614 pkgbuild --root $pkgroot --identifier com.dcpomatic.disk.writer --scripts $pkgbase/scripts "DCP-o-matic Disk Writer.pkg"
616 make_dmg "$appdir" "DCP-o-matic Disk Writer.pkg" "DCP-o-matic Disk Writer" com.dcpomatic.disk