home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3.4.17 [SPARC, PA-RISC] / nextstep33_risc.iso / NextAdmin / Installer.app / chunkPackage < prev    next >
Text File  |  1993-02-18  |  5KB  |  203 lines

  1. #!/bin/csh -f
  2.  
  3. set prog = `/usr/bin/basename $0`
  4. set usage = "Usage: $prog package chunk-size(in KB) [-p pad-size] [-d dest-dir]"
  5.  
  6. set noglob
  7.  
  8. # gather parameters
  9. if ($#argv == 0) then
  10.     echo $usage
  11.     exit(1)
  12. endif
  13.  
  14. while ( $#argv > 0 )
  15.     switch ( $argv[1] )
  16.     case -d:
  17.         if ( $?destDir ) then
  18.         echo ${prog}: dest-dir parameter already set to $destDir.
  19.         echo $usage
  20.         exit(1)
  21.         else if ( $#argv < 2 ) then
  22.         echo ${prog}: -d option requires destination directory.
  23.         echo $usage
  24.         exit(1)
  25.         else
  26.         set destDir = "$argv[2]"
  27.         shift; shift
  28.         breaksw
  29.         endif
  30.     case -p:
  31.         if ( $?padSize ) then
  32.         echo ${prog}: pad-size parameter already set to $padSize.
  33.         echo $usage
  34.         exit(1)
  35.         else if ( $#argv < 2 ) then
  36.         echo ${prog}: -p option requires value.
  37.         echo $usage
  38.         exit(1)
  39.         else if ( $argv[2] !~ [0-9]* ) then
  40.         echo ${prog}: -p option requires positive numerical value.
  41.         echo $usage
  42.         exit(1)
  43.         else
  44.         @ padSize = $argv[2]
  45.         shift; shift
  46.         breaksw
  47.         endif
  48.     case -*:
  49.         echo ${prog}: Unknown option: $argv[1].
  50.         echo $usage
  51.         exit(1)
  52.     case *.pkg:
  53.         if ( $?bigPackage ) then
  54.         echo ${prog}: big-package parameter already set to $bigPackage.
  55.         echo $usage
  56.         exit(1)
  57.         else
  58.         set bigPackage = $argv[1]
  59.         shift
  60.         breaksw
  61.         endif
  62.     case [0-9]*:
  63.         if ( $?chunkSize ) then
  64.         echo ${prog}: chunk-size parameter already set to $chunkSize.
  65.         echo $usage
  66.         exit(1)
  67.         else
  68.         @ chunkSize = $argv[1]
  69.         shift
  70.         breaksw
  71.         endif
  72.     default:
  73.         if ( $?bigPackage ) then
  74.         echo ${prog}: unrecognized parameter: $argv[1]
  75.         echo $usage
  76.         exit(1)
  77.         else if ( ! -d $argv[1].pkg ) then
  78.         echo ${prog}: $argv[1].pkg does not exist.
  79.         echo $usage
  80.         exit(1)
  81.         else
  82.         set bigPackage = "$argv[1].pkg"
  83.         shift
  84.         breaksw
  85.         endif
  86.     endsw
  87. end
  88.  
  89. # check for mandatory parameters
  90. if ( ! $?bigPackage) then
  91.     echo ${prog}: missing big-package parameter.
  92.     echo $usage
  93.     exit(1)
  94. else if ( ! $?chunkSize) then
  95.     echo ${prog}: missing chunk-size parameter.
  96.     echo $usage
  97.     exit(1)
  98. endif
  99.  
  100. # check for valid pad size
  101. if ( $?padSize ) then
  102.     if ( $padSize <= 0 ) then
  103.     echo ${prog}: pad-size must be greater than 0.
  104.     exit(1)
  105.     else if ( $padSize >= $chunkSize ) then
  106.     echo ${prog}: pad-size must be less than chunk-size.
  107.     exit(1)
  108.     endif
  109. endif
  110.  
  111. unset noglob
  112.  
  113. # destDir gets default value if unset on command line
  114. if ( $?destDir ) then
  115.     /bin/mkdirs $destDir
  116.     set olddir = `pwd`
  117.     cd $destDir
  118.     set destDir = `/bin/pwd`
  119.     cd $olddir    
  120. else
  121.     set destDir = `/bin/pwd`
  122. endif
  123.  
  124. # derive the root name from the big package
  125. set root = `/usr/bin/basename ${bigPackage} .pkg`
  126.  
  127. # get the floppy disk pattern
  128. if ( -f ${bigPackage}/${root}.info ) then
  129.     set infofile = ${bigPackage}/${root}.info
  130. else if ( -f ${bigPackage}/English.lproj/${root}.info ) then
  131.     set infofile = ${bigPackage}/English.lproj/${root}.info
  132. else
  133.     set infofile = `find ${bigPackage} -name '*.info' -print | head -1`
  134. endif
  135.  
  136. if ( "$infofile" == "" ) then
  137.     set pattern = "${root} #%d"
  138. else
  139.     set pattern = `/usr/bin/fgrep -i DiskName $infofile | /bin/sed 's/^[Dd][Ii][Ss][Kk][Nn][Aa][Mm][Ee]//'`
  140.     if ( "${pattern}" == "" || "`echo ${pattern} | /usr/bin/fgrep '%d'`" == "" ) then
  141.         set pattern = "${root} #%d"
  142.     endif
  143. endif
  144.  
  145. # generate the chunked packages
  146. echo Chunking $bigPackage ...
  147.  
  148. # convert kBytes to bytes
  149. @ chunkSize *= 1024                    
  150. if ( $?padSize ) @ padSize *= 1024
  151.  
  152. # chunk the archive
  153. set bigArchive = ${bigPackage}/${root}.tar.Z
  154. echo -n "    creating archive chunks ... "
  155. if ( $?padSize ) then
  156.     /NextAdmin/Installer.app/chunk $chunkSize +$padSize $bigArchive $destDir
  157.     echo done.
  158. else
  159.     /NextAdmin/Installer.app/chunk $chunkSize $bigArchive $destDir
  160.     echo done.
  161. endif
  162.  
  163. # loop, generating small packages
  164. @ i = 1
  165. set chunk = ${root}.tar.Z.$i
  166. cd ${bigPackage}
  167.  
  168. while ( -e $destDir/$chunk )
  169.  
  170.     # create small package directory
  171.     set destSubDir = `echo ${pattern} | /bin/sed "s/%d/${i}/g"`
  172.     set destPkg = "${destDir}/${destSubDir}/${root}.pkg"
  173.     echo -n "    creating $destPkg ... "
  174.     if ( -e "${destDir}/${destSubDir}" ) /bin/rm -rf "${destDir}/${destSubDir}"
  175.     if ( ! -d "${destDir}" ) /bin/mkdirs -m 755 "${destDir}"
  176.     /bin/mkdir "${destDir}/${destSubDir}"
  177.     /bin/chmod 755 "${destDir}/${destSubDir}"
  178.     /bin/mkdir "$destPkg"
  179.     /bin/chmod 755 "$destPkg"
  180.  
  181.     # copy files into small package directory
  182.     foreach file ( *.info *.sizes *.tiff *.bom *.lproj *.pre_install *.post_install *.pre_delete *.post_delete )
  183.     /bin/cp -rp ${file} "$destPkg"
  184.     end
  185.     
  186.     # move archive chunk into small package directory
  187.     /bin/cp -p $destDir/$chunk "$destPkg"
  188.     /bin/rm -f $destDir/$chunk
  189.     /bin/chmod 444 "$destPkg"/$chunk
  190.     
  191.     @ i++
  192.     set chunk = ${root}.tar.Z.$i
  193.     echo done.
  194.     
  195. end
  196. /usr/bin/touch "$destPkg"/.last
  197.  
  198. echo " ... finished chunking $bigPackage."
  199. exit(0)
  200.  
  201. # end chunkPackage
  202.     
  203.