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"
40 function universal_copy {
43 ln -s $(readlink $f) "$3/`basename $f`"
45 g=`echo $f | sed -e "s/\/32\//\/64\//g"`
47 lipo -create $f $g -output "$3/`basename $f`"
52 function universal_copy_lib {
53 for f in $1/32/lib/$2*.dylib; do
55 ln -s $(readlink $f) "$3/`basename $f`"
57 g=`echo $f | sed -e "s/\/32\//\/64\//g"`
59 lipo -create $f $g -output "$3/`basename $f`"
65 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$WORK/$macos"
66 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$WORK/$macos"
67 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$WORK/$macos"
68 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_batch "$WORK/$macos"
69 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_kdm "$WORK/$macos_kdm"
70 universal_copy $ROOT src/dcpomatic/build/src/lib/libdcpomatic2.dylib "$WORK/$libs"
71 universal_copy $ROOT src/dcpomatic/build/src/wx/libdcpomatic2-wx.dylib "$WORK/$libs"
72 universal_copy_lib $ROOT libcxml "$WORK/$libs"
73 universal_copy_lib $ROOT libdcp-1.0 "$WORK/$libs"
74 universal_copy_lib $ROOT libasdcp-libdcp-1.0 "$WORK/$libs"
75 universal_copy_lib $ROOT libkumu-libdcp-1.0 "$WORK/$libs"
76 universal_copy_lib $ROOT libsub "$WORK/$libs"
77 universal_copy_lib $ROOT libasdcp-libsub-1.0 "$WORK/$libs"
78 universal_copy_lib $ROOT libkumu-libsub-1.0 "$WORK/$libs"
79 universal_copy_lib $ROOT libopenjpeg "$WORK/$libs"
80 universal_copy_lib $ROOT libavdevice "$WORK/$libs"
81 universal_copy_lib $ROOT libavformat "$WORK/$libs"
82 universal_copy_lib $ROOT libavfilter "$WORK/$libs"
83 universal_copy_lib $ROOT libavutil "$WORK/$libs"
84 universal_copy_lib $ROOT libavcodec "$WORK/$libs"
85 universal_copy_lib $ROOT libswscale "$WORK/$libs"
86 universal_copy_lib $ROOT libpostproc "$WORK/$libs"
87 universal_copy $ROOT bin/ffprobe "$WORK/$macos"
88 universal_copy_lib $ENV libboost_system "$WORK/$libs"
89 universal_copy_lib $ENV libboost_filesystem "$WORK/$libs"
90 universal_copy_lib $ENV libboost_thread "$WORK/$libs"
91 universal_copy_lib $ENV libboost_date_time "$WORK/$libs"
92 universal_copy_lib $ENV libboost_locale "$WORK/$libs"
93 universal_copy_lib $ENV libboost_regex "$WORK/$libs"
94 universal_copy_lib $ENV libxml++ "$WORK/$libs"
95 universal_copy_lib $ENV libxslt "$WORK/$libs"
96 universal_copy_lib $ENV libxml2 "$WORK/$libs"
97 universal_copy_lib $ENV libglibmm-2.4 "$WORK/$libs"
98 universal_copy_lib $ENV libgobject "$WORK/$libs"
99 universal_copy_lib $ENV libgthread "$WORK/$libs"
100 universal_copy_lib $ENV libgmodule "$WORK/$libs"
101 universal_copy_lib $ENV libsigc "$WORK/$libs"
102 universal_copy_lib $ENV libglib-2 "$WORK/$libs"
103 universal_copy_lib $ENV libintl "$WORK/$libs"
104 universal_copy_lib $ENV libsndfile "$WORK/$libs"
105 universal_copy_lib $ENV libMagick++ "$WORK/$libs"
106 universal_copy_lib $ENV libMagickCore "$WORK/$libs"
107 universal_copy_lib $ENV libMagickWand "$WORK/$libs"
108 universal_copy_lib $ENV libssh "$WORK/$libs"
109 universal_copy_lib $ENV libwx "$WORK/$libs"
110 universal_copy_lib $ENV libfontconfig "$WORK/$libs"
111 universal_copy_lib $ENV libfreetype "$WORK/$libs"
112 universal_copy_lib $ENV libexpat "$WORK/$libs"
113 universal_copy_lib $ENV libltdl "$WORK/$libs"
114 universal_copy_lib $ENV libxmlsec1 "$WORK/$libs"
115 universal_copy_lib $ENV libzip "$WORK/$libs"
116 universal_copy_lib $ENV libquickmail "$WORK/$libs"
117 universal_copy_lib $ENV libcurl "$WORK/$libs"
118 universal_copy_lib $ENV libffi "$WORK/$libs"
119 universal_copy_lib $ENV libiconv "$WORK/$libs"
120 universal_copy_lib $ENV libpango "$WORK/$libs"
121 universal_copy_lib $ENV libcairo "$WORK/$libs"
122 universal_copy_lib $ENV libpixman "$WORK/$libs"
123 universal_copy_lib $ENV libharfbuzz "$WORK/$libs"
124 universal_copy_lib $ENV libsamplerate "$WORK/$libs"
125 universal_copy_lib $ENV libicui18n "$WORK/$libs"
126 universal_copy_lib $ENV libicudata "$WORK/$libs"
127 universal_copy_lib $ENV libicuio "$WORK/$libs"
128 universal_copy_lib $ENV libicule "$WORK/$libs"
129 universal_copy_lib $ENV libiculx "$WORK/$libs"
130 universal_copy_lib $ENV libicutest "$WORK/$libs"
131 universal_copy_lib $ENV libicutu "$WORK/$libs"
132 universal_copy_lib $ENV libicuuc "$WORK/$libs"
134 relink=`echo $relink | sed -e "s/\+//g"`
136 for obj in "$WORK/$macos/dcpomatic2" "$WORK/$macos/dcpomatic2_batch" "$WORK/$macos/dcpomatic2_server" "$WORK/$macos_kdm/dcpomatic2_kdm" "$WORK/$macos/dcpomatic2_cli" "$WORK/$macos/dcpomatic2_server_cli" "$WORK/$macos/ffprobe" "$WORK/$libs/"*.dylib; do
137 deps=`otool -L "$obj" | awk '{print $1}' | egrep "($relink)" | egrep "($ENV|$ROOT|boost|libicu)"`
140 echo "Relinking $dep into $obj"
142 # $dep will be a path within 64/; make a 32/ path too
143 dep32=`echo $dep | sed -e "s/\/64\//\/32\//g"`
144 changes="$changes -change $dep @executable_path/../lib/$base -change $dep32 @executable_path/../lib/$base"
146 if test "x$changes" != "x"; then
147 install_name_tool $changes "$obj"
151 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2.Info.plist "$WORK/$approot/Info.plist"
152 cp $ROOT/32/src/dcpomatic/graphics/dcpomatic.icns "$WORK/$resources/DCP-o-matic.icns"
153 cp $ROOT/32/src/dcpomatic/graphics/colour_conversions.png "$WORK/$resources"
154 cp $ROOT/32/src/dcpomatic/graphics/defaults.png "$WORK/$resources"
155 cp $ROOT/32/src/dcpomatic/graphics/kdm_email.png "$WORK/$resources"
156 cp $ROOT/32/src/dcpomatic/graphics/servers.png "$WORK/$resources"
157 cp $ROOT/32/src/dcpomatic/graphics/tms.png "$WORK/$resources"
158 cp $ROOT/32/src/dcpomatic/graphics/keys.png "$WORK/$resources"
159 cp $ROOT/32/src/dcpomatic/LiberationSans-Regular.ttf "$WORK/$resources"
160 cp $ROOT/32/src/dcpomatic/graphics/splash.png "$WORK/$resources"
162 # i18n: DCP-o-matic .mo files
163 for lang in de_DE es_ES fr_FR it_IT sv_SE nl_NL ru_RU pl_PL da_DK; do
164 mkdir -p "$WORK/$resources/$lang/LC_MESSAGES"
165 cp $ROOT/32/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
166 cp $ROOT/32/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
167 cp $ROOT/32/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
170 # i18n: wxWidgets .mo files
171 for lang in de es fr it sv nl; do
172 mkdir "$WORK/$resources/$lang"
173 cp $ENV/64/share/locale/$lang/LC_MESSAGES/wxstd.mo "$WORK/$resources/$lang"
176 tmp_dmg=$WORK/dcpomatic_tmp.dmg
177 dmg="$WORK/DCP-o-matic $version.dmg"
178 vol_name=DCP-o-matic-$version
180 mkdir -p $WORK/$vol_name
181 cp -a "$WORK/$appdir" $WORK/$vol_name
182 ln -s /Applications "$WORK/$vol_name/Applications"
185 appdir_kdm="DCP-o-matic 2 KDM Creator.app"
186 approot_kdm="$appdir_kdm/Contents"
187 libs_kdm="$approot_kdm/lib"
188 macos_kdm="$approot_kdm/MacOS"
189 resources_kdm="$approot_kdm/Resources"
190 ln -s "../../DCP-o-matic 2.app/Contents/lib" "$WORK/$libs_kdm"
191 ln -s "../../DCP-o-matic 2.app/Contents/Resources" "$WORK/$resources_kdm"
192 cp $ROOT/32/src/dcpomatic/build/platform/osx/dcpomatic2_kdm.Info.plist "$WORK/$approot_kdm/Info.plist"
193 cp -a "$WORK/$appdir_kdm" $WORK/$vol_name
195 rm -f $tmp_dmg "$dmg"
196 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
197 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
198 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
202 tell application "Finder"
203 tell disk "'$vol_name'"
205 set current view of container window to icon view
206 set toolbar visible of container window to false
207 set statusbar visible of container window to false
208 set the bounds of container window to {400, 200, 790, 410}
209 set theViewOptions to the icon view options of container window
210 set arrangement of theViewOptions to not arranged
211 set icon size of theViewOptions to 64
212 set position of item "DCP-o-matic 2.app" of container window to {90, 80}
213 set position of item "DCP-o-matic 2 KDM Creator.app" of container window to {310, 80}
214 set position of item "Applications" of container window to {530, 80}
217 update without registering applications
223 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
226 hdiutil eject $device
227 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
228 sips -i "$WORK/$resources/DCP-o-matic.icns"
229 DeRez -only icns "$WORK/$resources/DCP-o-matic.icns" > "$WORK/$resources/DCP-o-matic.rsrc"
230 Rez -append "$WORK/$resources/DCP-o-matic.rsrc" -o "$dmg"