123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- #! /bin/csh -ef
- set prog = `/usr/bin/basename $0`
- set usage = "Usage: $prog [-f] root-dir info-file [tiff-file] [-d dest-dir] [-r resource-dir] [-traditional | -gnutar]"
- set noglob
- if (-x /usr/bin/mkbom) then
- set mkbom=/usr/bin/mkbom
- set lsbom=/usr/bin/lsbom
- else
- set mkbom=/usr/etc/mkbom
- set lsbom=/usr/etc/lsbom
- endif
- if (-x /usr/bin/awk) then
- set awk=/usr/bin/awk
- else
- set awk=/bin/awk
- endif
- set gnutar=/usr/bin/gnutar
- set tar=/usr/bin/tar
- set pax=/bin/pax
- # gather parameters
- if ($#argv == 0) then
- echo $usage
- exit(1)
- endif
- while ( $#argv > 0 )
- switch ( $argv[1] )
- case -d:
- if ( $?destDir ) then
- echo ${prog}: dest-dir parameter already set to ${destDir}.
- echo $usage
- exit(1)
- else if ( $#argv < 2 ) then
- echo ${prog}: -d option requires destination directory.
- echo $usage
- exit(1)
- else
- set destDir = $argv[2]
- shift; shift
- breaksw
- endif
- case -f:
- if ( $?rootDir ) then
- echo ${prog}: root-dir parameter already set to ${rootDir}.
- echo $usage
- exit(1)
- else if ( $#argv < 2 ) then
- echo ${prog}: -f option requires package root directory.
- echo $usage
- exit(1)
- else
- set rootDir = $argv[2]
- set fflag
- shift; shift
- breaksw
- endif
- case -r:
- if ( $?resDir ) then
- echo ${prog}: resource-dir parameter already set to ${resDir}.
- echo $usage
- exit(1)
- else if ( $#argv < 2 ) then
- echo ${prog}: -r option requires package resource directory.
- echo $usage
- exit(1)
- else
- set resDir = $argv[2]
- shift; shift
- breaksw
- endif
- case -traditional:
- set usetar
- unset usegnutar
- unset usepax
- breaksw
- case -gnutar:
- set usegnutar
- unset usepax
- unset usetar
- case -B:
- # We got long file names, better use bigtar instead
- #set archiver = /NextAdmin/Installer.app/Resources/installer_bigtar
- echo 2>&1 ${prog}: -B flag is no longer relevant.
- shift
- breaksw
- case -*:
- echo ${prog}: Unknown option: $argv[1]
- echo $usage
- exit(1)
- case *.info:
- if ( $?info ) then
- echo ${prog}: info-file parameter already set to ${info}.
- echo $usage
- exit(1)
- else
- set info = "$argv[1]"
- shift
- breaksw
- endif
- case *.tiff:
- if ( $?tiff ) then
- echo ${prog}: tiff-file parameter already set to ${tiff}.
- echo $usage
- exit(1)
- else
- set tiff = "$argv[1]"
- shift
- breaksw
- endif
- default:
- if ( $?rootDir ) then
- echo ${prog}: unrecognized parameter: $argv[1]
- echo $usage
- exit(1)
- else
- set rootDir = "$argv[1]"
- shift
- breaksw
- endif
- endsw
- end
- # check for mandatory parameters
- if ( ! $?rootDir ) then
- echo ${prog}: missing root-dir parameter.
- echo $usage
- exit(1)
- else if ( ! $?info) then
- echo ${prog}: missing info-file parameter.
- echo $usage
- exit(1)
- endif
- # destDir gets default value if unset on command line
- if ( $?destDir ) then
- /bin/mkdir -p $destDir
- else
- set destDir = .
- endif
- # derive the root name for the package from the root name of the info file
- set root = `/usr/bin/basename $info .info`
- # create package directory
- set pkg = ${destDir}/${root}.pkg
- echo Generating Installer package $pkg ...
- if ( -e $pkg ) /bin/rm -rf $pkg
- /bin/mkdir -p -m 755 $pkg
- # (gnu)tar/pax and compress root directory to package archive
- echo -n " creating package archive ... "
- if ( $?fflag ) then
- set pkgTop = ${rootDir:t}
- set parent = ${rootDir:h}
- if ( "$parent" == "$pkgTop" ) set parent = "."
- else
- set parent = $rootDir
- set pkgTop = .
- endif
- if ( $?usetar ) then
- set pkgArchive = $pkg/$root.tar.Z
- (cd $parent; $tar -w $pkgTop) | /usr/bin/compress -f -c > $pkgArchive
- else if ( $?usegnutar ) then
- set pkgArchive = $pkg/$root.tar.gz
- (cd $parent; $gnutar zcf $pkgArchive $pkgTop)
- else
- set pkgArchive = $pkg/$root.pax.gz
- (cd $parent; $pax -w -z -x cpio $pkgTop) > $pkgArchive
- endif
- /bin/chmod 444 $pkgArchive
- echo done.
- # copy info file to package
- set pkgInfo = $pkg/$root.info
- echo -n " copying ${info:t} ... "
- /bin/cp $info $pkgInfo
- /bin/chmod 444 $pkgInfo
- echo done.
- # copy tiff file to package
- if ( $?tiff ) then
- set pkgTiff = $pkg/$root.tiff
- echo -n " copying ${tiff:t} ... "
- /bin/cp $tiff $pkgTiff
- /bin/chmod 444 $pkgTiff
- echo done.
- endif
- # copy resources to package
- if ( $?resDir ) then
- echo -n " copying ${resDir:t} ... "
- # don't want to see push/pop output
- pushd $resDir > /dev/null
- # get lists of resources. We'll want to change
- # permissions on just these things later.
- set directoriesInResDir = `find . -type d`
- set filesInResDir = `find . -type f`
- popd > /dev/null
- # copy the resource directory contents into the package directory
- foreach resFile (`ls $resDir`)
- cp -r $resDir/$resFile $pkg
- end
- pushd $pkg > /dev/null
- # Change all directories to +r+x, except the package
- # directory itself
- foreach resFileItem ($directoriesInResDir)
- if ( $resFileItem != "." ) then
- chmod 555 $resFileItem
- endif
- end
- # change all flat files to read only
- foreach resFileItem ($filesInResDir)
- chmod 444 $resFileItem
- end
- popd > /dev/null
- echo done.
- endif
- # generate bom file
- set pkgBom = $pkg/$root.bom
- echo -n " generating bom file ... "
- /bin/rm -f $pkgBom
- if ( $?fflag ) then
- $mkbom $parent $pkgBom >& /dev/null
- else
- $mkbom $rootDir $pkgBom >& /dev/null
- endif
- /bin/chmod 444 $pkgArchive
- echo done.
-
- # generate sizes file
- set pkgSizes = $pkg/$root.sizes
- echo -n " generating sizes file ... "
- # compute number of files in package
- set numFiles = `$lsbom -s $pkgBom | /usr/bin/wc -l`
- # compute package size when compressed
- @ compressedSize = `/usr/bin/du -k -s $pkg | $awk '{print $1}'`
- @ compressedSize += 3 # add 1KB each for sizes, location, status files
- @ infoSize = `/bin/ls -s $pkgInfo | $awk '{print $1}'`
- @ bomSize = `/bin/ls -s $pkgBom | $awk '{print $1}'`
- if ( $?tiff ) then
- @ tiffSize = `/bin/ls -s $pkgTiff | $awk '{print $1}'`
- else
- @ tiffSize = 0
- endif
- @ installedSize = `/usr/bin/du -k -s $rootDir | $awk '{print $1}'`
- @ installedSize += $infoSize + $bomSize + $tiffSize + 3
- # echo size parameters to sizes file
- echo NumFiles $numFiles > $pkgSizes
- echo InstalledSize $installedSize >> $pkgSizes
- echo CompressedSize $compressedSize >> $pkgSizes
- echo done.
- echo " ... finished generating $pkg."
- exit(0)
- # end package
-
|