OS X fixes.
[dcpomatic.git] / platform / osx / make_dmg.sh
1 #!/bin/bash
2 #
3 # Syntax: make_dmg.sh <builddir>
4 #
5 # e.g. make_dmg.sh /Users/carl/cdist
6
7 set -e
8
9 version=`cat wscript | egrep ^VERSION | awk '{print $3}' | sed -e "s/'//g"`
10
11 # DMG size in megabytes
12 DMG_SIZE=256
13 WORK=build/platform/osx
14 ENV=/Users/carl/Environments/osx/10.6
15 ROOT=$1
16
17 appdir="DCP-o-matic 2.app"
18 approot="$appdir/Contents"
19 libs="$approot/lib"
20 macos="$approot/MacOS"
21 resources="$approot/Resources"
22
23 rm -rf "$WORK/$appdir"
24 mkdir -p "$WORK/$macos"
25 mkdir -p "$WORK/$libs"
26 mkdir -p "$WORK/$resources"
27
28 function universal_copy {
29     echo $2
30     for f in $1/32/$2; do
31         if [ -h $f ]; then
32             ln -s $(readlink $f) "$3/`basename $f`"
33         else
34           g=`echo $f | sed -e "s/\/32\//\/64\//g"`
35           mkdir -p $3
36           echo "lipo -create $f $g -output $3/`basename $f`"
37           lipo -create $f $g -output "$3/`basename $f`"
38         fi
39     done
40 }
41
42 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$WORK/$macos"
43 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$WORK/$macos"
44 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$WORK/$macos"
45 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_batch "$WORK/$macos"
46 universal_copy $ROOT src/dcpomatic/build/src/lib/libdcpomatic2.dylib "$WORK/$libs"
47 universal_copy $ROOT src/dcpomatic/build/src/wx/libdcpomatic2-wx.dylib "$WORK/$libs"
48 universal_copy $ROOT lib/libcxml.dylib "$WORK/$libs"
49 universal_copy $ROOT lib/libdcp-1.0.dylib "$WORK/$libs"
50 universal_copy $ROOT lib/libasdcp-libdcp-1.0.dylib "$WORK/$libs"
51 universal_copy $ROOT lib/libkumu-libdcp-1.0.dylib "$WORK/$libs"
52 universal_copy $ROOT lib/libopenjpeg*.dylib "$WORK/$libs"
53 universal_copy $ROOT lib/libavdevice*.dylib "$WORK/$libs"
54 universal_copy $ROOT lib/libavformat*.dylib "$WORK/$libs"
55 universal_copy $ROOT lib/libavfilter*.dylib "$WORK/$libs"
56 universal_copy $ROOT lib/libavutil*.dylib "$WORK/$libs"
57 universal_copy $ROOT lib/libavcodec*.dylib "$WORK/$libs"
58 universal_copy $ROOT lib/libswscale*.dylib "$WORK/$libs"
59 universal_copy $ROOT lib/libswresample*.dylib "$WORK/$libs"
60 universal_copy $ROOT lib/libpostproc*.dylib "$WORK/$libs"
61 universal_copy $ROOT bin/ffprobe "$WORK/$macos"
62 universal_copy $ENV lib/libboost_system.dylib "$WORK/$libs"
63 universal_copy $ENV lib/libboost_filesystem.dylib "$WORK/$libs"
64 universal_copy $ENV lib/libboost_thread.dylib "$WORK/$libs"
65 universal_copy $ENV lib/libboost_date_time.dylib "$WORK/$libs"
66 universal_copy $ENV lib/libxml++-2.6*.dylib "$WORK/$libs"
67 universal_copy $ENV lib/libxml2*.dylib "$WORK/$libs"
68 universal_copy $ENV lib/libglibmm-2.4*.dylib "$WORK/$libs"
69 universal_copy $ENV lib/libgobject*.dylib "$WORK/$libs"
70 universal_copy $ENV lib/libgthread*.dylib "$WORK/$libs"
71 universal_copy $ENV lib/libgmodule*.dylib "$WORK/$libs"
72 universal_copy $ENV lib/libsigc*.dylib "$WORK/$libs"
73 universal_copy $ENV lib/libglib-2*.dylib "$WORK/$libs"
74 universal_copy $ENV lib/libintl*.dylib "$WORK/$libs"
75 universal_copy $ENV lib/libsndfile*.dylib "$WORK/$libs"
76 universal_copy $ENV lib/libMagick++*.dylib "$WORK/$libs"
77 universal_copy $ENV lib/libMagickCore*.dylib "$WORK/$libs"
78 universal_copy $ENV lib/libMagickWand*.dylib "$WORK/$libs"
79 universal_copy $ENV lib/libssh*.dylib "$WORK/$libs"
80 universal_copy $ENV lib/libwx*.dylib "$WORK/$libs"
81 universal_copy $ENV lib/libfontconfig*.dylib "$WORK/$libs"
82 universal_copy $ENV lib/libfreetype*.dylib "$WORK/$libs"
83 universal_copy $ENV lib/libexpat*.dylib "$WORK/$libs"
84 universal_copy $ENV lib/libltdl*.dylib "$WORK/$libs"
85 universal_copy $ENV lib/libxmlsec1*.dylib "$WORK/$libs"
86 universal_copy $ENV lib/libzip*.dylib "$WORK/$libs"
87 universal_copy $ENV lib/libquickmail*.dylib "$WORK/$libs"
88 universal_copy $ENV lib/libcurl*.dylib "$WORK/$libs"
89 universal_copy $ENV lib/libffi*.dylib "$WORK/$libs"
90 universal_copy $ENV lib/libiconv*.dylib "$WORK/$libs"
91 universal_copy $ENV lib/libpangomm*.dylib "$WORK/$libs"
92 universal_copy $ENV lib/libcairomm*.dylib "$WORK/$libs"
93
94 for obj in "$WORK/$macos/dcpomatic2" "$WORK/$macos/dcpomatic2_batch" "$WORK/$macos/dcpomatic2_cli" "$WORK/$macos/dcpomatic2_server_cli" "$WORK/$macos/ffprobe" "$WORK/$libs/"*.dylib; do
95   echo $WORK
96   echo $obj
97   deps=`otool -L "$obj" | awk '{print $1}' | egrep "(/Users/carl|libboost|libssh|libltdl|libxmlsec)"`
98   changes=""
99   for dep in $deps; do
100     base=`basename $dep`
101     # $dep will be a path within 64/; make a 32/ path too
102     dep32=`echo $dep | sed -e "s/\/64\//\/32\//g"`
103     changes="$changes -change $dep @executable_path/../lib/$base -change $dep32 @executable_path/../lib/$base"
104   done
105   if test "x$changes" != "x"; then
106     install_name_tool $changes "$obj"
107   fi
108 done
109
110 cp build/platform/osx/Info.plist "$WORK/$approot"
111 cp icons/dcpomatic.icns "$WORK/$resources/DCP-o-matic.icns"
112 cp icons/colour_conversions.png "$WORK/$resources"
113 cp icons/defaults.png "$WORK/$resources"
114 cp icons/kdm_email.png "$WORK/$resources"
115 cp icons/servers.png "$WORK/$resources"
116 cp icons/tms.png "$WORK/$resources"
117 cp icons/keys.png "$WORK/$resources"
118
119 # i18n: DCP-o-matic .mo files
120 for lang in de_DE es_ES fr_FR it_IT sv_SE nl_NL; do
121   mkdir "$WORK/$resources/$lang"
122   cp build/src/lib/mo/$lang/*.mo "$WORK/$resources/$lang"
123   cp build/src/wx/mo/$lang/*.mo "$WORK/$resources/$lang"
124   cp build/src/tools/mo/$lang/*.mo "$WORK/$resources/$lang"
125 done
126
127 # i18n: wxWidgets .mo files
128 for lang in de es fr it sv nl; do
129   mkdir "$WORK/$resources/$lang"
130   cp $ENV/64/share/locale/$lang/LC_MESSAGES/wxstd.mo "$WORK/$resources/$lang"
131 done
132
133 tmp_dmg=$WORK/dcpomatic_tmp.dmg
134 dmg="$WORK/DCP-o-matic $version.dmg"
135 vol_name=DCP-o-matic-$version
136
137 mkdir -p $WORK/$vol_name
138 cp -r "$WORK/$appdir" $WORK/$vol_name
139 ln -s /Applications "$WORK/$vol_name/Applications"
140
141 rm -f $tmp_dmg "$dmg"
142 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
143 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
144 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
145 sleep 5
146
147 echo '
148   tell application "Finder"
149     tell disk "'$vol_name'"
150            open
151            set current view of container window to icon view
152            set toolbar visible of container window to false
153            set statusbar visible of container window to false
154            set the bounds of container window to {400, 200, 790, 410}
155            set theViewOptions to the icon view options of container window
156            set arrangement of theViewOptions to not arranged
157            set icon size of theViewOptions to 64
158            set position of item "DCP-o-matic 2.app" of container window to {90, 80}
159            set position of item "Applications" of container window to {310, 80}
160            close
161            open
162            update without registering applications
163            delay 5
164      end tell
165    end tell
166 ' | osascript
167
168 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
169 sync
170
171 hdiutil eject $device
172 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
173 sips -i "$WORK/$resources/DCP-o-matic.icns"
174 DeRez -only icns "$WORK/$resources/DCP-o-matic.icns" > "$WORK/$resources/DCP-o-matic.rsrc"
175 Rez -append "$WORK/$resources/DCP-o-matic.rsrc" -o "$dmg"
176 SetFile -a C "$dmg"