3 # Syntax: make_dmg.sh <builddir>
5 # e.g. make_dmg.sh /Users/carl/cdist
7 # Don't set -e here as egrep (used a few times) returns 1 if no matches
10 version=`cat wscript | egrep ^VERSION | awk '{print $3}' | sed -e "s/'//g"`
12 # DMG size in megabytes
14 WORK=build/platform/osx
15 ENV=/Users/carl/Environments/osx/10.6
19 appdir="DCP-o-matic 2.app"
20 approot="$appdir/Contents"
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"
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"
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"
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"
58 function universal_copy {
61 ln -s $(readlink $f) "$3/`basename $f`"
63 g=`echo $f | sed -e "s/\/32\//\/64\//g"`
65 lipo -create $f $g -output "$3/`basename $f`"
70 function universal_copy_lib {
71 for f in $1/32/lib/$2*.dylib; do
73 ln -s $(readlink $f) "$3/`basename $f`"
75 g=`echo $f | sed -e "s/\/32\//\/64\//g"`
77 lipo -create $f $g -output "$3/`basename $f`"
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_lib $ROOT libswresample "$WORK/$libs"
108 universal_copy $ROOT bin/ffprobe "$WORK/$macos"
109 universal_copy_lib $ENV libboost_system "$WORK/$libs"
110 universal_copy_lib $ENV libboost_filesystem "$WORK/$libs"
111 universal_copy_lib $ENV libboost_thread "$WORK/$libs"
112 universal_copy_lib $ENV libboost_date_time "$WORK/$libs"
113 universal_copy_lib $ENV libboost_locale "$WORK/$libs"
114 universal_copy_lib $ENV libboost_regex "$WORK/$libs"
115 universal_copy_lib $ENV libxml++ "$WORK/$libs"
116 universal_copy_lib $ENV libxslt "$WORK/$libs"
117 universal_copy_lib $ENV libxml2 "$WORK/$libs"
118 universal_copy_lib $ENV libglibmm-2.4 "$WORK/$libs"
119 universal_copy_lib $ENV libgobject "$WORK/$libs"
120 universal_copy_lib $ENV libgthread "$WORK/$libs"
121 universal_copy_lib $ENV libgmodule "$WORK/$libs"
122 universal_copy_lib $ENV libsigc "$WORK/$libs"
123 universal_copy_lib $ENV libglib-2 "$WORK/$libs"
124 universal_copy_lib $ENV libintl "$WORK/$libs"
125 universal_copy_lib $ENV libsndfile "$WORK/$libs"
126 universal_copy_lib $ENV libMagick++ "$WORK/$libs"
127 universal_copy_lib $ENV libMagickCore "$WORK/$libs"
128 universal_copy_lib $ENV libMagickWand "$WORK/$libs"
129 universal_copy_lib $ENV libssh "$WORK/$libs"
130 universal_copy_lib $ENV libwx "$WORK/$libs"
131 universal_copy_lib $ENV libfontconfig "$WORK/$libs"
132 universal_copy_lib $ENV libfreetype "$WORK/$libs"
133 universal_copy_lib $ENV libexpat "$WORK/$libs"
134 universal_copy_lib $ENV libltdl "$WORK/$libs"
135 universal_copy_lib $ENV libxmlsec1 "$WORK/$libs"
136 universal_copy_lib $ENV libzip "$WORK/$libs"
137 universal_copy_lib $ENV libquickmail "$WORK/$libs"
138 universal_copy_lib $ENV libcurl "$WORK/$libs"
139 universal_copy_lib $ENV libffi "$WORK/$libs"
140 universal_copy_lib $ENV libiconv "$WORK/$libs"
141 universal_copy_lib $ENV libpango "$WORK/$libs"
142 universal_copy_lib $ENV libcairo "$WORK/$libs"
143 universal_copy_lib $ENV libpixman "$WORK/$libs"
144 universal_copy_lib $ENV libharfbuzz "$WORK/$libs"
145 universal_copy_lib $ENV libsamplerate "$WORK/$libs"
146 universal_copy_lib $ENV libicui18n "$WORK/$libs"
147 universal_copy_lib $ENV libicudata "$WORK/$libs"
148 universal_copy_lib $ENV libicuio "$WORK/$libs"
149 universal_copy_lib $ENV libicule "$WORK/$libs"
150 universal_copy_lib $ENV libiculx "$WORK/$libs"
151 universal_copy_lib $ENV libicutest "$WORK/$libs"
152 universal_copy_lib $ENV libicutu "$WORK/$libs"
153 universal_copy_lib $ENV libicuuc "$WORK/$libs"
155 relink=`echo $relink | sed -e "s/\+//g"`
158 "$WORK/$macos/dcpomatic2" \
159 "$WORK/$macos/dcpomatic2_cli" \
160 "$WORK/$macos/dcpomatic2_server_cli" \
161 "$WORK/$macos_kdm/dcpomatic2_kdm" \
162 "$WORK/$macos_server/dcpomatic2_server" \
163 "$WORK/$macos_batch/dcpomatic2_batch" \
164 "$WORK/$macos/ffprobe" \
165 "$WORK/$libs/"*.dylib; do
166 deps=`otool -L "$obj" | awk '{print $1}' | egrep "($relink)" | egrep "($ENV|$ROOT|boost|libicu)"`
169 echo "Relinking $dep into $obj"
171 # $dep will be a path within 64/; make a 32/ path too
172 dep32=`echo $dep | sed -e "s/\/64\//\/32\//g"`
173 changes="$changes -change $dep @executable_path/../lib/$base -change $dep32 @executable_path/../lib/$base"
175 if test "x$changes" != "x"; then
176 install_name_tool $changes "$obj"
180 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$WORK/$approot/Info.plist"
181 cp $ROOT/32/src/dcpomatic/graphics/dcpomatic2.icns "$WORK/$resources/dcpomatic2.icns"
182 cp $ROOT/32/src/dcpomatic/graphics/dcpomatic2_kdm.icns "$WORK/$resources/dcpomatic2_kdm.icns"
183 cp $ROOT/32/src/dcpomatic/graphics/dcpomatic2_server.icns "$WORK/$resources/dcpomatic2_server.icns"
184 cp $ROOT/32/src/dcpomatic/graphics/dcpomatic2_batch.icns "$WORK/$resources/dcpomatic2_batch.icns"
185 cp $ROOT/32/src/dcpomatic/graphics/colour_conversions.png "$WORK/$resources"
186 cp $ROOT/32/src/dcpomatic/graphics/defaults.png "$WORK/$resources"
187 cp $ROOT/32/src/dcpomatic/graphics/kdm_email.png "$WORK/$resources"
188 cp $ROOT/32/src/dcpomatic/graphics/servers.png "$WORK/$resources"
189 cp $ROOT/32/src/dcpomatic/graphics/tms.png "$WORK/$resources"
190 cp $ROOT/32/src/dcpomatic/graphics/keys.png "$WORK/$resources"
191 cp $ROOT/32/src/dcpomatic/fonts/LiberationSans-Regular.ttf "$WORK/$resources"
192 cp $ROOT/32/src/dcpomatic/fonts/LiberationSans-Italic.ttf "$WORK/$resources"
193 cp $ROOT/32/src/dcpomatic/fonts/LiberationSans-Bold.ttf "$WORK/$resources"
194 cp $ROOT/32/src/dcpomatic/graphics/splash.png "$WORK/$resources"
195 cp $ROOT/32/src/dcpomatic/graphics/dcpomatic2_server_small.png "$WORK/$resources"
197 # i18n: DCP-o-matic .mo files
198 for lang in de_DE es_ES fr_FR it_IT sv_SE nl_NL ru_RU pl_PL da_DK pt_PT; do
199 mkdir -p "$WORK/$resources/$lang/LC_MESSAGES"
200 cp $ROOT/32/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
201 cp $ROOT/32/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
202 cp $ROOT/32/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
205 # i18n: wxWidgets .mo files
206 for lang in de es fr it sv nl; do
207 mkdir "$WORK/$resources/$lang"
208 cp $ENV/64/share/locale/$lang/LC_MESSAGES/wxstd.mo "$WORK/$resources/$lang"
211 tmp_dmg=$WORK/dcpomatic_tmp.dmg
212 dmg="$WORK/DCP-o-matic $version.dmg"
213 vol_name=DCP-o-matic-$version
215 mkdir -p $WORK/$vol_name
216 cp -a "$WORK/$appdir" $WORK/$vol_name
217 ln -s /Applications "$WORK/$vol_name/Applications"
220 appdir_kdm="DCP-o-matic 2 KDM Creator.app"
221 approot_kdm="$appdir_kdm/Contents"
222 libs_kdm="$approot_kdm/lib"
223 macos_kdm="$approot_kdm/MacOS"
224 resources_kdm="$approot_kdm/Resources"
225 ln -s "../../DCP-o-matic 2.app/Contents/lib" "$WORK/$libs_kdm"
226 ln -s "../../DCP-o-matic 2.app/Contents/Resources" "$WORK/$resources_kdm"
227 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$WORK/$approot_kdm/Info.plist"
228 cp -a "$WORK/$appdir_kdm" $WORK/$vol_name
231 appdir_server="DCP-o-matic 2 Server.app"
232 approot_server="$appdir_server/Contents"
233 libs_server="$approot_server/lib"
234 macos_server="$approot_server/MacOS"
235 resources_server="$approot_server/Resources"
236 ln -s "../../DCP-o-matic 2.app/Contents/lib" "$WORK/$libs_server"
237 ln -s "../../DCP-o-matic 2.app/Contents/Resources" "$WORK/$resources_server"
238 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2_server.Info.plist "$WORK/$approot_server/Info.plist"
239 cp -a "$WORK/$appdir_server" $WORK/$vol_name
242 appdir_batch="DCP-o-matic 2 Batch Converter.app"
243 approot_batch="$appdir_batch/Contents"
244 libs_batch="$approot_batch/lib"
245 macos_batch="$approot_batch/MacOS"
246 resources_batch="$approot_batch/Resources"
247 ln -s "../../DCP-o-matic 2.app/Contents/lib" "$WORK/$libs_batch"
248 ln -s "../../DCP-o-matic 2.app/Contents/Resources" "$WORK/$resources_batch"
249 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2_batch.Info.plist "$WORK/$approot_batch/Info.plist"
250 cp -a "$WORK/$appdir_batch" $WORK/$vol_name
252 rm -f $tmp_dmg "$dmg"
253 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
254 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
255 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
259 tell application "Finder"
260 tell disk "'$vol_name'"
262 set current view of container window to icon view
263 set toolbar visible of container window to false
264 set statusbar visible of container window to false
265 set the bounds of container window to {400, 200, 790, 410}
266 set theViewOptions to the icon view options of container window
267 set arrangement of theViewOptions to not arranged
268 set icon size of theViewOptions to 64
269 set position of item "DCP-o-matic 2.app" of container window to {90, 80}
270 set position of item "DCP-o-matic 2 KDM Creator.app" of container window to {270, 80}
271 set position of item "DCP-o-matic 2 Server.app" of container window to {90, 200}
272 set position of item "DCP-o-matic 2 Batch Converter.app" of container window to {270, 200}
273 set position of item "Applications" of container window to {450, 80}
276 update without registering applications
282 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
285 hdiutil eject $device
286 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
287 sips -i "$WORK/$resources/dcpomatic2.icns"
288 DeRez -only icns "$WORK/$resources/dcpomatic2.icns" > "$WORK/$resources/DCP-o-matic.rsrc"
289 Rez -append "$WORK/$resources/DCP-o-matic.rsrc" -o "$dmg"