|
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 |