Missing OS X library.
[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
15 ROOT=$1
16
17 appdir="DCP-o-matic.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           lipo -create $f $g -output $3/`basename $f`
37         fi
38     done
39 }
40
41 universal_copy $ROOT src/dvdomatic/build/src/tools/dcpomatic $WORK/$macos
42 universal_copy $ROOT src/dvdomatic/build/src/tools/dcpomatic_cli $WORK/$macos
43 universal_copy $ROOT src/dvdomatic/build/src/tools/dcpomatic_server_cli $WORK/$macos
44 universal_copy $ROOT src/dvdomatic/build/src/lib/libdcpomatic.dylib $WORK/$libs
45 universal_copy $ROOT src/dvdomatic/build/src/wx/libdcpomatic-wx.dylib $WORK/$libs
46 universal_copy $ROOT lib/libcxml.dylib $WORK/$libs
47 universal_copy $ROOT lib/libdcp.dylib $WORK/$libs
48 universal_copy $ROOT lib/libasdcp-libdcp.dylib $WORK/$libs
49 universal_copy $ROOT lib/libkumu-libdcp.dylib $WORK/$libs
50 universal_copy $ROOT lib/libopenjpeg*.dylib $WORK/$libs
51 universal_copy $ROOT lib/libavdevice*.dylib $WORK/$libs
52 universal_copy $ROOT lib/libavformat*.dylib $WORK/$libs
53 universal_copy $ROOT lib/libavfilter*.dylib $WORK/$libs
54 universal_copy $ROOT lib/libavutil*.dylib $WORK/$libs
55 universal_copy $ROOT lib/libavcodec*.dylib $WORK/$libs
56 universal_copy $ROOT lib/libswscale*.dylib $WORK/$libs
57 universal_copy $ROOT lib/libpostproc*.dylib $WORK/$libs
58 universal_copy $ROOT lib/libswresample*.dylib $WORK/$libs
59 universal_copy $ROOT bin/ffprobe $WORK/$macos
60 universal_copy $ENV lib/libboost_system.dylib $WORK/$libs
61 universal_copy $ENV lib/libboost_filesystem.dylib $WORK/$libs
62 universal_copy $ENV lib/libboost_thread.dylib $WORK/$libs
63 universal_copy $ENV lib/libboost_date_time.dylib $WORK/$libs
64 universal_copy $ENV lib/libxml++-2.6*.dylib $WORK/$libs
65 universal_copy $ENV lib/libxml2*.dylib $WORK/$libs
66 universal_copy $ENV lib/libglibmm-2.4*.dylib $WORK/$libs
67 universal_copy $ENV lib/libgobject*.dylib $WORK/$libs
68 universal_copy $ENV lib/libgthread*.dylib $WORK/$libs
69 universal_copy $ENV lib/libgmodule*.dylib $WORK/$libs
70 universal_copy $ENV lib/libsigc*.dylib $WORK/$libs
71 universal_copy $ENV lib/libglib-2*.dylib $WORK/$libs
72 universal_copy $ENV lib/libintl*.dylib $WORK/$libs
73 universal_copy $ENV lib/libsndfile*.dylib $WORK/$libs
74 universal_copy $ENV lib/libMagick++*.dylib $WORK/$libs
75 universal_copy $ENV lib/libMagickCore*.dylib $WORK/$libs
76 universal_copy $ENV lib/libMagickWand*.dylib $WORK/$libs
77 universal_copy $ENV lib/libssh*.dylib $WORK/$libs
78 universal_copy $ENV lib/libwx*.dylib $WORK/$libs
79 universal_copy $ENV lib/libfontconfig*.dylib $WORK/$libs
80 universal_copy $ENV lib/libfreetype*.dylib $WORK/$libs
81 universal_copy $ENV lib/libexpat*.dylib $WORK/$libs
82 universal_copy $ENV lib/libltdl*.dylib $WORK/$libs
83 universal_copy $ENV lib/libxmlsec1*.dylib $WORK/$libs
84 universal_copy $ENV lib/libzip*.dylib $WORK/$libs
85 universal_copy $ENV lib/libquickmail*.dylib $WORK/$libs
86 universal_copy $ENV lib/libcurl*.dylib $WORK/$libs
87 universal_copy $ENV lib/libffi*.dylib $WORK/$libs
88
89 for obj in $WORK/$macos/dcpomatic $WORK/$macos/ffprobe $WORK/$libs/*.dylib; do
90   deps=`otool -L $obj | awk '{print $1}' | egrep "(/Users/carl|libboost|libssh|libltdl)"`
91   changes=""
92   for dep in $deps; do
93     base=`basename $dep`
94     changes="$changes -change $dep @executable_path/../lib/$base"
95   done
96   if test "x$changes" != "x"; then
97     install_name_tool $changes $obj
98   fi
99 done
100
101 cp build/platform/osx/Info.plist $WORK/$approot
102 cp icons/dcpomatic.icns $WORK/$resources/DCP-o-matic.icns
103
104 tmp_dmg=$WORK/dcpomatic_tmp.dmg
105 dmg="$WORK/DCP-o-matic $version.dmg"
106 vol_name=DCP-o-matic-$version
107
108 mkdir -p $WORK/$vol_name
109 cp -r $WORK/$appdir $WORK/$vol_name
110 ln -s /Applications $WORK/$vol_name/Applications
111
112 rm -f $tmp_dmg "$dmg"
113 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
114 attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
115 device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
116 sleep 5
117
118 echo '
119   tell application "Finder"
120     tell disk "'$vol_name'"
121            open
122            set current view of container window to icon view
123            set toolbar visible of container window to false
124            set statusbar visible of container window to false
125            set the bounds of container window to {400, 200, 790, 410}
126            set theViewOptions to the icon view options of container window
127            set arrangement of theViewOptions to not arranged
128            set icon size of theViewOptions to 64
129            set position of item "DCP-o-matic.app" of container window to {90, 80}
130            set position of item "Applications" of container window to {310, 80}
131            close
132            open
133            update without registering applications
134            delay 5
135      end tell
136    end tell
137 ' | osascript
138
139 chmod -Rf go-w /Volumes/"$vol_name"/$appdir
140 sync
141
142 umount -f $device
143 hdiutil eject $device
144 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
145 sips -i $WORK/$resources/DCP-o-matic.icns
146 DeRez -only icns $WORK/$resources/DCP-o-matic.icns > $WORK/$resources/DCP-o-matic.rsrc
147 Rez -append $WORK/$resources/DCP-o-matic.rsrc -o "$dmg"
148 SetFile -a C "$dmg"
149