Home | History | Annotate | Download | only in Xcode
      1 #! /bin/csh -ef
      2 
      3 set prog = `/usr/bin/basename $0`
      4 set usage = "Usage: $prog [-f] root-dir info-file [tiff-file] [-d dest-dir] [-r resource-dir] [-traditional | -gnutar]"
      5 set noglob
      6 
      7 if (-x /usr/bin/mkbom) then
      8     set mkbom=/usr/bin/mkbom
      9     set lsbom=/usr/bin/lsbom
     10 else
     11     set mkbom=/usr/etc/mkbom
     12     set lsbom=/usr/etc/lsbom
     13 endif
     14 
     15 if (-x /usr/bin/awk) then
     16     set awk=/usr/bin/awk
     17 else
     18     set awk=/bin/awk
     19 endif
     20 
     21 set gnutar=/usr/bin/gnutar
     22 set tar=/usr/bin/tar
     23 set pax=/bin/pax
     24 
     25 # gather parameters
     26 if ($#argv == 0) then
     27     echo $usage
     28     exit(1)
     29 endif
     30 
     31 while ( $#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
    126 end
    127 
    128 # check for mandatory parameters
    129 if ( ! $?rootDir ) then
    130     echo ${prog}: missing root-dir parameter.
    131     echo $usage
    132     exit(1)
    133 else if ( ! $?info) then
    134     echo ${prog}: missing info-file parameter.
    135     echo $usage
    136     exit(1)
    137 endif
    138 
    139 # destDir gets default value if unset on command line
    140 if ( $?destDir ) then
    141     /bin/mkdir -p $destDir
    142 else
    143     set destDir = .
    144 endif
    145 
    146 # derive the root name for the package from the root name of the info file
    147 set root = `/usr/bin/basename $info .info`
    148 
    149 # create package directory
    150 set pkg = ${destDir}/${root}.pkg
    151 echo Generating Installer package $pkg ...
    152 if ( -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
    156 echo -n "	creating package archive ... "
    157 if ( $?fflag ) then
    158     set pkgTop = ${rootDir:t}
    159     set parent = ${rootDir:h}
    160     if ( "$parent" == "$pkgTop" ) set parent = "."
    161 else
    162     set parent = $rootDir
    163     set pkgTop = .    
    164 endif
    165 if ( $?usetar ) then
    166     set pkgArchive = $pkg/$root.tar.Z
    167     (cd $parent; $tar -w $pkgTop) | /usr/bin/compress -f -c > $pkgArchive
    168 else if ( $?usegnutar ) then
    169     set pkgArchive = $pkg/$root.tar.gz
    170     (cd $parent; $gnutar zcf $pkgArchive $pkgTop)
    171 else
    172     set pkgArchive = $pkg/$root.pax.gz
    173     (cd $parent; $pax -w -z -x cpio $pkgTop) > $pkgArchive
    174 endif
    175 /bin/chmod 444 $pkgArchive
    176 echo done.
    177 
    178 # copy info file to package
    179 set pkgInfo = $pkg/$root.info
    180 echo -n "	copying ${info:t} ... "
    181 /bin/cp $info $pkgInfo
    182 /bin/chmod 444 $pkgInfo
    183 echo done.
    184 
    185 # copy tiff file to package
    186 if ( $?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.
    192 endif
    193 
    194 # copy resources to package
    195 if ( $?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.
    226 endif
    227 
    228 # generate bom file
    229 set pkgBom = $pkg/$root.bom
    230 echo -n "	generating bom file ... "
    231 /bin/rm -f $pkgBom
    232 if ( $?fflag ) then
    233     $mkbom $parent $pkgBom >& /dev/null
    234 else
    235     $mkbom $rootDir $pkgBom >& /dev/null
    236 endif
    237 /bin/chmod 444 $pkgArchive
    238 echo done.
    239 	
    240 # generate sizes file
    241 set pkgSizes = $pkg/$root.sizes
    242 echo -n "	generating sizes file ... "
    243 
    244 # compute number of files in package
    245 set 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}'`
    253 if ( $?tiff ) then
    254     @ tiffSize = `/bin/ls -s $pkgTiff | $awk '{print $1}'`
    255 else
    256     @ tiffSize = 0
    257 endif 
    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
    263 echo NumFiles $numFiles             >  $pkgSizes
    264 echo InstalledSize $installedSize   >> $pkgSizes
    265 echo CompressedSize $compressedSize >> $pkgSizes
    266 echo done.
    267 echo " ... finished generating $pkg."
    268 
    269 exit(0)
    270 
    271 # end package
    272 	
    273