1#! /bin/csh -ef 2 3set prog = `/usr/bin/basename $0` 4set usage = "Usage: $prog [-f] root-dir info-file [tiff-file] [-d dest-dir] [-r resource-dir] [-traditional | -gnutar]" 5set noglob 6 7if (-x /usr/bin/mkbom) then 8 set mkbom=/usr/bin/mkbom 9 set lsbom=/usr/bin/lsbom 10else 11 set mkbom=/usr/etc/mkbom 12 set lsbom=/usr/etc/lsbom 13endif 14 15if (-x /usr/bin/awk) then 16 set awk=/usr/bin/awk 17else 18 set awk=/bin/awk 19endif 20 21set gnutar=/usr/bin/gnutar 22set tar=/usr/bin/tar 23set pax=/bin/pax 24 25# gather parameters 26if ($#argv == 0) then 27 echo $usage 28 exit(1) 29endif 30 31while ( $#argv > 0 ) 32 switch ( $argv[1] ) 33 case -d: 34 if ( $?destDir ) then 35 echo ${prog}: dest-dir parameter already set to ${destDir}. 36 echo $usage 37 exit(1) 38 else if ( $#argv < 2 ) then 39 echo ${prog}: -d option requires destination directory. 40 echo $usage 41 exit(1) 42 else 43 set destDir = $argv[2] 44 shift; shift 45 breaksw 46 endif 47 case -f: 48 if ( $?rootDir ) then 49 echo ${prog}: root-dir parameter already set to ${rootDir}. 50 echo $usage 51 exit(1) 52 else if ( $#argv < 2 ) then 53 echo ${prog}: -f option requires package root directory. 54 echo $usage 55 exit(1) 56 else 57 set rootDir = $argv[2] 58 set fflag 59 shift; shift 60 breaksw 61 endif 62 case -r: 63 if ( $?resDir ) then 64 echo ${prog}: resource-dir parameter already set to ${resDir}. 65 echo $usage 66 exit(1) 67 else if ( $#argv < 2 ) then 68 echo ${prog}: -r option requires package resource directory. 69 echo $usage 70 exit(1) 71 else 72 set resDir = $argv[2] 73 shift; shift 74 breaksw 75 endif 76 case -traditional: 77 set usetar 78 unset usegnutar 79 unset usepax 80 breaksw 81 case -gnutar: 82 set usegnutar 83 unset usepax 84 unset usetar 85 case -B: 86 # We got long file names, better use bigtar instead 87 #set archiver = /NextAdmin/Installer.app/Resources/installer_bigtar 88 echo 2>&1 ${prog}: -B flag is no longer relevant. 89 shift 90 breaksw 91 case -*: 92 echo ${prog}: Unknown option: $argv[1] 93 echo $usage 94 exit(1) 95 case *.info: 96 if ( $?info ) then 97 echo ${prog}: info-file parameter already set to ${info}. 98 echo $usage 99 exit(1) 100 else 101 set info = "$argv[1]" 102 shift 103 breaksw 104 endif 105 case *.tiff: 106 if ( $?tiff ) then 107 echo ${prog}: tiff-file parameter already set to ${tiff}. 108 echo $usage 109 exit(1) 110 else 111 set tiff = "$argv[1]" 112 shift 113 breaksw 114 endif 115 default: 116 if ( $?rootDir ) then 117 echo ${prog}: unrecognized parameter: $argv[1] 118 echo $usage 119 exit(1) 120 else 121 set rootDir = "$argv[1]" 122 shift 123 breaksw 124 endif 125 endsw 126end 127 128# check for mandatory parameters 129if ( ! $?rootDir ) then 130 echo ${prog}: missing root-dir parameter. 131 echo $usage 132 exit(1) 133else if ( ! $?info) then 134 echo ${prog}: missing info-file parameter. 135 echo $usage 136 exit(1) 137endif 138 139# destDir gets default value if unset on command line 140if ( $?destDir ) then 141 /bin/mkdir -p $destDir 142else 143 set destDir = . 144endif 145 146# derive the root name for the package from the root name of the info file 147set root = `/usr/bin/basename $info .info` 148 149# create package directory 150set pkg = ${destDir}/${root}.pkg 151echo Generating Installer package $pkg ... 152if ( -e $pkg ) /bin/rm -rf $pkg 153/bin/mkdir -p -m 755 $pkg 154 155# (gnu)tar/pax and compress root directory to package archive 156echo -n " creating package archive ... " 157if ( $?fflag ) then 158 set pkgTop = ${rootDir:t} 159 set parent = ${rootDir:h} 160 if ( "$parent" == "$pkgTop" ) set parent = "." 161else 162 set parent = $rootDir 163 set pkgTop = . 164endif 165if ( $?usetar ) then 166 set pkgArchive = $pkg/$root.tar.Z 167 (cd $parent; $tar -w $pkgTop) | /usr/bin/compress -f -c > $pkgArchive 168else if ( $?usegnutar ) then 169 set pkgArchive = $pkg/$root.tar.gz 170 (cd $parent; $gnutar zcf $pkgArchive $pkgTop) 171else 172 set pkgArchive = $pkg/$root.pax.gz 173 (cd $parent; $pax -w -z -x cpio $pkgTop) > $pkgArchive 174endif 175/bin/chmod 444 $pkgArchive 176echo done. 177 178# copy info file to package 179set pkgInfo = $pkg/$root.info 180echo -n " copying ${info:t} ... " 181/bin/cp $info $pkgInfo 182/bin/chmod 444 $pkgInfo 183echo done. 184 185# copy tiff file to package 186if ( $?tiff ) then 187 set pkgTiff = $pkg/$root.tiff 188 echo -n " copying ${tiff:t} ... " 189 /bin/cp $tiff $pkgTiff 190 /bin/chmod 444 $pkgTiff 191 echo done. 192endif 193 194# copy resources to package 195if ( $?resDir ) then 196 echo -n " copying ${resDir:t} ... " 197 198 # don't want to see push/pop output 199 pushd $resDir > /dev/null 200 # get lists of resources. We'll want to change 201 # permissions on just these things later. 202 set directoriesInResDir = `find . -type d` 203 set filesInResDir = `find . -type f` 204 popd > /dev/null 205 206 # copy the resource directory contents into the package directory 207 foreach resFile (`ls $resDir`) 208 cp -r $resDir/$resFile $pkg 209 end 210 211 pushd $pkg > /dev/null 212 # Change all directories to +r+x, except the package 213 # directory itself 214 foreach resFileItem ($directoriesInResDir) 215 if ( $resFileItem != "." ) then 216 chmod 555 $resFileItem 217 endif 218 end 219 # change all flat files to read only 220 foreach resFileItem ($filesInResDir) 221 chmod 444 $resFileItem 222 end 223 popd > /dev/null 224 225 echo done. 226endif 227 228# generate bom file 229set pkgBom = $pkg/$root.bom 230echo -n " generating bom file ... " 231/bin/rm -f $pkgBom 232if ( $?fflag ) then 233 $mkbom $parent $pkgBom >& /dev/null 234else 235 $mkbom $rootDir $pkgBom >& /dev/null 236endif 237/bin/chmod 444 $pkgArchive 238echo done. 239 240# generate sizes file 241set pkgSizes = $pkg/$root.sizes 242echo -n " generating sizes file ... " 243 244# compute number of files in package 245set numFiles = `$lsbom -s $pkgBom | /usr/bin/wc -l` 246 247# compute package size when compressed 248@ compressedSize = `/usr/bin/du -k -s $pkg | $awk '{print $1}'` 249@ compressedSize += 3 # add 1KB each for sizes, location, status files 250 251@ infoSize = `/bin/ls -s $pkgInfo | $awk '{print $1}'` 252@ bomSize = `/bin/ls -s $pkgBom | $awk '{print $1}'` 253if ( $?tiff ) then 254 @ tiffSize = `/bin/ls -s $pkgTiff | $awk '{print $1}'` 255else 256 @ tiffSize = 0 257endif 258 259@ installedSize = `/usr/bin/du -k -s $rootDir | $awk '{print $1}'` 260@ installedSize += $infoSize + $bomSize + $tiffSize + 3 261 262# echo size parameters to sizes file 263echo NumFiles $numFiles > $pkgSizes 264echo InstalledSize $installedSize >> $pkgSizes 265echo CompressedSize $compressedSize >> $pkgSizes 266echo done. 267echo " ... finished generating $pkg." 268 269exit(0) 270 271# end package 272 273