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 libopenjpeg "$WORK/$libs"
68 universal_copy_lib $ROOT libavdevice "$WORK/$libs"
69 universal_copy_lib $ROOT libavformat "$WORK/$libs"
70 universal_copy_lib $ROOT libavfilter "$WORK/$libs"
71 universal_copy_lib $ROOT libavutil "$WORK/$libs"
72 universal_copy_lib $ROOT libavcodec "$WORK/$libs"
73 universal_copy_lib $ROOT libswscale "$WORK/$libs"
74 universal_copy_lib $ROOT libswresample "$WORK/$libs"
75 universal_copy_lib $ROOT libpostproc "$WORK/$libs"
76 universal_copy $ROOT bin/ffprobe "$WORK/$macos"
77 universal_copy_lib $ENV libboost_system "$WORK/$libs"
78 universal_copy_lib $ENV libboost_filesystem "$WORK/$libs"
79 universal_copy_lib $ENV libboost_thread "$WORK/$libs"
80 universal_copy_lib $ENV libboost_date_time "$WORK/$libs"
81 universal_copy_lib $ENV libboost_locale "$WORK/$libs"
82 universal_copy_lib $ENV libxml++ "$WORK/$libs"
83 universal_copy_lib $ENV libxslt "$WORK/$libs"
84 universal_copy_lib $ENV libxml2 "$WORK/$libs"
85 universal_copy_lib $ENV libglibmm-2.4 "$WORK/$libs"
86 universal_copy_lib $ENV libgobject "$WORK/$libs"
87 universal_copy_lib $ENV libgthread "$WORK/$libs"
88 universal_copy_lib $ENV libgmodule "$WORK/$libs"
89 universal_copy_lib $ENV libsigc "$WORK/$libs"
90 universal_copy_lib $ENV libglib-2 "$WORK/$libs"
91 universal_copy_lib $ENV libintl "$WORK/$libs"
92 universal_copy_lib $ENV libsndfile "$WORK/$libs"
93 universal_copy_lib $ENV libMagick++ "$WORK/$libs"
94 universal_copy_lib $ENV libMagickCore "$WORK/$libs"
95 universal_copy_lib $ENV libMagickWand "$WORK/$libs"
96 universal_copy_lib $ENV libssh "$WORK/$libs"
97 universal_copy_lib $ENV libwx "$WORK/$libs"
98 universal_copy_lib $ENV libfontconfig "$WORK/$libs"
99 universal_copy_lib $ENV libfreetype "$WORK/$libs"
100 universal_copy_lib $ENV libexpat "$WORK/$libs"
101 universal_copy_lib $ENV libltdl "$WORK/$libs"
102 universal_copy_lib $ENV libxmlsec1 "$WORK/$libs"
103 universal_copy_lib $ENV libzip "$WORK/$libs"
104 universal_copy_lib $ENV libquickmail "$WORK/$libs"
105 universal_copy_lib $ENV libcurl "$WORK/$libs"
106 universal_copy_lib $ENV libffi "$WORK/$libs"
107 universal_copy_lib $ENV libiconv "$WORK/$libs"
108 universal_copy_lib $ENV libpango "$WORK/$libs"
109 universal_copy_lib $ENV libcairo "$WORK/$libs"
110 universal_copy_lib $ENV libpixman "$WORK/$libs"
111 universal_copy_lib $ENV libharfbuzz "$WORK/$libs"
113 relink=`echo $relink | sed -e "s/\+//g"`
115 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
116 deps=`otool -L "$obj" | awk '{print $1}' | egrep "($relink)" | egrep "($ENV|$ROOT|boost)"`
119 echo "Relinking $dep into $obj"
121 # $dep will be a path within 64/; make a 32/ path too
122 dep32=`echo $dep | sed -e "s/\/64\//\/32\//g"`
123 changes="$changes -change $dep @executable_path/../lib/$base -change $dep32 @executable_path/../lib/$base"
125 if test "x$changes" != "x"; then
126 install_name_tool $changes "$obj"
130 cp build/platform/osx/Info.plist "$WORK/$approot"
131 cp icons/dcpomatic.icns "$WORK/$resources/DCP-o-matic.icns"
132 cp icons/colour_conversions.png "$WORK/$resources"
133 cp icons/defaults.png "$WORK/$resources"
134 cp icons/kdm_email.png "$WORK/$resources"
135 cp icons/servers.png "$WORK/$resources"
136 cp icons/tms.png "$WORK/$resources"
137 cp icons/keys.png "$WORK/$resources"
139 # i18n: DCP-o-matic .mo files
140 for lang in de_DE es_ES fr_FR it_IT sv_SE nl_NL; do
141 mkdir -p "$WORK/$resources/$lang/LC_MESSAGES"
142 cp build/src/lib/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
143 cp build/src/wx/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
144 cp build/src/tools/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
147 # i18n: wxWidgets .mo files
148 for lang in de es fr it sv nl; do
149 mkdir "$WORK/$resources/$lang"
150 cp $ENV/64/share/locale/$lang/LC_MESSAGES/wxstd.mo "$WORK/$resources/$lang"
153 tmp_dmg=$WORK/dcpomatic_tmp.dmg
154 dmg="$WORK/DCP-o-matic $version.dmg"
155 vol_name=DCP-o-matic-$version
157 mkdir -p $WORK/$vol_name
158 cp -a "$WORK/$appdir" $WORK/$vol_name
159 ln -s /Applications "$WORK/$vol_name/Applications"
161 rm -f $tmp_dmg "$dmg"
162 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
163 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
164 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
168 tell application "Finder"
169 tell disk "'$vol_name'"
171 set current view of container window to icon view
172 set toolbar visible of container window to false
173 set statusbar visible of container window to false
174 set the bounds of container window to {400, 200, 790, 410}
175 set theViewOptions to the icon view options of container window
176 set arrangement of theViewOptions to not arranged
177 set icon size of theViewOptions to 64
178 set position of item "DCP-o-matic 2.app" of container window to {90, 80}
179 set position of item "Applications" of container window to {310, 80}
182 update without registering applications
188 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
191 hdiutil eject $device
192 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
193 sips -i "$WORK/$resources/DCP-o-matic.icns"
194 DeRez -only icns "$WORK/$resources/DCP-o-matic.icns" > "$WORK/$resources/DCP-o-matic.rsrc"
195 Rez -append "$WORK/$resources/DCP-o-matic.rsrc" -o "$dmg"