macos: find packagemaker instead of assuming path
[openafs.git] / src / packaging / MacOS / buildpkg.sh.in
1 #!/bin/sh
2 # Portions Copyright (c) 2003, 2006 Apple Computer, Inc.  All rights reserved.
3
4 if [ -z "$1" ]; then
5     echo Usage: buildpkg binary-dir
6     echo '  or'
7     echo 'Usage: buildpkg [-firstpass] binary-dir'
8     echo '            (customize pkgroot)'
9     echo '       buildpkg [-secondpass]'
10     exit 1
11 fi
12
13 firstpass=yes
14 secondpass=yes
15 if [ "$1" = "-firstpass" ]; then
16     secondpass=no
17     shift
18 elif [ "$1" = "-secondpass" ]; then
19     firstpass=no
20     shift
21 fi
22
23 BINDEST=`cd $1 && pwd`
24 CURDIR=`pwd`
25 RESSRC=`dirname $0`
26 RESSRC=`cd $RESSRC && pwd`
27 majorvers=`uname -r | sed 's/\..*//'`
28 if [ $majorvers -eq 7 ]; then
29   RELNAME="Panther"
30 fi
31 if [ $majorvers -eq 8 ]; then
32   RELNAME="Tiger"
33 fi
34 if [ $majorvers -eq 9 ]; then
35   RELNAME="Leopard"
36 fi
37 if [ $majorvers -eq 10 ]; then
38   RELNAME="Snowleopard"
39 fi
40 if [ $majorvers -eq 11 ]; then
41   RELNAME="Lion"
42 fi
43
44 PKGROOT=$CURDIR/pkgroot
45 PKGRES=$CURDIR/pkgres
46 DPKGROOT=$CURDIR/dpkgroot
47 DPKGRES=$CURDIR/dpkgres
48 PACKAGEMAKER=""
49 if [ -e "/Developer/usr/bin/packagemaker" ]; then
50     PACKAGEMAKER="/Developer/usr/bin/packagemaker"
51 else
52     PACKAGEMAKERS=$(mdfind "(kMDItemCFBundleIdentifier == 'com.apple.PackageMaker')")
53     if [ -z "$PACKAGEMAKERS" ]; then
54         echo "packagemaker not found"
55         exit 1
56     fi
57     # if there's a space, trying a for blows up
58     if [ -e "$PACKAGEMAKERS/Contents/MacOS/PackageMaker" ]; then
59             PACKAGEMAKER="$PACKAGEMAKERS/Contents/MacOS/PackageMaker"
60     else
61         for TRYAPP in $PACKAGEMAKERS
62         do
63             echo "$TRYAPP/Contents/MacOS/PackageMaker"
64             if [ -e "$TRYAPP/Contents/MacOS/PackageMaker" ]; then
65                 PACKAGEMAKER="$TRYAPP/Contents/MacOS/PackageMaker"
66                 break
67             fi
68         done
69     fi
70 fi
71 if [ -z "$PACKAGEMAKER" ]; then
72     echo "packagemaker not found"
73     exit 1
74 fi
75
76 if [ $firstpass = yes ]; then
77     if [ -x /usr/bin/curl ]; then
78         /usr/bin/curl -f -O http://dl.central.org/dl/cellservdb/CellServDB
79     fi
80
81     if [ ! -f CellServDB ]; then
82        echo "A CellServDB file must be placed in the working directory"
83        die=1
84     else
85        if grep -q 'GCO Public CellServDB' CellServDB ; then
86          touch CellServDB
87        else
88           echo "A proper CellServDB file must be placed in the working directory"
89           die=1
90        fi
91     fi
92     FILES="ReadMe.rtf.$majorvers License.rtf CellServDB.list OpenAFS.info OpenAFS.post_install OpenAFS.pre_upgrade csrvdbmerge.pl 2.0.txt"
93     for f in $FILES; do
94        if [ ! -f $RESSRC/$f ]; then
95          echo "file missing: " $RESSRC/$f
96          die=1
97        fi
98     done
99     if [ "$die" ]; then
100       echo "Correct above errors; then retry"
101       exit 1
102     fi
103     if [ ! -f $BINDEST/bin/translate_et ]; then
104       die=1
105     fi
106     if [ ! -f $BINDEST/root.client/usr/vice/etc/afs.kext/Contents/MacOS/afs ]; then
107       die=1
108     fi
109     if [ "$die" ]; then
110        echo $BINDEST " is not a valid binary dir. it should be the result of"
111        echo "make dest"
112        exit 1
113     fi
114
115     rm -rf $PKGROOT
116     mkdir $PKGROOT
117
118     mkdir -p $PKGROOT/Library
119     mkdir -p $PKGROOT/Library/PreferencePanes
120     mkdir -p $PKGROOT/Library/Security/SecurityAgentPlugins
121     chown root${SEP}admin $PKGROOT
122     chmod 755 $PKGROOT $PKGROOT/Library $PKGROOT/Library/PreferencePanes $PKGROOT/Library/Security/SecurityAgentPlugins
123     (cd $BINDEST/tools && pax -rw OpenAFS.prefPane $PKGROOT/Library/PreferencePanes)
124     (cd $BINDEST/tools && pax -rw aklog.bundle $PKGROOT/Library/Security/SecurityAgentPlugins)
125     mkdir -p $PKGROOT/Library/OpenAFS/Tools
126     (cd $BINDEST && pax -rw * $PKGROOT/Library/OpenAFS/Tools)
127     cd $RESSRC
128     mkdir -p $PKGROOT/Library/LaunchDaemons
129     chmod -R o-w $PKGROOT/Library
130     chmod -R g-w $PKGROOT/Library
131     cp openafs.launchd.plist $PKGROOT/Library/LaunchDaemons/org.openafs.filesystems.afs.plist
132     chmod 644 $PKGROOT/Library/LaunchDaemons/org.openafs.filesystems.afs.plist
133     chown root${SEP}admin $PKGROOT/Library
134     chown -R root${SEP}wheel $PKGROOT/Library/LaunchDaemons
135     chown -R root${SEP}wheel $PKGROOT/Library/OpenAFS/Tools
136     chmod -R og-w $PKGROOT/Library/OpenAFS/Tools
137
138     mkdir -p $PKGROOT/private/var/db/openafs/cache
139     mkdir -p $PKGROOT/private/var/db/openafs/etc/config
140     cp openafs.launchdaemon $PKGROOT/private/var/db/openafs/etc/launchafs.sh
141     chmod 755 $PKGROOT/private/var/db/openafs/etc/launchafs.sh
142     cp $CURDIR/CellServDB $PKGROOT/private/var/db/openafs/etc/CellServDB.master
143     echo grand.central.org > $PKGROOT/private/var/db/openafs/etc/ThisCell.sample
144     if [ $majorvers -ge 7 ]; then
145         echo /afs:/var/db/openafs/cache:100000 > $PKGROOT/private/var/db/openafs/etc/cacheinfo.sample
146         cp -RP $PKGROOT/Library/OpenAFS/Tools/etc/afssettings $PKGROOT/private/var/db/openafs/etc/config
147         cp settings.plist $PKGROOT/private/var/db/openafs/etc/config/settings.plist.orig
148     else
149         echo /Network/afs:/var/db/openafs/cache:30000 > $PKGROOT/private/var/db/openafs/etc/cacheinfo.sample
150     fi
151     cp afs.conf $PKGROOT/private/var/db/openafs/etc/config/afs.conf.sample
152     cp krb5-weak.conf $PKGROOT/private/var/db/openafs/etc/krb5-weak.conf
153
154     cp decode-panic $PKGROOT/Library/OpenAFS/Tools/tools
155     chmod a+x $PKGROOT/Library/OpenAFS/Tools/tools/decode-panic
156
157     if [ $majorvers -ge 9 ]; then
158         rm -rf $DPKGROOT
159         mkdir $DPKGROOT
160         mkdir -p $DPKGROOT/Library/OpenAFS/Debug
161         mv $PKGROOT/Library/OpenAFS/Tools/root.client/usr/vice/etc/afs.kext.dSYM $DPKGROOT/Library/OpenAFS/Debug
162         cp -RP $PKGROOT/Library/OpenAFS/Tools/root.client/usr/vice/etc/afs.kext $DPKGROOT/Library/OpenAFS/Debug
163         chown -R root${SEP}wheel $DPKGROOT/Library/OpenAFS/Debug
164         chmod -R og-w $DPKGROOT/Library/OpenAFS/Debug
165     fi
166
167     strip -X -S $PKGROOT/Library/OpenAFS/Tools/root.client/usr/vice/etc/afs.kext/Contents/MacOS/afs
168
169     cp -RP $PKGROOT/Library/OpenAFS/Tools/root.client/usr/vice/etc/afs.kext $PKGROOT/private/var/db/openafs/etc
170     cp -RP $PKGROOT/Library/OpenAFS/Tools/root.client/usr/vice/etc/C $PKGROOT/private/var/db/openafs/etc
171
172     chown -R root${SEP}wheel $PKGROOT/private
173     chmod -R og-w $PKGROOT/private
174     chmod  og-rx $PKGROOT/private/var/db/openafs/cache
175
176     mkdir -p $PKGROOT/usr/bin $PKGROOT/usr/sbin $PKGROOT/usr/share/man/man1 $PKGROOT/usr/share/man/man5 $PKGROOT/usr/share/man/man8
177
178     BINLIST="fs klog klog.krb pagsh pagsh.krb pts sys tokens tokens.krb unlog unlog.krb aklog"
179     ETCLIST="vos"
180     SHLIBLIST="libafsauthent.dylib libafsauthent.dylib.1 libafsauthent.dylib.1.1 libafshcrypto.dylib libafshcrypto.dylib.1 libafshcrypto.dylib.1.1 libafsrpc.dylib libafsrpc.dylib.1 libafsrpc.dylib.1.4 libkopenafs.dylib libkopenafs.dylib.1 libkopenafs.dylib.1.1 librokenafs.dylib librokenafs.dylib.1 librokenafs.dylib.1.1"
181
182 # Should these be linked into /usr too?
183     OTHER_BINLIST="bos cmdebug rxgen translate_et udebug xstat_cm_test xstat_fs_test"
184     OTHER_ETCLIST="rxdebug"
185
186     for f in $BINLIST; do
187        ln -s ../../Library/OpenAFS/Tools/bin/$f $PKGROOT/usr/bin/$f
188     done
189     for f in $ETCLIST; do
190        ln -s ../../Library/OpenAFS/Tools/etc/$f $PKGROOT/usr/sbin/$f
191     done
192     for f in $SHLIBLIST; do
193        ln -s ../../Library/OpenAFS/Tools/lib/$f $PKGROOT/usr/lib/$f
194     done
195     for f in `ls $PKGROOT/Library/OpenAFS/Tools/man/man1`; do
196         gzip -9 $PKGROOT/Library/OpenAFS/Tools/man/man1/$f
197         ln -s ../../../../Library/OpenAFS/Tools/man/man1/$f.gz $PKGROOT/usr/share/man/man1/$f.gz
198     done
199     for f in `ls $PKGROOT/Library/OpenAFS/Tools/man/man5`; do
200         gzip -9 $PKGROOT/Library/OpenAFS/Tools/man/man5/$f
201         ln -s ../../../../Library/OpenAFS/Tools/man/man5/$f.gz $PKGROOT/usr/share/man/man5/$f.gz
202     done
203     for f in `ls $PKGROOT/Library/OpenAFS/Tools/man/man8`; do
204         gzip -9 $PKGROOT/Library/OpenAFS/Tools/man/man8/$f
205         ln -s ../../../../Library/OpenAFS/Tools/man/man8/$f.gz $PKGROOT/usr/share/man/man8/$f.gz
206     done
207
208     ln -s ../../Library/OpenAFS/Tools/bin/kpasswd $PKGROOT/usr/bin/kpasswd.afs
209
210     ln -s ../../Library/OpenAFS/Tools/root.client/usr/vice/etc/afsd $PKGROOT/usr/sbin/afsd
211
212 #    mkdir -p $PKGROOT/Library/Kerberos\ Plug-Ins
213 #    ln -s ../../Library/OpenAFS/Tools/root.client/Library/Kerberos\ Plug-Ins/aklog.loginLogout $PKGROOT/Library/Kerberos\ Plug-Ins/
214
215     chown -R root${SEP}wheel $PKGROOT/usr
216     chmod -R og-w $PKGROOT/usr
217 fi
218
219 if [ $secondpass = yes ]; then
220     rm -rf $PKGRES
221     mkdir $PKGRES
222     cd $RESSRC
223     if [ $majorvers -ge 9 ]; then
224         rm -rf $DPKGRES
225         mkdir $DPKGRES
226         cp License.rtf $DPKGRES
227         cp InstallationCheck.$majorvers $DPKGRES/InstallationCheck
228         chmod a+x $DPKGRES/InstallationCheck
229         mkdir -p $DPKGRES/English.lproj
230         cp InstallationCheck.strings.$majorvers \
231                 $DPKGRES/English.lproj/InstallationCheck.strings
232         cp background.jpg $DPKGRES/background.jpg
233         chown -R root${SEP}wheel $DPKGRES
234         rm -rf $CURDIR/OpenAFS-debug-extension.pkg
235         echo $PACKAGEMAKER -build -p $CURDIR/OpenAFS-debug-extension.pkg -f $DPKGROOT -r $DPKGRES \
236             -i OpenAFS-debug.Info.plist -d OpenAFS-debug.Description.plist
237         $PACKAGEMAKER -build -p $CURDIR/OpenAFS-debug-extension.pkg -f $DPKGROOT -r $DPKGRES \
238             -i OpenAFS-debug.Info.plist -d OpenAFS-debug.Description.plist
239     fi
240
241     cd $RESSRC
242     if [ $majorvers -ge 7 ]; then
243         cp OpenAFS.post_install $PKGRES/postinstall
244         cp OpenAFS.pre_upgrade $PKGRES/preupgrade
245         cp OpenAFS.post_install $PKGRES/postupgrade
246         cp background.jpg $PKGRES/background.jpg
247         if [ $majorvers -ge 8 ]; then
248             cp InstallationCheck.$majorvers $PKGRES/InstallationCheck
249             mkdir -p $PKGRES/English.lproj
250             cp InstallationCheck.strings.$majorvers $PKGRES/English.lproj/InstallationCheck.strings
251             chmod a+x $PKGRES/InstallationCheck
252         fi
253         chmod a+x $PKGRES/postinstall $PKGRES/postupgrade $PKGRES/preupgrade
254     else
255         cp OpenAFS.post_install OpenAFS.pre_upgrade $PKGRES
256         cp OpenAFS.post_install $PKGRES/OpenAFS.post_upgrade
257         chmod a+x $PKGRES/OpenAFS.post_install $PKGRES/OpenAFS.post_upgrade $PKGRES/OpenAFS.pre_upgrade
258     fi
259     cp License.rtf $PKGRES
260     cp ReadMe.rtf.$majorvers $PKGRES/ReadMe.rtf
261     cp csrvdbmerge.pl $PKGRES
262     chmod a+x $PKGRES/csrvdbmerge.pl
263     cp CellServDB.list $PKGRES
264     chown -R root${SEP}wheel $PKGRES
265     rm -rf $CURDIR/OpenAFS.pkg
266     if [ $majorvers -ge 7 ]; then
267         echo $PACKAGEMAKER -build -p $CURDIR/OpenAFS.pkg -f $PKGROOT -r $PKGRES \
268             -i OpenAFS.Info.plist -d OpenAFS.Description.plist
269         $PACKAGEMAKER -build -p $CURDIR/OpenAFS.pkg -f $PKGROOT -r $PKGRES \
270             -i OpenAFS.Info.plist -d OpenAFS.Description.plist
271     else
272         echo $PACKAGEMAKER $PKGROOT $RESSRC/OpenAFS.info -r $PKGRES
273         (cd $CURDIR && $PACKAGEMAKER $PKGROOT $RESSRC/OpenAFS.info -r $PKGRES)
274         #old versions of package didn't handle this properly
275         if [ ! -r $CURDIR/OpenAFS.pkg/Contents ]; then
276                 mkdir -p $CURDIR/OpenAFS.pkg/Contents/Resources
277                 mv $CURDIR/OpenAFS.pkg/OpenAFS.* $CURDIR/OpenAFS.pkg/Contents/Resources
278                 mv $CURDIR/OpenAFS.pkg/*.rtf $CURDIR/OpenAFS.pkg/Contents/Resources
279                 mv $CURDIR/OpenAFS.pkg/csrvdbmerge.pl $CURDIR/OpenAFS.pkg/Contents/Resources
280                 mv $CURDIR/OpenAFS.pkg/CellServDB* $CURDIR/OpenAFS.pkg/Contents/Resources
281         fi
282     fi
283
284     rm -rf $PKGROOT $PKGRES
285     rm -rf $DPKGROOT $DPKGRES
286     # here we want to build installer plugin and install
287     # for Tiger and later only
288     if [ $majorvers -ge 8 ]; then
289         AFSCELLBUNDLE=$BINDEST/installer/afscell.bundle
290         cd $CURDIR
291         if [ -d $AFSCELLBUNDLE -a -f $BINDEST/installer/InstallerSections.plist ]; then
292             mkdir -p $CURDIR/OpenAFS.pkg/Contents/Plugins
293             cp -R $AFSCELLBUNDLE $CURDIR/OpenAFS.pkg/Contents/Plugins
294             cp $BINDEST/installer/InstallerSections.plist $CURDIR/OpenAFS.pkg/Contents/Plugins
295         else
296             echo "afscell.bundle not built successfully"
297             echo "... or InstallerSections.plist file not found"
298             exit 1
299         fi
300     fi
301
302     mkdir $CURDIR/dmg
303     mv $CURDIR/OpenAFS.pkg $CURDIR/dmg
304     if [ $majorvers -ge 8 ]; then
305         mv $CURDIR/OpenAFS-debug-extension.pkg $CURDIR/dmg
306     fi
307     rm -rf $CURDIR/OpenAFS-@VERSION@-$RELNAME.dmg
308     cp $RESSRC/Uninstall $CURDIR/dmg/Uninstall.command
309     cp $RESSRC/DS_Store $CURDIR/dmg/.DS_Store
310     mkdir $CURDIR/dmg/.background
311     cp $RESSRC/afslogo.jpg $CURDIR/dmg/.background
312 #    hdiutil create -srcfolder $CURDIR/dmg -volname OpenAFS -anyowners $CURDIR/OpenAFS.dmg
313     hdiutil makehybrid -hfs -hfs-volume-name OpenAFS -hfs-openfolder $CURDIR/dmg $CURDIR/dmg -o $CURDIR/TMP.dmg
314     hdiutil convert -format UDZO $CURDIR/TMP.dmg -o $CURDIR/OpenAFS-@VERSION@-$RELNAME.dmg
315     rm $CURDIR/TMP.dmg
316     rm -rf $CURDIR/dmg
317     # Unfortunately, sudo sets $USER to root, so I can't chown the 
318     #.pkg dir back to myself
319     #chown -R $USER $CURDIR/OpenAFS.pkg
320 else
321     echo "First pass completed.  Customize pkgroot and then run:"
322     echo "    $0 -secondpass"
323 fi