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