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 ENV=/Users/carl/Environments/osx/10.6
17 # This is our work area for making up the .dmgs
18 mkdir -p build/platform/osx
21 function universal_copy {
24 ln -s $(readlink $f) "$3/`basename $f`"
26 g=`echo $f | sed -e "s/\/32\//\/64\//g"`
28 lipo -create $f $g -output "$3/`basename $f`"
33 function universal_copy_lib {
34 for f in $1/32/lib/$2*.dylib; do
36 ln -s $(readlink $f) "$3/`basename $f`"
38 g=`echo $f | sed -e "s/\/32\//\/64\//g"`
40 lipo -create $f $g -output "$3/`basename $f`"
43 to_relink="$to_relink|$2"
46 # @param #1 directory to copy to
49 universal_copy_lib $ROOT libcxml "$dest"
50 universal_copy_lib $ROOT libdcp-1.0 "$dest"
51 universal_copy_lib $ROOT libasdcp-cth "$dest"
52 universal_copy_lib $ROOT libkumu-cth "$dest"
53 universal_copy_lib $ROOT libsub "$dest"
54 universal_copy_lib $ROOT libopenjp2 "$dest"
55 universal_copy_lib $ROOT libavdevice "$dest"
56 universal_copy_lib $ROOT libavformat "$dest"
57 universal_copy_lib $ROOT libavfilter "$dest"
58 universal_copy_lib $ROOT libavutil "$dest"
59 universal_copy_lib $ROOT libavcodec "$dest"
60 universal_copy_lib $ROOT libswscale "$dest"
61 universal_copy_lib $ROOT libpostproc "$dest"
62 universal_copy_lib $ROOT libswresample "$dest"
63 universal_copy $ROOT src/dcpomatic/build/src/lib/libdcpomatic2.dylib "$dest"
64 universal_copy $ROOT src/dcpomatic/build/src/wx/libdcpomatic2-wx.dylib "$dest"
65 universal_copy_lib $ENV libboost_system "$dest"
66 universal_copy_lib $ENV libboost_filesystem "$dest"
67 universal_copy_lib $ENV libboost_thread "$dest"
68 universal_copy_lib $ENV libboost_date_time "$dest"
69 universal_copy_lib $ENV libboost_locale "$dest"
70 universal_copy_lib $ENV libboost_regex "$dest"
71 universal_copy_lib $ENV libxml++ "$dest"
72 universal_copy_lib $ENV libxslt "$dest"
73 universal_copy_lib $ENV libxml2 "$dest"
74 universal_copy_lib $ENV libglibmm-2.4 "$dest"
75 universal_copy_lib $ENV libgobject "$dest"
76 universal_copy_lib $ENV libgthread "$dest"
77 universal_copy_lib $ENV libgmodule "$dest"
78 universal_copy_lib $ENV libsigc "$dest"
79 universal_copy_lib $ENV libglib-2 "$dest"
80 universal_copy_lib $ENV libintl "$dest"
81 universal_copy_lib $ENV libsndfile "$dest"
82 universal_copy_lib $ENV libMagick++ "$dest"
83 universal_copy_lib $ENV libMagickCore "$dest"
84 universal_copy_lib $ENV libMagickWand "$dest"
85 universal_copy_lib $ENV libssh "$dest"
86 universal_copy_lib $ENV libwx "$dest"
87 universal_copy_lib $ENV libfontconfig "$dest"
88 universal_copy_lib $ENV libfreetype "$dest"
89 universal_copy_lib $ENV libexpat "$dest"
90 universal_copy_lib $ENV libltdl "$dest"
91 universal_copy_lib $ENV libxmlsec1 "$dest"
92 universal_copy_lib $ENV libzip "$dest"
93 universal_copy_lib $ENV libcurl "$dest"
94 universal_copy_lib $ENV libffi "$dest"
95 universal_copy_lib $ENV libpango "$dest"
96 universal_copy_lib $ENV libcairo "$dest"
97 universal_copy_lib $ENV libpixman "$dest"
98 universal_copy_lib $ENV libharfbuzz "$dest"
99 universal_copy_lib $ENV libsamplerate "$dest"
100 universal_copy_lib $ENV libicui18n "$dest"
101 universal_copy_lib $ENV libicudata "$dest"
102 universal_copy_lib $ENV libicuio "$dest"
103 universal_copy_lib $ENV libicule "$dest"
104 universal_copy_lib $ENV libiculx "$dest"
105 universal_copy_lib $ENV libicutest "$dest"
106 universal_copy_lib $ENV libicutu "$dest"
107 universal_copy_lib $ENV libicuuc "$dest"
108 universal_copy_lib $ENV libFLAC "$dest"
109 universal_copy_lib $ENV libvorbis "$dest"
110 universal_copy_lib $ENV libogg "$dest"
113 # @param #1 directory to copy to
114 function copy_resources {
116 cp $ROOT/32/src/dcpomatic/graphics/osx/dcpomatic_small.png "$dest"
117 cp $ROOT/32/src/dcpomatic/graphics/osx/dcpomatic2.icns "$dest"
118 cp $ROOT/32/src/dcpomatic/graphics/osx/dcpomatic2_kdm.icns "$dest"
119 cp $ROOT/32/src/dcpomatic/graphics/osx/dcpomatic2_server.icns "$dest"
120 cp $ROOT/32/src/dcpomatic/graphics/osx/dcpomatic2_player.icns "$dest"
121 cp $ROOT/32/src/dcpomatic/graphics/osx/dcpomatic2_batch.icns "$dest"
122 cp $ROOT/32/src/dcpomatic/graphics/osx/preferences/colour_conversions.png "$dest"
123 cp $ROOT/32/src/dcpomatic/graphics/osx/preferences/defaults.png "$dest"
124 cp $ROOT/32/src/dcpomatic/graphics/osx/preferences/kdm_email.png "$dest"
125 cp $ROOT/32/src/dcpomatic/graphics/osx/preferences/servers.png "$dest"
126 cp $ROOT/32/src/dcpomatic/graphics/osx/preferences/tms.png "$dest"
127 cp $ROOT/32/src/dcpomatic/graphics/osx/preferences/keys.png "$dest"
128 cp $ROOT/32/src/dcpomatic/graphics/osx/preferences/cover_sheet.png "$dest"
129 cp $ROOT/32/src/dcpomatic/fonts/LiberationSans-Regular.ttf "$dest"
130 cp $ROOT/32/src/dcpomatic/fonts/LiberationSans-Italic.ttf "$dest"
131 cp $ROOT/32/src/dcpomatic/fonts/LiberationSans-Bold.ttf "$dest"
132 cp $ROOT/32/src/dcpomatic/graphics/splash.png "$dest"
134 # i18n: DCP-o-matic .mo files
135 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 zh_CN; do
136 mkdir -p "$dest/$lang/LC_MESSAGES"
137 cp $ROOT/32/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
138 cp $ROOT/32/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
139 cp $ROOT/32/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$dest/$lang/LC_MESSAGES"
142 # i18n: wxWidgets .mo files
143 for lang in de es fr it sv nl ru pl da cs; do
145 cp $ENV/64/share/locale/$lang/LC_MESSAGES/wxstd.mo "$dest/$lang"
149 # param $1 list of things that link to other things
151 to_relink=`echo $to_relink | sed -e "s/\+//g"`
154 for obj in "${linkers[@]}"; do
155 deps=`otool -L "$obj" | awk '{print $1}' | egrep "($to_relink)" | egrep "($ENV|$ROOT|boost|libicu)"`
159 # $dep will be a path within 64/; make a 32/ path too
160 dep32=`echo $dep | sed -e "s/\/64\//\/32\//g"`
161 changes="$changes -change $dep @executable_path/../lib/$base -change $dep32 @executable_path/../lib/$base"
163 if test "x$changes" != "x"; then
164 install_name_tool $changes "$obj"
169 # @param #1 .app directory
170 # @param #2 full name e.g. DCP-o-matic Batch Converter
174 tmp_dmg=dcpomatic_tmp.dmg
175 dmg="$full_name $version.dmg"
176 vol_name=DCP-o-matic-$version
179 cp -a "$appdir" $vol_name
180 ln -s /Applications "$vol_name/Applications"
182 rm -f $tmp_dmg "$dmg"
183 hdiutil create -srcfolder $vol_name -volname $vol_name -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDRW -size $DMG_SIZE $tmp_dmg
184 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
185 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
189 tell application "Finder"
190 tell disk "'$vol_name'"
192 set current view of container window to icon view
193 set toolbar visible of container window to false
194 set statusbar visible of container window to false
195 set the bounds of container window to {400, 200, 650, 370}
196 set theViewOptions to the icon view options of container window
197 set arrangement of theViewOptions to not arranged
198 set icon size of theViewOptions to 64
199 set position of item "'$appdir'" of container window to {90, 80}
200 set position of item "Applications" of container window to {220, 80}
203 update without registering applications
209 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
212 hdiutil eject $device
213 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
214 sips -i "$appdir/Contents/Resources/dcpomatic2.icns"
215 DeRez -only icns "$appdir/Contents/Resources/dcpomatic2.icns" > "$appdir/Contents/Resources/DCP-o-matic.rsrc"
216 Rez -append "$appdir/Contents/Resources/DCP-o-matic.rsrc" -o "$dmg"
225 approot="$appdir/Contents"
227 mkdir -p "$approot/MacOS"
228 mkdir -p "$approot/lib"
229 mkdir -p "$approot/Resources"
231 to_relink="dcpomatic"
232 copy_libs "$approot/lib"
233 copy_resources "$approot/Resources"
237 setup "DCP-o-matic 2.app"
238 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$approot/MacOS"
239 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$approot/MacOS"
240 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_create "$approot/MacOS"
241 universal_copy $ROOT bin/ffprobe "$approot/MacOS"
242 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$approot/Info.plist"
243 rl=("$approot/MacOS/dcpomatic2" "$approot/MacOS/dcpomatic2_cli" "$approot/MacOS/ffprobe" "$approot/lib/"*.dylib)
245 make_dmg "$appdir" "DCP-o-matic"
247 # DCP-o-matic KDM Creator
248 setup "DCP-o-matic 2 KDM Creator.app"
249 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm "$approot/MacOS"
250 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$approot/Info.plist"
251 rl=("$approot/MacOS/dcpomatic2_kdm" "$approot/lib/"*.dylib)
253 make_dmg "$appdir" "DCP-o-matic KDM Creator"
255 # DCP-o-matic Encode Server
256 setup "DCP-o-matic 2 Encode Server.app"
257 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server "$approot/MacOS"
258 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$approot/MacOS"
259 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2_server.Info.plist "$approot/Info.plist"
260 rl=("$approot/MacOS/dcpomatic2_server" "$approot/MacOS/dcpomatic2_server_cli" "$approot/lib/"*.dylib)
262 make_dmg "$appdir" "DCP-o-matic Encode Server"
264 # DCP-o-matic Batch Converter
265 setup "DCP-o-matic 2 Batch converter.app"
266 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_batch "$approot/MacOS"
267 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2_batch.Info.plist "$approot/Info.plist"
268 rl=("$approot/MacOS/dcpomatic2_batch" "$approot/lib/"*.dylib)
270 make_dmg "$appdir" "DCP-o-matic Batch Converter"
273 setup "DCP-o-matic 2 Player.app"
274 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_player "$approot/MacOS"
275 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2_player.Info.plist "$approot/Info.plist"
276 rl=("$approot/MacOS/dcpomatic2_player" "$approot/lib/"*.dylib)
278 make_dmg "$appdir" "DCP-o-matic Player"