comparison Xcode/package @ 2207:d63e9f5944ae

Unpacked project archives to get individual file history in subversion
author Sam Lantinga <slouken@libsdl.org>
date Sat, 21 Jul 2007 17:09:01 +0000
parents
children
comparison
equal deleted inserted replaced
2206:ca7d2227d630 2207:d63e9f5944ae
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