|
Carlos Lopez |
a09598 |
#! /bin/csh -ef
|
|
Carlos Lopez |
a09598 |
# this file was orignally distributed by Apple in the Developer Tools package
|
|
Carlos Lopez |
a09598 |
#it is distributed under the Apple Open Source License
|
|
Carlos Lopez |
a09598 |
set version=0.2
|
|
Carlos Lopez |
a09598 |
set prog = `/usr/bin/basename $0`
|
|
Carlos Lopez |
a09598 |
set usage = "Usage: $prog [-f] root-dir info-file [tiff-file] [-d dest-dir] [-r resource-dir] [-traditional | -gnutar] [-bzip]"
|
|
Carlos Lopez |
a09598 |
set noglob
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
if (-x /usr/bin/mkbom) then
|
|
Carlos Lopez |
a09598 |
set mkbom=/usr/bin/mkbom
|
|
Carlos Lopez |
a09598 |
set lsbom=/usr/bin/lsbom
|
|
Carlos Lopez |
a09598 |
else
|
|
Carlos Lopez |
a09598 |
set mkbom=/usr/etc/mkbom
|
|
Carlos Lopez |
a09598 |
set lsbom=/usr/etc/lsbom
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
if (-x /usr/bin/awk) then
|
|
Carlos Lopez |
a09598 |
set awk=/usr/bin/awk
|
|
Carlos Lopez |
a09598 |
else
|
|
Carlos Lopez |
a09598 |
set awk=/bin/awk
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
set bzip2=`which bzip2`
|
|
Carlos Lopez |
a09598 |
set gnutar=/usr/bin/gnutar
|
|
Carlos Lopez |
a09598 |
set tar=/usr/bin/tar
|
|
Carlos Lopez |
a09598 |
set pax=/bin/pax
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
# gather parameters
|
|
Carlos Lopez |
a09598 |
if ($#argv == 0) then
|
|
Carlos Lopez |
a09598 |
echo $usage
|
|
Carlos Lopez |
a09598 |
exit(1)
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
unset usebzip
|
|
Carlos Lopez |
a09598 |
while ( $#argv > 0 )
|
|
Carlos Lopez |
a09598 |
switch ( $argv[1] )
|
|
Carlos Lopez |
a09598 |
case -d:
|
|
Carlos Lopez |
a09598 |
if ( $?destDir ) then
|
|
Carlos Lopez |
a09598 |
echo ${prog}: dest-dir parameter already set to ${destDir}.
|
|
Carlos Lopez |
a09598 |
echo $usage
|
|
Carlos Lopez |
a09598 |
exit(1)
|
|
Carlos Lopez |
a09598 |
else if ( $#argv < 2 ) then
|
|
Carlos Lopez |
a09598 |
echo ${prog}: -d option requires destination directory.
|
|
Carlos Lopez |
a09598 |
echo $usage
|
|
Carlos Lopez |
a09598 |
exit(1)
|
|
Carlos Lopez |
a09598 |
else
|
|
Carlos Lopez |
a09598 |
set destDir = $argv[2]
|
|
Carlos Lopez |
a09598 |
shift; shift
|
|
Carlos Lopez |
a09598 |
breaksw
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
case -f:
|
|
Carlos Lopez |
a09598 |
if ( $?rootDir ) then
|
|
Carlos Lopez |
a09598 |
echo ${prog}: root-dir parameter already set to ${rootDir}.
|
|
Carlos Lopez |
a09598 |
echo $usage
|
|
Carlos Lopez |
a09598 |
exit(1)
|
|
Carlos Lopez |
a09598 |
else if ( $#argv < 2 ) then
|
|
Carlos Lopez |
a09598 |
echo ${prog}: -f option requires package root directory.
|
|
Carlos Lopez |
a09598 |
echo $usage
|
|
Carlos Lopez |
a09598 |
exit(1)
|
|
Carlos Lopez |
a09598 |
else
|
|
Carlos Lopez |
a09598 |
set rootDir = $argv[2]
|
|
Carlos Lopez |
a09598 |
set fflag
|
|
Carlos Lopez |
a09598 |
shift; shift
|
|
Carlos Lopez |
a09598 |
breaksw
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
case -r:
|
|
Carlos Lopez |
a09598 |
if ( $?resDir ) then
|
|
Carlos Lopez |
a09598 |
echo ${prog}: resource-dir parameter already set to ${resDir}.
|
|
Carlos Lopez |
a09598 |
echo $usage
|
|
Carlos Lopez |
a09598 |
exit(1)
|
|
Carlos Lopez |
a09598 |
else if ( $#argv < 2 ) then
|
|
Carlos Lopez |
a09598 |
echo ${prog}: -r option requires package resource directory.
|
|
Carlos Lopez |
a09598 |
echo $usage
|
|
Carlos Lopez |
a09598 |
exit(1)
|
|
Carlos Lopez |
a09598 |
else
|
|
Carlos Lopez |
a09598 |
set resDir = $argv[2]
|
|
Carlos Lopez |
a09598 |
shift; shift
|
|
Carlos Lopez |
a09598 |
breaksw
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
case -traditional:
|
|
Carlos Lopez |
a09598 |
echo useing standard tar
|
|
Carlos Lopez |
a09598 |
set usetar
|
|
Carlos Lopez |
a09598 |
unset usegnutar
|
|
Carlos Lopez |
a09598 |
unset usepax
|
|
Carlos Lopez |
a09598 |
breaksw
|
|
Carlos Lopez |
a09598 |
case -gnutar:
|
|
Carlos Lopez |
a09598 |
echo using gnutar
|
|
Carlos Lopez |
a09598 |
set usegnutar
|
|
Carlos Lopez |
a09598 |
unset usepax
|
|
Carlos Lopez |
a09598 |
unset usetar
|
|
Carlos Lopez |
a09598 |
shift
|
|
Carlos Lopez |
a09598 |
case -bzip:
|
|
Carlos Lopez |
a09598 |
if (-x $bzip2) then
|
|
Carlos Lopez |
a09598 |
set usebzip
|
|
Carlos Lopez |
a09598 |
echo using bzip compression
|
|
Carlos Lopez |
a09598 |
else
|
|
Carlos Lopez |
a09598 |
echo COMPRESSION ERROR: You can not use BZIP2 you do not have it installed
|
|
Carlos Lopez |
a09598 |
exit(1)
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
shift
|
|
Carlos Lopez |
a09598 |
breaksw
|
|
Carlos Lopez |
a09598 |
case -*:
|
|
Carlos Lopez |
a09598 |
echo ${prog}: Unknown option: $argv[1]
|
|
Carlos Lopez |
a09598 |
echo $usage
|
|
Carlos Lopez |
a09598 |
exit(1)
|
|
Carlos Lopez |
a09598 |
case *.info:
|
|
Carlos Lopez |
a09598 |
if ( $?info ) then
|
|
Carlos Lopez |
a09598 |
echo ${prog}: info-file parameter already set to ${info}.
|
|
Carlos Lopez |
a09598 |
echo $usage
|
|
Carlos Lopez |
a09598 |
exit(1)
|
|
Carlos Lopez |
a09598 |
else
|
|
Carlos Lopez |
a09598 |
set info = "$argv[1]"
|
|
Carlos Lopez |
a09598 |
shift
|
|
Carlos Lopez |
a09598 |
breaksw
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
case *.tiff:
|
|
Carlos Lopez |
a09598 |
if ( $?tiff ) then
|
|
Carlos Lopez |
a09598 |
echo ${prog}: tiff-file parameter already set to ${tiff}.
|
|
Carlos Lopez |
a09598 |
echo $usage
|
|
Carlos Lopez |
a09598 |
exit(1)
|
|
Carlos Lopez |
a09598 |
else
|
|
Carlos Lopez |
a09598 |
set tiff = "$argv[1]"
|
|
Carlos Lopez |
a09598 |
shift
|
|
Carlos Lopez |
a09598 |
breaksw
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
default:
|
|
Carlos Lopez |
a09598 |
if ( $?rootDir ) then
|
|
Carlos Lopez |
a09598 |
echo ${prog}: unrecognized parameter: $argv[1]
|
|
Carlos Lopez |
a09598 |
echo $usage
|
|
Carlos Lopez |
a09598 |
exit(1)
|
|
Carlos Lopez |
a09598 |
else
|
|
Carlos Lopez |
a09598 |
set rootDir = "$argv[1]"
|
|
Carlos Lopez |
a09598 |
shift
|
|
Carlos Lopez |
a09598 |
breaksw
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
endsw
|
|
Carlos Lopez |
a09598 |
end
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
# check for mandatory parameters
|
|
Carlos Lopez |
a09598 |
if ( ! $?rootDir ) then
|
|
Carlos Lopez |
a09598 |
echo ${prog}: missing root-dir parameter.
|
|
Carlos Lopez |
a09598 |
echo $usage
|
|
Carlos Lopez |
a09598 |
exit(1)
|
|
Carlos Lopez |
a09598 |
else if ( ! $?info) then
|
|
Carlos Lopez |
a09598 |
echo ${prog}: missing info-file parameter.
|
|
Carlos Lopez |
a09598 |
echo $usage
|
|
Carlos Lopez |
a09598 |
exit(1)
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
# destDir gets default value if unset on command line
|
|
Carlos Lopez |
a09598 |
if ( $?destDir ) then
|
|
Carlos Lopez |
a09598 |
/bin/mkdir -p $destDir
|
|
Carlos Lopez |
a09598 |
else
|
|
Carlos Lopez |
a09598 |
set destDir = .
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
# derive the root name for the package from the root name of the info file
|
|
Carlos Lopez |
a09598 |
set root = `/usr/bin/basename $info .info`
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
# create package directory
|
|
Carlos Lopez |
a09598 |
set pkg = ${destDir}/${root}.pkg
|
|
Carlos Lopez |
a09598 |
echo Generating Installer package $pkg ...
|
|
Carlos Lopez |
a09598 |
if ( -e $pkg ) /bin/rm -rf $pkg
|
|
Carlos Lopez |
a09598 |
/bin/mkdir -p -m 755 $pkg
|
|
Carlos Lopez |
a09598 |
/bin/mkdir -p -m 755 $pkg/Contents
|
|
Carlos Lopez |
a09598 |
/bin/mkdir -p -m 755 $pkg/Contents/Resources
|
|
Carlos Lopez |
a09598 |
/bin/mkdir -p -m 755 $pkg/Contents/Resources/English.lproj/
|
|
Carlos Lopez |
a09598 |
echo "gxpmpkg2" >$pkg/Contents/PkgInfo
|
|
Carlos Lopez |
a09598 |
chmod 755 $pkg/Contents/PkgInfo
|
|
Carlos Lopez |
a09598 |
# (gnu)tar/pax and compress root directory to package archive
|
|
Carlos Lopez |
a09598 |
echo -n " creating package archive ... "
|
|
Carlos Lopez |
a09598 |
if ( $?fflag ) then
|
|
Carlos Lopez |
a09598 |
set pkgTop = ${rootDir:t}
|
|
Carlos Lopez |
a09598 |
set parent = ${rootDir:h}
|
|
Carlos Lopez |
a09598 |
if ( "$parent" == "$pkgTop" ) set parent = "."
|
|
Carlos Lopez |
a09598 |
else
|
|
Carlos Lopez |
a09598 |
set parent = $rootDir
|
|
Carlos Lopez |
a09598 |
set pkgTop = .
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
if ( $?usetar ) then
|
|
Carlos Lopez |
a09598 |
set pkgArchive = $pkg/Contents/Resources/$root.tar.Z
|
|
Carlos Lopez |
a09598 |
(cd $parent; $tar -w $pkgTop) | /usr/bin/tar -f -c > $pkgArchive
|
|
Carlos Lopez |
a09598 |
else if ( $?usegnutar ) then
|
|
Carlos Lopez |
a09598 |
if ( $?usebzip ) then
|
|
Carlos Lopez |
a09598 |
set pkgArchive = $pkg/Contents/Resources/$root.tar.bz2
|
|
Carlos Lopez |
a09598 |
(cd $parent; $gnutar c $pkgTop) | $bzip2 -f -c > $pkgArchive
|
|
Carlos Lopez |
a09598 |
else
|
|
Carlos Lopez |
a09598 |
set pkgArchive = $pkg/Contents/Resources/$root.tar.gz
|
|
Carlos Lopez |
a09598 |
(cd $parent; $gnutar zcf $pkgArchive $pkgTop)
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
else
|
|
Carlos Lopez |
a09598 |
set pkgArchive = $pkg/Contents/Resources/$root.pax.gz
|
|
Carlos Lopez |
a09598 |
(cd $parent; $pax -w -z -x cpio $pkgTop) > $pkgArchive
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
/bin/chmod 755 $pkgArchive
|
|
Carlos Lopez |
a09598 |
echo done.
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
# copy info file to package
|
|
Carlos Lopez |
a09598 |
set pkgInfo = $pkg/Contents/Resources/English.lproj/$root.info
|
|
Carlos Lopez |
a09598 |
echo -n " copying ${info:t} ... "
|
|
Carlos Lopez |
a09598 |
/bin/cp $info $pkgInfo
|
|
Carlos Lopez |
a09598 |
/bin/chmod 755 $pkgInfo
|
|
Carlos Lopez |
a09598 |
echo done.
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
# copy tiff file to package
|
|
Carlos Lopez |
a09598 |
if ( $?tiff ) then
|
|
Carlos Lopez |
a09598 |
set pkgTiff = $pkg/$root.tiff
|
|
Carlos Lopez |
a09598 |
echo -n " copying ${tiff:t} ... "
|
|
Carlos Lopez |
a09598 |
/bin/cp $tiff $pkgTiff
|
|
Carlos Lopez |
a09598 |
/bin/chmod 444 $pkgTiff
|
|
Carlos Lopez |
a09598 |
echo done.
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
# copy resources to package
|
|
Carlos Lopez |
a09598 |
if ( $?resDir ) then
|
|
Carlos Lopez |
a09598 |
echo -n " copying ${resDir:t} ... "
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
# don't want to see push/pop output
|
|
Carlos Lopez |
a09598 |
pushd $resDir > /dev/null
|
|
Carlos Lopez |
a09598 |
# get lists of resources. We'll want to change
|
|
Carlos Lopez |
a09598 |
# permissions on just these things later.
|
|
Carlos Lopez |
a09598 |
set directoriesInResDir = `find . -type d | grep -v svn`
|
|
Carlos Lopez |
a09598 |
set filesInResDir = `find . -type f | grep -v svn`
|
|
Carlos Lopez |
a09598 |
popd > /dev/null
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
# copy the resource directory contents into the package directory
|
|
Carlos Lopez |
a09598 |
foreach resFile (`ls $resDir | grep -v svn`)
|
|
Carlos Lopez |
a09598 |
cp -r "$resDir/$resFile" "$pkg/Contents/Resources"
|
|
Carlos Lopez |
a09598 |
end
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
pushd $pkg/Contents/Resources > /dev/null
|
|
Carlos Lopez |
a09598 |
# Change all directories to +r+x, except the package
|
|
Carlos Lopez |
a09598 |
# directory itself
|
|
Carlos Lopez |
a09598 |
foreach resFileItem ($directoriesInResDir)
|
|
Carlos Lopez |
a09598 |
if ( $resFileItem != "." ) then
|
|
Carlos Lopez |
a09598 |
chmod 755 "$resFileItem"
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
end
|
|
Carlos Lopez |
a09598 |
# change all flat files to read only
|
|
Carlos Lopez |
a09598 |
foreach resFileItem ($filesInResDir)
|
|
Carlos Lopez |
a09598 |
if ( $resFileItem != "./.DS_Store" ) then
|
|
Carlos Lopez |
a09598 |
chmod 755 "$resFileItem"
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
end
|
|
Carlos Lopez |
a09598 |
popd > /dev/null
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
echo done.
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
# generate bom file
|
|
Carlos Lopez |
a09598 |
set pkgBom = $pkg/Contents/Resources/$root.bom
|
|
Carlos Lopez |
a09598 |
echo -n " generating bom file ... "
|
|
Carlos Lopez |
a09598 |
/bin/rm -f $pkgBom
|
|
Carlos Lopez |
a09598 |
if ( $?fflag ) then
|
|
Carlos Lopez |
a09598 |
$mkbom $parent $pkgBom >& /dev/null
|
|
Carlos Lopez |
a09598 |
else
|
|
Carlos Lopez |
a09598 |
$mkbom $rootDir $pkgBom >& /dev/null
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
/bin/chmod 444 $pkgArchive
|
|
Carlos Lopez |
a09598 |
echo done.
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
# generate sizes file
|
|
Carlos Lopez |
a09598 |
set pkgSizes = $pkg/Contents/Resources/$root.sizes
|
|
Carlos Lopez |
a09598 |
echo -n " generating sizes file ... "
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
# compute number of files in package
|
|
Carlos Lopez |
a09598 |
set numFiles = `$lsbom -s $pkgBom | /usr/bin/wc -l`
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
# compute package size when compressed
|
|
Carlos Lopez |
a09598 |
@ compressedSize = `/usr/bin/du -k -s $pkg | $awk '{print $1}'`
|
|
Carlos Lopez |
a09598 |
@ compressedSize += 3 # add 1KB each for sizes, location, status files
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
@ infoSize = `/bin/ls -s $pkgInfo | $awk '{print $1}'`
|
|
Carlos Lopez |
a09598 |
@ bomSize = `/bin/ls -s $pkgBom | $awk '{print $1}'`
|
|
Carlos Lopez |
a09598 |
if ( $?tiff ) then
|
|
Carlos Lopez |
a09598 |
@ tiffSize = `/bin/ls -s $pkgTiff | $awk '{print $1}'`
|
|
Carlos Lopez |
a09598 |
else
|
|
Carlos Lopez |
a09598 |
@ tiffSize = 0
|
|
Carlos Lopez |
a09598 |
endif
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
@ installedSize = `/usr/bin/du -k -s $rootDir | $awk '{print $1}'`
|
|
Carlos Lopez |
a09598 |
@ installedSize += $infoSize + $bomSize + $tiffSize + 3
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
# echo size parameters to sizes file
|
|
Carlos Lopez |
a09598 |
echo NumFiles $numFiles > $pkgSizes
|
|
Carlos Lopez |
a09598 |
echo InstalledSize $installedSize >> $pkgSizes
|
|
Carlos Lopez |
a09598 |
echo CompressedSize $compressedSize >> $pkgSizes
|
|
Carlos Lopez |
a09598 |
echo done.
|
|
Carlos Lopez |
a09598 |
echo " ... finished generating $pkg."
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
exit(0)
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
# end package
|
|
Carlos Lopez |
a09598 |
|