bottleneck testcase based on rubbos
[bottlenecks.git] / rubbos / app / tomcat-connectors-1.2.32-src / tools / jkrelease.sh
1 #!/bin/ksh
2
3 # Licensed to the Apache Software Foundation (ASF) under one or more
4 # contributor license agreements.  See the NOTICE file distributed with
5 # this work for additional information regarding copyright ownership.
6 # The ASF licenses this file to You under the Apache License, Version 2.0
7 # (the "License"); you may not use this file except in compliance with
8 # the License.  You may obtain a copy of the License at
9 #
10 #     http://www.apache.org/licenses/LICENSE-2.0
11 #
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
17
18
19 # Make sure to set your path so that we can find
20 # the following binaries:
21 # cd, mkdir, cp, rm, find
22 # svn
23 # ant
24 # libtoolize, aclocal, autoheader, automake, autoconf
25 # tar, zip, gzip
26 # gpg
27 # And any one of: w3m, elinks, links (links2)
28
29 SVNROOT="http://svn.apache.org/repos/asf"
30 SVNPROJ="tomcat/jk"
31 JK_CVST="tomcat-connectors"
32 JK_OWNER="root"
33 JK_GROUP="bin"
34 JK_TOOLS="`pwd`"
35
36 COPY_TOP="KEYS"
37 COPY_JK="BUILD.txt native jkstatus support tools xdocs"
38 COPY_NATIVE="LICENSE NOTICE"
39 COPY_BUILD="docs"
40 COPY_CONF="httpd-jk.conf uriworkermap.properties workers.properties workers.properties.minimal"
41 SIGN_OPTS=""
42
43 #################### NO CHANGE BELOW THIS LINE ##############
44
45 #################### FUNCTIONS ##############
46
47 usage() {
48     echo "Usage:: $0 -v VERSION [-f] [-r revision] [-t tag | -b BRANCH | -T | -d DIR]"
49     echo "        -v: version to package"
50     echo "        -f: force, do not validate tag against version"
51     echo "        -t: tag to use if different from version"
52     echo "        -r: revision to package"
53     echo "        -b: package from branch BRANCH"
54     echo "        -T: package from trunk"
55     echo "        -d: package from local directory"
56     echo "        -p: GNU PG passphrrase used for signing"
57     echo "        -k: ID of GNU PG key to use for signing"
58 }
59
60 copy_files() {
61     src=$1
62     target=$2
63     list="$3"
64
65     mkdir -p $target
66     for item in $list
67     do
68         echo "Copying $item from $src ..."
69         cp -pr $src/$item $target/
70     done
71 }
72
73 #################### MAIN ##############
74
75 conflict=0
76 while getopts :v:t:r:b:d:p:k:Tf c
77 do
78     case $c in
79     v)         version=$OPTARG;;
80     t)         tag=$OPTARG
81                conflict=$(($conflict+1));;
82     r)         revision=$OPTARG;;
83     k)         SIGN_OPTS="--default-key=$OPTARG $SIGN_OPTS";;
84     p)         SIGN_OPTS="--passphrase=$OPTARG $SIGN_OPTS";;
85     b)         branch=$OPTARG
86                conflict=$(($conflict+1));;
87     T)         trunk=trunk
88                conflict=$(($conflict+1));;
89     d)         local_dir=$OPTARG
90                conflict=$(($conflict+1));;
91     f)         force='y';;
92     \:)        usage
93                exit 2;;
94     \?)        usage
95                exit 2;;
96     esac
97 done
98 shift `expr $OPTIND - 1`
99
100 if [ $conflict -gt 1 ]
101 then
102     usage
103     echo "Only one of the options '-t', '-b', '-T'  and '-d' is allowed."
104     exit 2
105 fi
106
107 if [ -n "$local_dir" ]
108 then
109     echo "Caution: Packaging from directory!"
110     echo "Make sure the directory is committed."
111     answer="x"
112     while [ "$answer" != "y" -a "$answer" != "n" ]
113     do
114         echo "Do you want to proceed? [y/n]"
115         read answer
116     done
117     if [ "$answer" != "y" ]
118     then
119         echo "Aborting."
120         exit 4
121     fi
122 fi
123
124 if [ -z "$version" ]
125 then
126     usage
127     exit 2
128 fi
129 if [ -n "$revision" ]
130 then
131     revision="-r $revision"
132 fi
133 if [ -n "$trunk" ]
134 then
135     JK_SVN_URL="${SVNROOT}/${SVNPROJ}/trunk"
136     svn_url_info="`svn help info | grep URL`"
137     if [ -n "$svn_url_info" ]
138     then
139         JK_SVN_INFO="${JK_SVN_URL}"
140     else
141         JK_SVN_INFO=.
142     fi
143     JK_REV=`svn info $revision $JK_SVN_INFO | awk '$1 == "Revision:" {print $2}'`
144     if [ -z "$JK_REV" ]
145     then
146        echo "No Revision found at '$JK_SVN_URL'"
147        exit 3
148     fi
149     JK_SUFFIX=-${JK_REV}
150     JK_DIST=${JK_CVST}-${version}-dev${JK_SUFFIX}-src
151 elif [ -n "$branch" ]
152 then
153     JK_BRANCH=`echo $branch | sed -e 's#/#__#g'`
154     JK_SVN_URL="${SVNROOT}/${SVNPROJ}/branches/$branch"
155     JK_REV=`svn info $revision ${JK_SVN_URL} | awk '$1 == "Revision:" {print $2}'`
156     if [ -z "$JK_REV" ]
157     then
158        echo "No Revision found at '$JK_SVN_URL'"
159        exit 3
160     fi
161     JK_SUFFIX=-${JK_BRANCH}-${JK_REV}
162     JK_DIST=${JK_CVST}-${version}-dev${JK_SUFFIX}-src
163 elif [ -n "$local_dir" ]
164 then
165     JK_SVN_URL="$local_dir"
166     JK_REV=`svn info $revision ${JK_SVN_URL} | awk '$1 == "Revision:" {print $2}'`
167     if [ -z "$JK_REV" ]
168     then
169        echo "No Revision found at '$JK_SVN_URL'"
170        exit 3
171     fi
172     JK_SUFFIX=-local-`date +%Y%m%d%H%M%S`-${JK_REV}
173     JK_DIST=${JK_CVST}-${version}-dev${JK_SUFFIX}-src
174 else
175     JK_VER=$version
176     JK_TAG=`echo $version | sed -e 's#^#JK_#' -e 's#\.#_#g'`
177     if [ -n $tag ]
178     then
179         if [ -z $force ]
180         then
181             echo $tag | grep "^$JK_TAG" > /dev/null 2>&1
182             if [ $? -gt 0 ]
183             then
184                 echo "Tag '$tag' doesn't belong to version '$version'."
185                 echo "Force using '-f' if you are sure."
186                 exit 5
187             fi
188         fi
189         JK_TAG=$tag
190     fi
191     JK_SVN_URL="${SVNROOT}/${SVNPROJ}/tags/${JK_TAG}"
192     JK_REV=`svn info $revision ${JK_SVN_URL} | awk '$1 == "Revision:" {print $2}'`
193     JK_SUFFIX=" ($JK_REV)"
194     JK_DIST=${JK_CVST}-${JK_VER}-src
195 fi
196
197 echo "Using subversion URL: $JK_SVN_URL"
198 echo "Rolling into file $JK_DIST.*"
199 sleep 2
200
201 umask 022
202
203 rm -rf ${JK_DIST}
204 rm -rf ${JK_DIST}.tmp
205
206 mkdir -p ${JK_DIST}.tmp
207 svn export $revision "${JK_SVN_URL}" ${JK_DIST}.tmp/jk
208 if [ $? -ne 0 ]; then
209   echo "svn export failed"
210   exit 1
211 fi
212
213 for item in ${COPY_TOP}
214 do
215     svn export $revision "${JK_SVN_URL}/${item}" ${JK_DIST}.tmp/${item}
216 done
217
218 # Build documentation.
219 cd ${JK_DIST}.tmp/jk/xdocs
220 ant
221 cd ../../..
222
223 # Update version information
224 file=${JK_DIST}.tmp/jk/native/common/jk_version.h
225 cp -p $file $file.orig
226 sed -e 's/^#define JK_REVISION .*/#define JK_REVISION "'"$JK_SUFFIX"'"/' \
227   $file.orig > $file
228 rm $file.orig
229
230 # Copying things into the source distribution
231 copy_files ${JK_DIST}.tmp $JK_DIST "$COPY_TOP"
232 copy_files ${JK_DIST}.tmp/jk $JK_DIST "$COPY_JK"
233 copy_files ${JK_DIST}.tmp/jk/native $JK_DIST "$COPY_NATIVE"
234 copy_files ${JK_DIST}.tmp/jk/build $JK_DIST "$COPY_BUILD"
235 copy_files ${JK_DIST}.tmp/jk/conf $JK_DIST/conf "$COPY_CONF"
236
237 # Remove extra directories and files
238 targetdir=${JK_DIST}
239 rm -rf ${targetdir}/xdocs/jk2
240 rm -rf ${targetdir}/native/CHANGES.txt
241 rm -rf ${targetdir}/native/build.xml
242 rm -rf ${targetdir}/native/NOTICE
243 rm -rf ${targetdir}/native/LICENSE
244 find ${JK_DIST} -name .cvsignore -exec rm -rf \{\} \; 
245 find ${JK_DIST} -name CVS -exec rm -rf \{\} \; 
246 find ${JK_DIST} -name .svn -exec rm -rf \{\} \; 
247
248 cd ${JK_DIST}/native
249
250 # Check for links, elinks or w3m
251 W3MOPTS="-dump -cols 80 -t 4 -S -O iso-8859-1 -T text/html"
252 ELNKOPTS="-dump -dump-width 80 -dump-charset iso-8859-1 -no-numbering -no-home"
253 LNKOPTS="-dump -width 80 -codepage iso-8859-1 -no-g -html-numbered-links 0"
254 failed=true
255 for tool in `echo "w3m elinks links"`
256 do
257   found=false
258   for dir in `echo ${PATH} | sed 's!^:!.:!;s!:$!:.!;s!::!:.:!g;s!:! !g'`
259   do
260     if [ -x ${dir}/${tool} ]
261     then
262       found=true
263       break
264     fi
265   done
266
267   # Try to run it
268   if ${found}
269   then
270     case ${tool} in
271       w3m)
272         TOOL="w3m $W3MOPTS"
273         ;;
274       links)
275         TOOL="links $LNKOPTS"
276         ;;
277       elinks)
278         TOOL="elinks $ELNKOPTS"
279         ;;
280     esac
281     rm -f CHANGES
282     echo "Creating the CHANGES file using '$TOOL' ..."
283     ${TOOL} ../docs/miscellaneous/printer/changelog.html > CHANGES 2>/dev/null
284     if [ -f CHANGES -a -s CHANGES ]
285     then
286       failed=false
287       break
288     fi
289   fi
290 done
291 if [ ${failed} = "true" ]
292 then
293   echo "Can't convert html to text (CHANGES)"
294   exit 1
295 fi
296
297 # Export text docs
298 echo "Creating the NEWS file using '$TOOL' ..."
299 rm -f NEWS
300 touch NEWS
301 for news in `ls -r ../xdocs/news/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].xml`
302 do
303   print=`echo $news | sed -e 's#xdocs/news#docs/news/printer#' -e 's#\.xml#.html#'`
304   echo "Adding $print to NEWS file ..."
305   ${TOOL} $print >>NEWS
306 done
307 if [ ! -s NEWS ]
308 then
309   echo "Can't convert html to text (NEWS)"
310   exit 1
311 fi
312
313 # Generate configure et. al.
314 ./buildconf.sh
315 cd ../../
316
317 # Pack
318 tar cfz ${JK_DIST}.tar.gz --owner="${JK_OWNER}" --group="${JK_GROUP}" ${JK_DIST} || exit 1
319 perl ${JK_DIST}/tools/lineends.pl --cr ${JK_DIST}
320 zip -9 -r ${JK_DIST}.zip ${JK_DIST}
321
322 # Create detached signature and verify it
323 archive=${JK_DIST}.tar.gz
324 . ${JK_TOOLS}/signfile.sh ${SIGN_OPTS} $archive
325 archive=${JK_DIST}.zip
326 . ${JK_TOOLS}/signfile.sh ${SIGN_OPTS} $archive
327