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"
29 function universal_copy {
32 ln -s $(readlink $f) "$3/`basename $f`"
34 g=`echo $f | sed -e "s/\/32\//\/64\//g"`
36 lipo -create $f $g -output "$3/`basename $f`"
41 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2 "$WORK/$macos"
42 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_cli "$WORK/$macos"
43 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_server_cli "$WORK/$macos"
44 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic2_batch "$WORK/$macos"
45 universal_copy $ROOT src/dcpomatic/build/src/lib/libdcpomatic2.dylib "$WORK/$libs"
46 universal_copy $ROOT src/dcpomatic/build/src/wx/libdcpomatic2-wx.dylib "$WORK/$libs"
47 universal_copy $ROOT lib/libcxml.dylib "$WORK/$libs"
48 universal_copy $ROOT lib/libdcp-1.0.dylib "$WORK/$libs"
49 universal_copy $ROOT lib/libasdcp-libdcp-1.0.dylib "$WORK/$libs"
50 universal_copy $ROOT lib/libkumu-libdcp-1.0.dylib "$WORK/$libs"
51 universal_copy $ROOT lib/libopenjpeg*.dylib "$WORK/$libs"
52 universal_copy $ROOT lib/libavdevice*.dylib "$WORK/$libs"
53 universal_copy $ROOT lib/libavformat*.dylib "$WORK/$libs"
54 universal_copy $ROOT lib/libavfilter*.dylib "$WORK/$libs"
55 universal_copy $ROOT lib/libavutil*.dylib "$WORK/$libs"
56 universal_copy $ROOT lib/libavcodec*.dylib "$WORK/$libs"
57 universal_copy $ROOT lib/libswscale*.dylib "$WORK/$libs"
58 universal_copy $ROOT lib/libswresample*.dylib "$WORK/$libs"
59 universal_copy $ROOT lib/libpostproc*.dylib "$WORK/$libs"
60 universal_copy $ROOT bin/ffprobe "$WORK/$macos"
61 universal_copy $ENV lib/libboost_system.dylib "$WORK/$libs"
62 universal_copy $ENV lib/libboost_filesystem.dylib "$WORK/$libs"
63 universal_copy $ENV lib/libboost_thread.dylib "$WORK/$libs"
64 universal_copy $ENV lib/libboost_date_time.dylib "$WORK/$libs"
65 universal_copy $ENV lib/libxml++-2.6*.dylib "$WORK/$libs"
66 universal_copy $ENV lib/libxml2*.dylib "$WORK/$libs"
67 universal_copy $ENV lib/libglibmm-2.4*.dylib "$WORK/$libs"
68 universal_copy $ENV lib/libgobject*.dylib "$WORK/$libs"
69 universal_copy $ENV lib/libgthread*.dylib "$WORK/$libs"
70 universal_copy $ENV lib/libgmodule*.dylib "$WORK/$libs"
71 universal_copy $ENV lib/libsigc*.dylib "$WORK/$libs"
72 universal_copy $ENV lib/libglib-2*.dylib "$WORK/$libs"
73 universal_copy $ENV lib/libintl*.dylib "$WORK/$libs"
74 universal_copy $ENV lib/libsndfile*.dylib "$WORK/$libs"
75 universal_copy $ENV lib/libMagick++*.dylib "$WORK/$libs"
76 universal_copy $ENV lib/libMagickCore*.dylib "$WORK/$libs"
77 universal_copy $ENV lib/libMagickWand*.dylib "$WORK/$libs"
78 universal_copy $ENV lib/libssh*.dylib "$WORK/$libs"
79 universal_copy $ENV lib/libwx*.dylib "$WORK/$libs"
80 universal_copy $ENV lib/libfontconfig*.dylib "$WORK/$libs"
81 universal_copy $ENV lib/libfreetype*.dylib "$WORK/$libs"
82 universal_copy $ENV lib/libexpat*.dylib "$WORK/$libs"
83 universal_copy $ENV lib/libltdl*.dylib "$WORK/$libs"
84 universal_copy $ENV lib/libxmlsec1*.dylib "$WORK/$libs"
85 universal_copy $ENV lib/libzip*.dylib "$WORK/$libs"
86 universal_copy $ENV lib/libquickmail*.dylib "$WORK/$libs"
87 universal_copy $ENV lib/libcurl*.dylib "$WORK/$libs"
88 universal_copy $ENV lib/libffi*.dylib "$WORK/$libs"
89 universal_copy $ENV lib/libiconv*.dylib "$WORK/$libs"
90 universal_copy $ENV lib/libpangomm*.dylib "$WORK/$libs"
91 universal_copy $ENV lib/libcairomm*.dylib "$WORK/$libs"
92 universal_copy $ENV lib/libpangocairo*.dylib "$WORK/$libs"
94 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
95 deps=`otool -L "$obj" | awk '{print $1}' | egrep "(/tmp|libboost|libssh|libltdl|libxmlsec)"`
99 # $dep will be a path within 64/; make a 32/ path too
100 dep32=`echo $dep | sed -e "s/\/64\//\/32\//g"`
101 changes="$changes -change $dep @executable_path/../lib/$base -change $dep32 @executable_path/../lib/$base"
103 if test "x$changes" != "x"; then
104 install_name_tool $changes "$obj"
108 cp build/platform/osx/Info.plist "$WORK/$approot"
109 cp icons/dcpomatic.icns "$WORK/$resources/DCP-o-matic.icns"
110 cp icons/colour_conversions.png "$WORK/$resources"
111 cp icons/defaults.png "$WORK/$resources"
112 cp icons/kdm_email.png "$WORK/$resources"
113 cp icons/servers.png "$WORK/$resources"
114 cp icons/tms.png "$WORK/$resources"
115 cp icons/keys.png "$WORK/$resources"
117 # i18n: DCP-o-matic .mo files
118 for lang in de_DE es_ES fr_FR it_IT sv_SE nl_NL; do
119 mkdir "$WORK/$resources/$lang"
120 cp build/src/lib/mo/$lang/*.mo "$WORK/$resources/$lang"
121 cp build/src/wx/mo/$lang/*.mo "$WORK/$resources/$lang"
122 cp build/src/tools/mo/$lang/*.mo "$WORK/$resources/$lang"
125 # i18n: wxWidgets .mo files
126 for lang in de es fr it sv nl; do
127 mkdir "$WORK/$resources/$lang"
128 cp $ENV/64/share/locale/$lang/LC_MESSAGES/wxstd.mo "$WORK/$resources/$lang"
131 tmp_dmg=$WORK/dcpomatic_tmp.dmg
132 dmg="$WORK/DCP-o-matic $version.dmg"
133 vol_name=DCP-o-matic-$version
135 mkdir -p $WORK/$vol_name
136 cp -r "$WORK/$appdir" $WORK/$vol_name
137 ln -s /Applications "$WORK/$vol_name/Applications"
139 rm -f $tmp_dmg "$dmg"
140 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
141 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
142 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
146 tell application "Finder"
147 tell disk "'$vol_name'"
149 set current view of container window to icon view
150 set toolbar visible of container window to false
151 set statusbar visible of container window to false
152 set the bounds of container window to {400, 200, 790, 410}
153 set theViewOptions to the icon view options of container window
154 set arrangement of theViewOptions to not arranged
155 set icon size of theViewOptions to 64
156 set position of item "DCP-o-matic 2.app" of container window to {90, 80}
157 set position of item "Applications" of container window to {310, 80}
160 update without registering applications
166 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
169 hdiutil eject $device
170 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
171 sips -i "$WORK/$resources/DCP-o-matic.icns"
172 DeRez -only icns "$WORK/$resources/DCP-o-matic.icns" > "$WORK/$resources/DCP-o-matic.rsrc"
173 Rez -append "$WORK/$resources/DCP-o-matic.rsrc" -o "$dmg"