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