Add first part of pt_BR translation from Thiago Andre.
[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-cth "$WORK/$libs"
95 universal_copy_lib $ROOT libkumu-cth "$WORK/$libs"
96 universal_copy_lib $ROOT libsub "$WORK/$libs"
97 universal_copy_lib $ROOT libopenjp2 "$WORK/$libs"
98 universal_copy_lib $ROOT libavdevice "$WORK/$libs"
99 universal_copy_lib $ROOT libavformat "$WORK/$libs"
100 universal_copy_lib $ROOT libavfilter "$WORK/$libs"
101 universal_copy_lib $ROOT libavutil "$WORK/$libs"
102 universal_copy_lib $ROOT libavcodec "$WORK/$libs"
103 universal_copy_lib $ROOT libswscale "$WORK/$libs"
104 universal_copy_lib $ROOT libpostproc "$WORK/$libs"
105 universal_copy_lib $ROOT libswresample "$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 universal_copy_lib $ENV libFLAC "$WORK/$libs"
153 universal_copy_lib $ENV libvorbis "$WORK/$libs"
154 universal_copy_lib $ENV libogg "$WORK/$libs"
155
156 relink=`echo $relink | sed -e "s/\+//g"`
157
158 for obj in \
159     "$WORK/$macos/dcpomatic2" \
160     "$WORK/$macos/dcpomatic2_cli" \
161     "$WORK/$macos/dcpomatic2_server_cli" \
162     "$WORK/$macos_kdm/dcpomatic2_kdm" \
163     "$WORK/$macos_server/dcpomatic2_server" \
164     "$WORK/$macos_batch/dcpomatic2_batch" \
165     "$WORK/$macos/ffprobe" \
166     "$WORK/$libs/"*.dylib; do
167   deps=`otool -L "$obj" | awk '{print $1}' | egrep "($relink)" | egrep "($ENV|$ROOT|boost|libicu)"`
168   changes=""
169   for dep in $deps; do
170       echo "Relinking $dep into $obj"
171       base=`basename $dep`
172       # $dep will be a path within 64/; make a 32/ path too
173       dep32=`echo $dep | sed -e "s/\/64\//\/32\//g"`
174       changes="$changes -change $dep @executable_path/../lib/$base -change $dep32 @executable_path/../lib/$base"
175   done
176   if test "x$changes" != "x"; then
177     install_name_tool $changes "$obj"
178   fi
179 done
180
181 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$WORK/$approot/Info.plist"
182 cp $ROOT/32/src/dcpomatic/graphics/dcpomatic2.icns "$WORK/$resources/dcpomatic2.icns"
183 cp $ROOT/32/src/dcpomatic/graphics/dcpomatic2_kdm.icns "$WORK/$resources/dcpomatic2_kdm.icns"
184 cp $ROOT/32/src/dcpomatic/graphics/dcpomatic2_server.icns "$WORK/$resources/dcpomatic2_server.icns"
185 cp $ROOT/32/src/dcpomatic/graphics/dcpomatic2_batch.icns "$WORK/$resources/dcpomatic2_batch.icns"
186 cp $ROOT/32/src/dcpomatic/graphics/colour_conversions.png "$WORK/$resources"
187 cp $ROOT/32/src/dcpomatic/graphics/defaults.png "$WORK/$resources"
188 cp $ROOT/32/src/dcpomatic/graphics/kdm_email.png "$WORK/$resources"
189 cp $ROOT/32/src/dcpomatic/graphics/servers.png "$WORK/$resources"
190 cp $ROOT/32/src/dcpomatic/graphics/tms.png "$WORK/$resources"
191 cp $ROOT/32/src/dcpomatic/graphics/keys.png "$WORK/$resources"
192 cp $ROOT/32/src/dcpomatic/fonts/LiberationSans-Regular.ttf "$WORK/$resources"
193 cp $ROOT/32/src/dcpomatic/fonts/LiberationSans-Italic.ttf "$WORK/$resources"
194 cp $ROOT/32/src/dcpomatic/fonts/LiberationSans-Bold.ttf "$WORK/$resources"
195 cp $ROOT/32/src/dcpomatic/graphics/splash.png "$WORK/$resources"
196 cp $ROOT/32/src/dcpomatic/graphics/dcpomatic2_server_small.png "$WORK/$resources"
197
198 # i18n: DCP-o-matic .mo files
199 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; do
200   mkdir -p "$WORK/$resources/$lang/LC_MESSAGES"
201   cp $ROOT/32/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
202   cp $ROOT/32/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
203   cp $ROOT/32/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
204 done
205
206 # i18n: wxWidgets .mo files
207 for lang in de es fr it sv nl ru pl da cs; do
208   mkdir "$WORK/$resources/$lang"
209   cp $ENV/64/share/locale/$lang/LC_MESSAGES/wxstd.mo "$WORK/$resources/$lang"
210 done
211
212 tmp_dmg=$WORK/dcpomatic_tmp.dmg
213 dmg="$WORK/DCP-o-matic $version.dmg"
214 vol_name=DCP-o-matic-$version
215
216 mkdir -p $WORK/$vol_name
217 cp -a "$WORK/$appdir" $WORK/$vol_name
218 ln -s /Applications "$WORK/$vol_name/Applications"
219
220 # KDM creator
221 appdir_kdm="DCP-o-matic 2 KDM Creator.app"
222 approot_kdm="$appdir_kdm/Contents"
223 libs_kdm="$approot_kdm/lib"
224 macos_kdm="$approot_kdm/MacOS"
225 resources_kdm="$approot_kdm/Resources"
226 ln -s "../../DCP-o-matic 2.app/Contents/lib" "$WORK/$libs_kdm"
227 ln -s "../../DCP-o-matic 2.app/Contents/Resources" "$WORK/$resources_kdm"
228 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$WORK/$approot_kdm/Info.plist"
229 cp -a "$WORK/$appdir_kdm" $WORK/$vol_name
230
231 # Server
232 appdir_server="DCP-o-matic 2 Server.app"
233 approot_server="$appdir_server/Contents"
234 libs_server="$approot_server/lib"
235 macos_server="$approot_server/MacOS"
236 resources_server="$approot_server/Resources"
237 ln -s "../../DCP-o-matic 2.app/Contents/lib" "$WORK/$libs_server"
238 ln -s "../../DCP-o-matic 2.app/Contents/Resources" "$WORK/$resources_server"
239 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2_server.Info.plist "$WORK/$approot_server/Info.plist"
240 cp -a "$WORK/$appdir_server" $WORK/$vol_name
241
242 # Batch converter
243 appdir_batch="DCP-o-matic 2 Batch Converter.app"
244 approot_batch="$appdir_batch/Contents"
245 libs_batch="$approot_batch/lib"
246 macos_batch="$approot_batch/MacOS"
247 resources_batch="$approot_batch/Resources"
248 ln -s "../../DCP-o-matic 2.app/Contents/lib" "$WORK/$libs_batch"
249 ln -s "../../DCP-o-matic 2.app/Contents/Resources" "$WORK/$resources_batch"
250 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2_batch.Info.plist "$WORK/$approot_batch/Info.plist"
251 cp -a "$WORK/$appdir_batch" $WORK/$vol_name
252
253 rm -f $tmp_dmg "$dmg"
254 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
255 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
256 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
257 sleep 5
258
259 echo '
260   tell application "Finder"
261     tell disk "'$vol_name'"
262            open
263            set current view of container window to icon view
264            set toolbar visible of container window to false
265            set statusbar visible of container window to false
266            set the bounds of container window to {400, 200, 930, 610}
267            set theViewOptions to the icon view options of container window
268            set arrangement of theViewOptions to not arranged
269            set icon size of theViewOptions to 64
270            set position of item "DCP-o-matic 2.app" of container window to {90, 80}
271            set position of item "DCP-o-matic 2 KDM Creator.app" of container window to {270, 80}
272            set position of item "DCP-o-matic 2 Server.app" of container window to {90, 200}
273            set position of item "DCP-o-matic 2 Batch Converter.app" of container window to {270, 200}
274            set position of item "Applications" of container window to {450, 80}
275            close
276            open
277            update without registering applications
278            delay 5
279      end tell
280    end tell
281 ' | osascript
282
283 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
284 sync
285
286 hdiutil eject $device
287 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
288 sips -i "$WORK/$resources/dcpomatic2.icns"
289 DeRez -only icns "$WORK/$resources/dcpomatic2.icns" > "$WORK/$resources/DCP-o-matic.rsrc"
290 Rez -append "$WORK/$resources/DCP-o-matic.rsrc" -o "$dmg"
291 SetFile -a C "$dmg"