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 $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"
154 relink=`echo $relink | sed -e "s/\+//g"`
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)"`
168 echo "Relinking $dep into $obj"
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"
174 if test "x$changes" != "x"; then
175 install_name_tool $changes "$obj"
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/LiberationSans-Regular.ttf "$WORK/$resources"
191 cp $ROOT/32/src/dcpomatic/graphics/splash.png "$WORK/$resources"
192 cp $ROOT/32/src/dcpomatic/graphics/dcpomatic2_server_small.png "$WORK/$resources"
194 # i18n: DCP-o-matic .mo files
195 for lang in de_DE es_ES fr_FR it_IT sv_SE nl_NL ru_RU pl_PL da_DK; do
196 mkdir -p "$WORK/$resources/$lang/LC_MESSAGES"
197 cp $ROOT/32/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
198 cp $ROOT/32/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
199 cp $ROOT/32/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
202 # i18n: wxWidgets .mo files
203 for lang in de es fr it sv nl; do
204 mkdir "$WORK/$resources/$lang"
205 cp $ENV/64/share/locale/$lang/LC_MESSAGES/wxstd.mo "$WORK/$resources/$lang"
208 tmp_dmg=$WORK/dcpomatic_tmp.dmg
209 dmg="$WORK/DCP-o-matic $version.dmg"
210 vol_name=DCP-o-matic-$version
212 mkdir -p $WORK/$vol_name
213 cp -a "$WORK/$appdir" $WORK/$vol_name
214 ln -s /Applications "$WORK/$vol_name/Applications"
217 appdir_kdm="DCP-o-matic 2 KDM Creator.app"
218 approot_kdm="$appdir_kdm/Contents"
219 libs_kdm="$approot_kdm/lib"
220 macos_kdm="$approot_kdm/MacOS"
221 resources_kdm="$approot_kdm/Resources"
222 ln -s "../../DCP-o-matic 2.app/Contents/lib" "$WORK/$libs_kdm"
223 ln -s "../../DCP-o-matic 2.app/Contents/Resources" "$WORK/$resources_kdm"
224 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$WORK/$approot_kdm/Info.plist"
225 cp -a "$WORK/$appdir_kdm" $WORK/$vol_name
228 appdir_server="DCP-o-matic 2 Server.app"
229 approot_server="$appdir_server/Contents"
230 libs_server="$approot_server/lib"
231 macos_server="$approot_server/MacOS"
232 resources_server="$approot_server/Resources"
233 ln -s "../../DCP-o-matic 2.app/Contents/lib" "$WORK/$libs_server"
234 ln -s "../../DCP-o-matic 2.app/Contents/Resources" "$WORK/$resources_server"
235 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2_server.Info.plist "$WORK/$approot_server/Info.plist"
236 cp -a "$WORK/$appdir_server" $WORK/$vol_name
239 appdir_batch="DCP-o-matic 2 Batch Converter.app"
240 approot_batch="$appdir_batch/Contents"
241 libs_batch="$approot_batch/lib"
242 macos_batch="$approot_batch/MacOS"
243 resources_batch="$approot_batch/Resources"
244 ln -s "../../DCP-o-matic 2.app/Contents/lib" "$WORK/$libs_batch"
245 ln -s "../../DCP-o-matic 2.app/Contents/Resources" "$WORK/$resources_batch"
246 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2_batch.Info.plist "$WORK/$approot_batch/Info.plist"
247 cp -a "$WORK/$appdir_batch" $WORK/$vol_name
249 rm -f $tmp_dmg "$dmg"
250 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
251 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
252 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
256 tell application "Finder"
257 tell disk "'$vol_name'"
259 set current view of container window to icon view
260 set toolbar visible of container window to false
261 set statusbar visible of container window to false
262 set the bounds of container window to {400, 200, 790, 410}
263 set theViewOptions to the icon view options of container window
264 set arrangement of theViewOptions to not arranged
265 set icon size of theViewOptions to 64
266 set position of item "DCP-o-matic 2.app" of container window to {90, 80}
267 set position of item "DCP-o-matic 2 KDM Creator.app" of container window to {270, 80}
268 set position of item "DCP-o-matic 2 Server.app" of container window to {90, 200}
269 set position of item "DCP-o-matic 2 Batch Converter.app" of container window to {270, 200}
270 set position of item "Applications" of container window to {450, 80}
273 update without registering applications
279 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
282 hdiutil eject $device
283 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
284 sips -i "$WORK/$resources/dcpomatic2.icns"
285 DeRez -only icns "$WORK/$resources/dcpomatic2.icns" > "$WORK/$resources/DCP-o-matic.rsrc"
286 Rez -append "$WORK/$resources/DCP-o-matic.rsrc" -o "$dmg"