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