Apply osx fix-up patch.
[dcpomatic.git] / platform / osx / make_dmg.sh
1 #!/bin/bash
2
3 set -e
4
5 version=`cat wscript | egrep ^VERSION | awk '{print $3}' | sed -e "s/'//g"`
6
7 # DMG size in megabytes
8 DMG_SIZE=256
9 WORK=build/platform/osx
10 ENV=/Users/carl/Environments/osx
11 ROOT=/Users/carl/cdist
12
13 appdir="DCP-o-matic.app"
14 approot=$appdir/Contents
15 libs=$approot/lib
16 macos=$approot/MacOS
17 resources=$approot/Resources
18
19 rm -rf $WORK/$appdir
20 mkdir -p $WORK/$macos
21 mkdir -p $WORK/$libs
22 mkdir -p $WORK/$resources
23
24 function universal_copy {
25     echo $2
26     for f in $1/32/$2; do
27         if [ -h $f ]; then
28             ln -s $(readlink $f) $3/`basename $f`
29         else
30           g=`echo $f | sed -e "s/\/32\//\/64\//g"`
31           mkdir -p $3
32           lipo -create $f $g -output $3/`basename $f`
33         fi
34     done
35 }
36
37 universal_copy $ROOT src/dvdomatic/build/src/tools/dcpomatic $WORK/$macos
38 universal_copy $ROOT src/dvdomatic/build/src/tools/dcpomatic_cli $WORK/$macos
39 universal_copy $ROOT src/dvdomatic/build/src/tools/dcpomatic_server_cli $WORK/$macos
40 universal_copy $ROOT src/dvdomatic/build/src/lib/libdcpomatic.dylib $WORK/$libs
41 universal_copy $ROOT src/dvdomatic/build/src/wx/libdcpomatic-wx.dylib $WORK/$libs
42 universal_copy $ROOT lib/libcxml.dylib $WORK/$libs
43 universal_copy $ROOT lib/libdcp.dylib $WORK/$libs
44 universal_copy $ROOT lib/libasdcp-libdcp.dylib $WORK/$libs
45 universal_copy $ROOT lib/libkumu-libdcp.dylib $WORK/$libs
46 universal_copy $ROOT lib/libopenjpeg*.dylib $WORK/$libs
47 universal_copy $ROOT lib/libavdevice*.dylib $WORK/$libs
48 universal_copy $ROOT lib/libavformat*.dylib $WORK/$libs
49 universal_copy $ROOT lib/libavfilter*.dylib $WORK/$libs
50 universal_copy $ROOT lib/libavutil*.dylib $WORK/$libs
51 universal_copy $ROOT lib/libavcodec*.dylib $WORK/$libs
52 universal_copy $ROOT lib/libswscale*.dylib $WORK/$libs
53 universal_copy $ROOT lib/libpostproc*.dylib $WORK/$libs
54 universal_copy $ROOT lib/libswresample*.dylib $WORK/$libs
55 universal_copy $ROOT bin/ffprobe $WORK/$macos
56 universal_copy $ENV lib/libboost_system.dylib $WORK/$libs
57 universal_copy $ENV lib/libboost_filesystem.dylib $WORK/$libs
58 universal_copy $ENV lib/libboost_thread.dylib $WORK/$libs
59 universal_copy $ENV lib/libboost_date_time.dylib $WORK/$libs
60 universal_copy $ENV lib/libxml++-2.6*.dylib $WORK/$libs
61 universal_copy $ENV lib/libxml2*.dylib $WORK/$libs
62 universal_copy $ENV lib/libglibmm-2.4*.dylib $WORK/$libs
63 universal_copy $ENV lib/libgobject*.dylib $WORK/$libs
64 universal_copy $ENV lib/libgthread*.dylib $WORK/$libs
65 universal_copy $ENV lib/libgmodule*.dylib $WORK/$libs
66 universal_copy $ENV lib/libsigc*.dylib $WORK/$libs
67 universal_copy $ENV lib/libglib-2*.dylib $WORK/$libs
68 universal_copy $ENV lib/libintl*.dylib $WORK/$libs
69 universal_copy $ENV lib/libsndfile*.dylib $WORK/$libs
70 universal_copy $ENV lib/libMagick++*.dylib $WORK/$libs
71 universal_copy $ENV lib/libMagickCore*.dylib $WORK/$libs
72 universal_copy $ENV lib/libMagickWand*.dylib $WORK/$libs
73 universal_copy $ENV lib/libssh*.dylib $WORK/$libs
74 universal_copy $ENV lib/libwx*.dylib $WORK/$libs
75 universal_copy $ENV lib/libfontconfig*.dylib $WORK/$libs
76 universal_copy $ENV lib/libfreetype*.dylib $WORK/$libs
77 universal_copy $ENV lib/libexpat*.dylib $WORK/$libs
78 universal_copy $ENV lib/libltdl*.dylib $WORK/$libs
79 universal_copy $ENV lib/libxmlsec1*.dylib $WORK/$libs
80
81 for obj in $WORK/$macos/dcpomatic $WORK/$macos/ffprobe $WORK/$libs/*.dylib; do
82   deps=`otool -L $obj | awk '{print $1}' | egrep "(/Users/carl|libboost|libssh)"`
83   changes=""
84   for dep in $deps; do
85     base=`basename $dep`
86     changes="$changes -change $dep @executable_path/../lib/$base"
87   done
88   if test "x$changes" != "x"; then
89     install_name_tool $changes $obj
90   fi
91 done
92
93 cp build/platform/osx/Info.plist $WORK/$approot
94 cp icons/dcpomatic.icns $WORK/$resources/DCP-o-matic.icns
95
96 tmp_dmg=$WORK/dcpomatic_tmp.dmg
97 dmg="$WORK/DCP-o-matic $version.dmg"
98 vol_name=DCP-o-matic-$version
99
100 mkdir -p $WORK/$vol_name
101 cp -r $WORK/$appdir $WORK/$vol_name
102
103 rm -f $tmp_dmg "$dmg"
104 hdiutil create -srcfolder $WORK/$vol_name -volname $vol_name -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDRW -size $DMG_SIZE $tmp_dmg
105 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
106 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
107 sleep 5
108
109 echo '
110   tell application "Finder"
111     tell disk "'$vol_name'"
112            open
113            set current view of container window to icon view
114            set toolbar visible of container window to false
115            set statusbar visible of container window to false
116            set the bounds of container window to {400, 200, 790, 410}
117            set theViewOptions to the icon view options of container window
118            set arrangement of theViewOptions to not arranged
119            set icon size of theViewOptions to 64
120            make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"}
121            set position of item "DCP-o-matic.app" of container window to {90, 80}
122            set position of item "Applications" of container window to {310, 80}
123            close
124            open
125            update without registering applications
126            delay 5
127            eject
128      end tell
129    end tell
130 ' | osascript
131
132 chmod -Rf go-w /Volumes/"$vol_name"/$appdir
133 sync
134
135 umount -f $device
136 hdiutil eject $device
137 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
138 sips -i $WORK/$resources/DCP-o-matic.icns
139 DeRez -only icns $WORK/$resources/DCP-o-matic.icns > $WORK/$resources/DCP-o-matic.rsrc
140 Rez -append $WORK/$resources/DCP-o-matic.rsrc -o "$dmg"
141 SetFile -a C "$dmg"
142