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