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"
184 copy_lib_env libdav1d "$dest"
187 # @param #1 directory to copy to
188 function copy_resources {
190 if [ "$ARCH2" == "" ]; then
193 local prefix=$ROOT/$ARCH1
195 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small_white.png "$dest"
196 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small_black.png "$dest"
197 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2.icns "$dest"
198 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_kdm.icns "$dest"
199 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_server.icns "$dest"
200 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_player.icns "$dest"
201 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_batch.icns "$dest"
202 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_playlist.icns "$dest"
203 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_disk.icns "$dest"
204 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_combiner.icns "$dest"
205 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_editor.icns "$dest"
206 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults.png "$dest"
207 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults@2x.png "$dest"
208 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email.png "$dest"
209 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email@2x.png "$dest"
210 cp $prefix/src/dcpomatic/graphics/osx/preferences/email.png "$dest"
211 cp $prefix/src/dcpomatic/graphics/osx/preferences/email@2x.png "$dest"
212 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers.png "$dest"
213 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers@2x.png "$dest"
214 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms.png "$dest"
215 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms@2x.png "$dest"
216 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys.png "$dest"
217 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys@2x.png "$dest"
218 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet.png "$dest"
219 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet@2x.png "$dest"
220 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications.png "$dest"
221 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications@2x.png "$dest"
222 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound.png "$dest"
223 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound@2x.png "$dest"
224 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers.png "$dest"
225 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers@2x.png "$dest"
226 cp $prefix/src/dcpomatic/graphics/osx/preferences/general.png "$dest"
227 cp $prefix/src/dcpomatic/graphics/osx/preferences/general@2x.png "$dest"
228 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced.png "$dest"
229 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced@2x.png "$dest"
230 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations.png "$dest"
231 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations@2x.png "$dest"
232 cp $prefix/src/dcpomatic/fonts/LiberationSans-Regular.ttf "$dest"
233 cp $prefix/src/dcpomatic/fonts/LiberationSans-Italic.ttf "$dest"
234 cp $prefix/src/dcpomatic/fonts/LiberationSans-Bold.ttf "$dest"
235 cp $prefix/src/dcpomatic/fonts/fonts.conf.osx "$dest"/fonts.conf
236 cp $prefix/src/dcpomatic/graphics/splash.png "$dest"
237 cp $prefix/src/dcpomatic/graphics/zoom.png "$dest"
238 cp $prefix/src/dcpomatic/graphics/zoom_all.png "$dest"
239 cp $prefix/src/dcpomatic/graphics/select.png "$dest"
240 cp $prefix/src/dcpomatic/graphics/snap.png "$dest"
241 cp $prefix/src/dcpomatic/graphics/sequence.png "$dest"
242 cp $prefix/src/dcpomatic/graphics/me.jpg "$dest"
243 cp $prefix/src/dcpomatic/graphics/link.png "$dest"
244 cp $prefix/src/dcpomatic/graphics/tick.png "$dest"
245 cp $prefix/src/dcpomatic/graphics/no_tick.png "$dest"
246 cp -r $prefix/share/libdcp/xsd "$dest"
247 cp -r $prefix/share/libdcp/tags "$dest"
248 cp -r $prefix/share/libdcp/ratings "$dest"
250 # i18n: DCP-o-matic .mo files
251 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
252 mkdir -p "$dest/$lang/LC_MESSAGES"
253 cp $prefix/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
254 cp $prefix/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
255 cp $prefix/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
258 # i18n: wxWidgets .mo files
259 for lang in de es fr it sv nl ru pl da cs; do
261 cp $ENV/$ARCH1/share/locale/$lang/LC_MESSAGES/wxstd.mo "$dest/$lang"
265 # param $1 list of things that link to other things
266 function relink_relative {
267 to_relink=`echo $to_relink | sed -e "s/\+//g"`
270 arch1_name=$(echo $ARCH1 | sed -e s@/.*@@)
271 arch2_name=$(echo $ARCH2 | sed -e s@/.*@@)
273 for arch in $arch1_name $arch2_name; do
274 for obj in "${linkers[@]}"; do
275 deps=`otool -arch $arch -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|@rpath|boost|libicu|libssh)"`
279 changes="$changes -change $dep @executable_path/../Frameworks/$base"
281 if test "x$changes" != "x"; then
282 install_name_tool $changes -id `basename "$obj"` "$obj"
288 # param $1 directory things should be relinked into
289 # $2 list of things that link to other things
290 function relink_absolute {
291 to_relink=`echo $to_relink | sed -e "s/\+//g"`
296 arch1_name=$(echo $ARCH1 | sed -e s@/.*@@)
297 arch2_name=$(echo $ARCH2 | sed -e s@/.*@@)
299 for arch in $arch1_name $arch2_name; do
300 for obj in "${linkers[@]}"; do
301 deps=`otool -arch $arch -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu|libssh)"`
304 install_name_tool -change "$dep" "$target"/$base -id `basename "$obj"` "$obj"
311 codesign --verify --verbose=4 --options runtime --entitlements entitlements.plist --sign "$APPLICATION_IDENTITY" "$1"
312 if [ "$?" != "0" ]; then
313 echo "Failed to sign $1"
318 # @param #1 .app directory
319 # @param #2 .pkg or ""
320 # @param #3 full name e.g. DCP-o-matic Batch Converter
321 # @param #4 list of executables
327 tmp_dmg=dcpomatic_tmp.dmg
328 if [ "$ARCH2" == "" ]; then
329 dmg="$full_name $version macOS10.8+.dmg"
331 dmg="$full_name $version macOS10.10+.dmg"
333 vol_name=DCP-o-matic-$version
335 find "$appdir/Contents/Frameworks" -iname "*.dylib" -type f -print0 | while IFS= read -r -d '' f; do
339 sign "$appdir/Contents/MacOS/$f"
342 if [ "$pkg" != "" ]; then
343 productsign --sign "$INSTALLER_IDENTITY" "$pkg" "signed_temp.pkg"
344 if [ "$?" != "0" ]; then
345 echo "Failed to sign .pkg"
348 mv signed_temp.pkg "$pkg"
352 cp -a "$appdir" $vol_name
353 if [ "$pkg" != "" ]; then
354 cp -a "$pkg" $vol_name
356 ln -s /Applications "$vol_name/Applications"
357 cat<<EOF > "$vol_name/READ ME.txt"
358 Welcome to DCP-o-matic! The first time you run the program there may be
359 a long (several-minute) delay while macOS checks the code for viruses and
360 other malware. Please be patient!
362 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
363 Beim erstmaligen Start der DCP-o-matic Anwendungen kann ein längerer
364 Verifikationsvorgang auftreten. Dies ist von der macOS Sicherheitsumgebung
365 'Gatekeeper' verursacht. Dieser je nach Rechner teils minutenlange
366 Verifikationsvorgang ist gegenwärtig normal und nicht zu umgehen,
367 es ist kein Programmfehler. Warten sie die Verifikation für jede der
368 DCP-o-matic Anwendungen ab, bei weiteren Programmstarts wird sie nicht
372 if [ "$pkg" != "" ]; then
373 cat<<EOF > "$vol_name/READ ME.txt"
375 To run this software successfully you must install $pkg before running
380 if [ "$pkg" != "" ]; then
381 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
383 To run this software successfully you must install $pkg before running
388 rm -f $tmp_dmg "$dmg"
389 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
390 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
391 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
395 tell application "Finder"
396 tell disk "'$vol_name'"
398 set current view of container window to icon view
399 set toolbar visible of container window to false
400 set statusbar visible of container window to false
401 set the bounds of container window to {400, 200, 1160, 600}
402 set the bounds of container window to {400, 200, 1160, 600}
403 set the bounds of container window to {400, 200, 1160, 600}
404 set theViewOptions to the icon view options of container window
405 set arrangement of theViewOptions to not arranged
406 set icon size of theViewOptions to 64
407 set position of item "'$appdir'" of container window to {90, 80}
408 set position of item "Applications" of container window to {265, 80}
409 set position of item "READ ME.txt" of container window to {430, 80}
410 set position of item "READ ME.de_DE.txt" of container window to {595, 80}
411 set position of item "DCP-o-matic Disk Writer.pkg" of container window to {90, 255}
414 update without registering applications
420 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
423 hdiutil eject $device
424 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
425 sips -i "$appdir/Contents/Resources/dcpomatic2.icns"
426 DeRez -only icns "$appdir/Contents/Resources/dcpomatic2.icns" > "$appdir/Contents/Resources/DCP-o-matic.rsrc"
427 Rez -append "$appdir/Contents/Resources/DCP-o-matic.rsrc" -o "$dmg"
432 codesign --timestamp --verify --verbose --options runtime --entitlements entitlements.plist --sign "$APPLICATION_IDENTITY" "$dmg"
442 approot="$appdir/Contents"
444 mkdir -p "$approot/MacOS"
445 mkdir -p "$approot/Frameworks"
446 mkdir -p "$approot/Resources"
448 to_relink="dcpomatic"
449 copy_libs "$approot/Frameworks"
450 copy_resources "$approot/Resources"
453 function copy_verify {
454 copy $ROOT src/libdcp/build/tools/dcpverify "$approot/MacOS"
455 mv "$approot/MacOS/dcpverify" "$approot/MacOS/dcpomatic2_verify"
456 rl=("$approot/MacOS/dcpomatic2_verify" "$approot/Frameworks/"*.dylib)
457 relink_relative "${rl[@]}"
460 if [ "$ARCH2" == "" ]; then
467 setup "DCP-o-matic 2.app"
468 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$approot/MacOS"
469 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$approot/MacOS"
470 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_create "$approot/MacOS"
471 copy $ROOT bin/ffprobe "$approot/MacOS"
472 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
474 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$approot/Info.plist"
475 rl=("$approot/MacOS/dcpomatic2" "$approot/MacOS/dcpomatic2_cli" "$approot/MacOS/dcpomatic2_create" "$approot/MacOS/ffprobe" "$approot/Frameworks/"*.dylib)
476 relink_relative "${rl[@]}"
477 make_dmg "$appdir" "" "DCP-o-matic" "dcpomatic2_verify openssl ffprobe dcpomatic2_cli dcpomatic2_create dcpomatic2"
479 # DCP-o-matic KDM Creator
480 setup "DCP-o-matic 2 KDM Creator.app"
481 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm "$approot/MacOS"
482 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm_cli "$approot/MacOS"
483 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
485 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$approot/Info.plist"
486 rl=("$approot/MacOS/dcpomatic2_kdm" "$approot/MacOS/dcpomatic2_kdm_cli" "$approot/Frameworks/"*.dylib)
487 relink_relative "${rl[@]}"
488 make_dmg "$appdir" "" "DCP-o-matic KDM Creator" "dcpomatic2_verify openssl dcpomatic2_kdm_cli dcpomatic2_kdm"
490 # DCP-o-matic Encode Server
491 setup "DCP-o-matic 2 Encode Server.app"
492 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server "$approot/MacOS"
493 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$approot/MacOS"
494 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
496 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_server.Info.plist "$approot/Info.plist"
497 rl=("$approot/MacOS/dcpomatic2_server" "$approot/MacOS/dcpomatic2_server_cli" "$approot/Frameworks/"*.dylib)
498 relink_relative "${rl[@]}"
499 make_dmg "$appdir" "" "DCP-o-matic Encode Server" "dcpomatic2_verify openssl dcpomatic2_server_cli dcpomatic2_server"
501 # DCP-o-matic Batch Converter
502 setup "DCP-o-matic 2 Batch converter.app"
503 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_batch "$approot/MacOS"
504 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
506 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_batch.Info.plist "$approot/Info.plist"
507 rl=("$approot/MacOS/dcpomatic2_batch" "$approot/Frameworks/"*.dylib)
508 relink_relative "${rl[@]}"
509 make_dmg "$appdir" "" "DCP-o-matic Batch Converter" "dcpomatic2_verify openssl dcpomatic2_batch"
512 setup "DCP-o-matic 2 Player.app"
513 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_player "$approot/MacOS"
514 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
516 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_player.Info.plist "$approot/Info.plist"
517 rl=("$approot/MacOS/dcpomatic2_player" "$approot/Frameworks/"*.dylib)
518 relink_relative "${rl[@]}"
519 make_dmg "$appdir" "" "DCP-o-matic Player" "dcpomatic2_verify openssl dcpomatic2_player"
521 # DCP-o-matic Playlist Editor
522 setup "DCP-o-matic 2 Playlist Editor.app"
523 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_playlist "$approot/MacOS"
524 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
526 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_playlist.Info.plist "$approot/Info.plist"
527 rl=("$approot/MacOS/dcpomatic2_playlist" "$approot/Frameworks/"*.dylib)
528 relink_relative "${rl[@]}"
529 make_dmg "$appdir" "" "DCP-o-matic Playlist Editor" "dcpomatic2_verify openssl dcpomatic2_playlist"
531 # DCP-o-matic Combiner
532 setup "DCP-o-matic 2 Combiner.app"
533 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_combiner "$approot/MacOS"
534 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
536 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_combiner.Info.plist "$approot/Info.plist"
537 rl=("$approot/MacOS/dcpomatic2_combiner" "$approot/Frameworks/"*.dylib)
538 relink_relative "${rl[@]}"
539 make_dmg "$appdir" "" "DCP-o-matic Combiner" "dcpomatic2_verify openssl dcpomatic2_combiner"
542 setup "DCP-o-matic 2 Editor.app"
543 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_editor "$approot/MacOS"
544 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
546 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_editor.Info.plist "$approot/Info.plist"
547 rl=("$approot/MacOS/dcpomatic2_editor" "$approot/Frameworks/"*.dylib)
548 relink_relative "${rl[@]}"
549 make_dmg "$appdir" "" "DCP-o-matic Editor" "dcpomatic2_verify openssl dcpomatic2_editor"
551 # DCP-o-matic Disk Writer .app
552 setup "DCP-o-matic 2 Disk Writer.app"
553 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk "$approot/MacOS"
554 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
556 cp $prefix/src/dcpomatic/platform/osx/uninstall_disk.applescript "$approot/Resources"
557 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_disk.Info.plist "$approot/Info.plist"
558 rl=("$approot/MacOS/dcpomatic2_disk" "$approot/Frameworks/"*.dylib)
559 relink_relative "${rl[@]}"
561 # DCP-o-matic Disk Writer daemon .pkg
563 pkgbase=tmp-disk-writer
567 pkgroot=$pkgbase/root
569 mkdir -p $pkgroot/Library/LaunchDaemons
570 cat > $pkgroot/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist <<EOF
571 <?xml version="1.0" encoding="UTF-8"?>
572 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
573 <plist version="1.0">
576 <string>com.dcpomatic.disk.writer</string>
577 <key>ProgramArguments</key>
579 <string>/Library/Application Support/com.dcpomatic/dcpomatic2_disk_writer</string>
581 <key>EnvironmentVariables</key>
583 <key>DYLD_LIBRARY_PATH</key>
584 <string><![CDATA[/Library/Application Support/com.dcpomatic]]></string>
586 <key>StandardOutPath</key>
587 <string>/var/log/dcpomatic_disk_writer_out.log</string>
588 <key>StandardErrorPath</key>
589 <string>/var/log/dcpomatic_disk_writer_err.log</string>
590 <key>LaunchEvents</key>
592 <key>com.apple.notifyd.matching</key>
594 <key>com.dcpomatic.disk.writer.start</key>
596 <key>Notification</key>
597 <string>com.dcpomatic.disk.writer.start</string>
605 # Get the binaries together in $pkgbin then move them to the
606 # place with spaces in the filename to avoid some of the pain of escaping
609 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk_writer "$pkgbin"
612 rl=("$pkgbin/dcpomatic2_disk_writer" "$pkgbin/"*.dylib)
613 relink_absolute "/Library/Application Support/com.dcpomatic" "${rl[@]}"
615 mkdir $pkgbase/scripts
616 cat > $pkgbase/scripts/postinstall <<EOF
618 /bin/launchctl unload "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
619 /bin/launchctl load "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
622 chmod gou+x $pkgbase/scripts/postinstall
624 find "$pkgbin" -iname "*.dylib" -type f -print0 | while IFS= read -r -d '' f; do
627 sign "$pkgbin/dcpomatic2_disk_writer"
629 mkdir -p "$pkgroot/Library/Application Support/com.dcpomatic"
630 mv $pkgbin/* "$pkgroot/Library/Application Support/com.dcpomatic/"
631 pkgbuild --root $pkgroot --identifier com.dcpomatic.disk.writer --scripts $pkgbase/scripts "DCP-o-matic Disk Writer.pkg"
633 make_dmg "$appdir" "DCP-o-matic Disk Writer.pkg" "DCP-o-matic Disk Writer" "dcpomatic2_verify openssl dcpomatic2_disk"