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"
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
97 deps=`otool -L "$obj" | awk '{print $1}' | egrep "(/Users/carl|libboost|libssh|libltdl|libxmlsec)"`
101 # $dep will be a path within 64/; make a 32/ path too
102 dep32=`echo $dep | sed -e "s/\/64\//\/32\//g"`
103 changes="$changes -change $dep @executable_path/../lib/$base -change $dep32 @executable_path/../lib/$base"
105 if test "x$changes" != "x"; then
106 install_name_tool $changes "$obj"
110 cp build/platform/osx/Info.plist "$WORK/$approot"
111 cp icons/dcpomatic.icns "$WORK/$resources/DCP-o-matic.icns"
112 cp icons/colour_conversions.png "$WORK/$resources"
113 cp icons/defaults.png "$WORK/$resources"
114 cp icons/kdm_email.png "$WORK/$resources"
115 cp icons/servers.png "$WORK/$resources"
116 cp icons/tms.png "$WORK/$resources"
117 cp icons/keys.png "$WORK/$resources"
119 # i18n: DCP-o-matic .mo files
120 for lang in de_DE es_ES fr_FR it_IT sv_SE nl_NL; do
121 mkdir "$WORK/$resources/$lang"
122 cp build/src/lib/mo/$lang/*.mo "$WORK/$resources/$lang"
123 cp build/src/wx/mo/$lang/*.mo "$WORK/$resources/$lang"
124 cp build/src/tools/mo/$lang/*.mo "$WORK/$resources/$lang"
127 # i18n: wxWidgets .mo files
128 for lang in de es fr it sv nl; do
129 mkdir "$WORK/$resources/$lang"
130 cp $ENV/64/share/locale/$lang/LC_MESSAGES/wxstd.mo "$WORK/$resources/$lang"
133 tmp_dmg=$WORK/dcpomatic_tmp.dmg
134 dmg="$WORK/DCP-o-matic $version.dmg"
135 vol_name=DCP-o-matic-$version
137 mkdir -p $WORK/$vol_name
138 cp -r "$WORK/$appdir" $WORK/$vol_name
139 ln -s /Applications "$WORK/$vol_name/Applications"
141 rm -f $tmp_dmg "$dmg"
142 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
143 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
144 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
148 tell application "Finder"
149 tell disk "'$vol_name'"
151 set current view of container window to icon view
152 set toolbar visible of container window to false
153 set statusbar visible of container window to false
154 set the bounds of container window to {400, 200, 790, 410}
155 set theViewOptions to the icon view options of container window
156 set arrangement of theViewOptions to not arranged
157 set icon size of theViewOptions to 64
158 set position of item "DCP-o-matic 2.app" of container window to {90, 80}
159 set position of item "Applications" of container window to {310, 80}
162 update without registering applications
168 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
171 hdiutil eject $device
172 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
173 sips -i "$WORK/$resources/DCP-o-matic.icns"
174 DeRez -only icns "$WORK/$resources/DCP-o-matic.icns" > "$WORK/$resources/DCP-o-matic.rsrc"
175 Rez -append "$WORK/$resources/DCP-o-matic.rsrc" -o "$dmg"