Various bits related to subtitle font handling, particularly copying fonts to the...
[dcpomatic.git] / platform / osx / make_dmg.sh
1 #!/bin/bash
2 #
3 # Syntax: make_dmg.sh <builddir>
4 #
5 # e.g. make_dmg.sh /Users/carl/cdist
6
7 # Don't set -e here as egrep (used a few times) returns 1 if no matches
8 # were found.
9
10 version=`cat wscript | egrep ^VERSION | awk '{print $3}' | sed -e "s/'//g"`
11
12 # DMG size in megabytes
13 DMG_SIZE=256
14 WORK=build/platform/osx
15 ENV=/Users/carl/Environments/osx/10.6
16 ROOT=$1
17
18 appdir="DCP-o-matic 2.app"
19 approot="$appdir/Contents"
20 libs="$approot/lib"
21 macos="$approot/MacOS"
22 resources="$approot/Resources"
23
24 rm -rf "$WORK/$appdir"
25 mkdir -p "$WORK/$macos"
26 mkdir -p "$WORK/$libs"
27 mkdir -p "$WORK/$resources"
28
29 relink="dcpomatic"
30
31 function universal_copy {
32     for f in $1/32/$2; do
33         if [ -h $f ]; then
34             ln -s $(readlink $f) "$3/`basename $f`"
35         else
36             g=`echo $f | sed -e "s/\/32\//\/64\//g"`
37             mkdir -p "$3"
38             lipo -create $f $g -output "$3/`basename $f`"
39         fi
40     done
41 }
42
43 function universal_copy_lib {
44     for f in $1/32/lib/$2*.dylib; do
45         if [ -h $f ]; then
46             ln -s $(readlink $f) "$3/`basename $f`"
47         else
48             g=`echo $f | sed -e "s/\/32\//\/64\//g"`
49             mkdir -p "$3"
50             lipo -create $f $g -output "$3/`basename $f`"
51         fi
52     done
53     relink="$relink|$2"
54 }
55
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 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 libxml++ "$WORK/$libs"
85 universal_copy_lib $ENV libxslt "$WORK/$libs"
86 universal_copy_lib $ENV libxml2 "$WORK/$libs"
87 universal_copy_lib $ENV libglibmm-2.4 "$WORK/$libs"
88 universal_copy_lib $ENV libgobject "$WORK/$libs"
89 universal_copy_lib $ENV libgthread "$WORK/$libs"
90 universal_copy_lib $ENV libgmodule "$WORK/$libs"
91 universal_copy_lib $ENV libsigc "$WORK/$libs"
92 universal_copy_lib $ENV libglib-2 "$WORK/$libs"
93 universal_copy_lib $ENV libintl "$WORK/$libs"
94 universal_copy_lib $ENV libsndfile "$WORK/$libs"
95 universal_copy_lib $ENV libMagick++ "$WORK/$libs"
96 universal_copy_lib $ENV libMagickCore "$WORK/$libs"
97 universal_copy_lib $ENV libMagickWand "$WORK/$libs"
98 universal_copy_lib $ENV libssh "$WORK/$libs"
99 universal_copy_lib $ENV libwx "$WORK/$libs"
100 universal_copy_lib $ENV libfontconfig "$WORK/$libs"
101 universal_copy_lib $ENV libfreetype "$WORK/$libs"
102 universal_copy_lib $ENV libexpat "$WORK/$libs"
103 universal_copy_lib $ENV libltdl "$WORK/$libs"
104 universal_copy_lib $ENV libxmlsec1 "$WORK/$libs"
105 universal_copy_lib $ENV libzip "$WORK/$libs"
106 universal_copy_lib $ENV libquickmail "$WORK/$libs"
107 universal_copy_lib $ENV libcurl "$WORK/$libs"
108 universal_copy_lib $ENV libffi "$WORK/$libs"
109 universal_copy_lib $ENV libiconv "$WORK/$libs"
110 universal_copy_lib $ENV libpango "$WORK/$libs"
111 universal_copy_lib $ENV libcairo "$WORK/$libs"
112 universal_copy_lib $ENV libpixman "$WORK/$libs"
113 universal_copy_lib $ENV libharfbuzz "$WORK/$libs"
114
115 relink=`echo $relink | sed -e "s/\+//g"`
116
117 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
118   deps=`otool -L "$obj" | awk '{print $1}' | egrep "($relink)" | egrep "($ENV|$ROOT|boost)"`
119   changes=""
120   for dep in $deps; do
121       echo "Relinking $dep into $obj"
122       base=`basename $dep`
123       # $dep will be a path within 64/; make a 32/ path too
124       dep32=`echo $dep | sed -e "s/\/64\//\/32\//g"`
125       changes="$changes -change $dep @executable_path/../lib/$base -change $dep32 @executable_path/../lib/$base"
126   done
127   if test "x$changes" != "x"; then
128     install_name_tool $changes "$obj"
129   fi
130 done
131
132 cp $ROOT/32/src/dcpomatic/build/platform/osx/Info.plist "$WORK/$approot"
133 cp $ROOT/32/src/dcpomatic/icons/dcpomatic.icns "$WORK/$resources/DCP-o-matic.icns"
134 cp $ROOT/32/src/dcpomatic/icons/colour_conversions.png "$WORK/$resources"
135 cp $ROOT/32/src/dcpomatic/icons/defaults.png "$WORK/$resources"
136 cp $ROOT/32/src/dcpomatic/icons/kdm_email.png "$WORK/$resources"
137 cp $ROOT/32/src/dcpomatic/icons/servers.png "$WORK/$resources"
138 cp $ROOT/32/src/dcpomatic/icons/tms.png "$WORK/$resources"
139 cp $ROOT/32/src/dcpomatic/icons/keys.png "$WORK/$resources"
140 cp $ROOT/32/src/dcpomatic/LiberationSans-Regular.ttf "$WORK/$resources"
141
142 # i18n: DCP-o-matic .mo files
143 for lang in de_DE es_ES fr_FR it_IT sv_SE nl_NL; do
144   mkdir -p "$WORK/$resources/$lang/LC_MESSAGES"
145   cp $ROOT/32/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
146   cp $ROOT/32/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
147   cp $ROOT/32/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
148 done
149
150 # i18n: wxWidgets .mo files
151 for lang in de es fr it sv nl; do
152   mkdir "$WORK/$resources/$lang"
153   cp $ENV/64/share/locale/$lang/LC_MESSAGES/wxstd.mo "$WORK/$resources/$lang"
154 done
155
156 tmp_dmg=$WORK/dcpomatic_tmp.dmg
157 dmg="$WORK/DCP-o-matic $version.dmg"
158 vol_name=DCP-o-matic-$version
159
160 mkdir -p $WORK/$vol_name
161 cp -a "$WORK/$appdir" $WORK/$vol_name
162 ln -s /Applications "$WORK/$vol_name/Applications"
163
164 rm -f $tmp_dmg "$dmg"
165 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
166 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
167 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
168 sleep 5
169
170 echo '
171   tell application "Finder"
172     tell disk "'$vol_name'"
173            open
174            set current view of container window to icon view
175            set toolbar visible of container window to false
176            set statusbar visible of container window to false
177            set the bounds of container window to {400, 200, 790, 410}
178            set theViewOptions to the icon view options of container window
179            set arrangement of theViewOptions to not arranged
180            set icon size of theViewOptions to 64
181            set position of item "DCP-o-matic 2.app" of container window to {90, 80}
182            set position of item "Applications" of container window to {310, 80}
183            close
184            open
185            update without registering applications
186            delay 5
187      end tell
188    end tell
189 ' | osascript
190
191 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
192 sync
193
194 hdiutil eject $device
195 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
196 sips -i "$WORK/$resources/DCP-o-matic.icns"
197 DeRez -only icns "$WORK/$resources/DCP-o-matic.icns" > "$WORK/$resources/DCP-o-matic.rsrc"
198 Rez -append "$WORK/$resources/DCP-o-matic.rsrc" -o "$dmg"
199 SetFile -a C "$dmg"