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