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