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