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