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