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