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>
70 if [ "$ARCH2" == "" ]; then
73 ln -s $(readlink $f) "$3/`basename $f`"
75 cp $f "$3/`basename $f`"
79 for f in $1/$ARCH2/$2; do
81 ln -s $(readlink $f) "$3/`basename $f`"
83 g=`echo $f | sed -e "s@/$ARCH2/@/$ARCH1/@g"`
85 lipo -create $f $g -output "$3/$(basename $f)"
91 function copy_lib_root {
92 if [ "$ARCH2" == "" ]; then
93 for f in $ROOT/lib/$1*.dylib; do
95 ln -s $(readlink $f) "$2/`basename $f`"
97 cp $f "$2/`basename $f`"
101 for f in $ROOT/$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 function copy_lib_env {
115 if [ "$ARCH2" == "" ]; then
116 for f in $ENV/$ARCH1/lib/$1*.dylib; do
118 ln -s $(readlink $f) "$2/`basename $f`"
120 cp $f "$2/`basename $f`"
124 for f in $ENV/$ARCH2/lib/$1*.dylib; do
126 ln -s $(readlink $f) "$2/`basename $f`"
128 g=`echo $f | sed -e "s@/$ARCH2/@/$ARCH1/@g"`
130 lipo -create $f $g -output "$2/$(basename $f)"
134 to_relink="$to_relink|$1"
137 # @param #1 directory to copy to
140 copy_lib_root libcxml "$dest"
141 copy_lib_root libdcp-1.0 "$dest"
142 copy_lib_root libasdcp-carl "$dest"
143 copy_lib_root libkumu-carl "$dest"
144 copy_lib_root libsub "$dest"
145 copy_lib_root libopenjp2 "$dest"
146 copy_lib_root libavdevice "$dest"
147 copy_lib_root libavformat "$dest"
148 copy_lib_root libavfilter "$dest"
149 copy_lib_root libavutil "$dest"
150 copy_lib_root libavcodec "$dest"
151 copy_lib_root libswscale "$dest"
152 copy_lib_root libpostproc "$dest"
153 copy_lib_root libswresample "$dest"
154 copy_lib_root liblwext4 "$dest"
155 copy_lib_root libblockdev "$dest"
156 copy_lib_root libleqm_nrt "$dest"
157 copy $ROOT src/dcpomatic/build/src/lib/libdcpomatic2.dylib "$dest"
158 copy $ROOT src/dcpomatic/build/src/wx/libdcpomatic2-wx.dylib "$dest"
159 copy_lib_env libboost_system "$dest"
160 copy_lib_env libboost_filesystem "$dest"
161 copy_lib_env libboost_thread "$dest"
162 copy_lib_env libboost_date_time "$dest"
163 copy_lib_env libboost_locale "$dest"
164 copy_lib_env libboost_regex "$dest"
165 copy_lib_env libxml++ "$dest"
166 copy_lib_env libxslt "$dest"
167 copy_lib_env libxml2 "$dest"
168 copy_lib_env libglibmm-2.4 "$dest"
169 copy_lib_env libgobject "$dest"
170 copy_lib_env libgthread "$dest"
171 copy_lib_env libgmodule "$dest"
172 copy_lib_env libsigc "$dest"
173 copy_lib_env libglib-2 "$dest"
174 copy_lib_env libintl "$dest"
175 copy_lib_env libsndfile "$dest"
176 copy_lib_env libssh "$dest"
177 copy_lib_env libwx "$dest"
178 copy_lib_env libfontconfig "$dest"
179 copy_lib_env libfreetype "$dest"
180 copy_lib_env libexpat "$dest"
181 copy_lib_env libltdl "$dest"
182 copy_lib_env libxmlsec1 "$dest"
183 copy_lib_env libcurl "$dest"
184 copy_lib_env libffi "$dest"
185 copy_lib_env libpango "$dest"
186 copy_lib_env libcairo "$dest"
187 copy_lib_env libpixman "$dest"
188 copy_lib_env libharfbuzz "$dest"
189 copy_lib_env libsamplerate "$dest"
190 copy_lib_env libicui18n "$dest"
191 copy_lib_env libicudata "$dest"
192 copy_lib_env libicuio "$dest"
193 copy_lib_env libicutest "$dest"
194 copy_lib_env libicutu "$dest"
195 copy_lib_env libicuuc "$dest"
196 copy_lib_env libFLAC "$dest"
197 copy_lib_env libvorbis "$dest"
198 copy_lib_env libogg "$dest"
199 copy_lib_env libxerces-c "$dest"
200 copy_lib_env libcrypto "$dest"
201 copy_lib_env libssl "$dest"
202 copy_lib_env libfribidi "$dest"
203 copy_lib_env libgio "$dest"
204 copy_lib_env libz "$dest"
205 copy_lib_env libdav1d "$dest"
208 # @param #1 directory to copy to
209 function copy_resources {
211 if [ "$ARCH2" == "" ]; then
214 local prefix=$ROOT/$ARCH1
216 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small_white.png "$dest"
217 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small_black.png "$dest"
218 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2.icns "$dest"
219 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_kdm.icns "$dest"
220 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_server.icns "$dest"
221 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_player.icns "$dest"
222 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_batch.icns "$dest"
223 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_playlist.icns "$dest"
224 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_disk.icns "$dest"
225 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_combiner.icns "$dest"
226 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_editor.icns "$dest"
227 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults*.png "$dest"
228 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email*.png "$dest"
229 cp $prefix/src/dcpomatic/graphics/osx/preferences/email*.png "$dest"
230 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers*.png "$dest"
231 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms*.png "$dest"
232 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys*.png "$dest"
233 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet*.png "$dest"
234 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications*.png "$dest"
235 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound*.png "$dest"
236 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers*.png "$dest"
237 cp $prefix/src/dcpomatic/graphics/osx/preferences/general*.png "$dest"
238 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced*.png "$dest"
239 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations*.png "$dest"
240 cp $prefix/src/dcpomatic/fonts/LiberationSans-Regular.ttf "$dest"
241 cp $prefix/src/dcpomatic/fonts/LiberationSans-Italic.ttf "$dest"
242 cp $prefix/src/dcpomatic/fonts/LiberationSans-Bold.ttf "$dest"
243 cp $prefix/src/dcpomatic/fonts/fonts.conf.osx "$dest"/fonts.conf
244 cp $prefix/src/dcpomatic/graphics/splash.png "$dest"
245 cp $prefix/src/dcpomatic/graphics/zoom*.png "$dest"
246 cp $prefix/src/dcpomatic/graphics/zoom_all*.png "$dest"
247 cp $prefix/src/dcpomatic/graphics/select*.png "$dest"
248 cp $prefix/src/dcpomatic/graphics/snap*.png "$dest"
249 cp $prefix/src/dcpomatic/graphics/sequence*.png "$dest"
250 cp $prefix/src/dcpomatic/graphics/me.jpg "$dest"
251 cp $prefix/src/dcpomatic/graphics/link.png "$dest"
252 cp $prefix/src/dcpomatic/graphics/tick.png "$dest"
253 cp $prefix/src/dcpomatic/graphics/no_tick.png "$dest"
254 cp -r $prefix/share/libdcp/xsd "$dest"
255 cp -r $prefix/share/libdcp/tags "$dest"
256 cp -r $prefix/share/libdcp/ratings "$dest"
258 # i18n: DCP-o-matic .mo files
259 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; do
260 mkdir -p "$dest/$lang/LC_MESSAGES"
261 cp $prefix/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
262 cp $prefix/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
263 cp $prefix/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
266 # i18n: wxWidgets .mo files
267 for lang in de es fr it sv nl ru pl da cs sl; do
269 cp $ENV/$ARCH1/share/locale/$lang/LC_MESSAGES/wxstd.mo "$dest/$lang"
273 # param $1 list of things that link to other things
274 function relink_relative {
275 to_relink=`echo $to_relink | sed -e "s/\+//g"`
278 arch1_name=$(echo $ARCH1 | sed -e s@/.*@@)
279 arch2_name=$(echo $ARCH2 | sed -e s@/.*@@)
281 for arch in $arch1_name $arch2_name; do
282 for obj in "${linkers[@]}"; do
283 deps=`otool -arch $arch -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|@rpath|boost|libicu|libssh)"`
287 changes="$changes -change $dep @executable_path/../Frameworks/$base"
289 if test "x$changes" != "x"; then
290 install_name_tool $changes -id `basename "$obj"` "$obj"
296 # param $1 directory things should be relinked into
297 # $2 list of things that link to other things
298 function relink_absolute {
299 to_relink=`echo $to_relink | sed -e "s/\+//g"`
304 arch1_name=$(echo $ARCH1 | sed -e s@/.*@@)
305 arch2_name=$(echo $ARCH2 | sed -e s@/.*@@)
307 for arch in $arch1_name $arch2_name; do
308 for obj in "${linkers[@]}"; do
309 deps=`otool -arch $arch -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu|libssh)"`
312 install_name_tool -change "$dep" "$target"/$base -id `basename "$obj"` "$obj"
319 codesign --verify --verbose=4 --options runtime --entitlements entitlements.plist --sign "$APPLICATION_IDENTITY" "$1"
320 if [ "$?" != "0" ]; then
321 echo "Failed to sign $1"
326 # @param #1 .app directory
327 # @param #2 .pkg or ""
328 # @param #3 full name e.g. DCP-o-matic Batch Converter
329 # @param #4 list of executables
335 tmp_dmg=dcpomatic_tmp.dmg
336 if [ "$ARCH2" == "" ]; then
337 dmg="$full_name $version macOS10.8+.dmg"
339 dmg="$full_name $version macOS10.10+.dmg"
341 vol_name=DCP-o-matic-$version
343 find "$appdir/Contents/Frameworks" -iname "*.dylib" -type f -print0 | while IFS= read -r -d '' f; do
347 sign "$appdir/Contents/MacOS/$f"
350 if [ "$pkg" != "" ]; then
351 productsign --sign "$INSTALLER_IDENTITY" "$pkg" "signed_temp.pkg"
352 if [ "$?" != "0" ]; then
353 echo "Failed to sign .pkg"
356 mv signed_temp.pkg "$pkg"
360 cp -a "$appdir" $vol_name
361 if [ "$pkg" != "" ]; then
362 cp -a "$pkg" $vol_name
364 ln -s /Applications "$vol_name/Applications"
365 cat<<EOF > "$vol_name/READ ME.txt"
366 Welcome to DCP-o-matic! The first time you run the program there may be
367 a long (several-minute) delay while macOS checks the code for viruses and
368 other malware. Please be patient!
370 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
371 Beim erstmaligen Start der DCP-o-matic Anwendungen kann ein längerer
372 Verifikationsvorgang auftreten. Dies ist von der macOS Sicherheitsumgebung
373 'Gatekeeper' verursacht. Dieser je nach Rechner teils minutenlange
374 Verifikationsvorgang ist gegenwärtig normal und nicht zu umgehen,
375 es ist kein Programmfehler. Warten sie die Verifikation für jede der
376 DCP-o-matic Anwendungen ab, bei weiteren Programmstarts wird sie nicht
380 if [ "$pkg" != "" ]; then
381 cat<<EOF > "$vol_name/READ ME.txt"
383 To run this software successfully you must install $pkg before running
388 if [ "$pkg" != "" ]; then
389 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
391 To run this software successfully you must install $pkg before running
396 rm -f $tmp_dmg "$dmg"
397 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
398 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
399 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
403 tell application "Finder"
404 tell disk "'$vol_name'"
406 set current view of container window to icon view
407 set toolbar visible of container window to false
408 set statusbar visible of container window to false
409 set the bounds of container window to {400, 200, 1160, 600}
410 set the bounds of container window to {400, 200, 1160, 600}
411 set the bounds of container window to {400, 200, 1160, 600}
412 set theViewOptions to the icon view options of container window
413 set arrangement of theViewOptions to not arranged
414 set icon size of theViewOptions to 64
415 set position of item "'$appdir'" of container window to {90, 80}
416 set position of item "Applications" of container window to {265, 80}
417 set position of item "READ ME.txt" of container window to {430, 80}
418 set position of item "READ ME.de_DE.txt" of container window to {595, 80}
419 set position of item "DCP-o-matic Disk Writer.pkg" of container window to {90, 255}
422 update without registering applications
428 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
431 hdiutil eject $device
432 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
433 sips -i "$appdir/Contents/Resources/dcpomatic2.icns"
434 DeRez -only icns "$appdir/Contents/Resources/dcpomatic2.icns" > "$appdir/Contents/Resources/DCP-o-matic.rsrc"
435 Rez -append "$appdir/Contents/Resources/DCP-o-matic.rsrc" -o "$dmg"
440 codesign --timestamp --verify --verbose --options runtime --entitlements entitlements.plist --sign "$APPLICATION_IDENTITY" "$dmg"
450 approot="$appdir/Contents"
452 mkdir -p "$approot/MacOS"
453 mkdir -p "$approot/Frameworks"
454 mkdir -p "$approot/Resources"
456 to_relink="dcpomatic"
457 copy_libs "$approot/Frameworks"
458 copy_resources "$approot/Resources"
461 function copy_verify {
462 copy $ROOT src/libdcp/build/tools/dcpverify "$approot/MacOS"
463 mv "$approot/MacOS/dcpverify" "$approot/MacOS/dcpomatic2_verify"
464 rl=("$approot/MacOS/dcpomatic2_verify" "$approot/Frameworks/"*.dylib)
465 relink_relative "${rl[@]}"
469 copy $ROOT src/libdcp/build/tools/dcpkdm "$approot/MacOS"
470 mv "$approot/MacOS/dcpkdm" "$approot/MacOS/dcpomatic2_kdm_inspect"
471 rl=("$approot/MacOS/dcpomatic2_kdm_inspect" "$approot/Frameworks/"*.dylib)
472 relink_relative "${rl[@]}"
475 if [ "$ARCH2" == "" ]; then
481 if [[ "$BUILD" == *main* ]]; then
483 setup "DCP-o-matic 2.app"
484 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$approot/MacOS"
485 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$approot/MacOS"
486 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_create "$approot/MacOS"
487 copy $ROOT bin/ffprobe "$approot/MacOS"
488 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
491 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$approot/Info.plist"
492 rl=("$approot/MacOS/dcpomatic2" "$approot/MacOS/dcpomatic2_cli" "$approot/MacOS/dcpomatic2_create" "$approot/MacOS/ffprobe" "$approot/Frameworks/"*.dylib)
493 relink_relative "${rl[@]}"
494 make_dmg "$appdir" "" "DCP-o-matic" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl ffprobe dcpomatic2_cli dcpomatic2_create dcpomatic2"
497 if [[ "$BUILD" == *kdm* ]]; then
498 # DCP-o-matic KDM Creator
499 setup "DCP-o-matic 2 KDM Creator.app"
500 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm "$approot/MacOS"
501 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm_cli "$approot/MacOS"
502 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
505 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$approot/Info.plist"
506 rl=("$approot/MacOS/dcpomatic2_kdm" "$approot/MacOS/dcpomatic2_kdm_cli" "$approot/Frameworks/"*.dylib)
507 relink_relative "${rl[@]}"
508 make_dmg "$appdir" "" "DCP-o-matic KDM Creator" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_kdm_cli dcpomatic2_kdm"
511 if [[ "$BUILD" == *server* ]]; then
512 # DCP-o-matic Encode Server
513 setup "DCP-o-matic 2 Encode Server.app"
514 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server "$approot/MacOS"
515 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$approot/MacOS"
516 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
519 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_server.Info.plist "$approot/Info.plist"
520 rl=("$approot/MacOS/dcpomatic2_server" "$approot/MacOS/dcpomatic2_server_cli" "$approot/Frameworks/"*.dylib)
521 relink_relative "${rl[@]}"
522 make_dmg "$appdir" "" "DCP-o-matic Encode Server" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_server_cli dcpomatic2_server"
525 if [[ "$BUILD" == *batch* ]]; then
526 # DCP-o-matic Batch Converter
527 setup "DCP-o-matic 2 Batch converter.app"
528 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_batch "$approot/MacOS"
529 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
532 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_batch.Info.plist "$approot/Info.plist"
533 rl=("$approot/MacOS/dcpomatic2_batch" "$approot/Frameworks/"*.dylib)
534 relink_relative "${rl[@]}"
535 make_dmg "$appdir" "" "DCP-o-matic Batch Converter" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_batch"
538 if [[ "$BUILD" == *player* ]]; then
540 setup "DCP-o-matic 2 Player.app"
541 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_player "$approot/MacOS"
542 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
545 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_player.Info.plist "$approot/Info.plist"
546 rl=("$approot/MacOS/dcpomatic2_player" "$approot/Frameworks/"*.dylib)
547 relink_relative "${rl[@]}"
548 make_dmg "$appdir" "" "DCP-o-matic Player" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_player"
551 if [[ "$BUILD" == *playlist* ]]; then
552 # DCP-o-matic Playlist Editor
553 setup "DCP-o-matic 2 Playlist Editor.app"
554 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_playlist "$approot/MacOS"
555 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
558 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_playlist.Info.plist "$approot/Info.plist"
559 rl=("$approot/MacOS/dcpomatic2_playlist" "$approot/Frameworks/"*.dylib)
560 relink_relative "${rl[@]}"
561 make_dmg "$appdir" "" "DCP-o-matic Playlist Editor" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_playlist"
564 if [[ "$BUILD" == *combiner* ]]; then
565 # DCP-o-matic Combiner
566 setup "DCP-o-matic 2 Combiner.app"
567 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_combiner "$approot/MacOS"
568 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
571 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_combiner.Info.plist "$approot/Info.plist"
572 rl=("$approot/MacOS/dcpomatic2_combiner" "$approot/Frameworks/"*.dylib)
573 relink_relative "${rl[@]}"
574 make_dmg "$appdir" "" "DCP-o-matic Combiner" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_combiner"
577 if [[ "$BUILD" == *editor* ]]; then
579 setup "DCP-o-matic 2 Editor.app"
580 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_editor "$approot/MacOS"
581 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
584 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_editor.Info.plist "$approot/Info.plist"
585 rl=("$approot/MacOS/dcpomatic2_editor" "$approot/Frameworks/"*.dylib)
586 relink_relative "${rl[@]}"
587 make_dmg "$appdir" "" "DCP-o-matic Editor" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_editor"
590 if [[ "$BUILD" == *disk* ]]; then
591 # DCP-o-matic Disk Writer .app
592 setup "DCP-o-matic 2 Disk Writer.app"
593 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk "$approot/MacOS"
594 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
597 cp $prefix/src/dcpomatic/platform/osx/uninstall_disk.applescript "$approot/Resources"
598 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_disk.Info.plist "$approot/Info.plist"
599 rl=("$approot/MacOS/dcpomatic2_disk" "$approot/Frameworks/"*.dylib)
600 relink_relative "${rl[@]}"
602 # DCP-o-matic Disk Writer daemon .pkg
604 pkgbase=tmp-disk-writer
608 pkgroot=$pkgbase/root
610 mkdir -p $pkgroot/Library/LaunchDaemons
611 cat > $pkgroot/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist <<EOF
612 <?xml version="1.0" encoding="UTF-8"?>
613 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
614 <plist version="1.0">
617 <string>com.dcpomatic.disk.writer</string>
618 <key>ProgramArguments</key>
620 <string>/Library/Application Support/com.dcpomatic/dcpomatic2_disk_writer</string>
622 <key>EnvironmentVariables</key>
624 <key>DYLD_LIBRARY_PATH</key>
625 <string><![CDATA[/Library/Application Support/com.dcpomatic]]></string>
627 <key>StandardOutPath</key>
628 <string>/var/log/dcpomatic_disk_writer_out.log</string>
629 <key>StandardErrorPath</key>
630 <string>/var/log/dcpomatic_disk_writer_err.log</string>
631 <key>LaunchEvents</key>
633 <key>com.apple.notifyd.matching</key>
635 <key>com.dcpomatic.disk.writer.start</key>
637 <key>Notification</key>
638 <string>com.dcpomatic.disk.writer.start</string>
646 # Get the binaries together in $pkgbin then move them to the
647 # place with spaces in the filename to avoid some of the pain of escaping
650 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk_writer "$pkgbin"
653 rl=("$pkgbin/dcpomatic2_disk_writer" "$pkgbin/"*.dylib)
654 relink_absolute "/Library/Application Support/com.dcpomatic" "${rl[@]}"
656 mkdir $pkgbase/scripts
657 cat > $pkgbase/scripts/postinstall <<EOF
659 /bin/launchctl unload "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
660 /bin/launchctl load "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
663 chmod gou+x $pkgbase/scripts/postinstall
665 find "$pkgbin" -iname "*.dylib" -type f -print0 | while IFS= read -r -d '' f; do
668 sign "$pkgbin/dcpomatic2_disk_writer"
670 mkdir -p "$pkgroot/Library/Application Support/com.dcpomatic"
671 mv $pkgbin/* "$pkgroot/Library/Application Support/com.dcpomatic/"
672 pkgbuild --root $pkgroot --identifier com.dcpomatic.disk.writer --scripts $pkgbase/scripts "DCP-o-matic Disk Writer.pkg"
674 make_dmg "$appdir" "DCP-o-matic Disk Writer.pkg" "DCP-o-matic Disk Writer" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_disk"