home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.0 / NeXTSTEP3.0.iso / NextAdmin / Installer.app / chunkPackage < prev    next >
Text File  |  1992-02-10  |  5KB  |  197 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 ) thenicho ${prog}: big-package parameter already set to $bigPackage.
  54.         echo $usage
  55.         exit(1)
  56.         else
  57.         set bigPackage = $argv[1]
  58.         shift
  59.         breaksw
  60.         endif
  61.     case [0-9]*:
  62.         if ( $?chunkSize ) then
  63.         echo ${prog}: chunk-size parameter already set to $chunkSize.
  64.         echo $usage
  65.         exit(1)
  66.         else
  67.         @ chunkSize = $argv[1]
  68.         shift
  69.         breaksw
  70.         endif
  71.     default:
  72.         if ( $?bigPackage ) then
  73.         echo ${prog}: unrecognized parameter: $argv[1]
  74.         echo $usage
  75.         exit(1)
  76.         else if ( ! -d $argv[1].pkg ) then
  77.         echo ${prog}: $argv[1].pkg does not exist.
  78.         echo $usage
  79.         exit(1)
  80.         else
  81.         set bigPackage = "$argv[1].pkg"
  82.         shift
  83.         breaksw
  84.         endif
  85.     endsw
  86. end
  87.  
  88. # check for mandatory parameters
  89. if ( ! $?bigPackage) then
  90.     echo ${prog}: missing big-package parameter.
  91.     echo $usage
  92.     exit(1)
  93. else if ( ! $?chunkSize) then
  94.     echo ${prog}: missing chunk-size parameter.
  95.     echo $usage
  96.     exit(1)
  97. endif
  98.  
  99. # check for valid pad size
  100. if ( $?padSize ) then
  101.     if ( $padSize <= 0 ) then
  102.     echo ${prog}: pad-size must be greater than 0.
  103.     exit(1)
  104.     else if ( $padSize >= $chunkSize ) then
  105.     echo ${prog}: pad-size must be less than chunk-size.
  106.     exit(1)
  107.     endif
  108. endif
  109.  
  110. unset noglob
  111.  
  112. # destDir gets default value if unset on command line
  113. if ( $?destDir ) then
  114.     /bin/mkdirs $destDir    
  115. else
  116.     set destDir = .
  117. endif
  118.  
  119. # derive the root name from the big package
  120. set root = `/usr/bin/basename ${bigPackage} .pkg`
  121.  
  122. # get the floppy disk pattern
  123. if ( -f ${bigPackage}/${root}.info ) then
  124.     set infofile = ${bigPackage}/${root}.info
  125. else if ( -f ${bigPackage}/English.lproj/${root}.info ) then
  126.     set infofile = ${bigPackage}/English.lproj/${root}.info
  127. else
  128.     set infofile = `find ${bigPackage} -name '*.info' -print | head -1`
  129. endif
  130.  
  131. if ( "$infofile" == "" ) then
  132.     set pattern = "${root} #%d"
  133. else
  134.     set pattern = `/usr/bin/fgrep -i DiskName $infofile | /bin/sed 's/^[Dd][Ii][Ss][Kk][Nn][Aa][Mm][Ee]//'`
  135.     if ( "${pattern}" == "" || "`echo ${pattern} | /usr/bin/fgrep '%d'`" == "" ) then
  136.         set pattern = "${root} #%d"
  137.     endif
  138. endif
  139.  
  140. # generate the chunked packages
  141. echo Chunking $bigPackage ...
  142.  
  143. # convert kBytes to bytes
  144. @ chunkSize *= 1024                    
  145. if ( $?padSize ) @ padSize *= 1024
  146.  
  147. # chunk the archive
  148. set bigArchive = ${bigPackage}/${root}.tar.Z
  149. echo -n "    creating archive chunks ... "
  150. if ( $?padSize ) then
  151.     /NextAdmin/Installepp/chunk $chunkSize +$padSize $bigArchive $destDir
  152.     echo done.
  153. else
  154.     /NextAdmin/Installer.app/chunk $chunkSize $bigArchive $destDir
  155.     echo done.
  156. endif
  157.  
  158. # loop, generating small packages
  159. @ i = 1
  160. set chunk = ${root}.tar.Z.$i
  161. cd ${bigPackage}
  162.  
  163. while ( -e $destDir/$chunk )
  164.  
  165.     # create small package directory
  166.     set destSubDir = `echo ${pattern} | /bin/sed "s/%d/${i}/g"`
  167.     set destPkg = "${destDir}/${destSubDir}/${root}.pkg"
  168.     echo -n "    creating $destPkg ... "
  169.     if ( -e "${destDir}/${destSubDir}" ) /bin/rm -rf "${destDir}/${destSubDir}"
  170.     if ( ! -d "${destDir}" ) /bin/mkdirs -m 755 "${destDir}"
  171.     /bin/mkdir "${destDir}/${destSubDir}"
  172.     /bin/chmod 755 "${destDir}/${destSubDir}"
  173.     /bin/mkdir "$destPkg"
  174.     /bin/chmod 755 "$destPkg"
  175.  
  176.     # copy files into small package directory
  177.     foreach file ( *.info *.sizes *.tiff *.bom *.lproj *.pre_install *.post_install *.pre_delete *.post_delete )
  178.     /bin/cp -rp ${file} "$destPkg"
  179.     end
  180.     
  181.     # move archive chunk into small package directory
  182.     /bin/cp -p $destDir/$chunk "$destPkg"
  183.     /bin/rm -f $destDir/$chunk
  184.     /bin/chmod 444 "$destPkg"/$chunk
  185.     
  186.     @ i++
  187.     set chunk = ${root}.tar.Z.$i
  188.     echo done.
  189.     
  190. end
  191. /usr/bin/touch "$destPkg"/.last
  192.  
  193. echo " ... finished chunking $bigPackage."
  194. exit(0)
  195.  
  196. # end chunkPackage
  197.