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