Merge branch 'dist' of ssh://git.carlh.net/home/carl/git/dcpomatic into dist
[dcpomatic.git] / platform / osx / make_dmg.sh
1 #!/bin/bash
2 #
3 # Syntax: make_dmg.sh <environment> <builddir> <type> <apple-id> <apple-password>
4 # where <type> is universal or thin
5 #
6 # e.g. make_dmg.sh /Users/carl/osx-environment /Users/carl/cdist universal foo@bar.net opensesame
7
8 # Don't set -e here as egrep (used a few times) returns 1 if no matches
9 # were found.
10
11 version=`git describe --tags --abbrev=0 | sed -e "s/v//"`
12
13 # DMG size in megabytes
14 DMG_SIZE=256
15 ENV=$1
16 ROOT=$2
17 TYPE=$3
18 APPLE_ID=$4
19 APPLE_PASSWORD=$5
20
21 if [ "$TYPE" != "universal" -a "$TYPE" != "thin" ]; then
22     echo "Syntax: $0 <builddir> <type>"
23     echo "where <type> is universal or thin"
24     exit 1
25 fi
26
27 # This is our work area for making up the .dmgs
28 mkdir -p build/platform/osx
29 cd build/platform/osx
30
31 function copy {
32     case $TYPE in
33         universal)
34             for f in $1/32/$2; do
35                 if [ -h $f ]; then
36                     ln -s $(readlink $f) "$3/`basename $f`"
37                 else
38                     g=`echo $f | sed -e "s/\/32\//\/64\//g"`
39                     mkdir -p "$3"
40                     lipo -create $f $g -output "$3/`basename $f`"
41                 fi
42             done
43             ;;
44         thin)
45             if [ -h $1/$2 ]; then
46                 ln -s $(readlink $1/$2) "$3/`basename $f`"
47             else
48                 cp $1/$2 "$3"
49             fi
50             ;;
51     esac
52 }
53
54 function copy_lib_root {
55     case $TYPE in
56         universal)
57             for f in $ROOT/32/lib/$1*.dylib; do
58                 if [ -h $f ]; then
59                     ln -s $(readlink $f) "$2/`basename $f`"
60                 else
61                     g=`echo $f | sed -e "s/\/32\//\/64\//g"`
62                     mkdir -p "$2"
63                     lipo -create $f $g -output "$2/`basename $f`"
64                 fi
65             done
66             ;;
67         thin)
68             for f in $ROOT/lib/$1*.dylib; do
69                 if [ -h $f ]; then
70                     ln -s $(readlink $f) "$2/`basename $f`"
71                 else
72                     mkdir -p "$2"
73                     cp $f "$2"
74                 fi
75             done
76             ;;
77     esac
78     to_relink="$to_relink|$1"
79 }
80
81 function copy_lib_env {
82     case $TYPE in
83         universal)
84             for f in $ENV/32/lib/$1*.dylib; do
85                 if [ -h $f ]; then
86                     ln -s $(readlink $f) "$2/`basename $f`"
87                 else
88                     g=`echo $f | sed -e "s/\/32\//\/64\//g"`
89                     mkdir -p "$2"
90                     lipo -create $f $g -output "$2/`basename $f`"
91                 fi
92             done
93             ;;
94         thin)
95             for f in $ENV/64/lib/$1*.dylib; do
96                 if [ -h $f ]; then
97                     ln -s $(readlink $f) "$2/`basename $f`"
98                 else
99                     mkdir -p "$2"
100                     cp $f "$2"
101                 fi
102             done
103             ;;
104     esac
105     to_relink="$to_relink|$1"
106 }
107
108 # @param #1 directory to copy to
109 function copy_libs {
110     local dest="$1"
111     copy_lib_root libcxml "$dest"
112     copy_lib_root libdcp-1.0 "$dest"
113     copy_lib_root libasdcp-carl "$dest"
114     copy_lib_root libkumu-carl "$dest"
115     copy_lib_root libsub "$dest"
116     copy_lib_root libopenjp2 "$dest"
117     copy_lib_root libavdevice "$dest"
118     copy_lib_root libavformat "$dest"
119     copy_lib_root libavfilter "$dest"
120     copy_lib_root libavutil "$dest"
121     copy_lib_root libavcodec "$dest"
122     copy_lib_root libswscale "$dest"
123     copy_lib_root libpostproc "$dest"
124     copy_lib_root libswresample "$dest"
125     copy_lib_root liblwext4 "$dest"
126     copy_lib_root libblockdev "$dest"
127     copy $ROOT src/dcpomatic/build/src/lib/libdcpomatic2.dylib "$dest"
128     copy $ROOT src/dcpomatic/build/src/wx/libdcpomatic2-wx.dylib "$dest"
129     copy_lib_env libboost_system "$dest"
130     copy_lib_env libboost_filesystem "$dest"
131     copy_lib_env libboost_thread "$dest"
132     copy_lib_env libboost_date_time "$dest"
133     copy_lib_env libboost_locale "$dest"
134     copy_lib_env libboost_regex "$dest"
135     copy_lib_env libxml++ "$dest"
136     copy_lib_env libxslt "$dest"
137     copy_lib_env libxml2 "$dest"
138     copy_lib_env libglibmm-2.4 "$dest"
139     copy_lib_env libgobject "$dest"
140     copy_lib_env libgthread "$dest"
141     copy_lib_env libgmodule "$dest"
142     copy_lib_env libsigc "$dest"
143     copy_lib_env libglib-2 "$dest"
144     copy_lib_env libintl "$dest"
145     copy_lib_env libsndfile "$dest"
146     copy_lib_env libssh "$dest"
147     copy_lib_env libwx "$dest"
148     copy_lib_env libfontconfig "$dest"
149     copy_lib_env libfreetype "$dest"
150     copy_lib_env libexpat "$dest"
151     copy_lib_env libltdl "$dest"
152     copy_lib_env libxmlsec1 "$dest"
153     copy_lib_env libcurl "$dest"
154     copy_lib_env libffi "$dest"
155     copy_lib_env libpango "$dest"
156     copy_lib_env libcairo "$dest"
157     copy_lib_env libpixman "$dest"
158     copy_lib_env libharfbuzz "$dest"
159     copy_lib_env libsamplerate "$dest"
160     copy_lib_env libicui18n "$dest"
161     copy_lib_env libicudata "$dest"
162     copy_lib_env libicuio "$dest"
163     copy_lib_env libicule "$dest"
164     copy_lib_env libiculx "$dest"
165     copy_lib_env libicutest "$dest"
166     copy_lib_env libicutu "$dest"
167     copy_lib_env libicuuc "$dest"
168     copy_lib_env libFLAC "$dest"
169     copy_lib_env libvorbis "$dest"
170     copy_lib_env libogg "$dest"
171     copy_lib_env libxerces-c "$dest"
172 }
173
174 # @param #1 directory to copy to
175 function copy_resources {
176     local dest="$1"
177     case $TYPE in
178         universal)
179             local prefix=$ROOT/32
180             ;;
181         thin)
182             local prefix=$ROOT
183             ;;
184     esac
185     cp $prefix/src/dcpomatic/graphics/osx/dcpomatic_small.png "$dest"
186     cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2.icns "$dest"
187     cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_kdm.icns "$dest"
188     cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_server.icns "$dest"
189     cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_player.icns "$dest"
190     cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_batch.icns "$dest"
191     cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_playlist.icns "$dest"
192     cp $prefix/src/dcpomatic/graphics/osx/dcpomatic2_disk.icns "$dest"
193     cp $prefix/src/dcpomatic/graphics/osx/preferences/colour_conversions.png "$dest"
194     cp $prefix/src/dcpomatic/graphics/osx/preferences/defaults.png "$dest"
195     cp $prefix/src/dcpomatic/graphics/osx/preferences/kdm_email.png "$dest"
196     cp $prefix/src/dcpomatic/graphics/osx/preferences/email.png "$dest"
197     cp $prefix/src/dcpomatic/graphics/osx/preferences/servers.png "$dest"
198     cp $prefix/src/dcpomatic/graphics/osx/preferences/tms.png "$dest"
199     cp $prefix/src/dcpomatic/graphics/osx/preferences/keys.png "$dest"
200     cp $prefix/src/dcpomatic/graphics/osx/preferences/cover_sheet.png "$dest"
201     cp $prefix/src/dcpomatic/graphics/osx/preferences/notifications.png "$dest"
202     cp $prefix/src/dcpomatic/graphics/osx/preferences/locations.png "$dest"
203     cp $prefix/src/dcpomatic/graphics/osx/preferences/sound.png "$dest"
204     cp $prefix/src/dcpomatic/fonts/LiberationSans-Regular.ttf "$dest"
205     cp $prefix/src/dcpomatic/fonts/LiberationSans-Italic.ttf "$dest"
206     cp $prefix/src/dcpomatic/fonts/LiberationSans-Bold.ttf "$dest"
207     cp $prefix/src/dcpomatic/fonts/fonts.conf.osx "$dest"/fonts.conf
208     cp $prefix/src/dcpomatic/graphics/splash.png "$dest"
209     cp $prefix/src/dcpomatic/graphics/zoom.png "$dest"
210     cp $prefix/src/dcpomatic/graphics/zoom_all.png "$dest"
211     cp $prefix/src/dcpomatic/graphics/select.png "$dest"
212     cp $prefix/src/dcpomatic/graphics/snap.png "$dest"
213     cp $prefix/src/dcpomatic/graphics/sequence.png "$dest"
214     cp $prefix/src/dcpomatic/graphics/me.jpg "$dest"
215     cp -r $prefix/share/libdcp/xsd "$dest"
216
217     # i18n: DCP-o-matic .mo files
218     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
219         mkdir -p "$dest/$lang/LC_MESSAGES"
220         cp $prefix/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
221         cp $prefix/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
222         cp $prefix/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
223     done
224
225     # i18n: wxWidgets .mo files
226     for lang in de es fr it sv nl ru pl da cs; do
227         mkdir "$dest/$lang"
228         cp $ENV/64/share/locale/$lang/LC_MESSAGES/wxstd.mo "$dest/$lang"
229     done
230 }
231
232 # param $1 list of things that link to other things
233 function relink {
234     to_relink=`echo $to_relink | sed -e "s/\+//g"`
235     local linkers=("$@")
236
237     for obj in "${linkers[@]}"; do
238         deps=`otool -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu)"`
239         changes=""
240         for dep in $deps; do
241             base=`basename $dep`
242             if [ "$TYPE" == "universal" ]; then
243                 # $dep will be a path within 64/; make a 32/ path too
244                 dep32=`echo $dep | sed -e "s/\/64\//\/32\//g"`
245                 changes="$changes -change $dep @executable_path/../Frameworks/$base -change $dep32 @executable_path/../Frameworks/$base"
246             else
247                 changes="$changes -change $dep @executable_path/../Frameworks/$base"
248             fi
249         done
250         if test "x$changes" != "x"; then
251             install_name_tool $changes -id `basename "$obj"` "$obj"
252         fi
253     done
254 }
255
256 # @param #1 .app directory
257 # @param #2 .pkg or ""
258 # @param #3 full name e.g. DCP-o-matic Batch Converter
259 # @param #4 bundle id e.g. com.dcpomatic.batch
260 function make_dmg {
261     local appdir="$1"
262     local pkg="$2"
263     local full_name="$3"
264     local bundle_id="$4"
265     tmp_dmg=dcpomatic_tmp.dmg
266     dmg="$full_name $version.dmg"
267     vol_name=DCP-o-matic-$version
268
269     codesign --deep --force --verify --verbose --options runtime --sign "Developer ID Application: Carl Hetherington (R82DXSR997)" "$appdir"
270     if [ "$?" != "0" ]; then
271         echo "Failed to sign .app"
272         exit 1
273     fi
274
275     mkdir -p $vol_name
276     cp -a "$appdir" $vol_name
277     if [ "$pkg" != ""]; then
278         cp -a "$pkg" $vol_name
279     fi
280     ln -s /Applications "$vol_name/Applications"
281     cat<<EOF > "$vol_name/READ ME.txt"
282 Welcome to DCP-o-matic!  The first time you run the program there may be
283 a long (several-minute) delay while OS X checks the code for viruses and
284 other malware.  Please be patient!
285 EOF
286     cat<<EOF > "$vol_name/READ ME.de_DE.txt"
287 Beim erstmaligen Start der DCP-o-matic Anwendungen kann ein längerer
288 Verifikationsvorgang auftreten.  Dies ist von der OS X Sicherheitsumgebung
289 'Gatekeeper' verursacht.  Dieser je nach Rechner teils minutenlange
290 Verifikationsvorgang ist gegenwärtig normal und nicht zu umgehen,
291 es ist kein Programmfehler.  Warten sie die Verifikation für jede der
292 DCP-o-matic Anwendungen ab, bei weiteren Programmstarts wird sie nicht
293 mehr auftreten.
294 EOF
295
296     rm -f $tmp_dmg "$dmg"
297     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
298     attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
299     device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
300     sleep 5
301
302     echo '
303   tell application "Finder"
304     tell disk "'$vol_name'"
305            open
306            set current view of container window to icon view
307            set toolbar visible of container window to false
308            set statusbar visible of container window to false
309            set the bounds of container window to {400, 200, 940, 300}
310            set theViewOptions to the icon view options of container window
311            set arrangement of theViewOptions to not arranged
312            set icon size of theViewOptions to 64
313            set position of item "'$appdir'" of container window to {90, 80}
314            set position of item "Applications" of container window to {265, 80}
315            set position of item "READ ME.txt" of container window to {430, 80}
316            set position of item "READ ME.de_DE.txt" of container window to {595, 80}
317            close
318            open
319            update without registering applications
320            delay 5
321      end tell
322    end tell
323 ' | osascript
324
325     chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
326     sync
327
328     hdiutil eject $device
329     hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
330     sips -i "$appdir/Contents/Resources/dcpomatic2.icns"
331     DeRez -only icns "$appdir/Contents/Resources/dcpomatic2.icns" > "$appdir/Contents/Resources/DCP-o-matic.rsrc"
332     Rez -append "$appdir/Contents/Resources/DCP-o-matic.rsrc" -o "$dmg"
333     SetFile -a C "$dmg"
334     xattr -c "$dmg"
335
336     set -e
337     codesign --verify --verbose --options runtime --sign "Developer ID Application: Carl Hetherington (R82DXSR997)" "$dmg"
338
339     # We only notarize thin builds, as if we're building universal binaries we must be on an OS
340     # sufficiently old that it can't notarize anyway
341     if [ "$TYPE" == "thin" ]; then
342
343         id=$(xcrun altool --notarize-app -t osx -f "$dmg" --primary-bundle-id $bundle_id -u $APPLE_ID -p $APPLE_PASSWORD --output-format xml | grep -C1 RequestUUID | tail -n 1 | sed -e "s/<string>//g" | sed -e "s/<\/string>//g")
344         N=0
345         while [ 1 ]; do
346             echo "Checking up on $id"
347             status=$(xcrun altool --notarization-info $id -u $APPLE_ID -p $APPLE_PASSWORD --output-format xml)
348             summary=$(echo "$status" | grep -C1 "<key>Status</key>" | tail -n 1 | sed -e "s/    .//g")
349             echo "Got $summary"
350             if [ "$summary" == "<string>invalid</string>" ]; then
351                 echo "Notarization failed."
352                 echo $status
353                 exit 1
354             fi
355             if [ "$summary" == "<string>success</string>" ]; then
356                 break
357             fi
358             sleep 30
359             N=$((N+1))
360             if [ "$N" == "30" ]; then
361                 echo "Timed out waiting for notarization"
362                 exit 1
363             fi
364         done
365
366         xcrun stapler staple "$dmg"
367     fi
368     set +e
369
370     rm $tmp_dmg
371     rm -rf $vol_name
372 }
373
374 # @param #1 appdir
375 function setup {
376     appdir="$1"
377     approot="$appdir/Contents"
378     rm -rf "$appdir"
379     mkdir -p "$approot/MacOS"
380     mkdir -p "$approot/Frameworks"
381     mkdir -p "$approot/Resources"
382
383     to_relink="dcpomatic"
384     copy_libs "$approot/Frameworks"
385     copy_resources "$approot/Resources"
386 }
387
388 case $TYPE in
389     universal)
390         prefix=$ROOT/32
391         ;;
392     thin)
393         prefix=$ROOT
394         ;;
395 esac
396
397 # DCP-o-matic main
398 setup "DCP-o-matic 2.app"
399 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$approot/MacOS"
400 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$approot/MacOS"
401 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_create "$approot/MacOS"
402 copy $ROOT bin/ffprobe "$approot/MacOS"
403 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
404 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$approot/Info.plist"
405 rl=("$approot/MacOS/dcpomatic2" "$approot/MacOS/dcpomatic2_cli" "$approot/MacOS/dcpomatic2_create" "$approot/MacOS/ffprobe" "$approot/Frameworks/"*.dylib)
406 relink "${rl[@]}"
407 make_dmg "$appdir" "" "DCP-o-matic" com.dcpomatic
408
409 # DCP-o-matic KDM Creator
410 setup "DCP-o-matic 2 KDM Creator.app"
411 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm "$approot/MacOS"
412 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm_cli "$approot/MacOS"
413 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
414 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$approot/Info.plist"
415 rl=("$approot/MacOS/dcpomatic2_kdm" "$approot/MacOS/dcpomatic2_kdm_cli" "$approot/Frameworks/"*.dylib)
416 relink "${rl[@]}"
417 make_dmg "$appdir" "" "DCP-o-matic KDM Creator" com.dcpomatic.kdm
418
419 # DCP-o-matic Encode Server
420 setup "DCP-o-matic 2 Encode Server.app"
421 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server "$approot/MacOS"
422 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$approot/MacOS"
423 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
424 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_server.Info.plist "$approot/Info.plist"
425 rl=("$approot/MacOS/dcpomatic2_server" "$approot/MacOS/dcpomatic2_server_cli" "$approot/Frameworks/"*.dylib)
426 relink "${rl[@]}"
427 make_dmg "$appdir" "" "DCP-o-matic Encode Server" com.dcpomatic.server
428
429 # DCP-o-matic Batch Converter
430 setup "DCP-o-matic 2 Batch converter.app"
431 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_batch "$approot/MacOS"
432 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
433 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_batch.Info.plist "$approot/Info.plist"
434 rl=("$approot/MacOS/dcpomatic2_batch" "$approot/Frameworks/"*.dylib)
435 relink "${rl[@]}"
436 make_dmg "$appdir" "" "DCP-o-matic Batch Converter" com.dcpomatic.batch
437
438 # DCP-o-matic Player
439 setup "DCP-o-matic 2 Player.app"
440 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_player "$approot/MacOS"
441 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
442 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_player.Info.plist "$approot/Info.plist"
443 rl=("$approot/MacOS/dcpomatic2_player" "$approot/Frameworks/"*.dylib)
444 relink "${rl[@]}"
445 make_dmg "$appdir" "" "DCP-o-matic Player" com.dcpomatic.player
446
447 # DCP-o-matic Playlist Editor
448 setup "DCP-o-matic 2 Playlist Editor.app"
449 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_playlist "$approot/MacOS"
450 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
451 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_playlist.Info.plist "$approot/Info.plist"
452 rl=("$approot/MacOS/dcpomatic2_playlist" "$approot/Frameworks/"*.dylib)
453 relink "${rl[@]}"
454 make_dmg "$appdir" "" "DCP-o-matic Playlist Editor" com.dcpomatic.playlist
455
456 # DCP-o-matic Disk Writer
457 setup "DCP-o-matic 2 Disk Writer.app"
458 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk "$approot/MacOS"
459 # XXX: this shouldn't really be necessary
460 copy $ROOT src/openssl/apps/openssl "$approot/MacOS"
461 cp $prefix/src/dcpomatic/build/platform/osx/dcpomatic2_disk.Info.plist "$approot/Info.plist"
462 rl=("$approot/MacOS/dcpomatic2_disk" "$approot/Frameworks/"*.dylib)
463 relink "${rl[@]}"
464 rl=("$approot/MacOS/dcpomatic2_disk_writer" "$approot/Frameworks/"*.dylib)
465 relink "${rl[@]}"
466
467 # DCP-o-matic Disk Writer daemon .pkg
468 pkgbase=tmp-disk-writer
469 rm -rf $pkgbase
470 mkdir $pkgbase
471 pkgroot=$pkgbase/root
472 mkdir -p $pkgroot/Library/LaunchDaemons
473 cat > $pkgroot/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist <<EOF
474 <?xml version="1.0" encoding="UTF-8"?>
475 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
476 <plist version="1.0">
477 <dict>
478     <key>Label</key>
479     <string>com.dcpomatic.disk.writer</string>
480     <key>ProgramArguments</key>
481     <array>
482         <string>/Library/Application Support/com.dcpomatic/dcpomatic2_disk_writer</string>
483     </array>
484     <key>EnvironmentVariables</key>
485     <dict>
486         <key>DYLD_LIBRARY_PATH</key>
487         <string><![CDATA[/Library/Application Support/com.dcpomatic]]></string>
488     </dict>
489     <key>KeepAlive</key>
490     <true/>
491     <key>RunAtLoad</key>
492     <true/>
493     <key>Debug</key>
494     <true/>
495     <key>StandardOutPath</key>
496     <string>/Users/carl/damon.out.log</string>
497     <key>StandardErrorPath</key>
498     <string>/Users/carl/damon.err.log</string>
499 </dict>
500 </plist>
501 EOF
502
503 mkdir -p "$pkgroot/Library/Application Support/com.dcpomatic"
504 target="$pkgroot/Library/Application Support/com.dcpomatic"
505 copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_disk_writer "$target"
506 copy_lib_root libcxml "$target"
507 copy_lib_env libboost_system "$dest"
508 copy_lib_env libboost_filesystem "$dest"
509 copy_lib_env libboost_thread "$dest"
510 copy_lib_env libboost_date_time "$dest"
511 copy_lib_env libboost_locale "$dest"
512 copy_lib_env libboost_regex "$dest"
513 copy_lib_env libicui18n "$dest"
514 copy_lib_env libicudata "$dest"
515 copy_lib_env libicuio "$dest"
516 copy_lib_env libicule "$dest"
517 copy_lib_env libiculx "$dest"
518 copy_lib_env libicutest "$dest"
519 copy_lib_env libicutu "$dest"
520 copy_lib_env libicuuc "$dest"
521
522 mkdir $pkgbase/scripts
523 cat > $pkgbase/scripts/postinstall <<EOF
524 #!/bin/sh
525 /bin/launchctl load "/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist"
526 exit 0
527 EOF
528 chmod gou+x scripts/postinstall
529
530 pkgbuild --root $pkgroot --identifier com.dcpomatic.disk.writer --scripts $pkgbase/scripts "DCP-o-matic Disk Writer.pkg"
531
532 make_dmg "$appdir" "DCP-o-matic Disk Writer.pkg" "DCP-o-matic Disk Writer" com.dcpomatic.disk