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