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