Try to include wxWidgets .mo files in .dmg.
[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 set -e
8
9 version=`cat wscript | egrep ^VERSION | awk '{print $3}' | sed -e "s/'//g"`
10
11 # DMG size in megabytes
12 DMG_SIZE=256
13 WORK=build/platform/osx
14 ENV=/Users/carl/Environments/osx/10.6
15 ROOT=$1
16
17 appdir="DCP-o-matic.app"
18 approot=$appdir/Contents
19 libs=$approot/lib
20 macos=$approot/MacOS
21 resources=$approot/Resources
22
23 rm -rf $WORK/$appdir
24 mkdir -p $WORK/$macos
25 mkdir -p $WORK/$libs
26 mkdir -p $WORK/$resources
27
28 function universal_copy {
29     echo $2
30     for f in $1/32/$2; do
31         if [ -h $f ]; then
32             ln -s $(readlink $f) $3/`basename $f`
33         else
34           g=`echo $f | sed -e "s/\/32\//\/64\//g"`
35           mkdir -p $3
36           lipo -create $f $g -output $3/`basename $f`
37         fi
38     done
39 }
40
41 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic $WORK/$macos
42 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic_cli $WORK/$macos
43 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic_server_cli $WORK/$macos
44 universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic_batch $WORK/$macos
45 universal_copy $ROOT src/dcpomatic/build/src/lib/libdcpomatic.dylib $WORK/$libs
46 universal_copy $ROOT src/dcpomatic/build/src/wx/libdcpomatic-wx.dylib $WORK/$libs
47 universal_copy $ROOT lib/libcxml.dylib $WORK/$libs
48 universal_copy $ROOT lib/libdcp.dylib $WORK/$libs
49 universal_copy $ROOT lib/libasdcp-libdcp.dylib $WORK/$libs
50 universal_copy $ROOT lib/libkumu-libdcp.dylib $WORK/$libs
51 universal_copy $ROOT lib/libopenjpeg*.dylib $WORK/$libs
52 universal_copy $ROOT lib/libavdevice*.dylib $WORK/$libs
53 universal_copy $ROOT lib/libavformat*.dylib $WORK/$libs
54 universal_copy $ROOT lib/libavfilter*.dylib $WORK/$libs
55 universal_copy $ROOT lib/libavutil*.dylib $WORK/$libs
56 universal_copy $ROOT lib/libavcodec*.dylib $WORK/$libs
57 universal_copy $ROOT lib/libswscale*.dylib $WORK/$libs
58 universal_copy $ROOT lib/libswresample*.dylib $WORK/$libs
59 universal_copy $ROOT lib/libpostproc*.dylib $WORK/$libs
60 universal_copy $ROOT bin/ffprobe $WORK/$macos
61 universal_copy $ENV lib/libboost_system.dylib $WORK/$libs
62 universal_copy $ENV lib/libboost_filesystem.dylib $WORK/$libs
63 universal_copy $ENV lib/libboost_thread.dylib $WORK/$libs
64 universal_copy $ENV lib/libboost_date_time.dylib $WORK/$libs
65 universal_copy $ENV lib/libxml++-2.6*.dylib $WORK/$libs
66 universal_copy $ENV lib/libxml2*.dylib $WORK/$libs
67 universal_copy $ENV lib/libglibmm-2.4*.dylib $WORK/$libs
68 universal_copy $ENV lib/libgobject*.dylib $WORK/$libs
69 universal_copy $ENV lib/libgthread*.dylib $WORK/$libs
70 universal_copy $ENV lib/libgmodule*.dylib $WORK/$libs
71 universal_copy $ENV lib/libsigc*.dylib $WORK/$libs
72 universal_copy $ENV lib/libglib-2*.dylib $WORK/$libs
73 universal_copy $ENV lib/libintl*.dylib $WORK/$libs
74 universal_copy $ENV lib/libsndfile*.dylib $WORK/$libs
75 universal_copy $ENV lib/libMagick++*.dylib $WORK/$libs
76 universal_copy $ENV lib/libMagickCore*.dylib $WORK/$libs
77 universal_copy $ENV lib/libMagickWand*.dylib $WORK/$libs
78 universal_copy $ENV lib/libssh*.dylib $WORK/$libs
79 universal_copy $ENV lib/libwx*.dylib $WORK/$libs
80 universal_copy $ENV lib/libfontconfig*.dylib $WORK/$libs
81 universal_copy $ENV lib/libfreetype*.dylib $WORK/$libs
82 universal_copy $ENV lib/libexpat*.dylib $WORK/$libs
83 universal_copy $ENV lib/libltdl*.dylib $WORK/$libs
84 universal_copy $ENV lib/libxmlsec1*.dylib $WORK/$libs
85 universal_copy $ENV lib/libzip*.dylib $WORK/$libs
86 universal_copy $ENV lib/libquickmail*.dylib $WORK/$libs
87 universal_copy $ENV lib/libcurl*.dylib $WORK/$libs
88 universal_copy $ENV lib/libffi*.dylib $WORK/$libs
89 universal_copy $ENV lib/libiconv*.dylib $WORK/$libs
90
91 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
92   deps=`otool -L $obj | awk '{print $1}' | egrep "(/Users/carl|libboost|libssh|libltdl|libxmlsec)"`
93   changes=""
94   for dep in $deps; do
95     base=`basename $dep`
96     # $dep will be a path within 64/; make a 32/ path too
97     dep32=`echo $dep | sed -e "s/\/64\//\/32\//g"`
98     changes="$changes -change $dep @executable_path/../lib/$base -change $dep32 @executable_path/../lib/$base"
99   done
100   if test "x$changes" != "x"; then
101     install_name_tool $changes $obj
102   fi
103 done
104
105 cp build/platform/osx/Info.plist $WORK/$approot
106 cp icons/dcpomatic.icns $WORK/$resources/DCP-o-matic.icns
107 cp icons/colour_conversions.png $WORK/$resources
108 cp icons/defaults.png $WORK/$resources
109 cp icons/kdm_email.png $WORK/$resources
110 cp icons/servers.png $WORK/$resources
111 cp icons/tms.png $WORK/$resources
112
113 # i18n: DCP-o-matic .mo files
114 for lang in de_DE es_ES fr_FR it_IT sv_SE nl_NL; do
115   mkdir $WORK/$resources/$lang
116   cp build/src/lib/mo/$lang/*.mo $WORK/$resources/$lang
117   cp build/src/wx/mo/$lang/*.mo $WORK/$resources/$lang
118   cp build/src/tools/mo/$lang/*.mo $WORK/$resources/$lang
119 done
120
121 # i18n: wxWidgets .mo files
122 for lang in de es fr it sv nl; do
123   mkdir $WORK/$resources/$lang
124   cp $ENV/64/share/locale/$lang/LC_MESSAGES/wxstd.mo $WORK/$resources/$lang
125 done
126
127 tmp_dmg=$WORK/dcpomatic_tmp.dmg
128 dmg="$WORK/DCP-o-matic $version.dmg"
129 vol_name=DCP-o-matic-$version
130
131 mkdir -p $WORK/$vol_name
132 cp -r $WORK/$appdir $WORK/$vol_name
133 ln -s /Applications $WORK/$vol_name/Applications
134
135 rm -f $tmp_dmg "$dmg"
136 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
137 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
138 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
139 sleep 5
140
141 echo '
142   tell application "Finder"
143     tell disk "'$vol_name'"
144            open
145            set current view of container window to icon view
146            set toolbar visible of container window to false
147            set statusbar visible of container window to false
148            set the bounds of container window to {400, 200, 790, 410}
149            set theViewOptions to the icon view options of container window
150            set arrangement of theViewOptions to not arranged
151            set icon size of theViewOptions to 64
152            set position of item "DCP-o-matic.app" of container window to {90, 80}
153            set position of item "Applications" of container window to {310, 80}
154            close
155            open
156            update without registering applications
157            delay 5
158      end tell
159    end tell
160 ' | osascript
161
162 chmod -Rf go-w /Volumes/"$vol_name"/$appdir
163 sync
164
165 hdiutil eject $device
166 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
167 sips -i $WORK/$resources/DCP-o-matic.icns
168 DeRez -only icns $WORK/$resources/DCP-o-matic.icns > $WORK/$resources/DCP-o-matic.rsrc
169 Rez -append $WORK/$resources/DCP-o-matic.rsrc -o "$dmg"
170 SetFile -a C "$dmg"
171