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 # Use a tag if what we've built is exactly on one
11 version=$(git describe --tags --abbrev=0 --match=v2.*.* --exact-match 2> /dev/null | sed -e "s/^v//")
12 if [ "$?" != "0" ]; then
13 # Otherwise use <branch>-<commit>
14 version="$(basename $(git name-rev --name-only HEAD))-$(git rev-parse --short HEAD)"
17 # DMG size in megabytes
26 APPLICATION_IDENTITY="Developer ID Application: Carl Hetherington (R82DXSR997)"
27 INSTALLER_IDENTITY="Developer ID Installer: Carl Hetherington (R82DXSR997)"
29 # This is our work area for making up the .dmgs
30 mkdir -p build/platform/osx
33 cat <<EOF > entitlements.plist
34 <?xml version="1.0" encoding="UTF-8"?>
35 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
38 <key>com.apple.security.cs.disable-library-validation</key>
40 <key>com.apple.security.cs.allow-dyld-environment-variables</key>
47 if [ "$ARCH2" == "" ]; then
50 ln -s $(readlink $f) "$3/`basename $f`"
52 cp $f "$3/`basename $f`"
56 for f in $1/$ARCH2/$2; do
58 ln -s $(readlink $f) "$3/`basename $f`"
60 g=`echo $f | sed -e "s@/$ARCH2/@/$ARCH1/@g"`
62 lipo -create $f $g -output "$3/$(basename $f)"
68 function copy_lib_root {
69 if [ "$ARCH2" == "" ]; then
70 for f in $ROOT/lib/$1*.dylib; do
72 ln -s $(readlink $f) "$2/`basename $f`"
74 cp $f "$2/`basename $f`"
78 for f in $ROOT/$ARCH2/lib/$1*.dylib; do
80 ln -s $(readlink $f) "$2/`basename $f`"
82 g=`echo $f | sed -e "s@/$ARCH2/@/$ARCH1/@g"`
84 lipo -create $f $g -output "$2/$(basename $f)"
88 to_relink="$to_relink|$1"
91 function copy_lib_env {
92 if [ "$ARCH2" == "" ]; then
93 for f in $ENV/$ARCH1/lib/$1*.dylib; do
95 ln -s $(readlink $f) "$2/`basename $f`"
97 cp $f "$2/`basename $f`"
101 for f in $ENV/$ARCH2/lib/$1*.dylib; do
103 ln -s $(readlink $f) "$2/`basename $f`"
105 g=`echo $f | sed -e "s@/$ARCH2/@/$ARCH1/@g"`
107 lipo -create $f $g -output "$2/$(basename $f)"
111 to_relink="$to_relink|$1"
114 # @param #1 directory to copy to
117 copy_lib_root libcxml "$dest"
118 copy_lib_root libdcp-1.0 "$dest"
119 copy_lib_root libasdcp-carl "$dest"
120 copy_lib_root libkumu-carl "$dest"
121 copy_lib_root libsub "$dest"
122 copy_lib_root libopenjp2 "$dest"
123 copy_lib_root libavdevice "$dest"
124 copy_lib_root libavformat "$dest"
125 copy_lib_root libavfilter "$dest"
126 copy_lib_root libavutil "$dest"
127 copy_lib_root libavcodec "$dest"
128 copy_lib_root libswscale "$dest"
129 copy_lib_root libpostproc "$dest"
130 copy_lib_root libswresample "$dest"
131 copy_lib_root liblwext4 "$dest"
132 copy_lib_root libblockdev "$dest"
133 copy_lib_root libleqm_nrt "$dest"
134 copy $ROOT src/dcpomatic/build/src/lib/libdcpomatic2.dylib "$dest"
135 copy $ROOT src/dcpomatic/build/src/wx/libdcpomatic2-wx.dylib "$dest"
136 copy_lib_env libboost_system "$dest"
137 copy_lib_env libboost_filesystem "$dest"
138 copy_lib_env libboost_thread "$dest"
139 copy_lib_env libboost_date_time "$dest"
140 copy_lib_env libboost_locale "$dest"
141 copy_lib_env libboost_regex "$dest"
142 copy_lib_env libxml++ "$dest"
143 copy_lib_env libxslt "$dest"
144 copy_lib_env libxml2 "$dest"
145 copy_lib_env libglibmm-2.4 "$dest"
146 copy_lib_env libgobject "$dest"
147 copy_lib_env libgthread "$dest"
148 copy_lib_env libgmodule "$dest"
149 copy_lib_env libsigc "$dest"
150 copy_lib_env libglib-2 "$dest"
151 copy_lib_env libintl "$dest"
152 copy_lib_env libsndfile "$dest"
153 copy_lib_env libssh "$dest"
154 copy_lib_env libwx "$dest"
155 copy_lib_env libfontconfig "$dest"
156 copy_lib_env libfreetype "$dest"
157 copy_lib_env libexpat "$dest"
158 copy_lib_env libltdl "$dest"
159 copy_lib_env libxmlsec1 "$dest"
160 copy_lib_env libcurl "$dest"
161 copy_lib_env libffi "$dest"
162 copy_lib_env libpango "$dest"
163 copy_lib_env libcairo "$dest"
164 copy_lib_env libpixman "$dest"
165 copy_lib_env libharfbuzz "$dest"
166 copy_lib_env libsamplerate "$dest"
167 copy_lib_env libicui18n "$dest"
168 copy_lib_env libicudata "$dest"
169 copy_lib_env libicuio "$dest"
170 copy_lib_env libicutest "$dest"
171 copy_lib_env libicutu "$dest"
172 copy_lib_env libicuuc "$dest"
173 copy_lib_env libFLAC "$dest"
174 copy_lib_env libvorbis "$dest"
175 copy_lib_env libogg "$dest"
176 copy_lib_env libxerces-c "$dest"
177 copy_lib_env libcrypto "$dest"
178 copy_lib_env libssl "$dest"
179 copy_lib_env libfribidi "$dest"
180 copy_lib_env libgio "$dest"
181 copy_lib_env libz "$dest"
184 # @param #1 directory to copy to
185 function copy_resources {
187 if [ "$ARCH2" == "" ]; then
190 local prefix=$ROOT/$ARCH1
192 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small_white.png "$dest"
193 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small_black.png "$dest"
194 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2.icns "$dest"
195 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_kdm.icns "$dest"
196 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_server.icns "$dest"
197 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_player.icns "$dest"
198 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_batch.icns "$dest"
199 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_playlist.icns "$dest"
200 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_disk.icns "$dest"
201 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_combiner.icns "$dest"
202 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults.png "$dest"
203 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults@2x.png "$dest"
204 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email.png "$dest"
205 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email@2x.png "$dest"
206 cp $prefix/src/dcpomatic/graphics/osx/preferences/email.png "$dest"
207 cp $prefix/src/dcpomatic/graphics/osx/preferences/email@2x.png "$dest"
208 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers.png "$dest"
209 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers@2x.png "$dest"
210 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms.png "$dest"
211 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms@2x.png "$dest"
212 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys.png "$dest"
213 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys@2x.png "$dest"
214 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet.png "$dest"
215 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet@2x.png "$dest"
216 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications.png "$dest"
217 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications@2x.png "$dest"
218 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound.png "$dest"
219 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound@2x.png "$dest"
220 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers.png "$dest"
221 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers@2x.png "$dest"
222 cp $prefix/src/dcpomatic/graphics/osx/preferences/general.png "$dest"
223 cp $prefix/src/dcpomatic/graphics/osx/preferences/general@2x.png "$dest"
224 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced.png "$dest"
225 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced@2x.png "$dest"
226 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations.png "$dest"
227 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations@2x.png "$dest"
228 cp $prefix/src/dcpomatic/fonts/LiberationSans-Regular.ttf "$dest"
229 cp $prefix/src/dcpomatic/fonts/LiberationSans-Italic.ttf "$dest"
230 cp $prefix/src/dcpomatic/fonts/LiberationSans-Bold.ttf "$dest"
231 cp $prefix/src/dcpomatic/fonts/fonts.conf.osx "$dest"/fonts.conf
232 cp $prefix/src/dcpomatic/graphics/splash.png "$dest"
233 cp $prefix/src/dcpomatic/graphics/zoom.png "$dest"
234 cp $prefix/src/dcpomatic/graphics/zoom_all.png "$dest"
235 cp $prefix/src/dcpomatic/graphics/select.png "$dest"
236 cp $prefix/src/dcpomatic/graphics/snap.png "$dest"
237 cp $prefix/src/dcpomatic/graphics/sequence.png "$dest"
238 cp $prefix/src/dcpomatic/graphics/me.jpg "$dest"
239 cp $prefix/src/dcpomatic/graphics/link.png "$dest"
240 cp $prefix/src/dcpomatic/graphics/tick.png "$dest"
241 cp $prefix/src/dcpomatic/graphics/no_tick.png "$dest"
242 cp -r $prefix/share/libdcp/xsd "$dest"
243 cp -r $prefix/share/libdcp/tags "$dest"
245 # i18n: DCP-o-matic .mo files
246 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
247 mkdir -p "$dest/$lang/LC_MESSAGES"
248 cp $prefix/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
249 cp $prefix/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
250 cp $prefix/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
253 # i18n: wxWidgets .mo files
254 for lang in de es fr it sv nl ru pl da cs; do
256 cp $ENV/$ARCH1/share/locale/$lang/LC_MESSAGES/wxstd.mo "$dest/$lang"
260 # param $1 list of things that link to other things
261 function relink_relative {
262 to_relink=`echo $to_relink | sed -e "s/\+//g"`
265 arch1_name=$(echo $ARCH1 | sed -e s@/.*@@)
266 arch2_name=$(echo $ARCH2 | sed -e s@/.*@@)
268 for arch in $arch1_name $arch2_name; do
269 for obj in "${linkers[@]}"; do
270 deps=`otool -arch $arch -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|@rpath|boost|libicu|libssh)"`
274 changes="$changes -change $dep @executable_path/../Frameworks/$base"
276 if test "x$changes" != "x"; then
277 install_name_tool $changes -id `basename "$obj"` "$obj"
283 # param $1 directory things should be relinked into
284 # $2 list of things that link to other things
285 function relink_absolute {
286 to_relink=`echo $to_relink | sed -e "s/\+//g"`
291 arch1_name=$(echo $ARCH1 | sed -e s@/.*@@)
292 arch2_name=$(echo $ARCH2 | sed -e s@/.*@@)
294 for arch in $arch1_name $arch2_name; do
295 for obj in "${linkers[@]}"; do
296 deps=`otool -arch $arch -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu|libssh)"`
299 install_name_tool -change "$dep" "$target"/$base -id `basename "$obj"` "$obj"
306 codesign --verify --verbose=4 --options runtime --entitlements entitlements.plist --sign "$APPLICATION_IDENTITY" "$1"
307 if [ "$?" != "0" ]; then
308 echo "Failed to sign $1"
313 # @param #1 .app directory
314 # @param #2 .pkg or ""
315 # @param #3 full name e.g. DCP-o-matic Batch Converter
316 # @param #4 list of executables
322 tmp_dmg=dcpomatic_tmp.dmg
323 dmg="$full_name $version.dmg"
324 vol_name=DCP-o-matic-$version
326 find "$appdir/Contents/Frameworks" -iname "*.dylib" -type f -print0 | while IFS= read -r -d '' f; do
330 sign "$appdir/Contents/MacOS/$f"
333 if [ "$pkg" != "" ]; then
334 productsign --sign "$INSTALLER_IDENTITY" "$pkg" "signed_temp.pkg"
335 if [ "$?" != "0" ]; then
336 echo "Failed to sign .pkg"
339 mv signed_temp.pkg "$pkg"
343 cp -a "$appdir" $vol_name
344 if [ "$pkg" != "" ]; then
345 cp -a "$pkg" $vol_name
347 ln -s /Applications "$vol_name/Applications"
348 cat<<EOF > "$vol_name/READ ME.txt"
349 Welcome to DCP-o-matic! The first time you run the program there may be
350 a long (several-minute) delay while macOS checks the code for viruses and
351 other malware. Please be patient!
353 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
354 Beim erstmaligen Start der DCP-o-matic Anwendungen kann ein längerer
355 Verifikationsvorgang auftreten. Dies ist von der macOS Sicherheitsumgebung
356 'Gatekeeper' verursacht. Dieser je nach Rechner teils minutenlange
357 Verifikationsvorgang ist gegenwärtig normal und nicht zu umgehen,
358 es ist kein Programmfehler. Warten sie die Verifikation für jede der
359 DCP-o-matic Anwendungen ab, bei weiteren Programmstarts wird sie nicht
363 if [ "$pkg" != "" ]; then
364 cat<<EOF > "$vol_name/READ ME.txt"
366 To run this software successfully you must install $pkg before running
371 if [ "$pkg" != "" ]; then
372 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
374 To run this software successfully you must install $pkg before running
379 rm -f $tmp_dmg "$dmg"
380 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
381 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
382 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
386 tell application "Finder"
387 tell disk "'$vol_name'"
389 set current view of container window to icon view
390 set toolbar visible of container window to false
391 set statusbar visible of container window to false
392 set the bounds of container window to {400, 200, 1160, 600}
393 set the bounds of container window to {400, 200, 1160, 600}
394 set the bounds of container window to {400, 200, 1160, 600}
395 set theViewOptions to the icon view options of container window
396 set arrangement of theViewOptions to not arranged
397 set icon size of theViewOptions to 64
398 set position of item "'$appdir'" of container window to {90, 80}
399 set position of item "Applications" of container window to {265, 80}
400 set position of item "READ ME.txt" of container window to {430, 80}
401 set position of item "READ ME.de_DE.txt" of container window to {595, 80}
402 set position of item "DCP-o-matic Disk Writer.pkg" of container window to {90, 255}
405 update without registering applications
411 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
414 hdiutil eject $device
415 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
416 sips -i "$appdir/Contents/Resources/dcpomatic2.icns"
417 DeRez -only icns "$appdir/Contents/Resources/dcpomatic2.icns" > "$appdir/Contents/Resources/DCP-o-matic.rsrc"
418 Rez -append "$appdir/Contents/Resources/DCP-o-matic.rsrc" -o "$dmg"
423 codesign --timestamp --verify --verbose --options runtime --entitlements entitlements.plist --sign "$APPLICATION_IDENTITY" "$dmg"
433 approot="$appdir/Contents"
435 mkdir -p "$approot/MacOS"
436 mkdir -p "$approot/Frameworks"
437 mkdir -p "$approot/Resources"
439 to_relink="dcpomatic"
440 copy_libs "$approot/Frameworks"
441 copy_resources "$approot/Resources"
444 function copy_verify {
445 copy $ROOT src/libdcp/build/tools/dcpverify "$approot/MacOS"
446 mv "$approot/MacOS/dcpverify" "$approot/MacOS/dcpomatic2_verify"
447 rl=("$approot/MacOS/dcpomatic2_verify" "$approot/Frameworks/"*.dylib)
448 relink_relative "${rl[@]}"
451 if [ "$ARCH2" == "" ]; then
458 setup "DCP-o-matic 2.app"
459 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$approot/MacOS"
460 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$approot/MacOS"
461 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_create "$approot/MacOS"
462 copy $ROOT bin/ffprobe "$approot/MacOS"
463 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
465 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$approot/Info.plist"
466 rl=("$approot/MacOS/dcpomatic2" "$approot/MacOS/dcpomatic2_cli" "$approot/MacOS/dcpomatic2_create" "$approot/MacOS/ffprobe" "$approot/Frameworks/"*.dylib)
467 relink_relative "${rl[@]}"
468 make_dmg "$appdir" "" "DCP-o-matic" "dcpomatic2_verify openssl ffprobe dcpomatic2_cli dcpomatic2_create dcpomatic2"
470 # DCP-o-matic KDM Creator
471 setup "DCP-o-matic 2 KDM Creator.app"
472 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm "$approot/MacOS"
473 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm_cli "$approot/MacOS"
474 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
476 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$approot/Info.plist"
477 rl=("$approot/MacOS/dcpomatic2_kdm" "$approot/MacOS/dcpomatic2_kdm_cli" "$approot/Frameworks/"*.dylib)
478 relink_relative "${rl[@]}"
479 make_dmg "$appdir" "" "DCP-o-matic KDM Creator" "dcpomatic2_verify openssl dcpomatic2_kdm_cli dcpomatic2_kdm"
481 # DCP-o-matic Encode Server
482 setup "DCP-o-matic 2 Encode Server.app"
483 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server "$approot/MacOS"
484 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$approot/MacOS"
485 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
487 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_server.Info.plist "$approot/Info.plist"
488 rl=("$approot/MacOS/dcpomatic2_server" "$approot/MacOS/dcpomatic2_server_cli" "$approot/Frameworks/"*.dylib)
489 relink_relative "${rl[@]}"
490 make_dmg "$appdir" "" "DCP-o-matic Encode Server" "dcpomatic2_verify openssl dcpomatic2_server_cli dcpomatic2_server"
492 # DCP-o-matic Batch Converter
493 setup "DCP-o-matic 2 Batch converter.app"
494 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_batch "$approot/MacOS"
495 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
497 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_batch.Info.plist "$approot/Info.plist"
498 rl=("$approot/MacOS/dcpomatic2_batch" "$approot/Frameworks/"*.dylib)
499 relink_relative "${rl[@]}"
500 make_dmg "$appdir" "" "DCP-o-matic Batch Converter" "dcpomatic2_verify openssl dcpomatic2_batch"
503 setup "DCP-o-matic 2 Player.app"
504 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_player "$approot/MacOS"
505 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
507 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_player.Info.plist "$approot/Info.plist"
508 rl=("$approot/MacOS/dcpomatic2_player" "$approot/Frameworks/"*.dylib)
509 relink_relative "${rl[@]}"
510 make_dmg "$appdir" "" "DCP-o-matic Player" "dcpomatic2_verify openssl dcpomatic2_player"
512 # DCP-o-matic Playlist Editor
513 setup "DCP-o-matic 2 Playlist Editor.app"
514 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_playlist "$approot/MacOS"
515 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
517 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_playlist.Info.plist "$approot/Info.plist"
518 rl=("$approot/MacOS/dcpomatic2_playlist" "$approot/Frameworks/"*.dylib)
519 relink_relative "${rl[@]}"
520 make_dmg "$appdir" "" "DCP-o-matic Playlist Editor" "dcpomatic2_verify openssl dcpomatic2_playlist"
522 # DCP-o-matic Combiner
523 setup "DCP-o-matic 2 Combiner.app"
524 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_combiner "$approot/MacOS"
525 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
527 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_combiner.Info.plist "$approot/Info.plist"
528 rl=("$approot/MacOS/dcpomatic2_combiner" "$approot/Frameworks/"*.dylib)
529 relink_relative "${rl[@]}"
530 make_dmg "$appdir" "" "DCP-o-matic Combiner" "dcpomatic2_verify openssl dcpomatic2_combiner"
532 # DCP-o-matic Disk Writer .app
533 setup "DCP-o-matic 2 Disk Writer.app"
534 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk "$approot/MacOS"
535 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
537 cp $prefix/src/dcpomatic/platform/osx/uninstall_disk.applescript "$approot/Resources"
538 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_disk.Info.plist "$approot/Info.plist"
539 rl=("$approot/MacOS/dcpomatic2_disk" "$approot/Frameworks/"*.dylib)
540 relink_relative "${rl[@]}"
542 # DCP-o-matic Disk Writer daemon .pkg
544 pkgbase=tmp-disk-writer
548 pkgroot=$pkgbase/root
550 mkdir -p $pkgroot/Library/LaunchDaemons
551 cat > $pkgroot/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist <<EOF
552 <?xml version="1.0" encoding="UTF-8"?>
553 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
554 <plist version="1.0">
557 <string>com.dcpomatic.disk.writer</string>
558 <key>ProgramArguments</key>
560 <string>/Library/Application Support/com.dcpomatic/dcpomatic2_disk_writer</string>
562 <key>EnvironmentVariables</key>
564 <key>DYLD_LIBRARY_PATH</key>
565 <string><![CDATA[/Library/Application Support/com.dcpomatic]]></string>
567 <key>StandardOutPath</key>
568 <string>/var/log/dcpomatic_disk_writer_out.log</string>
569 <key>StandardErrorPath</key>
570 <string>/var/log/dcpomatic_disk_writer_err.log</string>
571 <key>LaunchEvents</key>
573 <key>com.apple.notifyd.matching</key>
575 <key>com.dcpomatic.disk.writer.start</key>
577 <key>Notification</key>
578 <string>com.dcpomatic.disk.writer.start</string>
586 # Get the binaries together in $pkgbin then move them to the
587 # place with spaces in the filename to avoid some of the pain of escaping
590 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk_writer "$pkgbin"
593 rl=("$pkgbin/dcpomatic2_disk_writer" "$pkgbin/"*.dylib)
594 relink_absolute "/Library/Application Support/com.dcpomatic" "${rl[@]}"
596 mkdir $pkgbase/scripts
597 cat > $pkgbase/scripts/postinstall <<EOF
599 /bin/launchctl unload "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
600 /bin/launchctl load "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
603 chmod gou+x $pkgbase/scripts/postinstall
605 find "$pkgbin" -iname "*.dylib" -type f -print0 | while IFS= read -r -d '' f; do
608 sign "$pkgbin/dcpomatic2_disk_writer"
610 mkdir -p "$pkgroot/Library/Application Support/com.dcpomatic"
611 mv $pkgbin/* "$pkgroot/Library/Application Support/com.dcpomatic/"
612 pkgbuild --root $pkgroot --identifier com.dcpomatic.disk.writer --scripts $pkgbase/scripts "DCP-o-matic Disk Writer.pkg"
614 make_dmg "$appdir" "DCP-o-matic Disk Writer.pkg" "DCP-o-matic Disk Writer" "dcpomatic2_verify openssl dcpomatic2_disk"