If CODE_SIGN_IDENTITY is set use it to sign the app bundle and the
[metze/wireshark/wip.git] / packaging / macosx / osx-dmg.sh.in
1 #!/bin/bash
2 #
3 # $Id$
4 #
5 # USAGE
6 # osx-dmg [-s] -p /path/to/Wireshark.app
7 #
8 # The script creates a read-write disk image,
9 # copies Wireshark into it, customizes its appearance using a
10 # previously created .DS_Store file (wireshark.ds_store),
11 # and then compresses the disk image for distribution.
12 #
13 # Copied from Inkscape.
14 #
15 # AUTHORS
16 #       Jean-Olivier Irisson <jo.irisson@gmail.com>
17 #       Michael Wybrow <mjwybrow@users.sourceforge.net>
18 #
19 # Copyright (C) 2006-2007
20 # Released under GNU GPL, read the file 'COPYING' for more information
21 #
22 #
23 # How to update the disk image layout:
24 # ------------------------------------
25 #
26 # Modify the 'dmg_background.svg' file and generate a new
27 # 'dmg_background.png' file.
28 #
29 # Update the AppleScript file 'dmg_set_style.scpt'.
30 #
31 # Run this script with the '-s' option.  It will apply the
32 # 'dmg_set_style.scpt' AppleScript file, and then prompt the
33 # user to check the window size and position before writing
34 # a new 'wireshark.ds_store' file to work around a bug in Finder
35 # and AppleScript.  The updated 'wireshark.ds_store' will need
36 # to be commited to the repository when this is done.
37 #
38
39 # Defaults
40 set_ds_store=false
41 ds_store_root="root.ds_store"
42 app_bundle="Wireshark.app"
43 rw_name="RWwireshark.dmg"
44 volume_name="Wireshark"
45 tmp_dir="/tmp/dmg-$$"
46 auto_open_opt=
47 utilities="Utilities"
48 ws_bin="$app_bundle/Contents/Resources/bin/wireshark-bin"
49 readme_name="Read_me_first_gtk.rtf"
50
51 if [ -d /Applications/Xcode.app/Developer ]
52 then
53         developer_path=/Applications/Xcode.app/Developer
54 elif [ -d /Developer ]
55 then
56         developer_path=/Developer
57 fi
58 if [ ! -z $developer_path ]
59 then
60         PATH=$PATH:$developer_path/Tools:$developer_path/usr/bin
61 fi
62
63 # Help message
64 #----------------------------------------------------------
65 help()
66 {
67 echo -e "
68 Create a custom dmg file to distribute Wireshark
69
70 USAGE
71         $0 [-s] -p /path/to/Wireshark.app
72
73 OPTIONS
74         -h,--help
75                 display this help message
76         -s
77                 set a new apperance (do not actually create a bundle)
78         -b,--app-bundle
79                 set the path to the Wireshark.app that should be copied
80                 in the dmg
81         -qt,--qt-flavor
82                 use the Qt flavor
83 "
84 }
85
86 # Parse command line arguments
87 while [ "$1" != "" ]
88 do
89         case $1 in
90                 -h|--help)
91                         help
92                         exit 0 ;;
93                 -s)
94                         set_ds_store=true ;;
95                 -b|--app-bundle)
96                         app_bundle="$2"
97                         shift 1 ;;
98                 -qt|--qt-flavor)
99                         readme_name="Read_me_first_qt.rtf"
100                         ws_bin="$app_bundle/Contents/MacOS/Wireshark"
101                         ;;
102                 *)
103                         echo "Invalid command line option"
104                         exit 2 ;;
105         esac
106         shift 1
107 done
108
109 # Safety checks
110 if [ ! -e "$app_bundle" ]; then
111         echo "Cannot find application bundle: $app_bundle"
112         exit 1
113 fi
114
115 # Safety checks
116 if [ ! -e "$utilities" ]; then
117         echo "Cannot find utilities: $utilities"
118         exit 1
119 fi
120
121 # Get the architecture
122 case `file $ws_bin` in
123         *Mach-O*64-bit*x86_64*)
124                 architecture="Intel 64"
125                 ;;
126         *Mach-O*i386*)
127                 architecture="Intel 32"
128                 ;;
129         *Mach-O*ppc64*)
130                 architecture="PPC 64"
131                 ;;
132         *Mach-O*ppc*)
133                 architecture="PPC 32"
134                 ;;
135         *)
136                 echo "Cannot determine architecture of $ws_bin; file reports:"
137                 file $ws_bin
138                 exit 1
139                 ;;
140 esac
141
142 # Set the version
143 version="@VERSION@"
144 if [ -z "$version" ] ; then
145         echo "VERSION not set"
146         exit 1
147 fi
148
149 echo -e "\nCREATE WIRESHARK PACKAGE\n"
150 pkg_title="$volume_name $version $architecture"
151 pkg_file="$pkg_title.pkg"
152 rm -rf "$pkg_file"
153 packagemaker --doc "Wireshark_package.pmdoc" \
154     --title "$pkg_title" \
155     --version "$version" \
156     --verbose || exit 1
157
158 if [ -n "$CODE_SIGN_IDENTITY" ] ; then
159         echo -e "Signing the $pkg_file"
160         codesign --sign "$CODE_SIGN_IDENTITY" --verbose "$pkg_file" || exit 1
161         codesign --verify --verbose "$pkg_file" || exit 1
162 fi
163
164 echo -e "\nCREATE WIRESHARK DISK IMAGE\n"
165 img_name="$pkg_title.dmg"
166
167 # Create temp directory with desired contents of the release volume.
168 rm -rf "$tmp_dir"
169 mkdir "$tmp_dir" || exit 1
170
171 echo -e "Copying files to temp directory"
172 # Wireshark itself
173 # Copy Wireshark.app
174 cp -rf "$pkg_file" "$tmp_dir"/ || exit 1
175 # Link to Applications in order to drag and drop wireshark onto it
176 #ln -sf /Applications "$tmp_dir"/
177 # Copy the utilites
178 #cp -rf "$utilities" "$tmp_dir"/
179 #ln -sf /Library/StartupItems "$tmp_dir/$utilities"/
180 # Copy the readme
181 cp -rf  "$readme_name" "$tmp_dir"/"Read me first.rtf" || exit 1
182
183 # If the appearance settings are not to be modified we just copy them
184 if [ ${set_ds_store} = "false" ]; then
185         # Copy the .DS_Store file which contains information about
186         # window size, appearance, etc.  Most of this can be set
187         # with Apple script but involves user intervention so we
188         # just keep a copy of the correct settings and use that instead.
189         cp $ds_store_root "$tmp_dir/.DS_Store" || exit 1
190         auto_open_opt=-noautoopen
191 fi
192
193 # Create a new RW image from the temp directory.
194 echo -e "Creating a temporary disk image"
195 rm -f "$rw_name"
196 /usr/bin/hdiutil create -srcfolder "$tmp_dir" -volname "$volume_name" -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDRW "$rw_name" || exit 1
197
198 # We're finished with the temp directory, remove it.
199 rm -rf "$tmp_dir"
200
201 # Mount the created image.
202 MOUNT_DIR="/Volumes/$volume_name"
203 DEV_NAME=`/usr/bin/hdiutil attach -readwrite -noverify $auto_open_opt  "$rw_name" | egrep '^/dev/' | sed 1q | awk '{print $1}'`
204
205 # Have the disk image window open automatically when mounted.
206 bless -openfolder /Volumes/$volume_name
207
208 # In case the apperance has to be modified, mount the image and apply the base settings to it via Applescript
209 if [ ${set_ds_store} = "true" ]; then
210         /usr/bin/osascript dmg_set_style.scpt
211
212         open "/Volumes/$volume_name"
213         # BUG: one needs to move and close the window manually for the
214         # changes in appearance to be retained...
215         echo "
216         **************************************
217         *  Please move the disk image window *
218         *    to the center of the screen     *
219         *   then close it and press enter    *
220         **************************************
221         "
222         read -e DUMB
223
224         # .DS_Store files aren't written till the disk is unmounted, or finder is restarted.
225         hdiutil detach "$DEV_NAME"
226         auto_open_opt=-noautoopen
227         DEV_NAME=`/usr/bin/hdiutil attach -readwrite -noverify $auto_open_opt  "$rw_name" | egrep '^/dev/' | sed 1q | awk '{print $1}'`
228         echo
229         cp /Volumes/$volume_name/.DS_Store ./$ds_store_root
230         SetFile -a v ./$ds_store_root
231         echo "New $ds_store_root written. Re-run $0 without the -s option to use them"
232
233         # Unmount the disk image.
234         hdiutil detach "$DEV_NAME"
235         rm -f "$rw_name"
236
237         exit 0
238 fi
239
240 # Unmount the disk image.
241 hdiutil detach "$DEV_NAME"
242
243 # Create the offical release image by compressing the RW one.
244 echo -e "Compressing the final disk image"
245
246 # TODO make this a command line option
247 if [ -e "$img_name" ]; then
248         echo "$img_name already exists."
249         rm -i "$img_name"
250 fi
251 /usr/bin/hdiutil convert "$rw_name" -format UDZO -imagekey zlib-level=9 -o "$img_name" || exit 1
252 rm -f "$rw_name"
253
254 #if [ -n "$CODE_SIGN_IDENTITY" ] ; then
255 #       echo -e "Signing the $img_name"
256 #       codesign --sign "$CODE_SIGN_IDENTITY" --verbose "$img_name" || exit 1
257 #       codesign --verify --verbose "$img_name" || exit 1
258 #fi
259
260 exit 0