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