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 verifier"
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-dcpomatic "$dest"
145 copy_lib_root libkumu-dcpomatic "$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 "$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/dcpomatic2_verifier.icns "$dest"
231 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults*.png "$dest"
232 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email*.png "$dest"
233 cp $prefix/src/dcpomatic/graphics/osx/preferences/email*.png "$dest"
234 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers*.png "$dest"
235 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms*.png "$dest"
236 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys*.png "$dest"
237 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet*.png "$dest"
238 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications*.png "$dest"
239 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound*.png "$dest"
240 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers*.png "$dest"
241 cp $prefix/src/dcpomatic/graphics/osx/preferences/general*.png "$dest"
242 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced*.png "$dest"
243 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations*.png "$dest"
244 cp $prefix/src/dcpomatic/graphics/osx/preferences/non_standard*.png "$dest"
245 cp $prefix/src/dcpomatic/fonts/LiberationSans-Regular.ttf "$dest"
246 cp $prefix/src/dcpomatic/fonts/LiberationSans-Italic.ttf "$dest"
247 cp $prefix/src/dcpomatic/fonts/LiberationSans-Bold.ttf "$dest"
248 cp $prefix/src/dcpomatic/fonts/fonts.conf.osx "$dest"/fonts.conf
249 cp $prefix/src/dcpomatic/graphics/splash.png "$dest"
250 cp $prefix/src/dcpomatic/graphics/zoom*.png "$dest"
251 cp $prefix/src/dcpomatic/graphics/zoom_all*.png "$dest"
252 cp $prefix/src/dcpomatic/graphics/select*.png "$dest"
253 cp $prefix/src/dcpomatic/graphics/snap*.png "$dest"
254 cp $prefix/src/dcpomatic/graphics/sequence*.png "$dest"
255 cp $prefix/src/dcpomatic/graphics/me.jpg "$dest"
256 cp $prefix/src/dcpomatic/graphics/link*.png "$dest"
257 cp $prefix/src/dcpomatic/graphics/add*.png "$dest"
258 cp $prefix/src/dcpomatic/graphics/pause*.png "$dest"
259 cp -r $prefix/share/libdcp/xsd "$dest"
260 cp -r $prefix/share/libdcp/tags "$dest"
261 cp -r $prefix/share/libdcp/ratings "$dest"
263 # i18n: DCP-o-matic .mo files
264 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
265 mkdir -p "$dest/$lang/LC_MESSAGES"
266 cp $prefix/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
267 cp $prefix/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
268 cp $prefix/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
271 # i18n: wxWidgets .mo files
272 for lang in de es fr it sv nl ru pl da cs sl; do
274 cp $ENV/$ARCH1/share/locale/$lang/LC_MESSAGES/wxstd*.mo "$dest/$lang"
278 # param $1 list of things that link to other things
279 function relink_relative {
280 to_relink=`echo $to_relink | sed -e "s/\+//g"`
283 arch1_name=$(echo $ARCH1 | sed -e s@/.*@@)
284 arch2_name=$(echo $ARCH2 | sed -e s@/.*@@)
286 for arch in $arch1_name $arch2_name; do
287 for obj in "${linkers[@]}"; do
288 deps=`otool -arch $arch -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|@rpath|boost|libicu|libssh)"`
292 changes="$changes -change $dep @executable_path/../Frameworks/$base"
294 if test "x$changes" != "x"; then
295 install_name_tool $changes -id `basename "$obj"` "$obj"
301 # param $1 directory things should be relinked into
302 # $2 list of things that link to other things
303 function relink_absolute {
304 to_relink=`echo $to_relink | sed -e "s/\+//g"`
309 arch1_name=$(echo $ARCH1 | sed -e s@/.*@@)
310 arch2_name=$(echo $ARCH2 | sed -e s@/.*@@)
312 for arch in $arch1_name $arch2_name; do
313 for obj in "${linkers[@]}"; do
314 deps=`otool -arch $arch -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu|libssh)"`
317 install_name_tool -change "$dep" "$target"/$base -id `basename "$obj"` "$obj"
324 codesign --verify --verbose=4 --options runtime --entitlements entitlements.plist --sign "$APPLICATION_IDENTITY" "$1"
325 if [ "$?" != "0" ]; then
326 echo "Failed to sign $1"
331 # @param #1 .app directory
332 # @param #2 .pkg or ""
333 # @param #3 full name e.g. DCP-o-matic Batch Converter
334 # @param #4 list of executables
340 tmp_dmg=dcpomatic_tmp.dmg
341 if [ "$ARCH2" == "" ]; then
342 dmg="$full_name $version macOS10.8+.dmg"
344 dmg="$full_name $version macOS10.10+.dmg"
346 vol_name=DCP-o-matic-$version
348 find "$appdir/Contents/Frameworks" -iname "*.dylib" -type f -print0 | while IFS= read -r -d '' f; do
352 sign "$appdir/Contents/MacOS/$f"
355 if [ "$pkg" != "" ]; then
356 productsign --sign "$INSTALLER_IDENTITY" "$pkg" "signed_temp.pkg"
357 if [ "$?" != "0" ]; then
358 echo "Failed to sign .pkg"
361 mv signed_temp.pkg "$pkg"
365 cp -a "$appdir" $vol_name
366 if [ "$pkg" != "" ]; then
367 cp -a "$pkg" $vol_name
369 ln -s /Applications "$vol_name/Applications"
370 cat<<EOF > "$vol_name/READ ME.txt"
371 Welcome to DCP-o-matic! The first time you run the program there may be
372 a long (several-minute) delay while macOS checks the code for viruses and
373 other malware. Please be patient!
375 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
376 Beim erstmaligen Start der DCP-o-matic Anwendungen kann ein längerer
377 Verifikationsvorgang auftreten. Dies ist von der macOS Sicherheitsumgebung
378 'Gatekeeper' verursacht. Dieser je nach Rechner teils minutenlange
379 Verifikationsvorgang ist gegenwärtig normal und nicht zu umgehen,
380 es ist kein Programmfehler. Warten sie die Verifikation für jede der
381 DCP-o-matic Anwendungen ab, bei weiteren Programmstarts wird sie nicht
385 if [ "$pkg" != "" ]; then
386 cat<<EOF > "$vol_name/READ ME.txt"
388 To run this software successfully you must install $pkg before running
393 if [ "$pkg" != "" ]; then
394 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
396 To run this software successfully you must install $pkg before running
401 rm -f $tmp_dmg "$dmg"
402 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
403 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
404 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
408 tell application "Finder"
409 tell disk "'$vol_name'"
411 set current view of container window to icon view
412 set toolbar visible of container window to false
413 set statusbar visible of container window to false
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 the bounds of container window to {400, 200, 1160, 600}
417 set theViewOptions to the icon view options of container window
418 set arrangement of theViewOptions to not arranged
419 set icon size of theViewOptions to 64
420 set position of item "'$appdir'" of container window to {90, 80}
421 set position of item "Applications" of container window to {265, 80}
422 set position of item "READ ME.txt" of container window to {430, 80}
423 set position of item "READ ME.de_DE.txt" of container window to {595, 80}
424 set position of item "DCP-o-matic Disk Writer.pkg" of container window to {90, 255}
427 update without registering applications
433 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
436 hdiutil eject $device
437 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
438 sips -i "$appdir/Contents/Resources/dcpomatic2.icns"
439 DeRez -only icns "$appdir/Contents/Resources/dcpomatic2.icns" > "$appdir/Contents/Resources/DCP-o-matic.rsrc"
440 Rez -append "$appdir/Contents/Resources/DCP-o-matic.rsrc" -o "$dmg"
445 codesign --timestamp --verify --verbose --options runtime --entitlements entitlements.plist --sign "$APPLICATION_IDENTITY" "$dmg"
455 approot="$appdir/Contents"
457 mkdir -p "$approot/MacOS"
458 mkdir -p "$approot/Frameworks"
459 mkdir -p "$approot/Resources"
461 to_relink="dcpomatic"
462 copy_libs "$approot/Frameworks"
463 copy_resources "$approot/Resources"
466 function copy_verify {
467 copy $ROOT src/libdcp/build/tools/dcpverify "$approot/MacOS"
468 mv "$approot/MacOS/dcpverify" "$approot/MacOS/dcpomatic2_verify_cli"
469 rl=("$approot/MacOS/dcpomatic2_verify_cli" "$approot/Frameworks/"*.dylib)
470 relink_relative "${rl[@]}"
474 copy $ROOT src/libdcp/build/tools/dcpkdm "$approot/MacOS"
475 mv "$approot/MacOS/dcpkdm" "$approot/MacOS/dcpomatic2_kdm_inspect"
476 rl=("$approot/MacOS/dcpomatic2_kdm_inspect" "$approot/Frameworks/"*.dylib)
477 relink_relative "${rl[@]}"
480 if [ "$ARCH2" == "" ]; then
486 if [[ "$BUILD" == *main* ]]; then
488 setup "DCP-o-matic 2.app"
489 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$approot/MacOS"
490 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$approot/MacOS"
491 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_create "$approot/MacOS"
492 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_map "$approot/MacOS"
493 copy $ROOT bin/ffprobe "$approot/MacOS"
494 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
497 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$approot/Info.plist"
498 rl=("$approot/MacOS/dcpomatic2" "$approot/MacOS/dcpomatic2_cli" "$approot/MacOS/dcpomatic2_create" "$approot/MacOS/dcpomatic2_map" "$approot/MacOS/ffprobe" "$approot/Frameworks/"*.dylib)
499 relink_relative "${rl[@]}"
500 make_dmg "$appdir" "" "DCP-o-matic" "dcpomatic2_verify_cli dcpomatic2_kdm_inspect openssl ffprobe dcpomatic2_cli dcpomatic2_create dcpomatic2_map dcpomatic2"
503 if [[ "$BUILD" == *kdm* ]]; then
504 # DCP-o-matic KDM Creator
505 setup "DCP-o-matic 2 KDM Creator.app"
506 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm "$approot/MacOS"
507 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm_cli "$approot/MacOS"
508 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
511 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$approot/Info.plist"
512 rl=("$approot/MacOS/dcpomatic2_kdm" "$approot/MacOS/dcpomatic2_kdm_cli" "$approot/Frameworks/"*.dylib)
513 relink_relative "${rl[@]}"
514 make_dmg "$appdir" "" "DCP-o-matic KDM Creator" "dcpomatic2_verify_cli dcpomatic2_kdm_inspect openssl dcpomatic2_kdm_cli dcpomatic2_kdm"
517 if [[ "$BUILD" == *server* ]]; then
518 # DCP-o-matic Encode Server
519 setup "DCP-o-matic 2 Encode Server.app"
520 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server "$approot/MacOS"
521 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$approot/MacOS"
522 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
525 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_server.Info.plist "$approot/Info.plist"
526 rl=("$approot/MacOS/dcpomatic2_server" "$approot/MacOS/dcpomatic2_server_cli" "$approot/Frameworks/"*.dylib)
527 relink_relative "${rl[@]}"
528 make_dmg "$appdir" "" "DCP-o-matic Encode Server" "dcpomatic2_verify_cli dcpomatic2_kdm_inspect openssl dcpomatic2_server_cli dcpomatic2_server"
531 if [[ "$BUILD" == *batch* ]]; then
532 # DCP-o-matic Batch Converter
533 setup "DCP-o-matic 2 Batch converter.app"
534 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_batch "$approot/MacOS"
535 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
538 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_batch.Info.plist "$approot/Info.plist"
539 rl=("$approot/MacOS/dcpomatic2_batch" "$approot/Frameworks/"*.dylib)
540 relink_relative "${rl[@]}"
541 make_dmg "$appdir" "" "DCP-o-matic Batch Converter" "dcpomatic2_verify_cli dcpomatic2_kdm_inspect openssl dcpomatic2_batch"
544 if [[ "$BUILD" == *player* ]]; then
546 setup "DCP-o-matic 2 Player.app"
547 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_player "$approot/MacOS"
548 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
551 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_player.Info.plist "$approot/Info.plist"
552 rl=("$approot/MacOS/dcpomatic2_player" "$approot/Frameworks/"*.dylib)
553 relink_relative "${rl[@]}"
554 make_dmg "$appdir" "" "DCP-o-matic Player" "dcpomatic2_verify_cli dcpomatic2_kdm_inspect openssl dcpomatic2_player"
557 if [[ "$BUILD" == *playlist* ]]; then
558 # DCP-o-matic Playlist Editor
559 setup "DCP-o-matic 2 Playlist Editor.app"
560 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_playlist "$approot/MacOS"
561 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
564 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_playlist.Info.plist "$approot/Info.plist"
565 rl=("$approot/MacOS/dcpomatic2_playlist" "$approot/Frameworks/"*.dylib)
566 relink_relative "${rl[@]}"
567 make_dmg "$appdir" "" "DCP-o-matic Playlist Editor" "dcpomatic2_verify_cli dcpomatic2_kdm_inspect openssl dcpomatic2_playlist"
570 if [[ "$BUILD" == *combiner* ]]; then
571 # DCP-o-matic Combiner
572 setup "DCP-o-matic 2 Combiner.app"
573 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_combiner "$approot/MacOS"
574 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
577 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_combiner.Info.plist "$approot/Info.plist"
578 rl=("$approot/MacOS/dcpomatic2_combiner" "$approot/Frameworks/"*.dylib)
579 relink_relative "${rl[@]}"
580 make_dmg "$appdir" "" "DCP-o-matic Combiner" "dcpomatic2_verify_cli dcpomatic2_kdm_inspect openssl dcpomatic2_combiner"
583 if [[ "$BUILD" == *editor* ]]; then
585 setup "DCP-o-matic 2 Editor.app"
586 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_editor "$approot/MacOS"
587 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
590 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_editor.Info.plist "$approot/Info.plist"
591 rl=("$approot/MacOS/dcpomatic2_editor" "$approot/Frameworks/"*.dylib)
592 relink_relative "${rl[@]}"
593 make_dmg "$appdir" "" "DCP-o-matic Editor" "dcpomatic2_verify_cli dcpomatic2_kdm_inspect openssl dcpomatic2_editor"
596 if [[ "$BUILD" == *verifier* ]]; then
597 # DCP-o-matic Verifier
598 setup "DCP-o-matic 2 Verifier.app"
599 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_verifier "$approot/MacOS"
600 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
603 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_verifier.Info.plist "$approot/Info.plist"
604 rl=("$approot/MacOS/dcpomatic2_verifier" "$approot/Frameworks/"*.dylib)
605 relink_relative "${rl[@]}"
606 make_dmg "$appdir" "" "DCP-o-matic Verifier" "dcpomatic2_verify_cli dcpomatic2_kdm_inspect openssl dcpomatic2_verifier"
609 if [[ "$BUILD" == *disk* ]]; then
610 # DCP-o-matic Disk Writer .app
611 setup "DCP-o-matic 2 Disk Writer.app"
612 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk "$approot/MacOS"
613 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
616 cp $prefix/src/dcpomatic/platform/osx/uninstall_disk.applescript "$approot/Resources"
617 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_disk.Info.plist "$approot/Info.plist"
618 rl=("$approot/MacOS/dcpomatic2_disk" "$approot/Frameworks/"*.dylib)
619 relink_relative "${rl[@]}"
621 # DCP-o-matic Disk Writer daemon .pkg
623 pkgbase=tmp-disk-writer
627 pkgroot=$pkgbase/root
629 mkdir -p $pkgroot/Library/LaunchDaemons
630 cat > $pkgroot/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist <<EOF
631 <?xml version="1.0" encoding="UTF-8"?>
632 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
633 <plist version="1.0">
636 <string>com.dcpomatic.disk.writer</string>
637 <key>ProgramArguments</key>
639 <string>/Library/Application Support/com.dcpomatic/dcpomatic2_disk_writer</string>
641 <key>EnvironmentVariables</key>
643 <key>DYLD_LIBRARY_PATH</key>
644 <string><![CDATA[/Library/Application Support/com.dcpomatic]]></string>
646 <key>StandardOutPath</key>
647 <string>/var/log/dcpomatic_disk_writer_out.log</string>
648 <key>StandardErrorPath</key>
649 <string>/var/log/dcpomatic_disk_writer_err.log</string>
650 <key>LaunchEvents</key>
652 <key>com.apple.notifyd.matching</key>
654 <key>com.dcpomatic.disk.writer.start</key>
656 <key>Notification</key>
657 <string>com.dcpomatic.disk.writer.start</string>
665 # Get the binaries together in $pkgbin then move them to the
666 # place with spaces in the filename to avoid some of the pain of escaping
669 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk_writer "$pkgbin"
672 rl=("$pkgbin/dcpomatic2_disk_writer" "$pkgbin/"*.dylib)
673 relink_absolute "/Library/Application Support/com.dcpomatic" "${rl[@]}"
675 mkdir $pkgbase/scripts
676 cat > $pkgbase/scripts/postinstall <<EOF
678 /bin/launchctl unload "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
679 /bin/launchctl load "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
682 chmod gou+x $pkgbase/scripts/postinstall
684 find "$pkgbin" -iname "*.dylib" -type f -print0 | while IFS= read -r -d '' f; do
687 sign "$pkgbin/dcpomatic2_disk_writer"
689 mkdir -p "$pkgroot/Library/Application Support/com.dcpomatic"
690 mv $pkgbin/* "$pkgroot/Library/Application Support/com.dcpomatic/"
691 pkgbuild --root $pkgroot --identifier com.dcpomatic.disk.writer --scripts $pkgbase/scripts "DCP-o-matic Disk Writer.pkg"
693 make_dmg "$appdir" "DCP-o-matic Disk Writer.pkg" "DCP-o-matic Disk Writer" "dcpomatic2_verify_cli dcpomatic2_kdm_inspect openssl dcpomatic2_disk"