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_atomic "$dest"
160 copy_lib_env libboost_system "$dest"
161 copy_lib_env libboost_filesystem "$dest"
162 copy_lib_env libboost_thread "$dest"
163 copy_lib_env libboost_date_time "$dest"
164 copy_lib_env libboost_locale "$dest"
165 copy_lib_env libboost_regex "$dest"
166 copy_lib_env libxml++ "$dest"
167 copy_lib_env libxslt "$dest"
168 copy_lib_env libxml2 "$dest"
169 copy_lib_env libglibmm-2.4 "$dest"
170 copy_lib_env libgobject "$dest"
171 copy_lib_env libgthread "$dest"
172 copy_lib_env libgmodule "$dest"
173 copy_lib_env libsigc "$dest"
174 copy_lib_env libglib-2 "$dest"
175 copy_lib_env libintl "$dest"
176 copy_lib_env libsndfile "$dest"
177 copy_lib_env libssh "$dest"
178 copy_lib_env libwx "$dest"
179 copy_lib_env libfontconfig "$dest"
180 copy_lib_env libfreetype "$dest"
181 copy_lib_env libexpat "$dest"
182 copy_lib_env libltdl "$dest"
183 copy_lib_env libxmlsec1 "$dest"
184 copy_lib_env libcurl "$dest"
185 copy_lib_env libffi "$dest"
186 copy_lib_env libpango "$dest"
187 copy_lib_env libcairo "$dest"
188 copy_lib_env libpixman "$dest"
189 copy_lib_env libharfbuzz "$dest"
190 copy_lib_env libsamplerate "$dest"
191 copy_lib_env libicui18n "$dest"
192 copy_lib_env libicudata "$dest"
193 copy_lib_env libicuio "$dest"
194 copy_lib_env libicutest "$dest"
195 copy_lib_env libicutu "$dest"
196 copy_lib_env libicuuc "$dest"
197 copy_lib_env libFLAC "$dest"
198 copy_lib_env libvorbis "$dest"
199 copy_lib_env libogg "$dest"
200 copy_lib_env libxerces-c "$dest"
201 copy_lib_env libcrypto "$dest"
202 copy_lib_env libssl "$dest"
203 copy_lib_env libfribidi "$dest"
204 copy_lib_env libgio "$dest"
205 copy_lib_env libz "$dest"
206 copy_lib_env libdav1d "$dest"
209 # @param #1 directory to copy to
210 function copy_resources {
212 if [ "$ARCH2" == "" ]; then
215 local prefix=$ROOT/$ARCH1
217 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small_white.png "$dest"
218 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small_black.png "$dest"
219 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2.icns "$dest"
220 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_kdm.icns "$dest"
221 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_server.icns "$dest"
222 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_player.icns "$dest"
223 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_batch.icns "$dest"
224 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_playlist.icns "$dest"
225 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_disk.icns "$dest"
226 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_combiner.icns "$dest"
227 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_editor.icns "$dest"
228 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults*.png "$dest"
229 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email*.png "$dest"
230 cp $prefix/src/dcpomatic/graphics/osx/preferences/email*.png "$dest"
231 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers*.png "$dest"
232 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms*.png "$dest"
233 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys*.png "$dest"
234 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet*.png "$dest"
235 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications*.png "$dest"
236 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound*.png "$dest"
237 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers*.png "$dest"
238 cp $prefix/src/dcpomatic/graphics/osx/preferences/general*.png "$dest"
239 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced*.png "$dest"
240 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations*.png "$dest"
241 cp $prefix/src/dcpomatic/graphics/osx/preferences/non_standard*.png "$dest"
242 cp $prefix/src/dcpomatic/fonts/LiberationSans-Regular.ttf "$dest"
243 cp $prefix/src/dcpomatic/fonts/LiberationSans-Italic.ttf "$dest"
244 cp $prefix/src/dcpomatic/fonts/LiberationSans-Bold.ttf "$dest"
245 cp $prefix/src/dcpomatic/fonts/fonts.conf.osx "$dest"/fonts.conf
246 cp $prefix/src/dcpomatic/graphics/splash.png "$dest"
247 cp $prefix/src/dcpomatic/graphics/zoom*.png "$dest"
248 cp $prefix/src/dcpomatic/graphics/zoom_all*.png "$dest"
249 cp $prefix/src/dcpomatic/graphics/select*.png "$dest"
250 cp $prefix/src/dcpomatic/graphics/snap*.png "$dest"
251 cp $prefix/src/dcpomatic/graphics/sequence*.png "$dest"
252 cp $prefix/src/dcpomatic/graphics/me.jpg "$dest"
253 cp $prefix/src/dcpomatic/graphics/link.png "$dest"
254 cp $prefix/src/dcpomatic/graphics/add*.png "$dest"
255 cp $prefix/src/dcpomatic/graphics/pause*.png "$dest"
256 cp -r $prefix/share/libdcp/xsd "$dest"
257 cp -r $prefix/share/libdcp/tags "$dest"
258 cp -r $prefix/share/libdcp/ratings "$dest"
260 # i18n: DCP-o-matic .mo files
261 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
262 mkdir -p "$dest/$lang/LC_MESSAGES"
263 cp $prefix/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
264 cp $prefix/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
265 cp $prefix/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
268 # i18n: wxWidgets .mo files
269 for lang in de es fr it sv nl ru pl da cs sl; do
271 cp $ENV/$ARCH1/share/locale/$lang/LC_MESSAGES/wxstd*.mo "$dest/$lang"
275 # param $1 list of things that link to other things
276 function relink_relative {
277 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|@rpath|boost|libicu|libssh)"`
289 changes="$changes -change $dep @executable_path/../Frameworks/$base"
291 if test "x$changes" != "x"; then
292 install_name_tool $changes -id `basename "$obj"` "$obj"
298 # param $1 directory things should be relinked into
299 # $2 list of things that link to other things
300 function relink_absolute {
301 to_relink=`echo $to_relink | sed -e "s/\+//g"`
306 arch1_name=$(echo $ARCH1 | sed -e s@/.*@@)
307 arch2_name=$(echo $ARCH2 | sed -e s@/.*@@)
309 for arch in $arch1_name $arch2_name; do
310 for obj in "${linkers[@]}"; do
311 deps=`otool -arch $arch -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu|libssh)"`
314 install_name_tool -change "$dep" "$target"/$base -id `basename "$obj"` "$obj"
321 codesign --verify --verbose=4 --options runtime --entitlements entitlements.plist --sign "$APPLICATION_IDENTITY" "$1"
322 if [ "$?" != "0" ]; then
323 echo "Failed to sign $1"
328 # @param #1 .app directory
329 # @param #2 .pkg or ""
330 # @param #3 full name e.g. DCP-o-matic Batch Converter
331 # @param #4 list of executables
337 tmp_dmg=dcpomatic_tmp.dmg
338 if [ "$ARCH2" == "" ]; then
339 dmg="$full_name $version macOS10.8+.dmg"
341 dmg="$full_name $version macOS10.10+.dmg"
343 vol_name=DCP-o-matic-$version
345 find "$appdir/Contents/Frameworks" -iname "*.dylib" -type f -print0 | while IFS= read -r -d '' f; do
349 sign "$appdir/Contents/MacOS/$f"
352 if [ "$pkg" != "" ]; then
353 productsign --sign "$INSTALLER_IDENTITY" "$pkg" "signed_temp.pkg"
354 if [ "$?" != "0" ]; then
355 echo "Failed to sign .pkg"
358 mv signed_temp.pkg "$pkg"
362 cp -a "$appdir" $vol_name
363 if [ "$pkg" != "" ]; then
364 cp -a "$pkg" $vol_name
366 ln -s /Applications "$vol_name/Applications"
367 cat<<EOF > "$vol_name/READ ME.txt"
368 Welcome to DCP-o-matic! The first time you run the program there may be
369 a long (several-minute) delay while macOS checks the code for viruses and
370 other malware. Please be patient!
372 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
373 Beim erstmaligen Start der DCP-o-matic Anwendungen kann ein längerer
374 Verifikationsvorgang auftreten. Dies ist von der macOS Sicherheitsumgebung
375 'Gatekeeper' verursacht. Dieser je nach Rechner teils minutenlange
376 Verifikationsvorgang ist gegenwärtig normal und nicht zu umgehen,
377 es ist kein Programmfehler. Warten sie die Verifikation für jede der
378 DCP-o-matic Anwendungen ab, bei weiteren Programmstarts wird sie nicht
382 if [ "$pkg" != "" ]; then
383 cat<<EOF > "$vol_name/READ ME.txt"
385 To run this software successfully you must install $pkg before running
390 if [ "$pkg" != "" ]; then
391 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
393 To run this software successfully you must install $pkg before running
398 rm -f $tmp_dmg "$dmg"
399 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
400 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
401 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
405 tell application "Finder"
406 tell disk "'$vol_name'"
408 set current view of container window to icon view
409 set toolbar visible of container window to false
410 set statusbar visible of container window to false
411 set the bounds of container window to {400, 200, 1160, 600}
412 set the bounds of container window to {400, 200, 1160, 600}
413 set the bounds of container window to {400, 200, 1160, 600}
414 set theViewOptions to the icon view options of container window
415 set arrangement of theViewOptions to not arranged
416 set icon size of theViewOptions to 64
417 set position of item "'$appdir'" of container window to {90, 80}
418 set position of item "Applications" of container window to {265, 80}
419 set position of item "READ ME.txt" of container window to {430, 80}
420 set position of item "READ ME.de_DE.txt" of container window to {595, 80}
421 set position of item "DCP-o-matic Disk Writer.pkg" of container window to {90, 255}
424 update without registering applications
430 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
433 hdiutil eject $device
434 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
435 sips -i "$appdir/Contents/Resources/dcpomatic2.icns"
436 DeRez -only icns "$appdir/Contents/Resources/dcpomatic2.icns" > "$appdir/Contents/Resources/DCP-o-matic.rsrc"
437 Rez -append "$appdir/Contents/Resources/DCP-o-matic.rsrc" -o "$dmg"
442 codesign --timestamp --verify --verbose --options runtime --entitlements entitlements.plist --sign "$APPLICATION_IDENTITY" "$dmg"
452 approot="$appdir/Contents"
454 mkdir -p "$approot/MacOS"
455 mkdir -p "$approot/Frameworks"
456 mkdir -p "$approot/Resources"
458 to_relink="dcpomatic"
459 copy_libs "$approot/Frameworks"
460 copy_resources "$approot/Resources"
463 function copy_verify {
464 copy $ROOT src/libdcp/build/tools/dcpverify "$approot/MacOS"
465 mv "$approot/MacOS/dcpverify" "$approot/MacOS/dcpomatic2_verify"
466 rl=("$approot/MacOS/dcpomatic2_verify" "$approot/Frameworks/"*.dylib)
467 relink_relative "${rl[@]}"
471 copy $ROOT src/libdcp/build/tools/dcpkdm "$approot/MacOS"
472 mv "$approot/MacOS/dcpkdm" "$approot/MacOS/dcpomatic2_kdm_inspect"
473 rl=("$approot/MacOS/dcpomatic2_kdm_inspect" "$approot/Frameworks/"*.dylib)
474 relink_relative "${rl[@]}"
477 if [ "$ARCH2" == "" ]; then
483 if [[ "$BUILD" == *main* ]]; then
485 setup "DCP-o-matic 2.app"
486 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$approot/MacOS"
487 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$approot/MacOS"
488 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_create "$approot/MacOS"
489 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_map "$approot/MacOS"
490 copy $ROOT bin/ffprobe "$approot/MacOS"
491 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
494 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$approot/Info.plist"
495 rl=("$approot/MacOS/dcpomatic2" "$approot/MacOS/dcpomatic2_cli" "$approot/MacOS/dcpomatic2_create" "$approot/MacOS/dcpomatic2_map" "$approot/MacOS/ffprobe" "$approot/Frameworks/"*.dylib)
496 relink_relative "${rl[@]}"
497 make_dmg "$appdir" "" "DCP-o-matic" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl ffprobe dcpomatic2_cli dcpomatic2_create dcpomatic2_map dcpomatic2"
500 if [[ "$BUILD" == *kdm* ]]; then
501 # DCP-o-matic KDM Creator
502 setup "DCP-o-matic 2 KDM Creator.app"
503 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm "$approot/MacOS"
504 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm_cli "$approot/MacOS"
505 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
508 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$approot/Info.plist"
509 rl=("$approot/MacOS/dcpomatic2_kdm" "$approot/MacOS/dcpomatic2_kdm_cli" "$approot/Frameworks/"*.dylib)
510 relink_relative "${rl[@]}"
511 make_dmg "$appdir" "" "DCP-o-matic KDM Creator" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_kdm_cli dcpomatic2_kdm"
514 if [[ "$BUILD" == *server* ]]; then
515 # DCP-o-matic Encode Server
516 setup "DCP-o-matic 2 Encode Server.app"
517 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server "$approot/MacOS"
518 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$approot/MacOS"
519 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
522 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_server.Info.plist "$approot/Info.plist"
523 rl=("$approot/MacOS/dcpomatic2_server" "$approot/MacOS/dcpomatic2_server_cli" "$approot/Frameworks/"*.dylib)
524 relink_relative "${rl[@]}"
525 make_dmg "$appdir" "" "DCP-o-matic Encode Server" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_server_cli dcpomatic2_server"
528 if [[ "$BUILD" == *batch* ]]; then
529 # DCP-o-matic Batch Converter
530 setup "DCP-o-matic 2 Batch converter.app"
531 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_batch "$approot/MacOS"
532 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
535 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_batch.Info.plist "$approot/Info.plist"
536 rl=("$approot/MacOS/dcpomatic2_batch" "$approot/Frameworks/"*.dylib)
537 relink_relative "${rl[@]}"
538 make_dmg "$appdir" "" "DCP-o-matic Batch Converter" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_batch"
541 if [[ "$BUILD" == *player* ]]; then
543 setup "DCP-o-matic 2 Player.app"
544 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_player "$approot/MacOS"
545 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
548 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_player.Info.plist "$approot/Info.plist"
549 rl=("$approot/MacOS/dcpomatic2_player" "$approot/Frameworks/"*.dylib)
550 relink_relative "${rl[@]}"
551 make_dmg "$appdir" "" "DCP-o-matic Player" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_player"
554 if [[ "$BUILD" == *playlist* ]]; then
555 # DCP-o-matic Playlist Editor
556 setup "DCP-o-matic 2 Playlist Editor.app"
557 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_playlist "$approot/MacOS"
558 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
561 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_playlist.Info.plist "$approot/Info.plist"
562 rl=("$approot/MacOS/dcpomatic2_playlist" "$approot/Frameworks/"*.dylib)
563 relink_relative "${rl[@]}"
564 make_dmg "$appdir" "" "DCP-o-matic Playlist Editor" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_playlist"
567 if [[ "$BUILD" == *combiner* ]]; then
568 # DCP-o-matic Combiner
569 setup "DCP-o-matic 2 Combiner.app"
570 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_combiner "$approot/MacOS"
571 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
574 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_combiner.Info.plist "$approot/Info.plist"
575 rl=("$approot/MacOS/dcpomatic2_combiner" "$approot/Frameworks/"*.dylib)
576 relink_relative "${rl[@]}"
577 make_dmg "$appdir" "" "DCP-o-matic Combiner" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_combiner"
580 if [[ "$BUILD" == *editor* ]]; then
582 setup "DCP-o-matic 2 Editor.app"
583 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_editor "$approot/MacOS"
584 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
587 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_editor.Info.plist "$approot/Info.plist"
588 rl=("$approot/MacOS/dcpomatic2_editor" "$approot/Frameworks/"*.dylib)
589 relink_relative "${rl[@]}"
590 make_dmg "$appdir" "" "DCP-o-matic Editor" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_editor"
593 if [[ "$BUILD" == *disk* ]]; then
594 # DCP-o-matic Disk Writer .app
595 setup "DCP-o-matic 2 Disk Writer.app"
596 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk "$approot/MacOS"
597 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
600 cp $prefix/src/dcpomatic/platform/osx/uninstall_disk.applescript "$approot/Resources"
601 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_disk.Info.plist "$approot/Info.plist"
602 rl=("$approot/MacOS/dcpomatic2_disk" "$approot/Frameworks/"*.dylib)
603 relink_relative "${rl[@]}"
605 # DCP-o-matic Disk Writer daemon .pkg
607 pkgbase=tmp-disk-writer
611 pkgroot=$pkgbase/root
613 mkdir -p $pkgroot/Library/LaunchDaemons
614 cat > $pkgroot/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist <<EOF
615 <?xml version="1.0" encoding="UTF-8"?>
616 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
617 <plist version="1.0">
620 <string>com.dcpomatic.disk.writer</string>
621 <key>ProgramArguments</key>
623 <string>/Library/Application Support/com.dcpomatic/dcpomatic2_disk_writer</string>
625 <key>EnvironmentVariables</key>
627 <key>DYLD_LIBRARY_PATH</key>
628 <string><![CDATA[/Library/Application Support/com.dcpomatic]]></string>
630 <key>StandardOutPath</key>
631 <string>/var/log/dcpomatic_disk_writer_out.log</string>
632 <key>StandardErrorPath</key>
633 <string>/var/log/dcpomatic_disk_writer_err.log</string>
634 <key>LaunchEvents</key>
636 <key>com.apple.notifyd.matching</key>
638 <key>com.dcpomatic.disk.writer.start</key>
640 <key>Notification</key>
641 <string>com.dcpomatic.disk.writer.start</string>
649 # Get the binaries together in $pkgbin then move them to the
650 # place with spaces in the filename to avoid some of the pain of escaping
653 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk_writer "$pkgbin"
656 rl=("$pkgbin/dcpomatic2_disk_writer" "$pkgbin/"*.dylib)
657 relink_absolute "/Library/Application Support/com.dcpomatic" "${rl[@]}"
659 mkdir $pkgbase/scripts
660 cat > $pkgbase/scripts/postinstall <<EOF
662 /bin/launchctl unload "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
663 /bin/launchctl load "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
666 chmod gou+x $pkgbase/scripts/postinstall
668 find "$pkgbin" -iname "*.dylib" -type f -print0 | while IFS= read -r -d '' f; do
671 sign "$pkgbin/dcpomatic2_disk_writer"
673 mkdir -p "$pkgroot/Library/Application Support/com.dcpomatic"
674 mv $pkgbin/* "$pkgroot/Library/Application Support/com.dcpomatic/"
675 pkgbuild --root $pkgroot --identifier com.dcpomatic.disk.writer --scripts $pkgbase/scripts "DCP-o-matic Disk Writer.pkg"
677 make_dmg "$appdir" "DCP-o-matic Disk Writer.pkg" "DCP-o-matic Disk Writer" "dcpomatic2_verify dcpomatic2_kdm_inspect openssl dcpomatic2_disk"