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