package 7.3 KB

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