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 for f in $ENV/$ARCH2/lib/$1*.dylib; do
89 ln -s $(readlink $f) "$2/`basename $f`"
91 if [ "$ARCH2" == "" ]; then
92 cp $f "$2/`basename $f`"
94 g=`echo $f | sed -e "s@/$ARCH2/@/$ARCH1/@g"`
96 lipo -create $f $g -output "$2/$(basename $f)"
100 to_relink="$to_relink|$1"
103 # @param #1 directory to copy to
106 copy_lib_root libcxml "$dest"
107 copy_lib_root libdcp-1.0 "$dest"
108 copy_lib_root libasdcp-carl "$dest"
109 copy_lib_root libkumu-carl "$dest"
110 copy_lib_root libsub "$dest"
111 copy_lib_root libopenjp2 "$dest"
112 copy_lib_root libavdevice "$dest"
113 copy_lib_root libavformat "$dest"
114 copy_lib_root libavfilter "$dest"
115 copy_lib_root libavutil "$dest"
116 copy_lib_root libavcodec "$dest"
117 copy_lib_root libswscale "$dest"
118 copy_lib_root libpostproc "$dest"
119 copy_lib_root libswresample "$dest"
120 copy_lib_root liblwext4 "$dest"
121 copy_lib_root libblockdev "$dest"
122 copy_lib_root libleqm_nrt "$dest"
123 copy $ROOT src/dcpomatic/build/src/lib/libdcpomatic2.dylib "$dest"
124 copy $ROOT src/dcpomatic/build/src/wx/libdcpomatic2-wx.dylib "$dest"
125 copy_lib_env libboost_system "$dest"
126 copy_lib_env libboost_filesystem "$dest"
127 copy_lib_env libboost_thread "$dest"
128 copy_lib_env libboost_date_time "$dest"
129 copy_lib_env libboost_locale "$dest"
130 copy_lib_env libboost_regex "$dest"
131 copy_lib_env libxml++ "$dest"
132 copy_lib_env libxslt "$dest"
133 copy_lib_env libxml2 "$dest"
134 copy_lib_env libglibmm-2.4 "$dest"
135 copy_lib_env libgobject "$dest"
136 copy_lib_env libgthread "$dest"
137 copy_lib_env libgmodule "$dest"
138 copy_lib_env libsigc "$dest"
139 copy_lib_env libglib-2 "$dest"
140 copy_lib_env libintl "$dest"
141 copy_lib_env libsndfile "$dest"
142 copy_lib_env libssh "$dest"
143 copy_lib_env libwx "$dest"
144 copy_lib_env libfontconfig "$dest"
145 copy_lib_env libfreetype "$dest"
146 copy_lib_env libexpat "$dest"
147 copy_lib_env libltdl "$dest"
148 copy_lib_env libxmlsec1 "$dest"
149 copy_lib_env libcurl "$dest"
150 copy_lib_env libffi "$dest"
151 copy_lib_env libpango "$dest"
152 copy_lib_env libcairo "$dest"
153 copy_lib_env libpixman "$dest"
154 copy_lib_env libharfbuzz "$dest"
155 copy_lib_env libsamplerate "$dest"
156 copy_lib_env libicui18n "$dest"
157 copy_lib_env libicudata "$dest"
158 copy_lib_env libicuio "$dest"
159 copy_lib_env libicutest "$dest"
160 copy_lib_env libicutu "$dest"
161 copy_lib_env libicuuc "$dest"
162 copy_lib_env libFLAC "$dest"
163 copy_lib_env libvorbis "$dest"
164 copy_lib_env libogg "$dest"
165 copy_lib_env libxerces-c "$dest"
166 copy_lib_env libcrypto "$dest"
167 copy_lib_env libssl "$dest"
168 copy_lib_env libfribidi "$dest"
169 copy_lib_env libgio "$dest"
170 copy_lib_env libz "$dest"
173 # @param #1 directory to copy to
174 function copy_resources {
176 if [ "$ARCH2" == "" ]; then
179 local prefix=$ROOT/$ARCH1
181 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small_white.png "$dest"
182 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small_black.png "$dest"
183 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2.icns "$dest"
184 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_kdm.icns "$dest"
185 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_server.icns "$dest"
186 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_player.icns "$dest"
187 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_batch.icns "$dest"
188 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_playlist.icns "$dest"
189 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_disk.icns "$dest"
190 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_combiner.icns "$dest"
191 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults.png "$dest"
192 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults@2x.png "$dest"
193 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email.png "$dest"
194 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email@2x.png "$dest"
195 cp $prefix/src/dcpomatic/graphics/osx/preferences/email.png "$dest"
196 cp $prefix/src/dcpomatic/graphics/osx/preferences/email@2x.png "$dest"
197 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers.png "$dest"
198 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers@2x.png "$dest"
199 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms.png "$dest"
200 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms@2x.png "$dest"
201 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys.png "$dest"
202 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys@2x.png "$dest"
203 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet.png "$dest"
204 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet@2x.png "$dest"
205 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications.png "$dest"
206 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications@2x.png "$dest"
207 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound.png "$dest"
208 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound@2x.png "$dest"
209 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers.png "$dest"
210 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers@2x.png "$dest"
211 cp $prefix/src/dcpomatic/graphics/osx/preferences/general.png "$dest"
212 cp $prefix/src/dcpomatic/graphics/osx/preferences/general@2x.png "$dest"
213 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced.png "$dest"
214 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced@2x.png "$dest"
215 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations.png "$dest"
216 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations@2x.png "$dest"
217 cp $prefix/src/dcpomatic/fonts/LiberationSans-Regular.ttf "$dest"
218 cp $prefix/src/dcpomatic/fonts/LiberationSans-Italic.ttf "$dest"
219 cp $prefix/src/dcpomatic/fonts/LiberationSans-Bold.ttf "$dest"
220 cp $prefix/src/dcpomatic/fonts/fonts.conf.osx "$dest"/fonts.conf
221 cp $prefix/src/dcpomatic/graphics/splash.png "$dest"
222 cp $prefix/src/dcpomatic/graphics/zoom.png "$dest"
223 cp $prefix/src/dcpomatic/graphics/zoom_all.png "$dest"
224 cp $prefix/src/dcpomatic/graphics/select.png "$dest"
225 cp $prefix/src/dcpomatic/graphics/snap.png "$dest"
226 cp $prefix/src/dcpomatic/graphics/sequence.png "$dest"
227 cp $prefix/src/dcpomatic/graphics/me.jpg "$dest"
228 cp $prefix/src/dcpomatic/graphics/link.png "$dest"
229 cp $prefix/src/dcpomatic/graphics/tick.png "$dest"
230 cp $prefix/src/dcpomatic/graphics/no_tick.png "$dest"
231 cp -r $prefix/share/libdcp/xsd "$dest"
232 cp -r $prefix/share/libdcp/tags "$dest"
234 # i18n: DCP-o-matic .mo files
235 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
236 mkdir -p "$dest/$lang/LC_MESSAGES"
237 cp $prefix/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
238 cp $prefix/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
239 cp $prefix/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
242 # i18n: wxWidgets .mo files
243 for lang in de es fr it sv nl ru pl da cs; do
245 cp $ENV/$ARCH1/share/locale/$lang/LC_MESSAGES/wxstd.mo "$dest/$lang"
249 # param $1 list of things that link to other things
250 function relink_relative {
251 to_relink=`echo $to_relink | sed -e "s/\+//g"`
254 arch1_name=$(echo $ARCH1 | sed -e s@/.*@@)
255 arch2_name=$(echo $ARCH2 | sed -e s@/.*@@)
257 for arch in $arch1_name $arch2_name; do
258 for obj in "${linkers[@]}"; do
259 deps=`otool -arch $arch -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu|libssh)"`
263 changes="$changes -change $dep @executable_path/../Frameworks/$base"
265 if test "x$changes" != "x"; then
266 install_name_tool $changes -id `basename "$obj"` "$obj"
272 # param $1 directory things should be relinked into
273 # $2 list of things that link to other things
274 function relink_absolute {
275 to_relink=`echo $to_relink | sed -e "s/\+//g"`
280 arch1_name=$(echo $ARCH1 | sed -e s@/.*@@)
281 arch2_name=$(echo $ARCH2 | sed -e s@/.*@@)
283 for arch in $arch1_name $arch2_name; do
284 for obj in "${linkers[@]}"; do
285 deps=`otool -arch $arch -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu|libssh)"`
288 install_name_tool -change "$dep" "$target"/$base -id `basename "$obj"` "$obj"
295 codesign --verify --verbose=4 --options runtime --entitlements entitlements.plist --sign "$APPLICATION_IDENTITY" "$1"
296 if [ "$?" != "0" ]; then
297 echo "Failed to sign $1"
302 # @param #1 .app directory
303 # @param #2 .pkg or ""
304 # @param #3 full name e.g. DCP-o-matic Batch Converter
305 # @param #4 list of executables
311 tmp_dmg=dcpomatic_tmp.dmg
312 dmg="$full_name $version.dmg"
313 vol_name=DCP-o-matic-$version
315 find "$appdir/Contents/Frameworks" -iname "*.dylib" -type f -print0 | while IFS= read -r -d '' f; do
319 sign "$appdir/Contents/MacOS/$f"
322 if [ "$pkg" != "" ]; then
323 productsign --sign "$INSTALLER_IDENTITY" "$pkg" "signed_temp.pkg"
324 if [ "$?" != "0" ]; then
325 echo "Failed to sign .pkg"
328 mv signed_temp.pkg "$pkg"
332 cp -a "$appdir" $vol_name
333 if [ "$pkg" != "" ]; then
334 cp -a "$pkg" $vol_name
336 ln -s /Applications "$vol_name/Applications"
337 cat<<EOF > "$vol_name/READ ME.txt"
338 Welcome to DCP-o-matic! The first time you run the program there may be
339 a long (several-minute) delay while macOS checks the code for viruses and
340 other malware. Please be patient!
342 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
343 Beim erstmaligen Start der DCP-o-matic Anwendungen kann ein längerer
344 Verifikationsvorgang auftreten. Dies ist von der macOS Sicherheitsumgebung
345 'Gatekeeper' verursacht. Dieser je nach Rechner teils minutenlange
346 Verifikationsvorgang ist gegenwärtig normal und nicht zu umgehen,
347 es ist kein Programmfehler. Warten sie die Verifikation für jede der
348 DCP-o-matic Anwendungen ab, bei weiteren Programmstarts wird sie nicht
352 if [ "$pkg" != "" ]; then
353 cat<<EOF > "$vol_name/READ ME.txt"
355 To run this software successfully you must install $pkg before running
360 if [ "$pkg" != "" ]; then
361 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
363 To run this software successfully you must install $pkg before running
368 rm -f $tmp_dmg "$dmg"
369 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
370 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
371 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
375 tell application "Finder"
376 tell disk "'$vol_name'"
378 set current view of container window to icon view
379 set toolbar visible of container window to false
380 set statusbar visible of container window to false
381 set the bounds of container window to {400, 200, 1160, 600}
382 set the bounds of container window to {400, 200, 1160, 600}
383 set the bounds of container window to {400, 200, 1160, 600}
384 set theViewOptions to the icon view options of container window
385 set arrangement of theViewOptions to not arranged
386 set icon size of theViewOptions to 64
387 set position of item "'$appdir'" of container window to {90, 80}
388 set position of item "Applications" of container window to {265, 80}
389 set position of item "READ ME.txt" of container window to {430, 80}
390 set position of item "READ ME.de_DE.txt" of container window to {595, 80}
391 set position of item "DCP-o-matic Disk Writer.pkg" of container window to {90, 255}
394 update without registering applications
400 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
403 hdiutil eject $device
404 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
405 sips -i "$appdir/Contents/Resources/dcpomatic2.icns"
406 DeRez -only icns "$appdir/Contents/Resources/dcpomatic2.icns" > "$appdir/Contents/Resources/DCP-o-matic.rsrc"
407 Rez -append "$appdir/Contents/Resources/DCP-o-matic.rsrc" -o "$dmg"
412 codesign --timestamp --verify --verbose --options runtime --entitlements entitlements.plist --sign "$APPLICATION_IDENTITY" "$dmg"
422 approot="$appdir/Contents"
424 mkdir -p "$approot/MacOS"
425 mkdir -p "$approot/Frameworks"
426 mkdir -p "$approot/Resources"
428 to_relink="dcpomatic"
429 copy_libs "$approot/Frameworks"
430 copy_resources "$approot/Resources"
433 function copy_verify {
434 copy $ROOT src/libdcp/build/tools/dcpverify "$approot/MacOS"
435 mv "$approot/MacOS/dcpverify" "$approot/MacOS/dcpomatic2_verify"
436 rl=("$approot/MacOS/dcpomatic2_verify" "$approot/Frameworks/"*.dylib)
437 relink_relative "${rl[@]}"
440 if [ "$ARCH2" == "" ]; then
447 setup "DCP-o-matic 2.app"
448 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$approot/MacOS"
449 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$approot/MacOS"
450 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_create "$approot/MacOS"
451 copy $ROOT bin/ffprobe "$approot/MacOS"
452 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
454 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$approot/Info.plist"
455 rl=("$approot/MacOS/dcpomatic2" "$approot/MacOS/dcpomatic2_cli" "$approot/MacOS/dcpomatic2_create" "$approot/MacOS/ffprobe" "$approot/Frameworks/"*.dylib)
456 relink_relative "${rl[@]}"
457 make_dmg "$appdir" "" "DCP-o-matic" "dcpomatic2_verify openssl ffprobe dcpomatic2_cli dcpomatic2_create dcpomatic2"
459 # DCP-o-matic KDM Creator
460 setup "DCP-o-matic 2 KDM Creator.app"
461 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm "$approot/MacOS"
462 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm_cli "$approot/MacOS"
463 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
465 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$approot/Info.plist"
466 rl=("$approot/MacOS/dcpomatic2_kdm" "$approot/MacOS/dcpomatic2_kdm_cli" "$approot/Frameworks/"*.dylib)
467 relink_relative "${rl[@]}"
468 make_dmg "$appdir" "" "DCP-o-matic KDM Creator" "dcpomatic2_verify openssl dcpomatic2_kdm_cli dcpomatic2_kdm"
470 # DCP-o-matic Encode Server
471 setup "DCP-o-matic 2 Encode Server.app"
472 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server "$approot/MacOS"
473 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$approot/MacOS"
474 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
476 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_server.Info.plist "$approot/Info.plist"
477 rl=("$approot/MacOS/dcpomatic2_server" "$approot/MacOS/dcpomatic2_server_cli" "$approot/Frameworks/"*.dylib)
478 relink_relative "${rl[@]}"
479 make_dmg "$appdir" "" "DCP-o-matic Encode Server" "dcpomatic2_verify openssl dcpomatic2_server_cli dcpomatic2_server"
481 # DCP-o-matic Batch Converter
482 setup "DCP-o-matic 2 Batch converter.app"
483 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_batch "$approot/MacOS"
484 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
486 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_batch.Info.plist "$approot/Info.plist"
487 rl=("$approot/MacOS/dcpomatic2_batch" "$approot/Frameworks/"*.dylib)
488 relink_relative "${rl[@]}"
489 make_dmg "$appdir" "" "DCP-o-matic Batch Converter" "dcpomatic2_verify openssl dcpomatic2_batch"
492 setup "DCP-o-matic 2 Player.app"
493 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_player "$approot/MacOS"
494 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
496 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_player.Info.plist "$approot/Info.plist"
497 rl=("$approot/MacOS/dcpomatic2_player" "$approot/Frameworks/"*.dylib)
498 relink_relative "${rl[@]}"
499 make_dmg "$appdir" "" "DCP-o-matic Player" "dcpomatic2_verify openssl dcpomatic2_player"
501 # DCP-o-matic Playlist Editor
502 setup "DCP-o-matic 2 Playlist Editor.app"
503 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_playlist "$approot/MacOS"
504 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
506 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_playlist.Info.plist "$approot/Info.plist"
507 rl=("$approot/MacOS/dcpomatic2_playlist" "$approot/Frameworks/"*.dylib)
508 relink_relative "${rl[@]}"
509 make_dmg "$appdir" "" "DCP-o-matic Playlist Editor" "dcpomatic2_verify openssl dcpomatic2_playlist"
511 # DCP-o-matic Combiner
512 setup "DCP-o-matic 2 Combiner.app"
513 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_combiner "$approot/MacOS"
514 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
516 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_combiner.Info.plist "$approot/Info.plist"
517 rl=("$approot/MacOS/dcpomatic2_combiner" "$approot/Frameworks/"*.dylib)
518 relink_relative "${rl[@]}"
519 make_dmg "$appdir" "" "DCP-o-matic Combiner" "dcpomatic2_verify openssl dcpomatic2_combiner"
521 # DCP-o-matic Disk Writer .app
522 setup "DCP-o-matic 2 Disk Writer.app"
523 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk "$approot/MacOS"
524 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
526 cp $prefix/src/dcpomatic/platform/osx/uninstall_disk.applescript "$approot/Resources"
527 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_disk.Info.plist "$approot/Info.plist"
528 rl=("$approot/MacOS/dcpomatic2_disk" "$approot/Frameworks/"*.dylib)
529 relink_relative "${rl[@]}"
531 # DCP-o-matic Disk Writer daemon .pkg
533 pkgbase=tmp-disk-writer
537 pkgroot=$pkgbase/root
539 mkdir -p $pkgroot/Library/LaunchDaemons
540 cat > $pkgroot/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist <<EOF
541 <?xml version="1.0" encoding="UTF-8"?>
542 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
543 <plist version="1.0">
546 <string>com.dcpomatic.disk.writer</string>
547 <key>ProgramArguments</key>
549 <string>/Library/Application Support/com.dcpomatic/dcpomatic2_disk_writer</string>
551 <key>EnvironmentVariables</key>
553 <key>DYLD_LIBRARY_PATH</key>
554 <string><![CDATA[/Library/Application Support/com.dcpomatic]]></string>
556 <key>StandardOutPath</key>
557 <string>/var/log/dcpomatic_disk_writer_out.log</string>
558 <key>StandardErrorPath</key>
559 <string>/var/log/dcpomatic_disk_writer_err.log</string>
560 <key>LaunchEvents</key>
562 <key>com.apple.notifyd.matching</key>
564 <key>com.dcpomatic.disk.writer.start</key>
566 <key>Notification</key>
567 <string>com.dcpomatic.disk.writer.start</string>
575 # Get the binaries together in $pkgbin then move them to the
576 # place with spaces in the filename to avoid some of the pain of escaping
579 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk_writer "$pkgbin"
582 rl=("$pkgbin/dcpomatic2_disk_writer" "$pkgbin/"*.dylib)
583 relink_absolute "/Library/Application Support/com.dcpomatic" "${rl[@]}"
585 mkdir $pkgbase/scripts
586 cat > $pkgbase/scripts/postinstall <<EOF
588 /bin/launchctl unload "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
589 /bin/launchctl load "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
592 chmod gou+x $pkgbase/scripts/postinstall
594 find "$pkgbin" -iname "*.dylib" -type f -print0 | while IFS= read -r -d '' f; do
597 sign "$pkgbin/dcpomatic2_disk_writer"
599 mkdir -p "$pkgroot/Library/Application Support/com.dcpomatic"
600 mv $pkgbin/* "$pkgroot/Library/Application Support/com.dcpomatic/"
601 pkgbuild --root $pkgroot --identifier com.dcpomatic.disk.writer --scripts $pkgbase/scripts "DCP-o-matic Disk Writer.pkg"
603 make_dmg "$appdir" "DCP-o-matic Disk Writer.pkg" "DCP-o-matic Disk Writer" "dcpomatic2_verify openssl dcpomatic2_disk"