3 SYNTAX="make_dmg.sh -e <environment> -r <builddir> -i <apple-id> -p <apple-password> -a <arch1> [-a <arch2>] [-b <id>]"
5 # e.g. make_dmg.sh -e /Users/carl/osx-environment -r /Users/carl/cdist -i foo@bar.net -p opensesame -a x86_64/10.10 -a arm64/11.0 [-b dcpomatic2_player]
7 # Don't set -e here as egrep (used a few times) returns 1 if no matches
10 BUILD="main kdm server batch player playlist combiner editor disk"
11 while getopts "e:r:i:p:a:b:" o; do
23 APPLE_PASSWORD=${OPTARG}
34 # Use a tag if what we've built is exactly on one
35 version=$(git describe --tags --abbrev=0 --match=v2.*.* --exact-match 2> /dev/null)
36 if [ "$?" == "0" ]; then
37 version=$(echo $version | sed -e "s/^v//")
39 # Otherwise use <branch>-<commit>
40 version="$(basename $(git name-rev --name-only HEAD))-$(git rev-parse --short HEAD)"
43 # DMG size in megabytes
49 APPLICATION_IDENTITY="Developer ID Application: Carl Hetherington (R82DXSR997)"
50 INSTALLER_IDENTITY="Developer ID Installer: Carl Hetherington (R82DXSR997)"
52 # This is our work area for making up the .dmgs
53 mkdir -p build/platform/osx
56 cat <<EOF > entitlements.plist
57 <?xml version="1.0" encoding="UTF-8"?>
58 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
61 <key>com.apple.security.cs.disable-library-validation</key>
63 <key>com.apple.security.cs.allow-dyld-environment-variables</key>
65 <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
72 if [ "$ARCH2" == "" ]; then
75 ln -s $(readlink $f) "$3/`basename $f`"
77 cp $f "$3/`basename $f`"
81 for f in $1/$ARCH2/$2; do
83 ln -s $(readlink $f) "$3/`basename $f`"
85 g=`echo $f | sed -e "s@/$ARCH2/@/$ARCH1/@g"`
87 lipo -create $f $g -output "$3/$(basename $f)"
93 function copy_lib_root {
94 if [ "$ARCH2" == "" ]; then
95 for f in $ROOT/lib/$1*.dylib; do
97 ln -s $(readlink $f) "$2/`basename $f`"
99 cp $f "$2/`basename $f`"
103 for f in $ROOT/$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 function copy_lib_env {
117 if [ "$ARCH2" == "" ]; then
118 for f in $ENV/$ARCH1/lib/$1*.dylib; do
120 ln -s $(readlink $f) "$2/`basename $f`"
122 cp $f "$2/`basename $f`"
126 for f in $ENV/$ARCH2/lib/$1*.dylib; do
128 ln -s $(readlink $f) "$2/`basename $f`"
130 g=`echo $f | sed -e "s@/$ARCH2/@/$ARCH1/@g"`
132 lipo -create $f $g -output "$2/$(basename $f)"
136 to_relink="$to_relink|$1"
139 # @param #1 directory to copy to
142 copy_lib_root libcxml "$dest"
143 copy_lib_root libdcp-1.0 "$dest"
144 copy_lib_root libasdcp-carl "$dest"
145 copy_lib_root libkumu-carl "$dest"
146 copy_lib_root libsub "$dest"
147 copy_lib_root libopenjp2 "$dest"
148 copy_lib_root libavdevice "$dest"
149 copy_lib_root libavformat "$dest"
150 copy_lib_root libavfilter "$dest"
151 copy_lib_root libavutil "$dest"
152 copy_lib_root libavcodec "$dest"
153 copy_lib_root libswscale "$dest"
154 copy_lib_root libpostproc "$dest"
155 copy_lib_root libswresample "$dest"
156 copy_lib_root liblwext4 "$dest"
157 copy_lib_root libblockdev "$dest"
158 copy_lib_root libleqm_nrt "$dest"
159 copy $ROOT src/dcpomatic/build/src/lib/libdcpomatic2.dylib "$dest"
160 copy $ROOT src/dcpomatic/build/src/wx/libdcpomatic2-wx.dylib "$dest"
161 copy_lib_env libboost_atomic "$dest"
162 copy_lib_env libboost_system "$dest"
163 copy_lib_env libboost_filesystem "$dest"
164 copy_lib_env libboost_thread "$dest"
165 copy_lib_env libboost_date_time "$dest"
166 copy_lib_env libboost_locale "$dest"
167 copy_lib_env libboost_regex "$dest"
168 copy_lib_env libxml++ "$dest"
169 copy_lib_env libxslt "$dest"
170 copy_lib_env libxml2 "$dest"
171 copy_lib_env libglibmm-2.4 "$dest"
172 copy_lib_env libgobject "$dest"
173 copy_lib_env libgthread "$dest"
174 copy_lib_env libgmodule "$dest"
175 copy_lib_env libsigc "$dest"
176 copy_lib_env libglib-2 "$dest"
177 copy_lib_env libintl "$dest"
178 copy_lib_env libsndfile "$dest"
179 copy_lib_env libssh "$dest"
180 copy_lib_env libwx "$dest"
181 copy_lib_env libfontconfig "$dest"
182 copy_lib_env libfreetype "$dest"
183 copy_lib_env libexpat "$dest"
184 copy_lib_env libltdl "$dest"
185 copy_lib_env libxmlsec1 "$dest"
186 copy_lib_env libcurl "$dest"
187 copy_lib_env libffi "$dest"
188 copy_lib_env libpango "$dest"
189 copy_lib_env libcairo "$dest"
190 copy_lib_env libpixman "$dest"
191 copy_lib_env libharfbuzz "$dest"
192 copy_lib_env libsamplerate "$dest"
193 copy_lib_env libicui18n "$dest"
194 copy_lib_env libicudata "$dest"
195 copy_lib_env libicuio "$dest"
196 copy_lib_env libicutest "$dest"
197 copy_lib_env libicutu "$dest"
198 copy_lib_env libicuuc "$dest"
199 copy_lib_env libFLAC "$dest"
200 copy_lib_env libvorbis "$dest"
201 copy_lib_env libogg "$dest"
202 copy_lib_env libxerces-c "$dest"
203 copy_lib_env libcrypto "$dest"
204 copy_lib_env libssl "$dest"
205 copy_lib_env libfribidi "$dest"
206 copy_lib_env libgio "$dest"
207 copy_lib_env libz "$dest"
208 copy_lib_env libdav1d "$dest"
211 # @param #1 directory to copy to
212 function copy_resources {
214 if [ "$ARCH2" == "" ]; then
217 local prefix=$ROOT/$ARCH1
219 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small_white.png "$dest"
220 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small_black.png "$dest"
221 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2.icns "$dest"
222 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_kdm.icns "$dest"
223 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_server.icns "$dest"
224 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_player.icns "$dest"
225 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_batch.icns "$dest"
226 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_playlist.icns "$dest"
227 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_disk.icns "$dest"
228 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_combiner.icns "$dest"
229 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_editor.icns "$dest"
230 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults*.png "$dest"
231 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email*.png "$dest"
232 cp $prefix/src/dcpomatic/graphics/osx/preferences/email*.png "$dest"
233 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers*.png "$dest"
234 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms*.png "$dest"
235 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys*.png "$dest"
236 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet*.png "$dest"
237 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications*.png "$dest"
238 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound*.png "$dest"
239 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers*.png "$dest"
240 cp $prefix/src/dcpomatic/graphics/osx/preferences/general*.png "$dest"
241 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced*.png "$dest"
242 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations*.png "$dest"
243 cp $prefix/src/dcpomatic/graphics/osx/preferences/non_standard*.png "$dest"
244 cp $prefix/src/dcpomatic/fonts/LiberationSans-Regular.ttf "$dest"
245 cp $prefix/src/dcpomatic/fonts/LiberationSans-Italic.ttf "$dest"
246 cp $prefix/src/dcpomatic/fonts/LiberationSans-Bold.ttf "$dest"
247 cp $prefix/src/dcpomatic/fonts/fonts.conf.osx "$dest"/fonts.conf
248 cp $prefix/src/dcpomatic/graphics/splash.png "$dest"
249 cp $prefix/src/dcpomatic/graphics/zoom*.png "$dest"
250 cp $prefix/src/dcpomatic/graphics/zoom_all*.png "$dest"
251 cp $prefix/src/dcpomatic/graphics/select*.png "$dest"
252 cp $prefix/src/dcpomatic/graphics/snap*.png "$dest"
253 cp $prefix/src/dcpomatic/graphics/sequence*.png "$dest"
254 cp $prefix/src/dcpomatic/graphics/me.jpg "$dest"
255 cp $prefix/src/dcpomatic/graphics/link.png "$dest"
256 cp $prefix/src/dcpomatic/graphics/add*.png "$dest"
257 cp $prefix/src/dcpomatic/graphics/pause*.png "$dest"
258 cp -r $prefix/share/libdcp/xsd "$dest"
259 cp -r $prefix/share/libdcp/tags "$dest"
260 cp -r $prefix/share/libdcp/ratings "$dest"
262 # i18n: DCP-o-matic .mo files
263 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 sl_SI hu_HU ka_KA fa_IR; do
264 mkdir -p "$dest/$lang/LC_MESSAGES"
265 cp $prefix/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
266 cp $prefix/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
267 cp $prefix/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
270 # i18n: wxWidgets .mo files
271 for lang in de es fr it sv nl ru pl da cs sl; do
273 cp $ENV/$ARCH1/share/locale/$lang/LC_MESSAGES/wxstd*.mo "$dest/$lang"
277 # param $1 list of things that link to other things
278 function relink_relative {
279 to_relink=`echo $to_relink | sed -e "s/\+//g"`
282 arch1_name=$(echo $ARCH1 | sed -e s@/.*@@)
283 arch2_name=$(echo $ARCH2 | sed -e s@/.*@@)
285 for arch in $arch1_name $arch2_name; do
286 for obj in "${linkers[@]}"; do
287 deps=`otool -arch $arch -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|@rpath|boost|libicu|libssh)"`
291 changes="$changes -change $dep @executable_path/../Frameworks/$base"
293 if test "x$changes" != "x"; then
294 install_name_tool $changes -id `basename "$obj"` "$obj"
300 # param $1 directory things should be relinked into
301 # $2 list of things that link to other things
302 function relink_absolute {
303 to_relink=`echo $to_relink | sed -e "s/\+//g"`
308 arch1_name=$(echo $ARCH1 | sed -e s@/.*@@)
309 arch2_name=$(echo $ARCH2 | sed -e s@/.*@@)
311 for arch in $arch1_name $arch2_name; do
312 for obj in "${linkers[@]}"; do
313 deps=`otool -arch $arch -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu|libssh)"`
316 install_name_tool -change "$dep" "$target"/$base -id `basename "$obj"` "$obj"
323 codesign --verify --verbose=4 --options runtime --entitlements entitlements.plist --sign "$APPLICATION_IDENTITY" "$1"
324 if [ "$?" != "0" ]; then
325 echo "Failed to sign $1"
330 # @param #1 .app directory
331 # @param #2 .pkg or ""
332 # @param #3 full name e.g. DCP-o-matic Batch Converter
333 # @param #4 list of executables
339 tmp_dmg=dcpomatic_tmp.dmg
340 if [ "$ARCH2" == "" ]; then
341 dmg="$full_name $version macOS10.8+.dmg"
343 dmg="$full_name $version macOS10.10+.dmg"
345 vol_name=DCP-o-matic-$version
347 find "$appdir/Contents/Frameworks" -iname "*.dylib" -type f -print0 | while IFS= read -r -d '' f; do
351 sign "$appdir/Contents/MacOS/$f"
354 if [ "$pkg" != "" ]; then
355 productsign --sign "$INSTALLER_IDENTITY" "$pkg" "signed_temp.pkg"
356 if [ "$?" != "0" ]; then
357 echo "Failed to sign .pkg"
360 mv signed_temp.pkg "$pkg"
364 cp -a "$appdir" $vol_name
365 if [ "$pkg" != "" ]; then
366 cp -a "$pkg" $vol_name
368 ln -s /Applications "$vol_name/Applications"
369 cat<<EOF > "$vol_name/READ ME.txt"
370 Welcome to DCP-o-matic! The first time you run the program there may be
371 a long (several-minute) delay while macOS checks the code for viruses and
372 other malware. Please be patient!
374 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
375 Beim erstmaligen Start der DCP-o-matic Anwendungen kann ein längerer
376 Verifikationsvorgang auftreten. Dies ist von der macOS Sicherheitsumgebung
377 'Gatekeeper' verursacht. Dieser je nach Rechner teils minutenlange
378 Verifikationsvorgang ist gegenwärtig normal und nicht zu umgehen,
379 es ist kein Programmfehler. Warten sie die Verifikation für jede der
380 DCP-o-matic Anwendungen ab, bei weiteren Programmstarts wird sie nicht
384 if [ "$pkg" != "" ]; then
385 cat<<EOF > "$vol_name/READ ME.txt"
387 To run this software successfully you must install $pkg before running
392 if [ "$pkg" != "" ]; then
393 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
395 To run this software successfully you must install $pkg before running
400 rm -f $tmp_dmg "$dmg"
401 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
402 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
403 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
407 tell application "Finder"
408 tell disk "'$vol_name'"
410 set current view of container window to icon view
411 set toolbar visible of container window to false
412 set statusbar visible of container window to false
413 set the bounds of container window to {400, 200, 1160, 600}
414 set the bounds of container window to {400, 200, 1160, 600}
415 set the bounds of container window to {400, 200, 1160, 600}
416 set theViewOptions to the icon view options of container window
417 set arrangement of theViewOptions to not arranged
418 set icon size of theViewOptions to 64
419 set position of item "'$appdir'" of container window to {90, 80}
420 set position of item "Applications" of container window to {265, 80}
421 set position of item "READ ME.txt" of container window to {430, 80}
422 set position of item "READ ME.de_DE.txt" of container window to {595, 80}
423 set position of item "DCP-o-matic Disk Writer.pkg" of container window to {90, 255}
426 update without registering applications
432 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
435 hdiutil eject $device
436 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
437 sips -i "$appdir/Contents/Resources/dcpomatic2.icns"
438 DeRez -only icns "$appdir/Contents/Resources/dcpomatic2.icns" > "$appdir/Contents/Resources/DCP-o-matic.rsrc"
439 Rez -append "$appdir/Contents/Resources/DCP-o-matic.rsrc" -o "$dmg"
444 codesign --timestamp --verify --verbose --options runtime --entitlements entitlements.plist --sign "$APPLICATION_IDENTITY" "$dmg"
454 approot="$appdir/Contents"
456 mkdir -p "$approot/MacOS"
457 mkdir -p "$approot/Frameworks"
458 mkdir -p "$approot/Resources"
460 to_relink="dcpomatic"
461 copy_libs "$approot/Frameworks"
462 copy_resources "$approot/Resources"
465 function copy_verify {
466 copy $ROOT src/libdcp/build/tools/dcpverify "$approot/MacOS"
467 mv "$approot/MacOS/dcpverify" "$approot/MacOS/dcpomatic2_verify"
468 rl=("$approot/MacOS/dcpomatic2_verify" "$approot/Frameworks/"*.dylib)
469 relink_relative "${rl[@]}"
473 copy $ROOT src/libdcp/build/tools/dcpkdm "$approot/MacOS"
474 mv "$approot/MacOS/dcpkdm" "$approot/MacOS/dcpomatic2_kdm_inspect"
475 rl=("$approot/MacOS/dcpomatic2_kdm_inspect" "$approot/Frameworks/"*.dylib)
476 relink_relative "${rl[@]}"
479 if [ "$ARCH2" == "" ]; then
485 if [[ "$BUILD" == *main* ]]; then
487 setup "DCP-o-matic 2.app"
488 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$approot/MacOS"
489 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$approot/MacOS"
490 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_create "$approot/MacOS"
491 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_map "$approot/MacOS"
492 copy $ROOT bin/ffprobe "$approot/MacOS"
493 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
496 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$approot/Info.plist"
497 rl=("$approot/MacOS/dcpomatic2" "$approot/MacOS/dcpomatic2_cli" "$approot/MacOS/dcpomatic2_create" "$approot/MacOS/dcpomatic2_map" "$approot/MacOS/ffprobe" "$approot/Frameworks/"*.dylib)
498 relink_relative "${rl[@]}"
499 make_dmg "$appdir" "" "DCP-o-matic" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl ffprobe dcpomatic2_cli dcpomatic2_create dcpomatic2_map dcpomatic2"
502 if [[ "$BUILD" == *kdm* ]]; then
503 # DCP-o-matic KDM Creator
504 setup "DCP-o-matic 2 KDM Creator.app"
505 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm "$approot/MacOS"
506 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm_cli "$approot/MacOS"
507 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
510 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$approot/Info.plist"
511 rl=("$approot/MacOS/dcpomatic2_kdm" "$approot/MacOS/dcpomatic2_kdm_cli" "$approot/Frameworks/"*.dylib)
512 relink_relative "${rl[@]}"
513 make_dmg "$appdir" "" "DCP-o-matic KDM Creator" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_kdm_cli dcpomatic2_kdm"
516 if [[ "$BUILD" == *server* ]]; then
517 # DCP-o-matic Encode Server
518 setup "DCP-o-matic 2 Encode Server.app"
519 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server "$approot/MacOS"
520 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$approot/MacOS"
521 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
524 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_server.Info.plist "$approot/Info.plist"
525 rl=("$approot/MacOS/dcpomatic2_server" "$approot/MacOS/dcpomatic2_server_cli" "$approot/Frameworks/"*.dylib)
526 relink_relative "${rl[@]}"
527 make_dmg "$appdir" "" "DCP-o-matic Encode Server" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_server_cli dcpomatic2_server"
530 if [[ "$BUILD" == *batch* ]]; then
531 # DCP-o-matic Batch Converter
532 setup "DCP-o-matic 2 Batch converter.app"
533 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_batch "$approot/MacOS"
534 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
537 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_batch.Info.plist "$approot/Info.plist"
538 rl=("$approot/MacOS/dcpomatic2_batch" "$approot/Frameworks/"*.dylib)
539 relink_relative "${rl[@]}"
540 make_dmg "$appdir" "" "DCP-o-matic Batch Converter" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_batch"
543 if [[ "$BUILD" == *player* ]]; then
545 setup "DCP-o-matic 2 Player.app"
546 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_player "$approot/MacOS"
547 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
550 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_player.Info.plist "$approot/Info.plist"
551 rl=("$approot/MacOS/dcpomatic2_player" "$approot/Frameworks/"*.dylib)
552 relink_relative "${rl[@]}"
553 make_dmg "$appdir" "" "DCP-o-matic Player" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_player"
556 if [[ "$BUILD" == *playlist* ]]; then
557 # DCP-o-matic Playlist Editor
558 setup "DCP-o-matic 2 Playlist Editor.app"
559 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_playlist "$approot/MacOS"
560 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
563 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_playlist.Info.plist "$approot/Info.plist"
564 rl=("$approot/MacOS/dcpomatic2_playlist" "$approot/Frameworks/"*.dylib)
565 relink_relative "${rl[@]}"
566 make_dmg "$appdir" "" "DCP-o-matic Playlist Editor" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_playlist"
569 if [[ "$BUILD" == *combiner* ]]; then
570 # DCP-o-matic Combiner
571 setup "DCP-o-matic 2 Combiner.app"
572 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_combiner "$approot/MacOS"
573 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
576 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_combiner.Info.plist "$approot/Info.plist"
577 rl=("$approot/MacOS/dcpomatic2_combiner" "$approot/Frameworks/"*.dylib)
578 relink_relative "${rl[@]}"
579 make_dmg "$appdir" "" "DCP-o-matic Combiner" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_combiner"
582 if [[ "$BUILD" == *editor* ]]; then
584 setup "DCP-o-matic 2 Editor.app"
585 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_editor "$approot/MacOS"
586 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
589 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_editor.Info.plist "$approot/Info.plist"
590 rl=("$approot/MacOS/dcpomatic2_editor" "$approot/Frameworks/"*.dylib)
591 relink_relative "${rl[@]}"
592 make_dmg "$appdir" "" "DCP-o-matic Editor" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_editor"
595 if [[ "$BUILD" == *disk* ]]; then
596 # DCP-o-matic Disk Writer .app
597 setup "DCP-o-matic 2 Disk Writer.app"
598 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk "$approot/MacOS"
599 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
602 cp $prefix/src/dcpomatic/platform/osx/uninstall_disk.applescript "$approot/Resources"
603 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_disk.Info.plist "$approot/Info.plist"
604 rl=("$approot/MacOS/dcpomatic2_disk" "$approot/Frameworks/"*.dylib)
605 relink_relative "${rl[@]}"
607 # DCP-o-matic Disk Writer daemon .pkg
609 pkgbase=tmp-disk-writer
613 pkgroot=$pkgbase/root
615 mkdir -p $pkgroot/Library/LaunchDaemons
616 cat > $pkgroot/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist <<EOF
617 <?xml version="1.0" encoding="UTF-8"?>
618 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
619 <plist version="1.0">
622 <string>com.dcpomatic.disk.writer</string>
623 <key>ProgramArguments</key>
625 <string>/Library/Application Support/com.dcpomatic/dcpomatic2_disk_writer</string>
627 <key>EnvironmentVariables</key>
629 <key>DYLD_LIBRARY_PATH</key>
630 <string><![CDATA[/Library/Application Support/com.dcpomatic]]></string>
632 <key>StandardOutPath</key>
633 <string>/var/log/dcpomatic_disk_writer_out.log</string>
634 <key>StandardErrorPath</key>
635 <string>/var/log/dcpomatic_disk_writer_err.log</string>
636 <key>LaunchEvents</key>
638 <key>com.apple.notifyd.matching</key>
640 <key>com.dcpomatic.disk.writer.start</key>
642 <key>Notification</key>
643 <string>com.dcpomatic.disk.writer.start</string>
651 # Get the binaries together in $pkgbin then move them to the
652 # place with spaces in the filename to avoid some of the pain of escaping
655 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk_writer "$pkgbin"
658 rl=("$pkgbin/dcpomatic2_disk_writer" "$pkgbin/"*.dylib)
659 relink_absolute "/Library/Application Support/com.dcpomatic" "${rl[@]}"
661 mkdir $pkgbase/scripts
662 cat > $pkgbase/scripts/postinstall <<EOF
664 /bin/launchctl unload "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
665 /bin/launchctl load "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
668 chmod gou+x $pkgbase/scripts/postinstall
670 find "$pkgbin" -iname "*.dylib" -type f -print0 | while IFS= read -r -d '' f; do
673 sign "$pkgbin/dcpomatic2_disk_writer"
675 mkdir -p "$pkgroot/Library/Application Support/com.dcpomatic"
676 mv $pkgbin/* "$pkgroot/Library/Application Support/com.dcpomatic/"
677 pkgbuild --root $pkgroot --identifier com.dcpomatic.disk.writer --scripts $pkgbase/scripts "DCP-o-matic Disk Writer.pkg"
679 make_dmg "$appdir" "DCP-o-matic Disk Writer.pkg" "DCP-o-matic Disk Writer" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_disk"