3 SYNTAX="make_dmg.sh <environment> <builddir> <type> <apple-id> <apple-password>"
4 # where <type> is arm-intel-64, intel-32-64 or arm64
6 # e.g. make_dmg.sh /Users/carl/osx-environment /Users/carl/cdist arm-intel-64 foo@bar.net opensesame
8 # Don't set -e here as egrep (used a few times) returns 1 if no matches
11 version=`git describe --tags --abbrev=0 | sed -e "s/v//"`
13 # DMG size in megabytes
21 if [ "$TYPE" != "arm-intel-64" -a "$TYPE" != "intel-32-64" -a "$TYPE" != "arm64" ]; then
23 echo "where <type> is arm-intel-64, intel-32-64 or arm64"
27 # This is our work area for making up the .dmgs
28 mkdir -p build/platform/osx
31 cat <<EOF > entitlements.plist
32 <?xml version="1.0" encoding="UTF-8"?>
33 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
36 <key>com.apple.security.cs.disable-library-validation</key>
38 <key>com.apple.security.cs.allow-dyld-environment-variables</key>
47 for f in $1/arm64/$2; do
49 ln -s $(readlink $f) "$3/`basename $f`"
51 g=`echo $f | sed -e "s/\/arm64\//\/x86_64\//g"`
53 lipo -create $f $g -output "$3/`basename $f`"
58 for f in $1/i386/$2; do
60 ln -s $(readlink $f) "$3/`basename $f`"
62 g=`echo $f | sed -e "s/\/i386\//\/x86_64\//g"`
64 lipo -create $f $g -output "$3/`basename $f`"
70 ln -s $(readlink $1/$2) "$3/`basename $f`"
78 function copy_lib_root {
81 for f in $ROOT/arm64/lib/$1*.dylib; do
83 ln -s $(readlink $f) "$2/`basename $f`"
85 g=`echo $f | sed -e "s/\/arm64\//\/x86_64\//g"`
87 lipo -create $f $g -output "$2/`basename $f`"
92 for f in $ROOT/intel-32-64/lib/$1*.dylib; do
94 ln -s $(readlink $f) "$2/`basename $f`"
96 g=`echo $f | sed -e "s/\/i386\//\/x86_64\//g"`
98 lipo -create $f $g -output "$2/`basename $f`"
103 for f in $ROOT/lib/$1*.dylib; do
105 ln -s $(readlink $f) "$2/`basename $f`"
113 to_relink="$to_relink|$1"
116 function copy_lib_env {
119 for f in $ENV/arm64/lib/$1*.dylib; do
121 ln -s $(readlink $f) "$2/`basename $f`"
123 g=`echo $f | sed -e "s/\/arm64\//\/x86_64\//g"`
125 lipo -create $f $g -output "$2/`basename $f`"
130 for f in $ENV/i386/lib/$1*.dylib; do
132 ln -s $(readlink $f) "$2/`basename $f`"
134 g=`echo $f | sed -e "s/\/i386\//\/x86_64\//g"`
136 lipo -create $f $g -output "$2/`basename $f`"
141 for f in $ENV/arm64/lib/$1*.dylib; do
143 ln -s $(readlink $f) "$2/`basename $f`"
151 to_relink="$to_relink|$1"
154 # @param #1 directory to copy to
157 copy_lib_root libcxml "$dest"
158 copy_lib_root libdcp-1.0 "$dest"
159 copy_lib_root libasdcp-carl "$dest"
160 copy_lib_root libkumu-carl "$dest"
161 copy_lib_root libsub "$dest"
162 copy_lib_root libopenjp2 "$dest"
163 copy_lib_root libavdevice "$dest"
164 copy_lib_root libavformat "$dest"
165 copy_lib_root libavfilter "$dest"
166 copy_lib_root libavutil "$dest"
167 copy_lib_root libavcodec "$dest"
168 copy_lib_root libswscale "$dest"
169 copy_lib_root libpostproc "$dest"
170 copy_lib_root libswresample "$dest"
171 copy_lib_root liblwext4 "$dest"
172 copy_lib_root libblockdev "$dest"
173 copy_lib_root libleqm_nrt "$dest"
174 copy $ROOT src/dcpomatic/build/src/lib/libdcpomatic2.dylib "$dest"
175 copy $ROOT src/dcpomatic/build/src/wx/libdcpomatic2-wx.dylib "$dest"
176 copy_lib_env libboost_system "$dest"
177 copy_lib_env libboost_filesystem "$dest"
178 copy_lib_env libboost_thread "$dest"
179 copy_lib_env libboost_date_time "$dest"
180 copy_lib_env libboost_locale "$dest"
181 copy_lib_env libboost_regex "$dest"
182 copy_lib_env libxml++ "$dest"
183 copy_lib_env libxslt "$dest"
184 copy_lib_env libxml2 "$dest"
185 copy_lib_env libglibmm-2.4 "$dest"
186 copy_lib_env libgobject "$dest"
187 copy_lib_env libgthread "$dest"
188 copy_lib_env libgmodule "$dest"
189 copy_lib_env libsigc "$dest"
190 copy_lib_env libglib-2 "$dest"
191 copy_lib_env libintl "$dest"
192 copy_lib_env libsndfile "$dest"
193 copy_lib_env libssh "$dest"
194 copy_lib_env libwx "$dest"
195 copy_lib_env libfontconfig "$dest"
196 copy_lib_env libfreetype "$dest"
197 copy_lib_env libexpat "$dest"
198 copy_lib_env libltdl "$dest"
199 copy_lib_env libxmlsec1 "$dest"
200 copy_lib_env libcurl "$dest"
201 copy_lib_env libffi "$dest"
202 copy_lib_env libpango "$dest"
203 copy_lib_env libcairo "$dest"
204 copy_lib_env libpixman "$dest"
205 copy_lib_env libharfbuzz "$dest"
206 copy_lib_env libsamplerate "$dest"
207 copy_lib_env libicui18n "$dest"
208 copy_lib_env libicudata "$dest"
209 copy_lib_env libicuio "$dest"
210 copy_lib_env libicule "$dest"
211 copy_lib_env libiculx "$dest"
212 copy_lib_env libicutest "$dest"
213 copy_lib_env libicutu "$dest"
214 copy_lib_env libicuuc "$dest"
215 copy_lib_env libFLAC "$dest"
216 copy_lib_env libvorbis "$dest"
217 copy_lib_env libogg "$dest"
218 copy_lib_env libxerces-c "$dest"
219 copy_lib_env libcrypto "$dest"
220 copy_lib_env libssl "$dest"
221 copy_lib_env libfribidi "$dest"
222 copy_lib_env libgio "$dest"
223 copy_lib_env libz "$dest"
226 # @param #1 directory to copy to
227 function copy_resources {
231 local prefix=$ROOT/x86_64
234 local prefix=$ROOT/x86_64
240 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small.png "$dest"
241 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2.icns "$dest"
242 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_kdm.icns "$dest"
243 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_server.icns "$dest"
244 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_player.icns "$dest"
245 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_batch.icns "$dest"
246 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_playlist.icns "$dest"
247 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_disk.icns "$dest"
248 cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_combiner.icns "$dest"
249 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults.png "$dest"
250 cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults@2x.png "$dest"
251 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email.png "$dest"
252 cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email@2x.png "$dest"
253 cp $prefix/src/dcpomatic/graphics/osx/preferences/email.png "$dest"
254 cp $prefix/src/dcpomatic/graphics/osx/preferences/email@2x.png "$dest"
255 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers.png "$dest"
256 cp $prefix/src/dcpomatic/graphics/osx/preferences/servers@2x.png "$dest"
257 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms.png "$dest"
258 cp $prefix/src/dcpomatic/graphics/osx/preferences/tms@2x.png "$dest"
259 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys.png "$dest"
260 cp $prefix/src/dcpomatic/graphics/osx/preferences/keys@2x.png "$dest"
261 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet.png "$dest"
262 cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet@2x.png "$dest"
263 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications.png "$dest"
264 cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications@2x.png "$dest"
265 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound.png "$dest"
266 cp $prefix/src/dcpomatic/graphics/osx/preferences/sound@2x.png "$dest"
267 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers.png "$dest"
268 cp $prefix/src/dcpomatic/graphics/osx/preferences/identifiers@2x.png "$dest"
269 cp $prefix/src/dcpomatic/graphics/osx/preferences/general.png "$dest"
270 cp $prefix/src/dcpomatic/graphics/osx/preferences/general@2x.png "$dest"
271 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced.png "$dest"
272 cp $prefix/src/dcpomatic/graphics/osx/preferences/advanced@2x.png "$dest"
273 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations.png "$dest"
274 cp $prefix/src/dcpomatic/graphics/osx/preferences/locations@2x.png "$dest"
275 cp $prefix/src/dcpomatic/fonts/LiberationSans-Regular.ttf "$dest"
276 cp $prefix/src/dcpomatic/fonts/LiberationSans-Italic.ttf "$dest"
277 cp $prefix/src/dcpomatic/fonts/LiberationSans-Bold.ttf "$dest"
278 cp $prefix/src/dcpomatic/fonts/fonts.conf.osx "$dest"/fonts.conf
279 cp $prefix/src/dcpomatic/graphics/splash.png "$dest"
280 cp $prefix/src/dcpomatic/graphics/zoom.png "$dest"
281 cp $prefix/src/dcpomatic/graphics/zoom_all.png "$dest"
282 cp $prefix/src/dcpomatic/graphics/select.png "$dest"
283 cp $prefix/src/dcpomatic/graphics/snap.png "$dest"
284 cp $prefix/src/dcpomatic/graphics/sequence.png "$dest"
285 cp $prefix/src/dcpomatic/graphics/me.jpg "$dest"
286 cp $prefix/src/dcpomatic/graphics/link.png "$dest"
287 cp $prefix/src/dcpomatic/graphics/tick.png "$dest"
288 cp $prefix/src/dcpomatic/graphics/no_tick.png "$dest"
289 cp -r $prefix/share/libdcp/xsd "$dest"
290 cp -r $prefix/share/libdcp/tags "$dest"
292 # i18n: DCP-o-matic .mo files
293 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
294 mkdir -p "$dest/$lang/LC_MESSAGES"
295 cp $prefix/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
296 cp $prefix/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
297 cp $prefix/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
300 # i18n: wxWidgets .mo files
301 for lang in de es fr it sv nl ru pl da cs; do
303 cp $ENV/x86_64/share/locale/$lang/LC_MESSAGES/wxstd.mo "$dest/$lang"
307 # param $1 list of things that link to other things
308 function relink_relative {
309 to_relink=`echo $to_relink | sed -e "s/\+//g"`
312 for obj in "${linkers[@]}"; do
313 deps=`otool -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu)"`
317 if [ "$TYPE" == "universal" ]; then
318 # $dep will be a path within x86_64/; make i386 and arm64 paths too
319 dep_i386=`echo $dep | sed -e "s/\/x86_64\//\/i386\//g"`
320 changes="$changes -change $dep @executable_path/../Frameworks/$base -change $dep_i386 @executable_path/../Frameworks/$base"
321 dep_arm64=`echo $dep | sed -e "s/\/x86_64\//\/arm64\//g"`
322 changes="$changes -change $dep @executable_path/../Frameworks/$base -change $dep_arm64 @executable_path/../Frameworks/$base"
324 changes="$changes -change $dep @executable_path/../Frameworks/$base"
327 if test "x$changes" != "x"; then
328 install_name_tool $changes -id `basename "$obj"` "$obj"
333 # param $1 directory things should be relinked into
334 # $2 list of things that link to other things
335 function relink_absolute {
336 to_relink=`echo $to_relink | sed -e "s/\+//g"`
341 for obj in "${linkers[@]}"; do
342 deps=`otool -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu)"`
345 install_name_tool -change "$dep" "$target"/$base -id `basename "$obj"` "$obj"
351 codesign --deep --force --verify --verbose --options runtime --entitlements entitlements.plist --sign "Developer ID Application: Carl Hetherington (R82DXSR997)" "$1"
352 if [ "$?" != "0" ]; then
353 echo "Failed to sign $1"
359 # @param #1 .app directory
360 # @param #2 .pkg or ""
361 # @param #3 full name e.g. DCP-o-matic Batch Converter
366 tmp_dmg=dcpomatic_tmp.dmg
367 dmg="$full_name $version.dmg"
368 vol_name=DCP-o-matic-$version
372 if [ "$pkg" != "" ]; then
373 productsign --sign "Developer ID Installer: Carl Hetherington (R82DXSR997)" "$pkg" "signed_temp.pkg"
374 if [ "$?" != "0" ]; then
375 echo "Failed to sign .pkg"
378 mv signed_temp.pkg "$pkg"
382 cp -a "$appdir" $vol_name
383 if [ "$pkg" != "" ]; then
384 cp -a "$pkg" $vol_name
386 ln -s /Applications "$vol_name/Applications"
387 cat<<EOF > "$vol_name/READ ME.txt"
388 Welcome to DCP-o-matic! The first time you run the program there may be
389 a long (several-minute) delay while OS X checks the code for viruses and
390 other malware. Please be patient!
392 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
393 Beim erstmaligen Start der DCP-o-matic Anwendungen kann ein längerer
394 Verifikationsvorgang auftreten. Dies ist von der OS X Sicherheitsumgebung
395 'Gatekeeper' verursacht. Dieser je nach Rechner teils minutenlange
396 Verifikationsvorgang ist gegenwärtig normal und nicht zu umgehen,
397 es ist kein Programmfehler. Warten sie die Verifikation für jede der
398 DCP-o-matic Anwendungen ab, bei weiteren Programmstarts wird sie nicht
402 if [ "$pkg" != "" ]; then
403 cat<<EOF > "$vol_name/READ ME.txt"
405 To run this software successfully you must install $pkg before running
410 if [ "$pkg" != "" ]; then
411 cat<<EOF > "$vol_name/READ ME.de_DE.txt"
413 To run this software successfully you must install $pkg before running
418 rm -f $tmp_dmg "$dmg"
419 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
420 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
421 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
425 tell application "Finder"
426 tell disk "'$vol_name'"
428 set current view of container window to icon view
429 set toolbar visible of container window to false
430 set statusbar visible of container window to false
431 set the bounds of container window to {400, 200, 1160, 600}
432 set the bounds of container window to {400, 200, 1160, 600}
433 set the bounds of container window to {400, 200, 1160, 600}
434 set theViewOptions to the icon view options of container window
435 set arrangement of theViewOptions to not arranged
436 set icon size of theViewOptions to 64
437 set position of item "'$appdir'" of container window to {90, 80}
438 set position of item "Applications" of container window to {265, 80}
439 set position of item "READ ME.txt" of container window to {430, 80}
440 set position of item "READ ME.de_DE.txt" of container window to {595, 80}
441 set position of item "DCP-o-matic Disk Writer.pkg" of container window to {90, 255}
444 update without registering applications
450 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
453 hdiutil eject $device
454 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
455 sips -i "$appdir/Contents/Resources/dcpomatic2.icns"
456 DeRez -only icns "$appdir/Contents/Resources/dcpomatic2.icns" > "$appdir/Contents/Resources/DCP-o-matic.rsrc"
457 Rez -append "$appdir/Contents/Resources/DCP-o-matic.rsrc" -o "$dmg"
462 codesign --verify --verbose --options runtime --entitlements entitlements.plist --sign "Developer ID Application: Carl Hetherington (R82DXSR997)" "$dmg"
472 approot="$appdir/Contents"
474 mkdir -p "$approot/MacOS"
475 mkdir -p "$approot/Frameworks"
476 mkdir -p "$approot/Resources"
478 to_relink="dcpomatic"
479 copy_libs "$approot/Frameworks"
480 copy_resources "$approot/Resources"
485 # copy() writes the universal binary to arm64
489 # copy() writes the universal binary to i386
498 setup "DCP-o-matic 2.app"
499 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$approot/MacOS"
500 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$approot/MacOS"
501 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_create "$approot/MacOS"
502 copy $ROOT bin/ffprobe "$approot/MacOS"
503 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
504 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$approot/Info.plist"
505 rl=("$approot/MacOS/dcpomatic2" "$approot/MacOS/dcpomatic2_cli" "$approot/MacOS/dcpomatic2_create" "$approot/MacOS/ffprobe" "$approot/Frameworks/"*.dylib)
506 relink_relative "${rl[@]}"
507 make_dmg "$appdir" "" "DCP-o-matic"
509 # DCP-o-matic KDM Creator
510 setup "DCP-o-matic 2 KDM Creator.app"
511 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm "$approot/MacOS"
512 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm_cli "$approot/MacOS"
513 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
514 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$approot/Info.plist"
515 rl=("$approot/MacOS/dcpomatic2_kdm" "$approot/MacOS/dcpomatic2_kdm_cli" "$approot/Frameworks/"*.dylib)
516 relink_relative "${rl[@]}"
517 make_dmg "$appdir" "" "DCP-o-matic KDM Creator"
519 # DCP-o-matic Encode Server
520 setup "DCP-o-matic 2 Encode Server.app"
521 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server "$approot/MacOS"
522 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$approot/MacOS"
523 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"
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"
533 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_batch.Info.plist "$approot/Info.plist"
534 rl=("$approot/MacOS/dcpomatic2_batch" "$approot/Frameworks/"*.dylib)
535 relink_relative "${rl[@]}"
536 make_dmg "$appdir" "" "DCP-o-matic Batch Converter"
539 setup "DCP-o-matic 2 Player.app"
540 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_player "$approot/MacOS"
541 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
542 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_player.Info.plist "$approot/Info.plist"
543 rl=("$approot/MacOS/dcpomatic2_player" "$approot/Frameworks/"*.dylib)
544 relink_relative "${rl[@]}"
545 make_dmg "$appdir" "" "DCP-o-matic Player"
547 # DCP-o-matic Playlist Editor
548 setup "DCP-o-matic 2 Playlist Editor.app"
549 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_playlist "$approot/MacOS"
550 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
551 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_playlist.Info.plist "$approot/Info.plist"
552 rl=("$approot/MacOS/dcpomatic2_playlist" "$approot/Frameworks/"*.dylib)
553 relink_relative "${rl[@]}"
554 make_dmg "$appdir" "" "DCP-o-matic Playlist Editor"
556 # DCP-o-matic Combiner
557 setup "DCP-o-matic 2 Combiner.app"
558 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_combiner "$approot/MacOS"
559 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
560 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_combiner.Info.plist "$approot/Info.plist"
561 rl=("$approot/MacOS/dcpomatic2_combiner" "$approot/Frameworks/"*.dylib)
562 relink_relative "${rl[@]}"
563 make_dmg "$appdir" "" "DCP-o-matic Combiner"
565 # DCP-o-matic Disk Writer .app
566 setup "DCP-o-matic 2 Disk Writer.app"
567 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk "$approot/MacOS"
568 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
569 cp $prefix/src/dcpomatic/platform/osx/uninstall_disk.applescript "$approot/Resources"
570 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_disk.Info.plist "$approot/Info.plist"
571 rl=("$approot/MacOS/dcpomatic2_disk" "$approot/Frameworks/"*.dylib)
572 relink_relative "${rl[@]}"
574 # DCP-o-matic Disk Writer daemon .pkg
576 pkgbase=tmp-disk-writer
580 pkgroot=$pkgbase/root
582 mkdir -p $pkgroot/Library/LaunchDaemons
583 cat > $pkgroot/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist <<EOF
584 <?xml version="1.0" encoding="UTF-8"?>
585 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
586 <plist version="1.0">
589 <string>com.dcpomatic.disk.writer</string>
590 <key>ProgramArguments</key>
592 <string>/Library/Application Support/com.dcpomatic/dcpomatic2_disk_writer</string>
594 <key>EnvironmentVariables</key>
596 <key>DYLD_LIBRARY_PATH</key>
597 <string><![CDATA[/Library/Application Support/com.dcpomatic]]></string>
599 <key>StandardOutPath</key>
600 <string>/var/log/dcpomatic_disk_writer_out.log</string>
601 <key>StandardErrorPath</key>
602 <string>/var/log/dcpomatic_disk_writer_err.log</string>
603 <key>LaunchEvents</key>
605 <key>com.apple.notifyd.matching</key>
607 <key>com.dcpomatic.disk.writer.start</key>
609 <key>Notification</key>
610 <string>com.dcpomatic.disk.writer.start</string>
618 # Get the binaries together in $pkgbin then move them to the
619 # place with spaces in the filename to avoid some of the pain of escaping
622 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk_writer "$pkgbin"
625 rl=("$pkgbin/dcpomatic2_disk_writer" "$pkgbin/"*.dylib)
626 relink_absolute "/Library/Application Support/com.dcpomatic" "${rl[@]}"
628 mkdir $pkgbase/scripts
629 cat > $pkgbase/scripts/postinstall <<EOF
631 /bin/launchctl unload "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
632 /bin/launchctl load "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
635 chmod gou+x $pkgbase/scripts/postinstall
637 find "$pkgbin" -iname "*.dylib" -print0 | while IFS= read -r -d '' f; do
640 sign "$pkgbin/dcpomatic2_disk_writer"
642 mkdir -p "$pkgroot/Library/Application Support/com.dcpomatic"
643 mv $pkgbin/* "$pkgroot/Library/Application Support/com.dcpomatic/"
644 pkgbuild --root $pkgroot --identifier com.dcpomatic.disk.writer --scripts $pkgbase/scripts "DCP-o-matic Disk Writer.pkg"
646 make_dmg "$appdir" "DCP-o-matic Disk Writer.pkg" "DCP-o-matic Disk Writer"