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