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 libxml++ "$WORK/$libs"
85 universal_copy_lib $ENV libxslt "$WORK/$libs"
86 universal_copy_lib $ENV libxml2 "$WORK/$libs"
87 universal_copy_lib $ENV libglibmm-2.4 "$WORK/$libs"
88 universal_copy_lib $ENV libgobject "$WORK/$libs"
89 universal_copy_lib $ENV libgthread "$WORK/$libs"
90 universal_copy_lib $ENV libgmodule "$WORK/$libs"
91 universal_copy_lib $ENV libsigc "$WORK/$libs"
92 universal_copy_lib $ENV libglib-2 "$WORK/$libs"
93 universal_copy_lib $ENV libintl "$WORK/$libs"
94 universal_copy_lib $ENV libsndfile "$WORK/$libs"
95 universal_copy_lib $ENV libMagick++ "$WORK/$libs"
96 universal_copy_lib $ENV libMagickCore "$WORK/$libs"
97 universal_copy_lib $ENV libMagickWand "$WORK/$libs"
98 universal_copy_lib $ENV libssh "$WORK/$libs"
99 universal_copy_lib $ENV libwx "$WORK/$libs"
100 universal_copy_lib $ENV libfontconfig "$WORK/$libs"
101 universal_copy_lib $ENV libfreetype "$WORK/$libs"
102 universal_copy_lib $ENV libexpat "$WORK/$libs"
103 universal_copy_lib $ENV libltdl "$WORK/$libs"
104 universal_copy_lib $ENV libxmlsec1 "$WORK/$libs"
105 universal_copy_lib $ENV libzip "$WORK/$libs"
106 universal_copy_lib $ENV libquickmail "$WORK/$libs"
107 universal_copy_lib $ENV libcurl "$WORK/$libs"
108 universal_copy_lib $ENV libffi "$WORK/$libs"
109 universal_copy_lib $ENV libiconv "$WORK/$libs"
110 universal_copy_lib $ENV libpango "$WORK/$libs"
111 universal_copy_lib $ENV libcairo "$WORK/$libs"
112 universal_copy_lib $ENV libpixman "$WORK/$libs"
113 universal_copy_lib $ENV libharfbuzz "$WORK/$libs"
115 relink=`echo $relink | sed -e "s/\+//g"`
117 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
118 deps=`otool -L "$obj" | awk '{print $1}' | egrep "($relink)" | egrep "($ENV|$ROOT|boost)"`
121 echo "Relinking $dep into $obj"
123 # $dep will be a path within 64/; make a 32/ path too
124 dep32=`echo $dep | sed -e "s/\/64\//\/32\//g"`
125 changes="$changes -change $dep @executable_path/../lib/$base -change $dep32 @executable_path/../lib/$base"
127 if test "x$changes" != "x"; then
128 install_name_tool $changes "$obj"
132 cp $ROOT/32/src/dcpomatic/build/platform/osx/Info.plist "$WORK/$approot"
133 cp $ROOT/32/src/dcpomatic/icons/dcpomatic.icns "$WORK/$resources/DCP-o-matic.icns"
134 cp $ROOT/32/src/dcpomatic/icons/colour_conversions.png "$WORK/$resources"
135 cp $ROOT/32/src/dcpomatic/icons/defaults.png "$WORK/$resources"
136 cp $ROOT/32/src/dcpomatic/icons/kdm_email.png "$WORK/$resources"
137 cp $ROOT/32/src/dcpomatic/icons/servers.png "$WORK/$resources"
138 cp $ROOT/32/src/dcpomatic/icons/tms.png "$WORK/$resources"
139 cp $ROOT/32/src/dcpomatic/icons/keys.png "$WORK/$resources"
140 cp $ROOT/32/src/dcpomatic/LiberationSans-Regular.ttf "$WORK/$resources"
142 # i18n: DCP-o-matic .mo files
143 for lang in de_DE es_ES fr_FR it_IT sv_SE nl_NL; do
144 mkdir -p "$WORK/$resources/$lang/LC_MESSAGES"
145 cp $ROOT/32/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
146 cp $ROOT/32/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
147 cp $ROOT/32/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
150 # i18n: wxWidgets .mo files
151 for lang in de es fr it sv nl; do
152 mkdir "$WORK/$resources/$lang"
153 cp $ENV/64/share/locale/$lang/LC_MESSAGES/wxstd.mo "$WORK/$resources/$lang"
156 tmp_dmg=$WORK/dcpomatic_tmp.dmg
157 dmg="$WORK/DCP-o-matic $version.dmg"
158 vol_name=DCP-o-matic-$version
160 mkdir -p $WORK/$vol_name
161 cp -a "$WORK/$appdir" $WORK/$vol_name
162 ln -s /Applications "$WORK/$vol_name/Applications"
164 rm -f $tmp_dmg "$dmg"
165 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
166 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
167 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
171 tell application "Finder"
172 tell disk "'$vol_name'"
174 set current view of container window to icon view
175 set toolbar visible of container window to false
176 set statusbar visible of container window to false
177 set the bounds of container window to {400, 200, 790, 410}
178 set theViewOptions to the icon view options of container window
179 set arrangement of theViewOptions to not arranged
180 set icon size of theViewOptions to 64
181 set position of item "DCP-o-matic 2.app" of container window to {90, 80}
182 set position of item "Applications" of container window to {310, 80}
185 update without registering applications
191 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
194 hdiutil eject $device
195 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
196 sips -i "$WORK/$resources/DCP-o-matic.icns"
197 DeRez -only icns "$WORK/$resources/DCP-o-matic.icns" > "$WORK/$resources/DCP-o-matic.rsrc"
198 Rez -append "$WORK/$resources/DCP-o-matic.rsrc" -o "$dmg"