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 APPLICATION_IDENTITY="Developer ID Application: Carl Hetherington (R82DXSR997)"
22 INSTALLER_IDENTITY="Developer ID Installer: Carl Hetherington (R82DXSR997)"
24 # This is our work area for making up the .dmgs
25 mkdir -p build/platform/osx
28 cat <<EOF > entitlements.plist
29 <?xml version="1.0" encoding="UTF-8"?>
30 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
33 <key>com.apple.security.cs.disable-library-validation</key>
35 <key>com.apple.security.cs.allow-dyld-environment-variables</key>
42 if [ "$ARCH2" == "" ]; then
45 ln -s $(readlink $f) "$3/`basename $f`"
47 cp $f "$3/`basename $f`"
51 for f in $1/$ARCH2/$2; do
53 ln -s $(readlink $f) "$3/`basename $f`"
55 g=`echo $f | sed -e "s@/$ARCH2/@/$ARCH1/@g"`
57 lipo -create $f $g -output "$3/$(basename $f)"
63 function copy_lib_root {
64 if [ "$ARCH2" == "" ]; then
65 for f in $ROOT/lib/$1*.dylib; do
67 ln -s $(readlink $f) "$2/`basename $f`"
69 cp $f "$2/`basename $f`"
73 for f in $ROOT/$ARCH2/lib/$1*.dylib; do
75 ln -s $(readlink $f) "$2/`basename $f`"
77 g=`echo $f | sed -e "s@/$ARCH2/@/$ARCH1/@g"`
79 lipo -create $f $g -output "$2/$(basename $f)"
83 to_relink="$to_relink|$1"
86 function copy_lib_env {
87 if [ "$ARCH2" == "" ]; then
88 for f in $ENV/$ARCH1/lib/$1*.dylib; do
90 ln -s $(readlink $f) "$2/`basename $f`"
92 cp $f "$2/`basename $f`"
96 for f in $ENV/$ARCH2/lib/$1*.dylib; do
98 ln -s $(readlink $f) "$2/`basename $f`"
100 g=`echo $f | sed -e "s@/$ARCH2/@/$ARCH1/@g"`
102 lipo -create $f $g -output "$2/$(basename $f)"
106 to_relink="$to_relink|$1"
109 # @param #1 directory to copy to
112 copy_lib_root libcxml "$dest"
113 copy_lib_root libdcp-1.0 "$dest"
114 copy_lib_root libasdcp-carl "$dest"
115 copy_lib_root libkumu-carl "$dest"
116 copy_lib_root libsub "$dest"
117 copy_lib_root libopenjp2 "$dest"
118 copy_lib_root libavdevice "$dest"
119 copy_lib_root libavformat "$dest"
120 copy_lib_root libavfilter "$dest"
121 copy_lib_root libavutil "$dest"
122 copy_lib_root libavcodec "$dest"
123 copy_lib_root libswscale "$dest"
124 copy_lib_root libpostproc "$dest"
125 copy_lib_root libswresample "$dest"
126 copy_lib_root liblwext4 "$dest"
127 copy_lib_root libblockdev "$dest"
128 copy_lib_root libleqm_nrt "$dest"
129 copy $ROOT src/dcpomatic/build/src/lib/libdcpomatic2.dylib "$dest"
130 copy $ROOT src/dcpomatic/build/src/wx/libdcpomatic2-wx.dylib "$dest"
131 copy_lib_env libboost_system "$dest"
132 copy_lib_env libboost_filesystem "$dest"
133 copy_lib_env libboost_thread "$dest"
134 copy_lib_env libboost_date_time "$dest"
135 copy_lib_env libboost_locale "$dest"
136 copy_lib_env libboost_regex "$dest"
137 copy_lib_env libxml++ "$dest"
138 copy_lib_env libxslt "$dest"
139 copy_lib_env libxml2 "$dest"
140 copy_lib_env libglibmm-2.4 "$dest"
141 copy_lib_env libgobject "$dest"
142 copy_lib_env libgthread "$dest"
143 copy_lib_env libgmodule "$dest"
144 copy_lib_env libsigc "$dest"
145 copy_lib_env libglib-2 "$dest"
146 copy_lib_env libintl "$dest"
147 copy_lib_env libsndfile "$dest"
148 copy_lib_env libssh "$dest"
149 copy_lib_env libwx "$dest"
150 copy_lib_env libfontconfig "$dest"
151 copy_lib_env libfreetype "$dest"
152 copy_lib_env libexpat "$dest"
153 copy_lib_env libltdl "$dest"
154 copy_lib_env libxmlsec1 "$dest"
155 copy_lib_env libcurl "$dest"
156 copy_lib_env libffi "$dest"
157 copy_lib_env libpango "$dest"
158 copy_lib_env libcairo "$dest"
159 copy_lib_env libpixman "$dest"
160 copy_lib_env libharfbuzz "$dest"
161 copy_lib_env libsamplerate "$dest"
162 copy_lib_env libicui18n "$dest"
163 copy_lib_env libicudata "$dest"
164 copy_lib_env libicuio "$dest"
165 copy_lib_env libicutest "$dest"
166 copy_lib_env libicutu "$dest"
167 copy_lib_env libicuuc "$dest"
168 copy_lib_env libFLAC "$dest"
169 copy_lib_env libvorbis "$dest"
170 copy_lib_env libogg "$dest"
171 copy_lib_env libxerces-c "$dest"
172 copy_lib_env libcrypto "$dest"
173 copy_lib_env libssl "$dest"
174 copy_lib_env libfribidi "$dest"
175 copy_lib_env libgio "$dest"
176 copy_lib_env libz "$dest"
179 # @param #1 directory to copy to
180 function copy_resources {
182 if [ "$ARCH2" == "" ]; then
185 local prefix=$ROOT/$ARCH1
187 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small_white.png "$dest"
188 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small_black.png "$dest"
189 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2.icns "$dest"
190 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_kdm.icns "$dest"
191 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_server.icns "$dest"
192 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_player.icns "$dest"
193 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_batch.icns "$dest"
194 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_playlist.icns "$dest"
195 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_disk.icns "$dest"
196 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_combiner.icns "$dest"
197 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults.png "$dest"
198 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults@2x.png "$dest"
199 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email.png "$dest"
200 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email@2x.png "$dest"
201 cp $prefix/src/dcpomatic/graphics/osx/preferences/email.png "$dest"
202 cp $prefix/src/dcpomatic/graphics/osx/preferences/email@2x.png "$dest"
203 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers.png "$dest"
204 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers@2x.png "$dest"
205 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms.png "$dest"
206 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms@2x.png "$dest"
207 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys.png "$dest"
208 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys@2x.png "$dest"
209 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet.png "$dest"
210 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet@2x.png "$dest"
211 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications.png "$dest"
212 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications@2x.png "$dest"
213 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound.png "$dest"
214 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound@2x.png "$dest"
215 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers.png "$dest"
216 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers@2x.png "$dest"
217 cp $prefix/src/dcpomatic/graphics/osx/preferences/general.png "$dest"
218 cp $prefix/src/dcpomatic/graphics/osx/preferences/general@2x.png "$dest"
219 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced.png "$dest"
220 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced@2x.png "$dest"
221 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations.png "$dest"
222 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations@2x.png "$dest"
223 cp $prefix/src/dcpomatic/fonts/LiberationSans-Regular.ttf "$dest"
224 cp $prefix/src/dcpomatic/fonts/LiberationSans-Italic.ttf "$dest"
225 cp $prefix/src/dcpomatic/fonts/LiberationSans-Bold.ttf "$dest"
226 cp $prefix/src/dcpomatic/fonts/fonts.conf.osx "$dest"/fonts.conf
227 cp $prefix/src/dcpomatic/graphics/splash.png "$dest"
228 cp $prefix/src/dcpomatic/graphics/zoom.png "$dest"
229 cp $prefix/src/dcpomatic/graphics/zoom_all.png "$dest"
230 cp $prefix/src/dcpomatic/graphics/select.png "$dest"
231 cp $prefix/src/dcpomatic/graphics/snap.png "$dest"
232 cp $prefix/src/dcpomatic/graphics/sequence.png "$dest"
233 cp $prefix/src/dcpomatic/graphics/me.jpg "$dest"
234 cp $prefix/src/dcpomatic/graphics/link.png "$dest"
235 cp $prefix/src/dcpomatic/graphics/tick.png "$dest"
236 cp $prefix/src/dcpomatic/graphics/no_tick.png "$dest"
237 cp -r $prefix/share/libdcp/xsd "$dest"
238 cp -r $prefix/share/libdcp/tags "$dest"
240 # i18n: DCP-o-matic .mo files
241 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
242 mkdir -p "$dest/$lang/LC_MESSAGES"
243 cp $prefix/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
244 cp $prefix/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
245 cp $prefix/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
248 # i18n: wxWidgets .mo files
249 for lang in de es fr it sv nl ru pl da cs; do
251 cp $ENV/$ARCH1/share/locale/$lang/LC_MESSAGES/wxstd.mo "$dest/$lang"
255 # param $1 list of things that link to other things
256 function relink_relative {
257 to_relink=`echo $to_relink | sed -e "s/\+//g"`
260 arch1_name=$(echo $ARCH1 | sed -e s@/.*@@)
261 arch2_name=$(echo $ARCH2 | sed -e s@/.*@@)
263 for arch in $arch1_name $arch2_name; do
264 for obj in "${linkers[@]}"; do
265 deps=`otool -arch $arch -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|@rpath|boost|libicu|libssh)"`
269 changes="$changes -change $dep @executable_path/../Frameworks/$base"
271 if test "x$changes" != "x"; then
272 install_name_tool $changes -id `basename "$obj"` "$obj"
278 # param $1 directory things should be relinked into
279 # $2 list of things that link to other things
280 function relink_absolute {
281 to_relink=`echo $to_relink | sed -e "s/\+//g"`
286 arch1_name=$(echo $ARCH1 | sed -e s@/.*@@)
287 arch2_name=$(echo $ARCH2 | sed -e s@/.*@@)
289 for arch in $arch1_name $arch2_name; do
290 for obj in "${linkers[@]}"; do
291 deps=`otool -arch $arch -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu|libssh)"`
294 install_name_tool -change "$dep" "$target"/$base -id `basename "$obj"` "$obj"
301 codesign --verify --verbose=4 --options runtime --entitlements entitlements.plist --sign "$APPLICATION_IDENTITY" "$1"
302 if [ "$?" != "0" ]; then
303 echo "Failed to sign $1"
308 # @param #1 .app directory
309 # @param #2 .pkg or ""
310 # @param #3 full name e.g. DCP-o-matic Batch Converter
311 # @param #4 list of executables
317 tmp_dmg=dcpomatic_tmp.dmg
318 dmg="$full_name $version.dmg"
319 vol_name=DCP-o-matic-$version
321 find "$appdir/Contents/Frameworks" -iname "*.dylib" -type f -print0 | while IFS= read -r -d '' f; do
325 sign "$appdir/Contents/MacOS/$f"
328 if [ "$pkg" != "" ]; then
329 productsign --sign "$INSTALLER_IDENTITY" "$pkg" "signed_temp.pkg"
330 if [ "$?" != "0" ]; then
331 echo "Failed to sign .pkg"
334 mv signed_temp.pkg "$pkg"
338 cp -a "$appdir" $vol_name
339 if [ "$pkg" != "" ]; then
340 cp -a "$pkg" $vol_name
342 ln -s /Applications "$vol_name/Applications"
343 cat<<EOF > "$vol_name/READ ME.txt"
344 Welcome to DCP-o-matic! The first time you run the program there may be
345 a long (several-minute) delay while macOS checks the code for viruses and
346 other malware. Please be patient!
348 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
349 Beim erstmaligen Start der DCP-o-matic Anwendungen kann ein längerer
350 Verifikationsvorgang auftreten. Dies ist von der macOS Sicherheitsumgebung
351 'Gatekeeper' verursacht. Dieser je nach Rechner teils minutenlange
352 Verifikationsvorgang ist gegenwärtig normal und nicht zu umgehen,
353 es ist kein Programmfehler. Warten sie die Verifikation für jede der
354 DCP-o-matic Anwendungen ab, bei weiteren Programmstarts wird sie nicht
358 if [ "$pkg" != "" ]; then
359 cat<<EOF > "$vol_name/READ ME.txt"
361 To run this software successfully you must install $pkg before running
366 if [ "$pkg" != "" ]; then
367 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
369 To run this software successfully you must install $pkg before running
374 rm -f $tmp_dmg "$dmg"
375 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
376 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
377 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
381 tell application "Finder"
382 tell disk "'$vol_name'"
384 set current view of container window to icon view
385 set toolbar visible of container window to false
386 set statusbar visible of container window to false
387 set the bounds of container window to {400, 200, 1160, 600}
388 set the bounds of container window to {400, 200, 1160, 600}
389 set the bounds of container window to {400, 200, 1160, 600}
390 set theViewOptions to the icon view options of container window
391 set arrangement of theViewOptions to not arranged
392 set icon size of theViewOptions to 64
393 set position of item "'$appdir'" of container window to {90, 80}
394 set position of item "Applications" of container window to {265, 80}
395 set position of item "READ ME.txt" of container window to {430, 80}
396 set position of item "READ ME.de_DE.txt" of container window to {595, 80}
397 set position of item "DCP-o-matic Disk Writer.pkg" of container window to {90, 255}
400 update without registering applications
406 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
409 hdiutil eject $device
410 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
411 sips -i "$appdir/Contents/Resources/dcpomatic2.icns"
412 DeRez -only icns "$appdir/Contents/Resources/dcpomatic2.icns" > "$appdir/Contents/Resources/DCP-o-matic.rsrc"
413 Rez -append "$appdir/Contents/Resources/DCP-o-matic.rsrc" -o "$dmg"
418 codesign --timestamp --verify --verbose --options runtime --entitlements entitlements.plist --sign "$APPLICATION_IDENTITY" "$dmg"
428 approot="$appdir/Contents"
430 mkdir -p "$approot/MacOS"
431 mkdir -p "$approot/Frameworks"
432 mkdir -p "$approot/Resources"
434 to_relink="dcpomatic"
435 copy_libs "$approot/Frameworks"
436 copy_resources "$approot/Resources"
439 function copy_verify {
440 copy $ROOT src/libdcp/build/tools/dcpverify "$approot/MacOS"
441 mv "$approot/MacOS/dcpverify" "$approot/MacOS/dcpomatic2_verify"
442 rl=("$approot/MacOS/dcpomatic2_verify" "$approot/Frameworks/"*.dylib)
443 relink_relative "${rl[@]}"
446 if [ "$ARCH2" == "" ]; then
453 setup "DCP-o-matic 2.app"
454 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$approot/MacOS"
455 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$approot/MacOS"
456 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_create "$approot/MacOS"
457 copy $ROOT bin/ffprobe "$approot/MacOS"
458 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
460 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$approot/Info.plist"
461 rl=("$approot/MacOS/dcpomatic2" "$approot/MacOS/dcpomatic2_cli" "$approot/MacOS/dcpomatic2_create" "$approot/MacOS/ffprobe" "$approot/Frameworks/"*.dylib)
462 relink_relative "${rl[@]}"
463 make_dmg "$appdir" "" "DCP-o-matic" "dcpomatic2_verify openssl ffprobe dcpomatic2_cli dcpomatic2_create dcpomatic2"
465 # DCP-o-matic KDM Creator
466 setup "DCP-o-matic 2 KDM Creator.app"
467 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm "$approot/MacOS"
468 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm_cli "$approot/MacOS"
469 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
471 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$approot/Info.plist"
472 rl=("$approot/MacOS/dcpomatic2_kdm" "$approot/MacOS/dcpomatic2_kdm_cli" "$approot/Frameworks/"*.dylib)
473 relink_relative "${rl[@]}"
474 make_dmg "$appdir" "" "DCP-o-matic KDM Creator" "dcpomatic2_verify openssl dcpomatic2_kdm_cli dcpomatic2_kdm"
476 # DCP-o-matic Encode Server
477 setup "DCP-o-matic 2 Encode Server.app"
478 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server "$approot/MacOS"
479 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$approot/MacOS"
480 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
482 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_server.Info.plist "$approot/Info.plist"
483 rl=("$approot/MacOS/dcpomatic2_server" "$approot/MacOS/dcpomatic2_server_cli" "$approot/Frameworks/"*.dylib)
484 relink_relative "${rl[@]}"
485 make_dmg "$appdir" "" "DCP-o-matic Encode Server" "dcpomatic2_verify openssl dcpomatic2_server_cli dcpomatic2_server"
487 # DCP-o-matic Batch Converter
488 setup "DCP-o-matic 2 Batch converter.app"
489 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_batch "$approot/MacOS"
490 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
492 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_batch.Info.plist "$approot/Info.plist"
493 rl=("$approot/MacOS/dcpomatic2_batch" "$approot/Frameworks/"*.dylib)
494 relink_relative "${rl[@]}"
495 make_dmg "$appdir" "" "DCP-o-matic Batch Converter" "dcpomatic2_verify openssl dcpomatic2_batch"
498 setup "DCP-o-matic 2 Player.app"
499 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_player "$approot/MacOS"
500 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
502 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_player.Info.plist "$approot/Info.plist"
503 rl=("$approot/MacOS/dcpomatic2_player" "$approot/Frameworks/"*.dylib)
504 relink_relative "${rl[@]}"
505 make_dmg "$appdir" "" "DCP-o-matic Player" "dcpomatic2_verify openssl dcpomatic2_player"
507 # DCP-o-matic Playlist Editor
508 setup "DCP-o-matic 2 Playlist Editor.app"
509 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_playlist "$approot/MacOS"
510 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
512 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_playlist.Info.plist "$approot/Info.plist"
513 rl=("$approot/MacOS/dcpomatic2_playlist" "$approot/Frameworks/"*.dylib)
514 relink_relative "${rl[@]}"
515 make_dmg "$appdir" "" "DCP-o-matic Playlist Editor" "dcpomatic2_verify openssl dcpomatic2_playlist"
517 # DCP-o-matic Combiner
518 setup "DCP-o-matic 2 Combiner.app"
519 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_combiner "$approot/MacOS"
520 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
522 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_combiner.Info.plist "$approot/Info.plist"
523 rl=("$approot/MacOS/dcpomatic2_combiner" "$approot/Frameworks/"*.dylib)
524 relink_relative "${rl[@]}"
525 make_dmg "$appdir" "" "DCP-o-matic Combiner" "dcpomatic2_verify openssl dcpomatic2_combiner"
527 # DCP-o-matic Disk Writer .app
528 setup "DCP-o-matic 2 Disk Writer.app"
529 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk "$approot/MacOS"
530 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
532 cp $prefix/src/dcpomatic/platform/osx/uninstall_disk.applescript "$approot/Resources"
533 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_disk.Info.plist "$approot/Info.plist"
534 rl=("$approot/MacOS/dcpomatic2_disk" "$approot/Frameworks/"*.dylib)
535 relink_relative "${rl[@]}"
537 # DCP-o-matic Disk Writer daemon .pkg
539 pkgbase=tmp-disk-writer
543 pkgroot=$pkgbase/root
545 mkdir -p $pkgroot/Library/LaunchDaemons
546 cat > $pkgroot/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist <<EOF
547 <?xml version="1.0" encoding="UTF-8"?>
548 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
549 <plist version="1.0">
552 <string>com.dcpomatic.disk.writer</string>
553 <key>ProgramArguments</key>
555 <string>/Library/Application Support/com.dcpomatic/dcpomatic2_disk_writer</string>
557 <key>EnvironmentVariables</key>
559 <key>DYLD_LIBRARY_PATH</key>
560 <string><![CDATA[/Library/Application Support/com.dcpomatic]]></string>
562 <key>StandardOutPath</key>
563 <string>/var/log/dcpomatic_disk_writer_out.log</string>
564 <key>StandardErrorPath</key>
565 <string>/var/log/dcpomatic_disk_writer_err.log</string>
566 <key>LaunchEvents</key>
568 <key>com.apple.notifyd.matching</key>
570 <key>com.dcpomatic.disk.writer.start</key>
572 <key>Notification</key>
573 <string>com.dcpomatic.disk.writer.start</string>
581 # Get the binaries together in $pkgbin then move them to the
582 # place with spaces in the filename to avoid some of the pain of escaping
585 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk_writer "$pkgbin"
588 rl=("$pkgbin/dcpomatic2_disk_writer" "$pkgbin/"*.dylib)
589 relink_absolute "/Library/Application Support/com.dcpomatic" "${rl[@]}"
591 mkdir $pkgbase/scripts
592 cat > $pkgbase/scripts/postinstall <<EOF
594 /bin/launchctl unload "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
595 /bin/launchctl load "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
598 chmod gou+x $pkgbase/scripts/postinstall
600 find "$pkgbin" -iname "*.dylib" -type f -print0 | while IFS= read -r -d '' f; do
603 sign "$pkgbin/dcpomatic2_disk_writer"
605 mkdir -p "$pkgroot/Library/Application Support/com.dcpomatic"
606 mv $pkgbin/* "$pkgroot/Library/Application Support/com.dcpomatic/"
607 pkgbuild --root $pkgroot --identifier com.dcpomatic.disk.writer --scripts $pkgbase/scripts "DCP-o-matic Disk Writer.pkg"
609 make_dmg "$appdir" "DCP-o-matic Disk Writer.pkg" "DCP-o-matic Disk Writer" "dcpomatic2_verify openssl dcpomatic2_disk"