4e46606bdb94e3e6dd937d17ed57d95e259a8556
[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
141 # i18n: DCP-o-matic .mo files
142 for lang in de_DE es_ES fr_FR it_IT sv_SE nl_NL; do
143   mkdir -p "$WORK/$resources/$lang/LC_MESSAGES"
144   cp $ROOT/32/src/dcpomatic/build/src/lib/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
145   cp $ROOT/32/src/dcpomatic/build/src/wx/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
146   cp $ROOT/32/src/dcpomatic/build/src/tools/mo/$lang/*.mo "$WORK/$resources/$lang/LC_MESSAGES"
147 done
148
149 # i18n: wxWidgets .mo files
150 for lang in de es fr it sv nl; do
151   mkdir "$WORK/$resources/$lang"
152   cp $ENV/64/share/locale/$lang/LC_MESSAGES/wxstd.mo "$WORK/$resources/$lang"
153 done
154
155 tmp_dmg=$WORK/dcpomatic_tmp.dmg
156 dmg="$WORK/DCP-o-matic $version.dmg"
157 vol_name=DCP-o-matic-$version
158
159 mkdir -p $WORK/$vol_name
160 cp -a "$WORK/$appdir" $WORK/$vol_name
161 ln -s /Applications "$WORK/$vol_name/Applications"
162
163 rm -f $tmp_dmg "$dmg"
164 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
165 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
166 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
167 sleep 5
168
169 echo '
170   tell application "Finder"
171     tell disk "'$vol_name'"
172            open
173            set current view of container window to icon view
174            set toolbar visible of container window to false
175            set statusbar visible of container window to false
176            set the bounds of container window to {400, 200, 790, 410}
177            set theViewOptions to the icon view options of container window
178            set arrangement of theViewOptions to not arranged
179            set icon size of theViewOptions to 64
180            set position of item "DCP-o-matic 2.app" of container window to {90, 80}
181            set position of item "Applications" of container window to {310, 80}
182            close
183            open
184            update without registering applications
185            delay 5
186      end tell
187    end tell
188 ' | osascript
189
190 chmod -Rf go-w /Volumes/"$vol_name"/"$appdir"
191 sync
192
193 hdiutil eject $device
194 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
195 sips -i "$WORK/$resources/DCP-o-matic.icns"
196 DeRez -only icns "$WORK/$resources/DCP-o-matic.icns" > "$WORK/$resources/DCP-o-matic.rsrc"
197 Rez -append "$WORK/$resources/DCP-o-matic.rsrc" -o "$dmg"
198 SetFile -a C "$dmg"