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)
12 if [ "$?" == "0" ]; then
13 version=$(echo $version | sed -e "s/^v//")
15 # Otherwise use <branch>-<commit>
16 version="$(basename $(git name-rev --name-only HEAD))-$(git rev-parse --short HEAD)"
19 # DMG size in megabytes
28 APPLICATION_IDENTITY="Developer ID Application: Carl Hetherington (R82DXSR997)"
29 INSTALLER_IDENTITY="Developer ID Installer: Carl Hetherington (R82DXSR997)"
31 # This is our work area for making up the .dmgs
32 mkdir -p build/platform/osx
35 cat <<EOF > entitlements.plist
36 <?xml version="1.0" encoding="UTF-8"?>
37 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
40 <key>com.apple.security.cs.disable-library-validation</key>
42 <key>com.apple.security.cs.allow-dyld-environment-variables</key>
49 if [ "$ARCH2" == "" ]; then
52 ln -s $(readlink $f) "$3/`basename $f`"
54 cp $f "$3/`basename $f`"
58 for f in $1/$ARCH2/$2; do
60 ln -s $(readlink $f) "$3/`basename $f`"
62 g=`echo $f | sed -e "s@/$ARCH2/@/$ARCH1/@g"`
64 lipo -create $f $g -output "$3/$(basename $f)"
70 function copy_lib_root {
71 if [ "$ARCH2" == "" ]; then
72 for f in $ROOT/lib/$1*.dylib; do
74 ln -s $(readlink $f) "$2/`basename $f`"
76 cp $f "$2/`basename $f`"
80 for f in $ROOT/$ARCH2/lib/$1*.dylib; do
82 ln -s $(readlink $f) "$2/`basename $f`"
84 g=`echo $f | sed -e "s@/$ARCH2/@/$ARCH1/@g"`
86 lipo -create $f $g -output "$2/$(basename $f)"
90 to_relink="$to_relink|$1"
93 function copy_lib_env {
94 if [ "$ARCH2" == "" ]; then
95 for f in $ENV/$ARCH1/lib/$1*.dylib; do
97 ln -s $(readlink $f) "$2/`basename $f`"
99 cp $f "$2/`basename $f`"
103 for f in $ENV/$ARCH2/lib/$1*.dylib; do
105 ln -s $(readlink $f) "$2/`basename $f`"
107 g=`echo $f | sed -e "s@/$ARCH2/@/$ARCH1/@g"`
109 lipo -create $f $g -output "$2/$(basename $f)"
113 to_relink="$to_relink|$1"
116 # @param #1 directory to copy to
119 copy_lib_root libcxml "$dest"
120 copy_lib_root libdcp-1.0 "$dest"
121 copy_lib_root libasdcp-carl "$dest"
122 copy_lib_root libkumu-carl "$dest"
123 copy_lib_root libsub "$dest"
124 copy_lib_root libopenjp2 "$dest"
125 copy_lib_root libavdevice "$dest"
126 copy_lib_root libavformat "$dest"
127 copy_lib_root libavfilter "$dest"
128 copy_lib_root libavutil "$dest"
129 copy_lib_root libavcodec "$dest"
130 copy_lib_root libswscale "$dest"
131 copy_lib_root libpostproc "$dest"
132 copy_lib_root libswresample "$dest"
133 copy_lib_root liblwext4 "$dest"
134 copy_lib_root libblockdev "$dest"
135 copy_lib_root libleqm_nrt "$dest"
136 copy $ROOT src/dcpomatic/build/src/lib/libdcpomatic2.dylib "$dest"
137 copy $ROOT src/dcpomatic/build/src/wx/libdcpomatic2-wx.dylib "$dest"
138 copy_lib_env libboost_system "$dest"
139 copy_lib_env libboost_filesystem "$dest"
140 copy_lib_env libboost_thread "$dest"
141 copy_lib_env libboost_date_time "$dest"
142 copy_lib_env libboost_locale "$dest"
143 copy_lib_env libboost_regex "$dest"
144 copy_lib_env libxml++ "$dest"
145 copy_lib_env libxslt "$dest"
146 copy_lib_env libxml2 "$dest"
147 copy_lib_env libglibmm-2.4 "$dest"
148 copy_lib_env libgobject "$dest"
149 copy_lib_env libgthread "$dest"
150 copy_lib_env libgmodule "$dest"
151 copy_lib_env libsigc "$dest"
152 copy_lib_env libglib-2 "$dest"
153 copy_lib_env libintl "$dest"
154 copy_lib_env libsndfile "$dest"
155 copy_lib_env libssh "$dest"
156 copy_lib_env libwx "$dest"
157 copy_lib_env libfontconfig "$dest"
158 copy_lib_env libfreetype "$dest"
159 copy_lib_env libexpat "$dest"
160 copy_lib_env libltdl "$dest"
161 copy_lib_env libxmlsec1 "$dest"
162 copy_lib_env libcurl "$dest"
163 copy_lib_env libffi "$dest"
164 copy_lib_env libpango "$dest"
165 copy_lib_env libcairo "$dest"
166 copy_lib_env libpixman "$dest"
167 copy_lib_env libharfbuzz "$dest"
168 copy_lib_env libsamplerate "$dest"
169 copy_lib_env libicui18n "$dest"
170 copy_lib_env libicudata "$dest"
171 copy_lib_env libicuio "$dest"
172 copy_lib_env libicutest "$dest"
173 copy_lib_env libicutu "$dest"
174 copy_lib_env libicuuc "$dest"
175 copy_lib_env libFLAC "$dest"
176 copy_lib_env libvorbis "$dest"
177 copy_lib_env libogg "$dest"
178 copy_lib_env libxerces-c "$dest"
179 copy_lib_env libcrypto "$dest"
180 copy_lib_env libssl "$dest"
181 copy_lib_env libfribidi "$dest"
182 copy_lib_env libgio "$dest"
183 copy_lib_env libz "$dest"
186 # @param #1 directory to copy to
187 function copy_resources {
189 if [ "$ARCH2" == "" ]; then
192 local prefix=$ROOT/$ARCH1
194 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small_white.png "$dest"
195 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small_black.png "$dest"
196 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2.icns "$dest"
197 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_kdm.icns "$dest"
198 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_server.icns "$dest"
199 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_player.icns "$dest"
200 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_batch.icns "$dest"
201 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_playlist.icns "$dest"
202 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_disk.icns "$dest"
203 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_combiner.icns "$dest"
204 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults.png "$dest"
205 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults@2x.png "$dest"
206 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email.png "$dest"
207 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email@2x.png "$dest"
208 cp $prefix/src/dcpomatic/graphics/osx/preferences/email.png "$dest"
209 cp $prefix/src/dcpomatic/graphics/osx/preferences/email@2x.png "$dest"
210 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers.png "$dest"
211 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers@2x.png "$dest"
212 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms.png "$dest"
213 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms@2x.png "$dest"
214 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys.png "$dest"
215 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys@2x.png "$dest"
216 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet.png "$dest"
217 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet@2x.png "$dest"
218 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications.png "$dest"
219 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications@2x.png "$dest"
220 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound.png "$dest"
221 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound@2x.png "$dest"
222 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers.png "$dest"
223 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers@2x.png "$dest"
224 cp $prefix/src/dcpomatic/graphics/osx/preferences/general.png "$dest"
225 cp $prefix/src/dcpomatic/graphics/osx/preferences/general@2x.png "$dest"
226 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced.png "$dest"
227 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced@2x.png "$dest"
228 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations.png "$dest"
229 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations@2x.png "$dest"
230 cp $prefix/src/dcpomatic/fonts/LiberationSans-Regular.ttf "$dest"
231 cp $prefix/src/dcpomatic/fonts/LiberationSans-Italic.ttf "$dest"
232 cp $prefix/src/dcpomatic/fonts/LiberationSans-Bold.ttf "$dest"
233 cp $prefix/src/dcpomatic/fonts/fonts.conf.osx "$dest"/fonts.conf
234 cp $prefix/src/dcpomatic/graphics/splash.png "$dest"
235 cp $prefix/src/dcpomatic/graphics/zoom.png "$dest"
236 cp $prefix/src/dcpomatic/graphics/zoom_all.png "$dest"
237 cp $prefix/src/dcpomatic/graphics/select.png "$dest"
238 cp $prefix/src/dcpomatic/graphics/snap.png "$dest"
239 cp $prefix/src/dcpomatic/graphics/sequence.png "$dest"
240 cp $prefix/src/dcpomatic/graphics/me.jpg "$dest"
241 cp $prefix/src/dcpomatic/graphics/link.png "$dest"
242 cp $prefix/src/dcpomatic/graphics/tick.png "$dest"
243 cp $prefix/src/dcpomatic/graphics/no_tick.png "$dest"
244 cp -r $prefix/share/libdcp/xsd "$dest"
245 cp -r $prefix/share/libdcp/tags "$dest"
247 # i18n: DCP-o-matic .mo files
248 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
249 mkdir -p "$dest/$lang/LC_MESSAGES"
250 cp $prefix/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
251 cp $prefix/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
252 cp $prefix/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
255 # i18n: wxWidgets .mo files
256 for lang in de es fr it sv nl ru pl da cs; do
258 cp $ENV/$ARCH1/share/locale/$lang/LC_MESSAGES/wxstd.mo "$dest/$lang"
262 # param $1 list of things that link to other things
263 function relink_relative {
264 to_relink=`echo $to_relink | sed -e "s/\+//g"`
267 arch1_name=$(echo $ARCH1 | sed -e s@/.*@@)
268 arch2_name=$(echo $ARCH2 | sed -e s@/.*@@)
270 for arch in $arch1_name $arch2_name; do
271 for obj in "${linkers[@]}"; do
272 deps=`otool -arch $arch -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|@rpath|boost|libicu|libssh)"`
276 changes="$changes -change $dep @executable_path/../Frameworks/$base"
278 if test "x$changes" != "x"; then
279 install_name_tool $changes -id `basename "$obj"` "$obj"
285 # param $1 directory things should be relinked into
286 # $2 list of things that link to other things
287 function relink_absolute {
288 to_relink=`echo $to_relink | sed -e "s/\+//g"`
293 arch1_name=$(echo $ARCH1 | sed -e s@/.*@@)
294 arch2_name=$(echo $ARCH2 | sed -e s@/.*@@)
296 for arch in $arch1_name $arch2_name; do
297 for obj in "${linkers[@]}"; do
298 deps=`otool -arch $arch -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu|libssh)"`
301 install_name_tool -change "$dep" "$target"/$base -id `basename "$obj"` "$obj"
308 codesign --verify --verbose=4 --options runtime --entitlements entitlements.plist --sign "$APPLICATION_IDENTITY" "$1"
309 if [ "$?" != "0" ]; then
310 echo "Failed to sign $1"
315 # @param #1 .app directory
316 # @param #2 .pkg or ""
317 # @param #3 full name e.g. DCP-o-matic Batch Converter
318 # @param #4 list of executables
324 tmp_dmg=dcpomatic_tmp.dmg
325 if [ "$ARCH2" == "" ]; then
326 dmg="$full_name $version macOS10.8+.dmg"
328 dmg="$full_name $version macOS10.10+.dmg"
330 vol_name=DCP-o-matic-$version
332 find "$appdir/Contents/Frameworks" -iname "*.dylib" -type f -print0 | while IFS= read -r -d '' f; do
336 sign "$appdir/Contents/MacOS/$f"
339 if [ "$pkg" != "" ]; then
340 productsign --sign "$INSTALLER_IDENTITY" "$pkg" "signed_temp.pkg"
341 if [ "$?" != "0" ]; then
342 echo "Failed to sign .pkg"
345 mv signed_temp.pkg "$pkg"
349 cp -a "$appdir" $vol_name
350 if [ "$pkg" != "" ]; then
351 cp -a "$pkg" $vol_name
353 ln -s /Applications "$vol_name/Applications"
354 cat<<EOF > "$vol_name/READ ME.txt"
355 Welcome to DCP-o-matic! The first time you run the program there may be
356 a long (several-minute) delay while macOS checks the code for viruses and
357 other malware. Please be patient!
359 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
360 Beim erstmaligen Start der DCP-o-matic Anwendungen kann ein längerer
361 Verifikationsvorgang auftreten. Dies ist von der macOS Sicherheitsumgebung
362 'Gatekeeper' verursacht. Dieser je nach Rechner teils minutenlange
363 Verifikationsvorgang ist gegenwärtig normal und nicht zu umgehen,
364 es ist kein Programmfehler. Warten sie die Verifikation für jede der
365 DCP-o-matic Anwendungen ab, bei weiteren Programmstarts wird sie nicht
369 if [ "$pkg" != "" ]; then
370 cat<<EOF > "$vol_name/READ ME.txt"
372 To run this software successfully you must install $pkg before running
377 if [ "$pkg" != "" ]; then
378 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
380 To run this software successfully you must install $pkg before running
385 rm -f $tmp_dmg "$dmg"
386 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
387 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
388 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
392 tell application "Finder"
393 tell disk "'$vol_name'"
395 set current view of container window to icon view
396 set toolbar visible of container window to false
397 set statusbar visible of container window to false
398 set the bounds of container window to {400, 200, 1160, 600}
399 set the bounds of container window to {400, 200, 1160, 600}
400 set the bounds of container window to {400, 200, 1160, 600}
401 set theViewOptions to the icon view options of container window
402 set arrangement of theViewOptions to not arranged
403 set icon size of theViewOptions to 64
404 set position of item "'$appdir'" of container window to {90, 80}
405 set position of item "Applications" of container window to {265, 80}
406 set position of item "READ ME.txt" of container window to {430, 80}
407 set position of item "READ ME.de_DE.txt" of container window to {595, 80}
408 set position of item "DCP-o-matic Disk Writer.pkg" of container window to {90, 255}
411 update without registering applications
417 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
420 hdiutil eject $device
421 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
422 sips -i "$appdir/Contents/Resources/dcpomatic2.icns"
423 DeRez -only icns "$appdir/Contents/Resources/dcpomatic2.icns" > "$appdir/Contents/Resources/DCP-o-matic.rsrc"
424 Rez -append "$appdir/Contents/Resources/DCP-o-matic.rsrc" -o "$dmg"
429 codesign --timestamp --verify --verbose --options runtime --entitlements entitlements.plist --sign "$APPLICATION_IDENTITY" "$dmg"
439 approot="$appdir/Contents"
441 mkdir -p "$approot/MacOS"
442 mkdir -p "$approot/Frameworks"
443 mkdir -p "$approot/Resources"
445 to_relink="dcpomatic"
446 copy_libs "$approot/Frameworks"
447 copy_resources "$approot/Resources"
450 function copy_verify {
451 copy $ROOT src/libdcp/build/tools/dcpverify "$approot/MacOS"
452 mv "$approot/MacOS/dcpverify" "$approot/MacOS/dcpomatic2_verify"
453 rl=("$approot/MacOS/dcpomatic2_verify" "$approot/Frameworks/"*.dylib)
454 relink_relative "${rl[@]}"
457 if [ "$ARCH2" == "" ]; then
464 setup "DCP-o-matic 2.app"
465 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$approot/MacOS"
466 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$approot/MacOS"
467 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_create "$approot/MacOS"
468 copy $ROOT bin/ffprobe "$approot/MacOS"
469 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
471 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$approot/Info.plist"
472 rl=("$approot/MacOS/dcpomatic2" "$approot/MacOS/dcpomatic2_cli" "$approot/MacOS/dcpomatic2_create" "$approot/MacOS/ffprobe" "$approot/Frameworks/"*.dylib)
473 relink_relative "${rl[@]}"
474 make_dmg "$appdir" "" "DCP-o-matic" "dcpomatic2_verify openssl ffprobe dcpomatic2_cli dcpomatic2_create dcpomatic2"
476 # DCP-o-matic KDM Creator
477 setup "DCP-o-matic 2 KDM Creator.app"
478 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm "$approot/MacOS"
479 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm_cli "$approot/MacOS"
480 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
482 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$approot/Info.plist"
483 rl=("$approot/MacOS/dcpomatic2_kdm" "$approot/MacOS/dcpomatic2_kdm_cli" "$approot/Frameworks/"*.dylib)
484 relink_relative "${rl[@]}"
485 make_dmg "$appdir" "" "DCP-o-matic KDM Creator" "dcpomatic2_verify openssl dcpomatic2_kdm_cli dcpomatic2_kdm"
487 # DCP-o-matic Encode Server
488 setup "DCP-o-matic 2 Encode Server.app"
489 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server "$approot/MacOS"
490 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$approot/MacOS"
491 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
493 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_server.Info.plist "$approot/Info.plist"
494 rl=("$approot/MacOS/dcpomatic2_server" "$approot/MacOS/dcpomatic2_server_cli" "$approot/Frameworks/"*.dylib)
495 relink_relative "${rl[@]}"
496 make_dmg "$appdir" "" "DCP-o-matic Encode Server" "dcpomatic2_verify openssl dcpomatic2_server_cli dcpomatic2_server"
498 # DCP-o-matic Batch Converter
499 setup "DCP-o-matic 2 Batch converter.app"
500 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_batch "$approot/MacOS"
501 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" "dcpomatic2_verify openssl dcpomatic2_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"
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" "dcpomatic2_verify openssl dcpomatic2_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"
523 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_playlist.Info.plist "$approot/Info.plist"
524 rl=("$approot/MacOS/dcpomatic2_playlist" "$approot/Frameworks/"*.dylib)
525 relink_relative "${rl[@]}"
526 make_dmg "$appdir" "" "DCP-o-matic Playlist Editor" "dcpomatic2_verify openssl dcpomatic2_playlist"
528 # DCP-o-matic Combiner
529 setup "DCP-o-matic 2 Combiner.app"
530 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_combiner "$approot/MacOS"
531 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
533 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_combiner.Info.plist "$approot/Info.plist"
534 rl=("$approot/MacOS/dcpomatic2_combiner" "$approot/Frameworks/"*.dylib)
535 relink_relative "${rl[@]}"
536 make_dmg "$appdir" "" "DCP-o-matic Combiner" "dcpomatic2_verify openssl dcpomatic2_combiner"
538 # DCP-o-matic Disk Writer .app
539 setup "DCP-o-matic 2 Disk Writer.app"
540 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk "$approot/MacOS"
541 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
543 cp $prefix/src/dcpomatic/platform/osx/uninstall_disk.applescript "$approot/Resources"
544 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_disk.Info.plist "$approot/Info.plist"
545 rl=("$approot/MacOS/dcpomatic2_disk" "$approot/Frameworks/"*.dylib)
546 relink_relative "${rl[@]}"
548 # DCP-o-matic Disk Writer daemon .pkg
550 pkgbase=tmp-disk-writer
554 pkgroot=$pkgbase/root
556 mkdir -p $pkgroot/Library/LaunchDaemons
557 cat > $pkgroot/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist <<EOF
558 <?xml version="1.0" encoding="UTF-8"?>
559 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
560 <plist version="1.0">
563 <string>com.dcpomatic.disk.writer</string>
564 <key>ProgramArguments</key>
566 <string>/Library/Application Support/com.dcpomatic/dcpomatic2_disk_writer</string>
568 <key>EnvironmentVariables</key>
570 <key>DYLD_LIBRARY_PATH</key>
571 <string><![CDATA[/Library/Application Support/com.dcpomatic]]></string>
573 <key>StandardOutPath</key>
574 <string>/var/log/dcpomatic_disk_writer_out.log</string>
575 <key>StandardErrorPath</key>
576 <string>/var/log/dcpomatic_disk_writer_err.log</string>
577 <key>LaunchEvents</key>
579 <key>com.apple.notifyd.matching</key>
581 <key>com.dcpomatic.disk.writer.start</key>
583 <key>Notification</key>
584 <string>com.dcpomatic.disk.writer.start</string>
592 # Get the binaries together in $pkgbin then move them to the
593 # place with spaces in the filename to avoid some of the pain of escaping
596 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk_writer "$pkgbin"
599 rl=("$pkgbin/dcpomatic2_disk_writer" "$pkgbin/"*.dylib)
600 relink_absolute "/Library/Application Support/com.dcpomatic" "${rl[@]}"
602 mkdir $pkgbase/scripts
603 cat > $pkgbase/scripts/postinstall <<EOF
605 /bin/launchctl unload "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
606 /bin/launchctl load "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
609 chmod gou+x $pkgbase/scripts/postinstall
611 find "$pkgbin" -iname "*.dylib" -type f -print0 | while IFS= read -r -d '' f; do
614 sign "$pkgbin/dcpomatic2_disk_writer"
616 mkdir -p "$pkgroot/Library/Application Support/com.dcpomatic"
617 mv $pkgbin/* "$pkgroot/Library/Application Support/com.dcpomatic/"
618 pkgbuild --root $pkgroot --identifier com.dcpomatic.disk.writer --scripts $pkgbase/scripts "DCP-o-matic Disk Writer.pkg"
620 make_dmg "$appdir" "DCP-o-matic Disk Writer.pkg" "DCP-o-matic Disk Writer" "dcpomatic2_verify openssl dcpomatic2_disk"