Missing OS X dependency.
[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 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"
115 universal_copy_lib $ENV libsamplerate "$WORK/$libs"
116 universal_copy_lib $ENV libicu "$WORK/$libs"
117
118 relink=`echo $relink | sed -e "s/\+//g"`
119
120 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
121   deps=`otool -L "$obj" | awk '{print $1}' | egrep "($relink)" | egrep "($ENV|$ROOT|boost)"`
122   changes=""
123   for dep in $deps; do
124       echo "Relinking $dep into $obj"
125       base=`basename $dep`
126       # $dep will be a path within 64/; make a 32/ path too
127       dep32=`echo $dep | sed -e "s/\/64\//\/32\//g"`
128       changes="$changes -change $dep @executable_path/../lib/$base -change $dep32 @executable_path/../lib/$base"
129   done
130   if test "x$changes" != "x"; then
131     install_name_tool $changes "$obj"
132   fi
133 done
134
135 cp $ROOT/32/src/dcpomatic/build/platform/osx/Info.plist "$WORK/$approot"
136 cp $ROOT/32/src/dcpomatic/graphics/dcpomatic.icns "$WORK/$resources/DCP-o-matic.icns"
137 cp $ROOT/32/src/dcpomatic/graphics/colour_conversions.png "$WORK/$resources"
138 cp $ROOT/32/src/dcpomatic/graphics/defaults.png "$WORK/$resources"
139 cp $ROOT/32/src/dcpomatic/graphics/kdm_email.png "$WORK/$resources"
140 cp $ROOT/32/src/dcpomatic/graphics/servers.png "$WORK/$resources"
141 cp $ROOT/32/src/dcpomatic/graphics/tms.png "$WORK/$resources"
142 cp $ROOT/32/src/dcpomatic/graphics/keys.png "$WORK/$resources"
143 cp $ROOT/32/src/dcpomatic/LiberationSans-Regular.ttf "$WORK/$resources"
144 cp $ROOT/32/src/dcpomatic/graphics/splash.png "$WORK/$resources"
145
146 # i18n: DCP-o-matic .mo files
147 for lang in de_DE es_ES fr_FR it_IT sv_SE nl_NL ru_RU pl_PL da_DK; do
148   mkdir -p "$WORK/$resources/$lang/LC_MESSAGES"
149   cp $ROOT/32/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
150   cp $ROOT/32/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
151   cp $ROOT/32/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
152 done
153
154 # i18n: wxWidgets .mo files
155 for lang in de es fr it sv nl; do
156   mkdir "$WORK/$resources/$lang"
157   cp $ENV/64/share/locale/$lang/LC_MESSAGES/wxstd.mo "$WORK/$resources/$lang"
158 done
159
160 tmp_dmg=$WORK/dcpomatic_tmp.dmg
161 dmg="$WORK/DCP-o-matic $version.dmg"
162 vol_name=DCP-o-matic-$version
163
164 mkdir -p $WORK/$vol_name
165 cp -a "$WORK/$appdir" $WORK/$vol_name
166 ln -s /Applications "$WORK/$vol_name/Applications"
167
168 rm -f $tmp_dmg "$dmg"
169 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
170 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
171 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
172 sleep 5
173
174 echo '
175   tell application "Finder"
176     tell disk "'$vol_name'"
177            open
178            set current view of container window to icon view
179            set toolbar visible of container window to false
180            set statusbar visible of container window to false
181            set the bounds of container window to {400, 200, 790, 410}
182            set theViewOptions to the icon view options of container window
183            set arrangement of theViewOptions to not arranged
184            set icon size of theViewOptions to 64
185            set position of item "DCP-o-matic 2.app" of container window to {90, 80}
186            set position of item "Applications" of container window to {310, 80}
187            close
188            open
189            update without registering applications
190            delay 5
191      end tell
192    end tell
193 ' | osascript
194
195 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
196 sync
197
198 hdiutil eject $device
199 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
200 sips -i "$WORK/$resources/DCP-o-matic.icns"
201 DeRez -only icns "$WORK/$resources/DCP-o-matic.icns" > "$WORK/$resources/DCP-o-matic.rsrc"
202 Rez -append "$WORK/$resources/DCP-o-matic.rsrc" -o "$dmg"
203 SetFile -a C "$dmg"