+#! /bin/csh -ef
+#
+# original script by Chris Roberts (The OS X Package Manager)
+# slightly modified by Frank Vercruesse (mainly fixed quoting issues)
+
+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
+ shift
+ breaksw
+ case -gnutar:
+ set usegnutar
+ unset usepax
+ unset usetar
+ shift
+ breaksw
+ 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 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"
+/bin/mkdir -p -m 755 "$pkg/Contents"
+/bin/mkdir -p -m 755 "$pkg/Contents/Resources"
+/bin/mkdir -p -m 755 "$pkg/Contents/Resources/English.lproj/"
+echo -n "pmkrpkg1" >"$pkg/Contents/PkgInfo"
+chmod 755 "$pkg/Contents/PkgInfo"
+# (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/Contents/Resources/$root.tar.Z"
+ (cd "$parent"; $tar -w "$pkgTop") | /usr/bin/tar -f -c > "$pkgArchive"
+else if ( $?usegnutar ) then
+ set pkgArchive = "$pkg/Contents/Resources/$root.tar.gz"
+ (cd "$parent"; $gnutar zcf "$pkgArchive" "$pkgTop")
+else
+ set pkgArchive = "$pkg/Contents/Resources/$root.pax.gz"
+ (cd "$parent"; $pax -w -z -x cpio "$pkgTop") > "$pkgArchive"
+endif
+/bin/chmod 755 "$pkgArchive"
+echo done.
+
+# copy info file to package
+set pkgInfo = "$pkg/Contents/Resources/English.lproj/$root.info"
+echo -n " copying ${info:t} ... "
+/bin/cp $info "$pkgInfo"
+/bin/chmod 755 "$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/Contents/Resources"
+ end
+
+ pushd "$pkg/Contents/Resources" > /dev/null
+ # Change all directories to +r+x, except the package
+ # directory itself
+ foreach resFileItem ($directoriesInResDir)
+ if ( "$resFileItem" != "." ) then
+ chmod 755 $resFileItem
+ endif
+ end
+ # change all flat files to read only
+ foreach resFileItem ($filesInResDir)
+ if ( "$resFileItem" != "./.DS_Store" ) then
+ chmod 755 $resFileItem
+ endif
+ end
+ popd > /dev/null
+
+ echo done.
+endif
+
+# generate bom file
+set pkgBom = "$pkg/Contents/Resources/$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/Contents/Resources/$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