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