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