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