Add server icon to .dmg.
[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 # Don't set -e here as egrep (used a few times) returns 1 if no matches
8 # were found.
9
10 version=`cat wscript | egrep ^VERSION | awk '{print $3}' | sed -e "s/'//g"`
11
12 # DMG size in megabytes
13 DMG_SIZE=256
14 WORK=build/platform/osx
15 ENV=/Users/carl/Environments/osx/10.6
16 ROOT=$1
17
18 # Main application
19 appdir="DCP-o-matic 2.app"
20 approot="$appdir/Contents"
21 libs="$approot/lib"
22 macos="$approot/MacOS"
23 resources="$approot/Resources"
24 rm -rf "$WORK/$appdir"
25 mkdir -p "$WORK/$macos"
26 mkdir -p "$WORK/$libs"
27 mkdir -p "$WORK/$resources"
28
29 # KDM creator
30 appdir_kdm="DCP-o-matic 2 KDM Creator.app"
31 approot_kdm="$appdir_kdm/Contents"
32 libs_kdm="$approot_kdm/lib"
33 macos_kdm="$approot_kdm/MacOS"
34 resources_kdm="$approot_kdm/Resources"
35 rm -rf "$WORK/$appdir_kdm"
36 mkdir -p "$WORK/$macos_kdm"
37
38 # Server
39 appdir_server="DCP-o-matic 2 Server.app"
40 approot_server="$appdir_server/Contents"
41 libs_server="$approot_server/lib"
42 macos_server="$approot_server/MacOS"
43 resources_server="$approot_server/Resources"
44 rm -rf "$WORK/$appdir_server"
45 mkdir -p "$WORK/$macos_server"
46
47 # Batch converter
48 appdir_batch="DCP-o-matic 2 Batch Converter.app"
49 approot_batch="$appdir_batch/Contents"
50 libs_batch="$approot_batch/lib"
51 macos_batch="$approot_batch/MacOS"
52 resources_batch="$approot_batch/Resources"
53 rm -rf "$WORK/$appdir_batch"
54 mkdir -p "$WORK/$macos_batch"
55
56 relink="dcpomatic"
57
58 function universal_copy {
59     for f in $1/32/$2; do
60         if [ -h $f ]; then
61             ln -s $(readlink $f) "$3/`basename $f`"
62         else
63             g=`echo $f | sed -e "s/\/32\//\/64\//g"`
64             mkdir -p "$3"
65             lipo -create $f $g -output "$3/`basename $f`"
66         fi
67     done
68 }
69
70 function universal_copy_lib {
71     for f in $1/32/lib/$2*.dylib; do
72         if [ -h $f ]; then
73             ln -s $(readlink $f) "$3/`basename $f`"
74         else
75             g=`echo $f | sed -e "s/\/32\//\/64\//g"`
76             mkdir -p "$3"
77             lipo -create $f $g -output "$3/`basename $f`"
78         fi
79     done
80     relink="$relink|$2"
81 }
82
83 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$WORK/$macos"
84 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$WORK/$macos"
85 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$WORK/$macos"
86 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm "$WORK/$macos_kdm"
87 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server "$WORK/$macos_server"
88 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_batch "$WORK/$macos_batch"
89 universal_copy $ROOT src/dcpomatic/build/src/lib/libdcpomatic2.dylib "$WORK/$libs"
90 universal_copy $ROOT src/dcpomatic/build/src/wx/libdcpomatic2-wx.dylib "$WORK/$libs"
91 universal_copy_lib $ROOT libcxml "$WORK/$libs"
92 universal_copy_lib $ROOT libdcp-1.0 "$WORK/$libs"
93 universal_copy_lib $ROOT libasdcp-libdcp-1.0 "$WORK/$libs"
94 universal_copy_lib $ROOT libkumu-libdcp-1.0 "$WORK/$libs"
95 universal_copy_lib $ROOT libsub "$WORK/$libs"
96 universal_copy_lib $ROOT libasdcp-libsub-1.0 "$WORK/$libs"
97 universal_copy_lib $ROOT libkumu-libsub-1.0 "$WORK/$libs"
98 universal_copy_lib $ROOT libopenjpeg "$WORK/$libs"
99 universal_copy_lib $ROOT libavdevice "$WORK/$libs"
100 universal_copy_lib $ROOT libavformat "$WORK/$libs"
101 universal_copy_lib $ROOT libavfilter "$WORK/$libs"
102 universal_copy_lib $ROOT libavutil "$WORK/$libs"
103 universal_copy_lib $ROOT libavcodec "$WORK/$libs"
104 universal_copy_lib $ROOT libswscale "$WORK/$libs"
105 universal_copy_lib $ROOT libpostproc "$WORK/$libs"
106 universal_copy $ROOT bin/ffprobe "$WORK/$macos"
107 universal_copy_lib $ENV libboost_system "$WORK/$libs"
108 universal_copy_lib $ENV libboost_filesystem "$WORK/$libs"
109 universal_copy_lib $ENV libboost_thread "$WORK/$libs"
110 universal_copy_lib $ENV libboost_date_time "$WORK/$libs"
111 universal_copy_lib $ENV libboost_locale "$WORK/$libs"
112 universal_copy_lib $ENV libboost_regex "$WORK/$libs"
113 universal_copy_lib $ENV libxml++ "$WORK/$libs"
114 universal_copy_lib $ENV libxslt "$WORK/$libs"
115 universal_copy_lib $ENV libxml2 "$WORK/$libs"
116 universal_copy_lib $ENV libglibmm-2.4 "$WORK/$libs"
117 universal_copy_lib $ENV libgobject "$WORK/$libs"
118 universal_copy_lib $ENV libgthread "$WORK/$libs"
119 universal_copy_lib $ENV libgmodule "$WORK/$libs"
120 universal_copy_lib $ENV libsigc "$WORK/$libs"
121 universal_copy_lib $ENV libglib-2 "$WORK/$libs"
122 universal_copy_lib $ENV libintl "$WORK/$libs"
123 universal_copy_lib $ENV libsndfile "$WORK/$libs"
124 universal_copy_lib $ENV libMagick++ "$WORK/$libs"
125 universal_copy_lib $ENV libMagickCore "$WORK/$libs"
126 universal_copy_lib $ENV libMagickWand "$WORK/$libs"
127 universal_copy_lib $ENV libssh "$WORK/$libs"
128 universal_copy_lib $ENV libwx "$WORK/$libs"
129 universal_copy_lib $ENV libfontconfig "$WORK/$libs"
130 universal_copy_lib $ENV libfreetype "$WORK/$libs"
131 universal_copy_lib $ENV libexpat "$WORK/$libs"
132 universal_copy_lib $ENV libltdl "$WORK/$libs"
133 universal_copy_lib $ENV libxmlsec1 "$WORK/$libs"
134 universal_copy_lib $ENV libzip "$WORK/$libs"
135 universal_copy_lib $ENV libquickmail "$WORK/$libs"
136 universal_copy_lib $ENV libcurl "$WORK/$libs"
137 universal_copy_lib $ENV libffi "$WORK/$libs"
138 universal_copy_lib $ENV libiconv "$WORK/$libs"
139 universal_copy_lib $ENV libpango "$WORK/$libs"
140 universal_copy_lib $ENV libcairo "$WORK/$libs"
141 universal_copy_lib $ENV libpixman "$WORK/$libs"
142 universal_copy_lib $ENV libharfbuzz "$WORK/$libs"
143 universal_copy_lib $ENV libsamplerate "$WORK/$libs"
144 universal_copy_lib $ENV libicui18n "$WORK/$libs"
145 universal_copy_lib $ENV libicudata "$WORK/$libs"
146 universal_copy_lib $ENV libicuio "$WORK/$libs"
147 universal_copy_lib $ENV libicule "$WORK/$libs"
148 universal_copy_lib $ENV libiculx "$WORK/$libs"
149 universal_copy_lib $ENV libicutest "$WORK/$libs"
150 universal_copy_lib $ENV libicutu "$WORK/$libs"
151 universal_copy_lib $ENV libicuuc "$WORK/$libs"
152
153 relink=`echo $relink | sed -e "s/\+//g"`
154
155 for obj in \
156     "$WORK/$macos/dcpomatic2" \
157     "$WORK/$macos/dcpomatic2_cli" \
158     "$WORK/$macos/dcpomatic2_server_cli" \
159     "$WORK/$macos_kdm/dcpomatic2_kdm" \
160     "$WORK/$macos_server/dcpomatic2_server" \
161     "$WORK/$macos_batch/dcpomatic2_batch" \
162     "$WORK/$macos/ffprobe" \
163     "$WORK/$libs/"*.dylib; do
164   deps=`otool -L "$obj" | awk '{print $1}' | egrep "($relink)" | egrep "($ENV|$ROOT|boost|libicu)"`
165   changes=""
166   for dep in $deps; do
167       echo "Relinking $dep into $obj"
168       base=`basename $dep`
169       # $dep will be a path within 64/; make a 32/ path too
170       dep32=`echo $dep | sed -e "s/\/64\//\/32\//g"`
171       changes="$changes -change $dep @executable_path/../lib/$base -change $dep32 @executable_path/../lib/$base"
172   done
173   if test "x$changes" != "x"; then
174     install_name_tool $changes "$obj"
175   fi
176 done
177
178 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$WORK/$approot/Info.plist"
179 cp $ROOT/32/src/dcpomatic/graphics/dcpomatic2.icns "$WORK/$resources/dcpomatic2.icns"
180 cp $ROOT/32/src/dcpomatic/graphics/dcpomatic2_kdm.icns "$WORK/$resources/dcpomatic2_kdm.icns"
181 cp $ROOT/32/src/dcpomatic/graphics/dcpomatic2_server.icns "$WORK/$resources/dcpomatic2_server.icns"
182 cp $ROOT/32/src/dcpomatic/graphics/dcpomatic2_batch.icns "$WORK/$resources/dcpomatic2_batch.icns"
183 cp $ROOT/32/src/dcpomatic/graphics/colour_conversions.png "$WORK/$resources"
184 cp $ROOT/32/src/dcpomatic/graphics/defaults.png "$WORK/$resources"
185 cp $ROOT/32/src/dcpomatic/graphics/kdm_email.png "$WORK/$resources"
186 cp $ROOT/32/src/dcpomatic/graphics/servers.png "$WORK/$resources"
187 cp $ROOT/32/src/dcpomatic/graphics/tms.png "$WORK/$resources"
188 cp $ROOT/32/src/dcpomatic/graphics/keys.png "$WORK/$resources"
189 cp $ROOT/32/src/dcpomatic/LiberationSans-Regular.ttf "$WORK/$resources"
190 cp $ROOT/32/src/dcpomatic/graphics/splash.png "$WORK/$resources"
191 cp $ROOT/32/src/dcpomatic/graphics/dcpomatic2_server_small.png "$WORK/$resources"
192
193 # i18n: DCP-o-matic .mo files
194 for lang in de_DE es_ES fr_FR it_IT sv_SE nl_NL ru_RU pl_PL da_DK; do
195   mkdir -p "$WORK/$resources/$lang/LC_MESSAGES"
196   cp $ROOT/32/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
197   cp $ROOT/32/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
198   cp $ROOT/32/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
199 done
200
201 # i18n: wxWidgets .mo files
202 for lang in de es fr it sv nl; do
203   mkdir "$WORK/$resources/$lang"
204   cp $ENV/64/share/locale/$lang/LC_MESSAGES/wxstd.mo "$WORK/$resources/$lang"
205 done
206
207 tmp_dmg=$WORK/dcpomatic_tmp.dmg
208 dmg="$WORK/DCP-o-matic $version.dmg"
209 vol_name=DCP-o-matic-$version
210
211 mkdir -p $WORK/$vol_name
212 cp -a "$WORK/$appdir" $WORK/$vol_name
213 ln -s /Applications "$WORK/$vol_name/Applications"
214
215 # KDM creator
216 appdir_kdm="DCP-o-matic 2 KDM Creator.app"
217 approot_kdm="$appdir_kdm/Contents"
218 libs_kdm="$approot_kdm/lib"
219 macos_kdm="$approot_kdm/MacOS"
220 resources_kdm="$approot_kdm/Resources"
221 ln -s "../../DCP-o-matic 2.app/Contents/lib" "$WORK/$libs_kdm"
222 ln -s "../../DCP-o-matic 2.app/Contents/Resources" "$WORK/$resources_kdm"
223 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$WORK/$approot_kdm/Info.plist"
224 cp -a "$WORK/$appdir_kdm" $WORK/$vol_name
225
226 # Server
227 appdir_server="DCP-o-matic 2 Server.app"
228 approot_server="$appdir_server/Contents"
229 libs_server="$approot_server/lib"
230 macos_server="$approot_server/MacOS"
231 resources_server="$approot_server/Resources"
232 ln -s "../../DCP-o-matic 2.app/Contents/lib" "$WORK/$libs_server"
233 ln -s "../../DCP-o-matic 2.app/Contents/Resources" "$WORK/$resources_server"
234 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2_server.Info.plist "$WORK/$approot_server/Info.plist"
235 cp -a "$WORK/$appdir_server" $WORK/$vol_name
236
237 # Batch converter
238 appdir_batch="DCP-o-matic 2 Batch Converter.app"
239 approot_batch="$appdir_batch/Contents"
240 libs_batch="$approot_batch/lib"
241 macos_batch="$approot_batch/MacOS"
242 resources_batch="$approot_batch/Resources"
243 ln -s "../../DCP-o-matic 2.app/Contents/lib" "$WORK/$libs_batch"
244 ln -s "../../DCP-o-matic 2.app/Contents/Resources" "$WORK/$resources_batch"
245 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2_batch.Info.plist "$WORK/$approot_batch/Info.plist"
246 cp -a "$WORK/$appdir_batch" $WORK/$vol_name
247
248 rm -f $tmp_dmg "$dmg"
249 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
250 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
251 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
252 sleep 5
253
254 echo '
255   tell application "Finder"
256     tell disk "'$vol_name'"
257            open
258            set current view of container window to icon view
259            set toolbar visible of container window to false
260            set statusbar visible of container window to false
261            set the bounds of container window to {400, 200, 790, 410}
262            set theViewOptions to the icon view options of container window
263            set arrangement of theViewOptions to not arranged
264            set icon size of theViewOptions to 64
265            set position of item "DCP-o-matic 2.app" of container window to {90, 80}
266            set position of item "DCP-o-matic 2 KDM Creator.app" of container window to {270, 80}
267            set position of item "DCP-o-matic 2 Server.app" of container window to {90, 200}
268            set position of item "DCP-o-matic 2 Batch Converter.app" of container window to {270, 200}
269            set position of item "Applications" of container window to {450, 80}
270            close
271            open
272            update without registering applications
273            delay 5
274      end tell
275    end tell
276 ' | osascript
277
278 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
279 sync
280
281 hdiutil eject $device
282 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
283 sips -i "$WORK/$resources/dcpomatic2.icns"
284 DeRez -only icns "$WORK/$resources/dcpomatic2.icns" > "$WORK/$resources/DCP-o-matic.rsrc"
285 Rez -append "$WORK/$resources/DCP-o-matic.rsrc" -o "$dmg"
286 SetFile -a C "$dmg"