xref: /utopia/UTPA2-700.0.x/projects/build/scripts/patch-kernel (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi#! /bin/sh
2*53ee8cc1Swenshuai.xi# Script to apply kernel patches.
3*53ee8cc1Swenshuai.xi#   usage: patch-kernel [ sourcedir [ patchdir [ stopversion ] [ -acxx ] ] ]
4*53ee8cc1Swenshuai.xi#     The source directory defaults to /usr/src/linux, and the patch
5*53ee8cc1Swenshuai.xi#     directory defaults to the current directory.
6*53ee8cc1Swenshuai.xi# e.g.
7*53ee8cc1Swenshuai.xi#   scripts/patch-kernel . ..
8*53ee8cc1Swenshuai.xi#      Update the kernel tree in the current directory using patches in the
9*53ee8cc1Swenshuai.xi#      directory above to the latest Linus kernel
10*53ee8cc1Swenshuai.xi#   scripts/patch-kernel . .. -ac
11*53ee8cc1Swenshuai.xi#      Get the latest Linux kernel and patch it with the latest ac patch
12*53ee8cc1Swenshuai.xi#   scripts/patch-kernel . .. 2.4.9
13*53ee8cc1Swenshuai.xi#      Gets standard kernel 2.4.9
14*53ee8cc1Swenshuai.xi#   scripts/patch-kernel . .. 2.4.9 -ac
15*53ee8cc1Swenshuai.xi#      Gets 2.4.9 with latest ac patches
16*53ee8cc1Swenshuai.xi#   scripts/patch-kernel . .. 2.4.9 -ac11
17*53ee8cc1Swenshuai.xi#      Gets 2.4.9 with ac patch ac11
18*53ee8cc1Swenshuai.xi#   Note: It uses the patches relative to the Linus kernels, not the
19*53ee8cc1Swenshuai.xi#   ac to ac relative patches
20*53ee8cc1Swenshuai.xi#
21*53ee8cc1Swenshuai.xi# It determines the current kernel version from the top-level Makefile.
22*53ee8cc1Swenshuai.xi# It then looks for patches for the next sublevel in the patch directory.
23*53ee8cc1Swenshuai.xi# This is applied using "patch -p1 -s" from within the kernel directory.
24*53ee8cc1Swenshuai.xi# A check is then made for "*.rej" files to see if the patch was
25*53ee8cc1Swenshuai.xi# successful.  If it is, then all of the "*.orig" files are removed.
26*53ee8cc1Swenshuai.xi#
27*53ee8cc1Swenshuai.xi#       Nick Holloway <Nick.Holloway@alfie.demon.co.uk>, 2nd January 1995.
28*53ee8cc1Swenshuai.xi#
29*53ee8cc1Swenshuai.xi# Added support for handling multiple types of compression. What includes
30*53ee8cc1Swenshuai.xi# gzip, bzip, bzip2, zip, compress, and plaintext.
31*53ee8cc1Swenshuai.xi#
32*53ee8cc1Swenshuai.xi#       Adam Sulmicki <adam@cfar.umd.edu>, 1st January 1997.
33*53ee8cc1Swenshuai.xi#
34*53ee8cc1Swenshuai.xi# Added ability to stop at a given version number
35*53ee8cc1Swenshuai.xi# Put the full version number (i.e. 2.3.31) as the last parameter
36*53ee8cc1Swenshuai.xi#       Dave Gilbert <linux@treblig.org>, 11th December 1999.
37*53ee8cc1Swenshuai.xi
38*53ee8cc1Swenshuai.xi# Fixed previous patch so that if we are already at the correct version
39*53ee8cc1Swenshuai.xi# not to patch up.
40*53ee8cc1Swenshuai.xi#
41*53ee8cc1Swenshuai.xi# Added -ac option, use -ac or -ac9 (say) to stop at a particular version
42*53ee8cc1Swenshuai.xi#       Dave Gilbert <linux@treblig.org>, 29th September 2001.
43*53ee8cc1Swenshuai.xi#
44*53ee8cc1Swenshuai.xi# Add support for (use of) EXTRAVERSION (to support 2.6.8.x, e.g.);
45*53ee8cc1Swenshuai.xi# update usage message;
46*53ee8cc1Swenshuai.xi# fix some whitespace damage;
47*53ee8cc1Swenshuai.xi# be smarter about stopping when current version is larger than requested;
48*53ee8cc1Swenshuai.xi#	Randy Dunlap <rdunlap@xenotime.net>, 2004-AUG-18.
49*53ee8cc1Swenshuai.xi#
50*53ee8cc1Swenshuai.xi# Add better support for (non-incremental) 2.6.x.y patches;
51*53ee8cc1Swenshuai.xi# If an ending version number if not specified, the script automatically
52*53ee8cc1Swenshuai.xi# increments the SUBLEVEL (x in 2.6.x.y) until no more patch files are found;
53*53ee8cc1Swenshuai.xi# however, EXTRAVERSION (y in 2.6.x.y) is never automatically incremented
54*53ee8cc1Swenshuai.xi# but must be specified fully.
55*53ee8cc1Swenshuai.xi#
56*53ee8cc1Swenshuai.xi# patch-kernel does not normally support reverse patching, but does so when
57*53ee8cc1Swenshuai.xi# applying EXTRAVERSION (x.y) patches, so that moving from 2.6.11.y to 2.6.11.z
58*53ee8cc1Swenshuai.xi# is easy and handled by the script (reverse 2.6.11.y and apply 2.6.11.z).
59*53ee8cc1Swenshuai.xi#	Randy Dunlap <rdunlap@xenotime.net>, 2005-APR-08.
60*53ee8cc1Swenshuai.xi
61*53ee8cc1Swenshuai.xiPNAME=patch-kernel
62*53ee8cc1Swenshuai.xi
63*53ee8cc1Swenshuai.xi# Set directories from arguments, or use defaults.
64*53ee8cc1Swenshuai.xisourcedir=${1-/usr/src/linux}
65*53ee8cc1Swenshuai.xipatchdir=${2-.}
66*53ee8cc1Swenshuai.xistopvers=${3-default}
67*53ee8cc1Swenshuai.xi
68*53ee8cc1Swenshuai.xiif [ "$1" = -h -o "$1" = --help -o ! -r "$sourcedir/Makefile" ]; then
69*53ee8cc1Swenshuai.xicat << USAGE
70*53ee8cc1Swenshuai.xiusage: $PNAME [-h] [ sourcedir [ patchdir [ stopversion ] [ -acxx ] ] ]
71*53ee8cc1Swenshuai.xi  source directory defaults to /usr/src/linux,
72*53ee8cc1Swenshuai.xi  patch directory defaults to the current directory,
73*53ee8cc1Swenshuai.xi  stopversion defaults to <all in patchdir>.
74*53ee8cc1Swenshuai.xiUSAGE
75*53ee8cc1Swenshuai.xiexit 1
76*53ee8cc1Swenshuai.xifi
77*53ee8cc1Swenshuai.xi
78*53ee8cc1Swenshuai.xi# See if we have any -ac options
79*53ee8cc1Swenshuai.xifor PARM in $*
80*53ee8cc1Swenshuai.xido
81*53ee8cc1Swenshuai.xi  case $PARM in
82*53ee8cc1Swenshuai.xi	  -ac*)
83*53ee8cc1Swenshuai.xi		  gotac=$PARM;
84*53ee8cc1Swenshuai.xi
85*53ee8cc1Swenshuai.xi	esac;
86*53ee8cc1Swenshuai.xidone
87*53ee8cc1Swenshuai.xi
88*53ee8cc1Swenshuai.xi# ---------------------------------------------------------------------------
89*53ee8cc1Swenshuai.xi# arg1 is filename
90*53ee8cc1Swenshuai.xinoFile () {
91*53ee8cc1Swenshuai.xi	echo "cannot find patch file: ${patch}"
92*53ee8cc1Swenshuai.xi	exit 1
93*53ee8cc1Swenshuai.xi}
94*53ee8cc1Swenshuai.xi
95*53ee8cc1Swenshuai.xi# ---------------------------------------------------------------------------
96*53ee8cc1Swenshuai.xibackwards () {
97*53ee8cc1Swenshuai.xi	echo "$PNAME does not support reverse patching"
98*53ee8cc1Swenshuai.xi	exit 1
99*53ee8cc1Swenshuai.xi}
100*53ee8cc1Swenshuai.xi
101*53ee8cc1Swenshuai.xi# ---------------------------------------------------------------------------
102*53ee8cc1Swenshuai.xi# Find a file, first parameter is basename of file
103*53ee8cc1Swenshuai.xi# it tries many compression mechanisms and sets variables to say how to get it
104*53ee8cc1Swenshuai.xifindFile () {
105*53ee8cc1Swenshuai.xi  filebase=$1;
106*53ee8cc1Swenshuai.xi
107*53ee8cc1Swenshuai.xi  if [ -r ${filebase}.gz ]; then
108*53ee8cc1Swenshuai.xi		ext=".gz"
109*53ee8cc1Swenshuai.xi		name="gzip"
110*53ee8cc1Swenshuai.xi		uncomp="gunzip -dc"
111*53ee8cc1Swenshuai.xi  elif [ -r ${filebase}.bz  ]; then
112*53ee8cc1Swenshuai.xi		ext=".bz"
113*53ee8cc1Swenshuai.xi		name="bzip"
114*53ee8cc1Swenshuai.xi		uncomp="bunzip -dc"
115*53ee8cc1Swenshuai.xi  elif [ -r ${filebase}.bz2 ]; then
116*53ee8cc1Swenshuai.xi		ext=".bz2"
117*53ee8cc1Swenshuai.xi		name="bzip2"
118*53ee8cc1Swenshuai.xi		uncomp="bunzip2 -dc"
119*53ee8cc1Swenshuai.xi  elif [ -r ${filebase}.zip ]; then
120*53ee8cc1Swenshuai.xi		ext=".zip"
121*53ee8cc1Swenshuai.xi		name="zip"
122*53ee8cc1Swenshuai.xi		uncomp="unzip -d"
123*53ee8cc1Swenshuai.xi  elif [ -r ${filebase}.Z ]; then
124*53ee8cc1Swenshuai.xi		ext=".Z"
125*53ee8cc1Swenshuai.xi		name="uncompress"
126*53ee8cc1Swenshuai.xi		uncomp="uncompress -c"
127*53ee8cc1Swenshuai.xi  elif [ -r ${filebase} ]; then
128*53ee8cc1Swenshuai.xi		ext=""
129*53ee8cc1Swenshuai.xi		name="plaintext"
130*53ee8cc1Swenshuai.xi		uncomp="cat"
131*53ee8cc1Swenshuai.xi  else
132*53ee8cc1Swenshuai.xi	return 1;
133*53ee8cc1Swenshuai.xi  fi
134*53ee8cc1Swenshuai.xi
135*53ee8cc1Swenshuai.xi  return 0;
136*53ee8cc1Swenshuai.xi}
137*53ee8cc1Swenshuai.xi
138*53ee8cc1Swenshuai.xi# ---------------------------------------------------------------------------
139*53ee8cc1Swenshuai.xi# Apply a patch and check it goes in cleanly
140*53ee8cc1Swenshuai.xi# First param is patch name (e.g. patch-2.4.9-ac5) - without path or extension
141*53ee8cc1Swenshuai.xi
142*53ee8cc1Swenshuai.xiapplyPatch () {
143*53ee8cc1Swenshuai.xi  echo -n "Applying $1 (${name})... "
144*53ee8cc1Swenshuai.xi  if $uncomp ${patchdir}/$1${ext} | patch -p1 -s -N -E -d $sourcedir
145*53ee8cc1Swenshuai.xi  then
146*53ee8cc1Swenshuai.xi    echo "done."
147*53ee8cc1Swenshuai.xi  else
148*53ee8cc1Swenshuai.xi    echo "failed.  Clean up yourself."
149*53ee8cc1Swenshuai.xi    return 1;
150*53ee8cc1Swenshuai.xi  fi
151*53ee8cc1Swenshuai.xi  if [ "`find $sourcedir/ '(' -name '*.rej' -o -name '.*.rej' ')' -print`" ]
152*53ee8cc1Swenshuai.xi  then
153*53ee8cc1Swenshuai.xi    echo "Aborting.  Reject files found."
154*53ee8cc1Swenshuai.xi    return 1;
155*53ee8cc1Swenshuai.xi  fi
156*53ee8cc1Swenshuai.xi  # Remove backup files
157*53ee8cc1Swenshuai.xi  find $sourcedir/ '(' -name '*.orig' -o -name '.*.orig' ')' -exec rm -f {} \;
158*53ee8cc1Swenshuai.xi
159*53ee8cc1Swenshuai.xi  return 0;
160*53ee8cc1Swenshuai.xi}
161*53ee8cc1Swenshuai.xi
162*53ee8cc1Swenshuai.xi# ---------------------------------------------------------------------------
163*53ee8cc1Swenshuai.xi# arg1 is patch filename
164*53ee8cc1Swenshuai.xireversePatch () {
165*53ee8cc1Swenshuai.xi	echo -n "Reversing $1 (${name}) ... "
166*53ee8cc1Swenshuai.xi	if $uncomp ${patchdir}/"$1"${ext} | patch -p1 -Rs -N -E -d $sourcedir
167*53ee8cc1Swenshuai.xi	then
168*53ee8cc1Swenshuai.xi		echo "done."
169*53ee8cc1Swenshuai.xi	else
170*53ee8cc1Swenshuai.xi		echo "failed.  Clean it up."
171*53ee8cc1Swenshuai.xi		exit 1
172*53ee8cc1Swenshuai.xi	fi
173*53ee8cc1Swenshuai.xi	if [ "`find $sourcedir/ '(' -name '*.rej' -o -name '.*.rej' ')' -print`" ]
174*53ee8cc1Swenshuai.xi	then
175*53ee8cc1Swenshuai.xi		echo "Aborting.  Reject files found."
176*53ee8cc1Swenshuai.xi		return 1
177*53ee8cc1Swenshuai.xi	fi
178*53ee8cc1Swenshuai.xi	# Remove backup files
179*53ee8cc1Swenshuai.xi	find $sourcedir/ '(' -name '*.orig' -o -name '.*.orig' ')' -exec rm -f {} \;
180*53ee8cc1Swenshuai.xi
181*53ee8cc1Swenshuai.xi	return 0
182*53ee8cc1Swenshuai.xi}
183*53ee8cc1Swenshuai.xi
184*53ee8cc1Swenshuai.xi# set current VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION
185*53ee8cc1Swenshuai.xi# force $TMPFILEs below to be in local directory: a slash character prevents
186*53ee8cc1Swenshuai.xi# the dot command from using the search path.
187*53ee8cc1Swenshuai.xiTMPFILE=`mktemp ./.tmpver.XXXXXX` || { echo "cannot make temp file" ; exit 1; }
188*53ee8cc1Swenshuai.xigrep -E "^(VERSION|PATCHLEVEL|SUBLEVEL|EXTRAVERSION)" $sourcedir/Makefile > $TMPFILE
189*53ee8cc1Swenshuai.xitr -d [:blank:] < $TMPFILE > $TMPFILE.1
190*53ee8cc1Swenshuai.xi. $TMPFILE.1
191*53ee8cc1Swenshuai.xirm -f $TMPFILE*
192*53ee8cc1Swenshuai.xiif [ -z "$VERSION" -o -z "$PATCHLEVEL" -o -z "$SUBLEVEL" ]
193*53ee8cc1Swenshuai.xithen
194*53ee8cc1Swenshuai.xi    echo "unable to determine current kernel version" >&2
195*53ee8cc1Swenshuai.xi    exit 1
196*53ee8cc1Swenshuai.xifi
197*53ee8cc1Swenshuai.xi
198*53ee8cc1Swenshuai.xiNAME=`grep ^NAME $sourcedir/Makefile`
199*53ee8cc1Swenshuai.xiNAME=${NAME##*=}
200*53ee8cc1Swenshuai.xi
201*53ee8cc1Swenshuai.xiecho "Current kernel version is $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION} ($NAME)"
202*53ee8cc1Swenshuai.xi
203*53ee8cc1Swenshuai.xi# strip EXTRAVERSION to just a number (drop leading '.' and trailing additions)
204*53ee8cc1Swenshuai.xiEXTRAVER=
205*53ee8cc1Swenshuai.xiif [ x$EXTRAVERSION != "x" ]
206*53ee8cc1Swenshuai.xithen
207*53ee8cc1Swenshuai.xi	EXTRAVER=${EXTRAVERSION#.}
208*53ee8cc1Swenshuai.xi	EXTRAVER=${EXTRAVER%%[[:punct:]]*}
209*53ee8cc1Swenshuai.xi	#echo "$PNAME: changing EXTRAVERSION from $EXTRAVERSION to $EXTRAVER"
210*53ee8cc1Swenshuai.xifi
211*53ee8cc1Swenshuai.xi
212*53ee8cc1Swenshuai.xi#echo "stopvers=$stopvers"
213*53ee8cc1Swenshuai.xiif [ $stopvers != "default" ]; then
214*53ee8cc1Swenshuai.xi	STOPSUBLEVEL=`echo $stopvers | cut -d. -f3`
215*53ee8cc1Swenshuai.xi	STOPEXTRA=`echo $stopvers | cut -d. -f4`
216*53ee8cc1Swenshuai.xi	STOPFULLVERSION=${stopvers%%.$STOPEXTRA}
217*53ee8cc1Swenshuai.xi	#echo "#___STOPSUBLEVEL=/$STOPSUBLEVEL/, STOPEXTRA=/$STOPEXTRA/"
218*53ee8cc1Swenshuai.xielse
219*53ee8cc1Swenshuai.xi	STOPSUBLEVEL=9999
220*53ee8cc1Swenshuai.xi	STOPEXTRA=9999
221*53ee8cc1Swenshuai.xifi
222*53ee8cc1Swenshuai.xi
223*53ee8cc1Swenshuai.xi# This all assumes a 2.6.x[.y] kernel tree.
224*53ee8cc1Swenshuai.xi# Don't allow backwards/reverse patching.
225*53ee8cc1Swenshuai.xiif [ $STOPSUBLEVEL -lt $SUBLEVEL ]; then
226*53ee8cc1Swenshuai.xi	backwards
227*53ee8cc1Swenshuai.xifi
228*53ee8cc1Swenshuai.xi
229*53ee8cc1Swenshuai.xiif [ x$EXTRAVER != "x" ]; then
230*53ee8cc1Swenshuai.xi	CURRENTFULLVERSION="$VERSION.$PATCHLEVEL.$SUBLEVEL.$EXTRAVER"
231*53ee8cc1Swenshuai.xielse
232*53ee8cc1Swenshuai.xi	CURRENTFULLVERSION="$VERSION.$PATCHLEVEL.$SUBLEVEL"
233*53ee8cc1Swenshuai.xifi
234*53ee8cc1Swenshuai.xi
235*53ee8cc1Swenshuai.xiif [ x$EXTRAVER != "x" ]; then
236*53ee8cc1Swenshuai.xi	echo "backing up to: $VERSION.$PATCHLEVEL.$SUBLEVEL"
237*53ee8cc1Swenshuai.xi	patch="patch-${CURRENTFULLVERSION}"
238*53ee8cc1Swenshuai.xi	findFile $patchdir/${patch} || noFile ${patch}
239*53ee8cc1Swenshuai.xi	reversePatch ${patch} || exit 1
240*53ee8cc1Swenshuai.xifi
241*53ee8cc1Swenshuai.xi
242*53ee8cc1Swenshuai.xi# now current is 2.6.x, with no EXTRA applied,
243*53ee8cc1Swenshuai.xi# so update to target SUBLEVEL (2.6.SUBLEVEL)
244*53ee8cc1Swenshuai.xi# and then to target EXTRAVER (2.6.SUB.EXTRAVER) if requested.
245*53ee8cc1Swenshuai.xi# If not ending sublevel is specified, it is incremented until
246*53ee8cc1Swenshuai.xi# no further sublevels are found.
247*53ee8cc1Swenshuai.xi
248*53ee8cc1Swenshuai.xiif [ $STOPSUBLEVEL -gt $SUBLEVEL ]; then
249*53ee8cc1Swenshuai.xiwhile :				# incrementing SUBLEVEL (s in v.p.s)
250*53ee8cc1Swenshuai.xido
251*53ee8cc1Swenshuai.xi    CURRENTFULLVERSION="$VERSION.$PATCHLEVEL.$SUBLEVEL"
252*53ee8cc1Swenshuai.xi    EXTRAVER=
253*53ee8cc1Swenshuai.xi    if [ x$STOPFULLVERSION = x$CURRENTFULLVERSION ]; then
254*53ee8cc1Swenshuai.xi        echo "Stopping at $CURRENTFULLVERSION base as requested."
255*53ee8cc1Swenshuai.xi        break
256*53ee8cc1Swenshuai.xi    fi
257*53ee8cc1Swenshuai.xi
258*53ee8cc1Swenshuai.xi    SUBLEVEL=$(($SUBLEVEL + 1))
259*53ee8cc1Swenshuai.xi    FULLVERSION="$VERSION.$PATCHLEVEL.$SUBLEVEL"
260*53ee8cc1Swenshuai.xi    #echo "#___ trying $FULLVERSION ___"
261*53ee8cc1Swenshuai.xi
262*53ee8cc1Swenshuai.xi    if [ $(($SUBLEVEL)) -gt $(($STOPSUBLEVEL)) ]; then
263*53ee8cc1Swenshuai.xi	echo "Stopping since sublevel ($SUBLEVEL) is beyond stop-sublevel ($STOPSUBLEVEL)"
264*53ee8cc1Swenshuai.xi	exit 1
265*53ee8cc1Swenshuai.xi    fi
266*53ee8cc1Swenshuai.xi
267*53ee8cc1Swenshuai.xi    patch=patch-$FULLVERSION
268*53ee8cc1Swenshuai.xi    # See if the file exists and find extension
269*53ee8cc1Swenshuai.xi    findFile $patchdir/${patch} || noFile ${patch}
270*53ee8cc1Swenshuai.xi
271*53ee8cc1Swenshuai.xi    # Apply the patch and check all is OK
272*53ee8cc1Swenshuai.xi    applyPatch $patch || break
273*53ee8cc1Swenshuai.xidone
274*53ee8cc1Swenshuai.xi#echo "#___sublevel all done"
275*53ee8cc1Swenshuai.xifi
276*53ee8cc1Swenshuai.xi
277*53ee8cc1Swenshuai.xi# There is no incremental searching for extraversion...
278*53ee8cc1Swenshuai.xiif [ "$STOPEXTRA" != "" ]; then
279*53ee8cc1Swenshuai.xiwhile :				# just to allow break
280*53ee8cc1Swenshuai.xido
281*53ee8cc1Swenshuai.xi# apply STOPEXTRA directly (not incrementally) (x in v.p.s.x)
282*53ee8cc1Swenshuai.xi	FULLVERSION="$VERSION.$PATCHLEVEL.$SUBLEVEL.$STOPEXTRA"
283*53ee8cc1Swenshuai.xi	#echo "#... trying $FULLVERSION ..."
284*53ee8cc1Swenshuai.xi	patch=patch-$FULLVERSION
285*53ee8cc1Swenshuai.xi
286*53ee8cc1Swenshuai.xi	# See if the file exists and find extension
287*53ee8cc1Swenshuai.xi	findFile $patchdir/${patch} || noFile ${patch}
288*53ee8cc1Swenshuai.xi
289*53ee8cc1Swenshuai.xi	# Apply the patch and check all is OK
290*53ee8cc1Swenshuai.xi	applyPatch $patch || break
291*53ee8cc1Swenshuai.xi	#echo "#___extraver all done"
292*53ee8cc1Swenshuai.xi	break
293*53ee8cc1Swenshuai.xidone
294*53ee8cc1Swenshuai.xifi
295*53ee8cc1Swenshuai.xi
296*53ee8cc1Swenshuai.xiif [ x$gotac != x ]; then
297*53ee8cc1Swenshuai.xi  # Out great user wants the -ac patches
298*53ee8cc1Swenshuai.xi	# They could have done -ac (get latest) or -acxx where xx=version they want
299*53ee8cc1Swenshuai.xi	if [ $gotac = "-ac" ]; then
300*53ee8cc1Swenshuai.xi	  # They want the latest version
301*53ee8cc1Swenshuai.xi		HIGHESTPATCH=0
302*53ee8cc1Swenshuai.xi		for PATCHNAMES in $patchdir/patch-${CURRENTFULLVERSION}-ac*\.*
303*53ee8cc1Swenshuai.xi		do
304*53ee8cc1Swenshuai.xi			ACVALUE=`echo $PATCHNAMES | sed -e 's/^.*patch-[0-9.]*-ac\([0-9]*\).*/\1/'`
305*53ee8cc1Swenshuai.xi			# Check it is actually a recognised patch type
306*53ee8cc1Swenshuai.xi			findFile $patchdir/patch-${CURRENTFULLVERSION}-ac${ACVALUE} || break
307*53ee8cc1Swenshuai.xi
308*53ee8cc1Swenshuai.xi		  if [ $ACVALUE -gt $HIGHESTPATCH ]; then
309*53ee8cc1Swenshuai.xi			  HIGHESTPATCH=$ACVALUE
310*53ee8cc1Swenshuai.xi		  fi
311*53ee8cc1Swenshuai.xi		done
312*53ee8cc1Swenshuai.xi
313*53ee8cc1Swenshuai.xi		if [ $HIGHESTPATCH -ne 0 ]; then
314*53ee8cc1Swenshuai.xi			findFile $patchdir/patch-${CURRENTFULLVERSION}-ac${HIGHESTPATCH} || break
315*53ee8cc1Swenshuai.xi			applyPatch patch-${CURRENTFULLVERSION}-ac${HIGHESTPATCH}
316*53ee8cc1Swenshuai.xi		else
317*53ee8cc1Swenshuai.xi		  echo "No -ac patches found"
318*53ee8cc1Swenshuai.xi		fi
319*53ee8cc1Swenshuai.xi	else
320*53ee8cc1Swenshuai.xi	  # They want an exact version
321*53ee8cc1Swenshuai.xi		findFile $patchdir/patch-${CURRENTFULLVERSION}${gotac} || {
322*53ee8cc1Swenshuai.xi		  echo "Sorry, I couldn't find the $gotac patch for $CURRENTFULLVERSION.  Hohum."
323*53ee8cc1Swenshuai.xi			exit 1
324*53ee8cc1Swenshuai.xi		}
325*53ee8cc1Swenshuai.xi		applyPatch patch-${CURRENTFULLVERSION}${gotac}
326*53ee8cc1Swenshuai.xi	fi
327*53ee8cc1Swenshuai.xifi
328