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