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