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