Restore README.txt, scripts.
This commit is contained in:
		
							parent
							
								
									7f2b706ac8
								
							
						
					
					
						commit
						11487c5358
					
				
							
								
								
									
										67
									
								
								README.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								README.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,67 @@ | ||||
| 
 | ||||
| 		Kernel package tips & tricks. | ||||
| 		~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||
| 
 | ||||
| The kernel is one of the more complicated packages in the distro, and | ||||
| for the newcomer, some of the voodoo in the spec file can be somewhat scary. | ||||
| This file attempts to document some of the magic. | ||||
| 
 | ||||
| 
 | ||||
| Speeding up make prep | ||||
| --------------------- | ||||
| The kernel is nearly 500MB of source code, and as such, 'make prep' | ||||
| takes a while. The spec file employs some trickery so that repeated | ||||
| invocations of make prep don't take as long.  Ordinarily the %prep | ||||
| phase of a package will delete the tree it is about to untar/patch. | ||||
| The kernel %prep keeps around an unpatched version of the tree, | ||||
| and makes a symlink tree clone of that clean tree and than applies | ||||
| the patches listed in the spec to the symlink tree. | ||||
| This makes a huge difference if you're doing multiple make preps a day. | ||||
| As an added bonus, doing a diff between the clean tree and the symlink | ||||
| tree is slightly faster than it would be doing two proper copies of the tree. | ||||
| 
 | ||||
| 
 | ||||
| build logs. | ||||
| ----------- | ||||
| There's a convenience helper script in scripts/grab-logs.sh | ||||
| that will grab the build logs from koji for the kernel version reported | ||||
| by make verrel | ||||
| 
 | ||||
| 
 | ||||
| config heirarchy. | ||||
| ----------------- | ||||
| Instead of having to maintain a config file for every arch variant we build on, | ||||
| the kernel spec uses a nested system of configs.  At the top level, is | ||||
| config-generic. Add options here that should be present in every possible | ||||
| config on all architectures. | ||||
| Beneath this are per-arch overrides. For example config-x86-generic add | ||||
| additional x86 specific options, and also _override_ any options that were | ||||
| set in config-generic. | ||||
| There exist two additional overrides, config-debug, and config-nodebug, | ||||
| which override -generic, and the per-arch overrides. It is documented | ||||
| further below. | ||||
| 
 | ||||
| debug options. | ||||
| -------------- | ||||
| This is a little complicated, as the purpose & meaning of this changes | ||||
| depending on where we are in the release cycle. | ||||
| If we are building for a current stable release, 'make release' has | ||||
| typically been run already, which sets up the following.. | ||||
| - Two builds occur, a 'kernel' and a 'kernel-debug' flavor. | ||||
| - kernel-debug will get various heavyweight debugging options like | ||||
|   lockdep etc turned on. | ||||
| 
 | ||||
| If we are building for rawhide, 'make debug' has been run, which changes | ||||
| the status quo to: | ||||
| - We only build one kernel 'kernel' | ||||
| - The debug options from 'config-debug' are always turned on. | ||||
| This is done to increase coverage testing, as not many people actually | ||||
| run kernel-debug. | ||||
| 
 | ||||
| To add new debug options, add an option to _both_ config-debug and config-nodebug, | ||||
| and also new stanzas to the Makefile 'debug' and 'release' targets. | ||||
| 
 | ||||
| Sometimes debug options get added to config-generic, or per-arch overrides | ||||
| instead of config-[no]debug. In this instance, the options should have no | ||||
| discernable performance impact, otherwise they belong in the debug files. | ||||
| 
 | ||||
							
								
								
									
										71
									
								
								scripts/bumpspecfile.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										71
									
								
								scripts/bumpspecfile.py
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,71 @@ | ||||
| #!/usr/bin/python | ||||
| # | ||||
| # Needs $GIT_COMMITTER_NAME and $GIT_COMMITTER_EMAIL set. | ||||
| # | ||||
| import re | ||||
| import sys | ||||
| import time | ||||
| import os | ||||
| import string | ||||
| 
 | ||||
| class Specfile: | ||||
|     def __init__(self,filename): | ||||
|         file=open(filename,"r") | ||||
|         self.lines=file.readlines() | ||||
|         self.vr="" | ||||
| 
 | ||||
|     def getNextVR(self,aspec): | ||||
|          # Get VR for changelog entry. | ||||
|         (ver,rel) = os.popen("LC_ALL=C rpm --specfile -q --qf '%%{version} %%{release}\n' --define 'dist %%{nil}' %s | head -1" % aspec).read().strip().split(' ') | ||||
| 	pos = 0 | ||||
|         # general released kernel case, bump 1st field | ||||
|         fedora_build = rel.split('.')[pos] | ||||
|         if fedora_build == "0": | ||||
|             # this is a devel kernel, bump 2nd field | ||||
|             pos = 1 | ||||
|         elif rel.split('.')[-1] != fedora_build: | ||||
|             # this is a branch, must bump 3rd field | ||||
|             pos = 2 | ||||
|         fedora_build = rel.split('.')[pos] | ||||
|         if pos == 1 and len(rel.split('.')) > 4: | ||||
|             # uh... what? devel kernel in a branch? private build? just do no VR in clog... | ||||
|             print "Warning: not adding any VR to changelog, couldn't tell for sure which field to bump" | ||||
|             pos = -1 | ||||
|         next_fedora_build = int(fedora_build) + 1 | ||||
|         if pos == 0: | ||||
|             nextrel = str(next_fedora_build) | ||||
|         elif pos == 1: | ||||
|             nextrel = "0." + str(next_fedora_build) | ||||
|         elif pos == 2: | ||||
|             nextrel = rel.split('.')[0] + "." + rel.split('.')[1] + "." + str(next_fedora_build) | ||||
|         if pos >= 0: | ||||
|             for s in rel.split('.')[pos + 1:]: | ||||
|                 nextrel = nextrel + "." + s | ||||
|             self.vr = " "+ver+'-'+nextrel | ||||
| 
 | ||||
|     def addChangelogEntry(self,entry): | ||||
|         user = os.environ.get("GIT_COMMITTER_NAME","unknown") | ||||
|         email = os.environ.get("GIT_COMMITTER_EMAIL","unknown") | ||||
|         if (email == "unknown"): | ||||
|             email = os.environ.get("USER","unknown")+"@fedoraproject.org" | ||||
|         changematch=re.compile(r"^%changelog") | ||||
|         date=time.strftime("%a %b %d %Y",   time.localtime(time.time())) | ||||
|         newchangelogentry="%changelog\n* "+date+" "+user+" <"+email+">"+self.vr+"\n"+entry+"\n\n" | ||||
|         for i in range(len(self.lines)): | ||||
|             if(changematch.match(self.lines[i])): | ||||
|                 self.lines[i]=newchangelogentry | ||||
|                 break | ||||
| 
 | ||||
|     def writeFile(self,filename): | ||||
|         file=open(filename,"w") | ||||
|         file.writelines(self.lines) | ||||
|         file.close() | ||||
| 
 | ||||
| if __name__=="__main__": | ||||
|   aspec=(sys.argv[1]) | ||||
|   s=Specfile(aspec) | ||||
|   entry=(sys.argv[2]) | ||||
|   s.getNextVR(aspec) | ||||
|   s.addChangelogEntry(entry) | ||||
|   s.writeFile(aspec) | ||||
| 
 | ||||
							
								
								
									
										27
									
								
								scripts/check-TODO.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										27
									
								
								scripts/check-TODO.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,27 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| for i in `grep ^* TODO  | awk '{ print $2 }'` | ||||
| do | ||||
|  if [ ! -f $i ]; then | ||||
|    echo "$i referenced in the TODO, but isn't in CVS!" | ||||
|  fi; | ||||
| done | ||||
| 
 | ||||
| # sometimes dead stuff lingers in cvs, even though it's not in the specfile. | ||||
| for i in *.patch | ||||
| do | ||||
|    for j in $(grep $i kernel.spec | grep Apply.*Patch | awk '{ print $2 }' | wc -l) | ||||
|    do | ||||
|      if [ "$j" = "0" ]; then | ||||
|        echo $i is in CVS, but not applied in spec file. | ||||
|        grep $i TODO | awk '{ print $2 " is also still in the TODO" }' | ||||
|      fi | ||||
|    done | ||||
| done | ||||
| 
 | ||||
| #for i in `grep ApplyPatch kernel.spec | awk '{ print $2 }'` | ||||
| #do | ||||
| #	R=$(grep $i TODO) | ||||
| #	echo "$i is in CVS, but not mentioned in the TODO!" | ||||
| #done | ||||
| 
 | ||||
							
								
								
									
										34
									
								
								scripts/combine.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										34
									
								
								scripts/combine.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,34 @@ | ||||
| #! /bin/sh | ||||
| 
 | ||||
| # combine a set of quilt patches | ||||
| 
 | ||||
| # $1 : base dir (source tree) | ||||
| # $2 : quilt dir (patches to apply) | ||||
| # $3 : pre-patch to apply first (optional) | ||||
| 
 | ||||
| # e.g.: | ||||
| # combine.sh /home/user/fedora/trunk/kernel/F-11/kernel-2.6.30/vanilla-2.6.30 \ | ||||
| #            /home/user/git/stable-queue/queue-2.6.30 \ | ||||
| #            /home/user/fedora/trunk/kernel/F-11/patch-2.6.30.5.bz2 | ||||
| 
 | ||||
| if [ $# -lt 2 ] ; then | ||||
|   exit 1 | ||||
| fi | ||||
| 
 | ||||
| TD="combine_temp.d" | ||||
| 
 | ||||
| cd $1 || exit 1 | ||||
| cd .. | ||||
| [ -d $TD ] && rm -Rf $TD | ||||
| mkdir $TD || exit 1 | ||||
| cd $TD | ||||
| 
 | ||||
| cp -al ../$(basename $1) work.d | ||||
| cd work.d | ||||
| [ "$3" ] && bzcat $3 | patch -p1 -s | ||||
| ln -s $2 patches | ||||
| [ -h patches ] || exit 1 | ||||
| quilt snapshot | ||||
| quilt upgrade | ||||
| quilt push -a -q | ||||
| quilt diff --snapshot >../combined.patch | ||||
							
								
								
									
										82
									
								
								scripts/configcommon.pl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								scripts/configcommon.pl
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,82 @@ | ||||
| #! /usr/bin/perl | ||||
| 
 | ||||
| my @args=@ARGV; | ||||
| my @configoptions; | ||||
| my @configvalues; | ||||
| my @common; | ||||
| my $configcounter = 0; | ||||
| 
 | ||||
| # first, read the 1st file | ||||
| 
 | ||||
| open (FILE,"$args[0]") || die "Could not open $args[0]"; | ||||
| while (<FILE>) { | ||||
| 	my $str = $_; | ||||
| 	if (/\# ([\w]+) is not set/) { | ||||
| 		$configoptions[$configcounter] = $1; | ||||
| 		$configvalues[$configcounter] = $str; | ||||
| 		$common[$configcounter] = 1; | ||||
| 		$configcounter ++; | ||||
| 	} else { | ||||
| 		if (/([\w]+)=/) { | ||||
| 			$configoptions[$configcounter] = $1; | ||||
| 			$configvalues[$configcounter] = $str; | ||||
| 			$common[$configcounter] = 1; | ||||
| 			$configcounter ++; | ||||
| 		} else { | ||||
| 			$configoptions[$configcounter] = "foobarbar"; | ||||
| 			$configvalues[$configcounter] = $str; | ||||
| 			$common[$configcounter] = 1; | ||||
| 			$configcounter ++; | ||||
| 		} | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| # now, read all configfiles and see of the options match the initial one. | ||||
| # if not, mark it not common | ||||
| my $cntr=1; | ||||
| 
 | ||||
| 
 | ||||
| while ($cntr < @ARGV) { | ||||
| 	open (FILE,$args[$cntr]) || die "Could not open $args[$cntr]";	 | ||||
| 	while (<FILE>) { | ||||
| 		my $nooutput; | ||||
| 		my $counter; | ||||
| 		my $configname; | ||||
| 
 | ||||
| 		if (/\# ([\w]+) is not set/) { | ||||
| 			$configname = $1; | ||||
| 		} else { | ||||
| 			if (/([\w]+)=/) { | ||||
| 				$configname  = $1; | ||||
| 			}  | ||||
| 		} | ||||
| 
 | ||||
| 		$counter = 0; | ||||
| 		$nooutput = 0; | ||||
| 		while ($counter < $configcounter) {	 | ||||
| 			if ("$configname" eq "$configoptions[$counter]") {	 | ||||
| 				if ("$_" eq "$configvalues[$counter]") { | ||||
| 					1; | ||||
| 				} else { | ||||
| 					$common[$counter] = 0; | ||||
| 				} | ||||
| 			} | ||||
| 			$counter++; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	$cntr++; | ||||
| } | ||||
| 
 | ||||
| # now print the common values | ||||
| my $counter = 0; | ||||
| 
 | ||||
| while ($counter < $configcounter) {	 | ||||
| 	if ($common[$counter]!=0) { | ||||
| 		print "$configvalues[$counter]"; | ||||
| 	} | ||||
| 	$counter++; | ||||
| } | ||||
| 
 | ||||
| 1; | ||||
| 
 | ||||
							
								
								
									
										76
									
								
								scripts/configdiff.pl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								scripts/configdiff.pl
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,76 @@ | ||||
| #! /usr/bin/perl | ||||
| 
 | ||||
| my @args=@ARGV; | ||||
| my @configoptions; | ||||
| my @configvalues; | ||||
| my @alreadyprinted; | ||||
| my $configcounter = 0; | ||||
| 
 | ||||
| # first, read the override file | ||||
| 
 | ||||
| open (FILE,"$args[0]") || die "Could not open $args[0]"; | ||||
| while (<FILE>) { | ||||
| 	my $str = $_; | ||||
| 	if (/\# ([\w]+) is not set/) { | ||||
| 		$configoptions[$configcounter] = $1; | ||||
| 		$configvalues[$configcounter] = $str; | ||||
| 		$alreadprinted[$configcounter] = 0; | ||||
| 		$configcounter ++; | ||||
| 	} else { | ||||
| 		if (/([\w]+)=/) { | ||||
| 			$configoptions[$configcounter] = $1; | ||||
| 			$configvalues[$configcounter] = $str; | ||||
| 			$alreadprinted[$configcounter] = 0; | ||||
| 			$configcounter ++; | ||||
| 		} else { | ||||
| 			$configoptions[$configcounter] = "$_"; | ||||
| 			$configvalues[$configcounter] = $str; | ||||
| 			$alreadprinted[$configcounter] = 0; | ||||
| 			$configcounter ++; | ||||
| 		} | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| # now, read and output the entire configfile, except for the overridden | ||||
| # parts... for those the new value is printed. | ||||
| # O(N^2) algorithm so if this is slow I need to look at it later | ||||
| 
 | ||||
| open (FILE2,"$args[1]") || die "Could not open $args[1]"; | ||||
| while (<FILE2>) { | ||||
| 	my $nooutput; | ||||
| 	my $counter; | ||||
| 	my $configname="$_"; | ||||
| 	my $match; | ||||
| 
 | ||||
| 	if (/\# ([\w]+) is not set/) { | ||||
| 		$configname = $1; | ||||
| 	} else { | ||||
| 		if (/([\w]+)=/) { | ||||
| 			$configname  = $1; | ||||
| 		}  | ||||
| 	} | ||||
| 
 | ||||
| 	$counter = 0; | ||||
| 	$nooutput = 0; | ||||
| 	$match = 0; | ||||
| #	print "C : $configname"; | ||||
| 	while ($counter < $configcounter) {	 | ||||
| 		if ("$configname" eq "$configoptions[$counter]") {	 | ||||
| 			if ( ("$_" eq "$configvalues[$counter]") || ("$configname" eq "") ) { | ||||
| 				$match = 1; | ||||
| 			} else { | ||||
| 				$alreadyprinted[$configcounter] = 1; | ||||
| 				print "$_"; | ||||
| 				$match = 1; | ||||
| 			} | ||||
| 		} | ||||
| 		$counter++; | ||||
| 	} | ||||
| 	if ($match == 0) { | ||||
| 		print "$_"; | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 1; | ||||
							
								
								
									
										3
									
								
								scripts/cross-amd64.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								scripts/cross-amd64.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| export PATH=$PATH:/opt/cross/bin | ||||
| make CROSS_COMPILE=x86_64-linux- ARCH=x86_64 hammer | ||||
| 
 | ||||
							
								
								
									
										3
									
								
								scripts/cross-i586.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								scripts/cross-i586.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| export PATH=$PATH:/opt/cross/bin | ||||
| make ARCH=i386 i586 | ||||
| 
 | ||||
							
								
								
									
										3
									
								
								scripts/cross-i686.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								scripts/cross-i686.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| export PATH=$PATH:/opt/cross/bin | ||||
| make ARCH=i386 i686 | ||||
| 
 | ||||
							
								
								
									
										2
									
								
								scripts/cross-ia64.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								scripts/cross-ia64.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | ||||
| export PATH=$PATH:/opt/cross/bin | ||||
| make CROSS_COMPILE=ia64-linux- ARCH=ia64  ia64 | ||||
							
								
								
									
										3
									
								
								scripts/cross-iseries.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								scripts/cross-iseries.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| export PATH=$PATH:/opt/cross/bin | ||||
| make CROSS_COMPILE=ppc64-linux- ARCH=ppc64 ppc64iseries | ||||
| 
 | ||||
							
								
								
									
										3
									
								
								scripts/cross-ppc.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								scripts/cross-ppc.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| export PATH=$PATH:/opt/cross/bin | ||||
| make CROSS_COMPILE=ppc-linux- ARCH=ppc ppc | ||||
| 
 | ||||
							
								
								
									
										3
									
								
								scripts/cross-ppc64.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								scripts/cross-ppc64.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| export PATH=$PATH:/opt/cross/bin | ||||
| make CROSS_COMPILE=ppc64-linux- ARCH=ppc64 ppc64 | ||||
| 
 | ||||
							
								
								
									
										3
									
								
								scripts/cross-ppc8260.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								scripts/cross-ppc8260.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| export PATH=$PATH:/opt/cross/bin | ||||
| make CROSS_COMPILE=ppc-linux- ARCH=ppc ppc8260 | ||||
| 
 | ||||
							
								
								
									
										3
									
								
								scripts/cross-ppc8560.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								scripts/cross-ppc8560.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| export PATH=$PATH:/opt/cross/bin | ||||
| make CROSS_COMPILE=ppc-linux- ARCH=ppc ppc8560 | ||||
| 
 | ||||
							
								
								
									
										3
									
								
								scripts/cross-pseries.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								scripts/cross-pseries.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| export PATH=$PATH:/opt/cross/bin | ||||
| make CROSS_COMPILE=ppc64-linux- ARCH=ppc64 pseries64 | ||||
| 
 | ||||
							
								
								
									
										2
									
								
								scripts/cross-s390.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								scripts/cross-s390.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | ||||
| export PATH=$PATH:/opt/cross/bin | ||||
| make CROSS_COMPILE=s390-linux- ARCH=s390  s390 | ||||
							
								
								
									
										2
									
								
								scripts/cross-s390x.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								scripts/cross-s390x.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | ||||
| export PATH=$PATH:/opt/cross/bin | ||||
| make CROSS_COMPILE=s390x-linux- ARCH=s390  s390x | ||||
							
								
								
									
										35
									
								
								scripts/get-snapshot.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										35
									
								
								scripts/get-snapshot.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,35 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| VER=$(tail -n1 upstream | sed s/bz2/id/) | ||||
| rm -f $VER | ||||
| wget -c http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/$VER | ||||
| SHA1=$(cat $VER) | ||||
| rm -f patch-2.6.*-git*.id | ||||
| 
 | ||||
| cd ~/src/git-trees/kernel/linux-2.6 | ||||
| git pull | ||||
| 
 | ||||
| DIF=$(git diff $SHA1.. | wc -l) | ||||
| if [ "$DIF" = "0" ]; then | ||||
|   echo Nothing changed. | ||||
|   exit | ||||
| fi | ||||
| TOT=$(git log | head -n1) | ||||
| 
 | ||||
| git diff $SHA1.. > ~/src/fedora/kernel/devel/git-linus-new.diff | ||||
| cd ~/src/fedora/kernel/devel/ | ||||
| DIF=$(cmp git-linus.diff git-linus-new.diff) | ||||
| if [ "$?" = "0" ]; then | ||||
|   echo Nothing new in git | ||||
|   rm -f git-linus-new.diff | ||||
|   exit | ||||
| fi | ||||
| mv git-linus-new.diff git-linus.diff | ||||
| 
 | ||||
| perl -p -i -e 's|^#ApplyPatch\ git-linus.diff|ApplyPatch\ git-linus.diff|' kernel.spec | ||||
| 
 | ||||
| echo "- Merge Linux-2.6 up to" $TOT > ~/src/fedora/kernel/devel/clog.tmp | ||||
| cd ~/src/fedora/kernel/devel/ | ||||
| bumpspecfile.py kernel.spec "$(cat clog.tmp)" | ||||
| rm -f clog.tmp | ||||
| make clog | ||||
							
								
								
									
										16
									
								
								scripts/grab-logs.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										16
									
								
								scripts/grab-logs.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,16 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| VER=$(make verrel) | ||||
| ver=$(echo $VER | sed -e 's/-/ /g' | awk '{print $2}') | ||||
| rev=$(echo $VER | sed -e 's/-/ /g' | awk '{print $3}') | ||||
| 
 | ||||
| if [ -d logs ]; then | ||||
|   DIR=logs/ | ||||
| else | ||||
|   DIR=./ | ||||
| fi | ||||
| 
 | ||||
| wget -O $DIR/build-$VER-i686.log http://kojipkgs.fedoraproject.org/packages/kernel/$ver/$rev/data/logs/i686/build.log | ||||
| wget -O $DIR/build-$VER-x86-64.log http://kojipkgs.fedoraproject.org/packages/kernel/$ver/$rev/data/logs/x86_64/build.log | ||||
| wget -O $DIR/build-$VER-noarch.log http://kojipkgs.fedoraproject.org/packages/kernel/$ver/$rev/data/logs/noarch/build.log | ||||
| 
 | ||||
							
								
								
									
										21
									
								
								scripts/newpatch.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										21
									
								
								scripts/newpatch.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,21 @@ | ||||
| #!/bin/sh | ||||
| # Easy application of new patches. | ||||
| # Always adds to the very end. (Bumps last patch nr by 100) | ||||
| # Parameters: | ||||
| # $1 - patch filename  | ||||
| # $2 - description | ||||
| 
 | ||||
| OLD=$(grep ^Patch kernel.spec  | tail -n1 | awk '{ print $1 }' | sed s/Patch// | sed s/://) | ||||
| NEW=$(($OLD/100*100+100)) | ||||
| 
 | ||||
| sed -i "/^Patch$OLD:\ /a#\ $2\nPatch$NEW:\ $1" kernel.spec | ||||
| 
 | ||||
| LAST=$(grep ^ApplyPatch kernel.spec | tail -n1 | awk '{ print $2 }') | ||||
| 
 | ||||
| sed -i "/^ApplyPatch $LAST/aApplyPatch $1" kernel.spec | ||||
| 
 | ||||
| cvs add $1 | ||||
| 
 | ||||
| scripts/bumpspecfile.py kernel.spec "- $2" | ||||
| make clog | ||||
| 
 | ||||
							
								
								
									
										13
									
								
								scripts/pull-upstreams.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								scripts/pull-upstreams.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,13 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| utrace_base=2.6-current | ||||
| utrace_base=2.6.34 | ||||
| 
 | ||||
| url=http://people.redhat.com/roland/utrace/${1:-$utrace_base} | ||||
| 
 | ||||
| wget -q -O /dev/stdout $url/series | grep 'patch$' | | ||||
| while read i | ||||
| do | ||||
|   rm -f linux-2.6-$i | ||||
|   wget -nv -O linux-2.6-$i $url/$i | ||||
| done | ||||
							
								
								
									
										199
									
								
								scripts/rebase.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										199
									
								
								scripts/rebase.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,199 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| if [ ! -f /usr/bin/curl ]; then | ||||
|   echo yum install curl | ||||
|   exit 0 | ||||
| fi | ||||
| 
 | ||||
| # Current kernel bits | ||||
| if [ `grep -c ^patch upstream` -ge 1 ]; then | ||||
|   export OLD=`grep ^patch upstream | tail -n1 | sed s/patch-// | sed s/\.bz2//` | ||||
| else | ||||
|   export OLD=`grep linux-2.6 upstream | tail -n1 | sed s/linux-// | sed s/\.tar\.bz2//` | ||||
| fi | ||||
| export OLDBASE=`echo $OLD | sed s/-/\ /g | sed s/2\.6\.// | awk '{ print $1 }'` | ||||
| if [ `echo $OLD | grep -c rc` -ge 1 ]; then | ||||
|   export OLDRC=`echo $OLD | sed s/-/\ /g | sed s/rc// | awk '{ print $2 }'` | ||||
|   if [ `echo $OLD | grep -c git` -ge 1 ]; then | ||||
|     export OLDGIT=`echo $OLD | sed s/-/\ /g | sed s/git// | awk '{ print $3 }'` | ||||
|   else | ||||
|     export OLDGIT=0 | ||||
|   fi | ||||
| else | ||||
|   export OLDRC=0 | ||||
|   if [ `echo $OLD | grep -c git` -ge 1 ]; then | ||||
|     export OLDGIT=`echo $OLD | sed s/-/\ /g | sed s/git// | awk '{ print $2 }'` | ||||
|   else | ||||
|     export OLDGIT=0 | ||||
|   fi | ||||
| fi | ||||
| 
 | ||||
| # Is there a new snapshot or prepatch ? | ||||
| NEW=`curl -s http://www.kernel.org/kdist/finger_banner | grep "latest snapshot 2.6 version"` | ||||
| if [ -z "$NEW" ] ; then | ||||
|   NEW=`curl -s http://www.kernel.org/kdist/finger_banner | grep "latest mainline 2.6 version"` | ||||
|   if [ -z "$NEW" ] ; then | ||||
|     if [ "$OLDRC" -ne 0 ] ; then | ||||
|       NEW=`curl -s http://www.kernel.org/kdist/finger_banner | grep "latest stable 2.6." | head -n1` | ||||
|     else | ||||
|       echo "No new rc or git snapshot of stable branch". | ||||
|       exit 0 | ||||
|     fi | ||||
|   fi | ||||
| fi | ||||
| export N=`echo $NEW | awk '{ print $11 }'` | ||||
| if [ -z "$N" ]; then | ||||
|   # "Stable version" | ||||
|   export NEW=`echo $NEW | awk '{ print $10 }'` | ||||
| else | ||||
|   export NEW=`echo $NEW | awk '{ print $11 }'` | ||||
| fi | ||||
| 
 | ||||
| export NEWBASE=`echo $NEW | sed s/-/\ /g | sed s/2\.6\.// | awk '{ print $1 }'` | ||||
| if [ `echo $NEW | grep -c rc` -ge 1 ]; then | ||||
|   export NEWRC=`echo $NEW | sed s/-/\ /g | sed s/rc// | awk '{ print $2 }'` | ||||
|   if [ `echo $NEW | grep -c git` -ge 1 ]; then | ||||
|     export NEWGIT=`echo $NEW | sed s/-/\ /g | sed s/git// | awk '{ print $3 }'` | ||||
|   else | ||||
|     export NEWGIT=0 | ||||
|   fi | ||||
| else | ||||
|   export NEWRC=0 | ||||
|   if [ `echo $NEW | grep -c git` -ge 1 ]; then | ||||
|     export NEWGIT=`echo $NEW | sed s/-/\ /g | sed s/git// | awk '{ print $2 }'` | ||||
|   else | ||||
|     export NEWGIT=0 | ||||
|   fi | ||||
| fi | ||||
| 
 | ||||
| echo "OLD kernel was $OLD  BASE=$OLDBASE RC=$OLDRC GIT=$OLDGIT" | ||||
| echo "NEW kernel is  $NEW  BASE=$NEWBASE RC=$NEWRC GIT=$NEWGIT" | ||||
| 
 | ||||
| if [ "$OLDRC" -eq 0 -a "$OLDGIT" -eq 0 -a "$OLDGIT" -ne "$NEWGIT" ]; then | ||||
|   echo "Rebasing from a stable release to a new git snapshot" | ||||
|   perl -p -i -e 's/^%define\ released_kernel\ 1/\%define\ released_kernel\ 0/' kernel.spec | ||||
|   perl -p -i -e 's/^%define\ rawhide_skip_docs\ 1/\%define\ rawhide_skip_docs\ 0/' kernel.spec | ||||
|   # force these to zero in this case, they may not have been when we rebased to stable | ||||
|   perl -p -i -e 's/^%define\ rcrev.*/\%define\ rcrev\ 0/' kernel.spec | ||||
|   perl -p -i -e 's/^%define\ gitrev.*/\%define\ gitrev\ 0/' kernel.spec | ||||
| fi | ||||
| 
 | ||||
| # make sure we build docs at least once per -rc kernel, shut it off otherwise | ||||
| if [ "$OLDRC" -ne 0 -a "$NEWRC" -gt "$OLDRC" ]; then | ||||
|   perl -p -i -e 's/^%define\ rawhide_skip_docs\ 1/\%define\ rawhide_skip_docs\ 0/' kernel.spec | ||||
| else | ||||
|   if [ "$NEWRC" -eq "$OLDRC" -a "$NEWGIT" -gt "$OLDGIT" ]; then | ||||
|     # common case, same -rc, new -git, make sure docs are off. | ||||
|     perl -p -i -e 's/^%define\ rawhide_skip_docs\ 0/\%define\ rawhide_skip_docs\ 1/' kernel.spec | ||||
|   fi | ||||
| fi | ||||
| 
 | ||||
| if [ "$NEWRC" -eq 0 -a "$NEWGIT" -eq 0 ]; then | ||||
|   echo "Rebasing from -rc to final release." | ||||
|   perl -p -i -e 's/^%define\ released_kernel\ 0/\%define\ released_kernel\ 1/' kernel.spec | ||||
|   perl -p -i -e 's/^%define\ rawhide_skip_docs\ 1/\%define\ rawhide_skip_docs\ 0/' kernel.spec | ||||
|   export OLD_TARBALL_BASE=$(($OLDBASE-1)) | ||||
|   perl -p -i -e 's/^%define\ base_sublevel\ $ENV{OLD_TARBALL_BASE}/%define\ base_sublevel\ $ENV{NEWBASE}/' kernel.spec | ||||
|   perl -p -i -e 's/^%define\ rcrev.*/\%define\ rcrev\ 0/' kernel.spec | ||||
|   perl -p -i -e 's/^%define\ gitrev.*/\%define\ gitrev\ 0/' kernel.spec | ||||
| 
 | ||||
|   grep -v kernel-2.6.$OLD_TARBALL_BASE .cvsignore >.cvsignore.tmp ; mv .cvsignore.tmp .cvsignore | ||||
|   echo kernel-2.6.$NEWBASE >> .cvsignore | ||||
| 
 | ||||
|   for i in upstream sources .cvsignore | ||||
|   do | ||||
|    grep -v linux-2.6.$OLD_TARBALL_BASE.tar.bz2 $i > .$i.tmp; mv .$i.tmp $i | ||||
|    grep -v patch-2.6.$OLDBASE-rc$OLDRC.bz2 $i > .$i.tmp; mv .$i.tmp $i | ||||
|    grep -v patch-2.6.$OLDBASE-rc$OLDRC-git$OLDGIT.bz2 $i > .$i.tmp; mv .$i.tmp $i | ||||
|   done | ||||
| 
 | ||||
|   echo linux-2.6.$NEWBASE.tar.bz2 >> upstream | ||||
| 
 | ||||
|   rm -f linux-2.6.$OLD_TARBALL_BASE.tar.bz2 | ||||
|   rm -f linux-2.6.$OLD_TARBALL_BASE.tar.bz2.sign | ||||
|   rm -f patch-2.6.$OLDBASE-rc$OLDRC.bz2 | ||||
|   rm -f patch-2.6.$OLDBASE-rc$OLDRC.bz2.sign | ||||
|   rm -f patch-2.6.$OLDBASE-rc$OLDRC-git$OLDGIT.bz2 | ||||
|   rm -f patch-2.6.$OLDBASE-rc$OLDRC-git$OLDGIT.bz2.sign | ||||
| 
 | ||||
|   cvs remove linux-2.6.$OLD_TARBALL_BASE.tar.bz2.sign | ||||
|   cvs remove patch-2.6.$OLDBASE-rc$OLDRC.bz2.sign | ||||
|   cvs remove patch-2.6.$OLDBASE-rc$OLDRC-git$OLDGIT.bz2.sign | ||||
| 
 | ||||
|   make download | ||||
|   make upload FILES=linux-$NEW.tar.bz2 | ||||
| 
 | ||||
|   cvs add linux-$NEW.tar.bz2.sign | ||||
| 
 | ||||
|   bumpspecfile.py kernel.spec "- $NEW" | ||||
|   make clog | ||||
|   echo FIXME! Fix up fedora_cvs_origin | ||||
|   make verrel | ||||
|   exit 1 | ||||
| fi | ||||
| 
 | ||||
| if [ "$OLDRC" != "$NEWRC" ]; then | ||||
|   echo "Different rc. Rebasing from $OLDRC to $NEWRC" | ||||
|   perl -p -i -e 's/^%define\ rcrev.*/\%define\ rcrev\ $ENV{"NEWRC"}/' kernel.spec | ||||
|   perl -p -i -e 's/$ENV{OLDBASE}-rc$ENV{OLDRC}.bz2/$ENV{NEWBASE}-rc$ENV{NEWRC}.bz2/' .cvsignore | ||||
|   perl -p -i -e 's/$ENV{OLDBASE}-rc$ENV{OLDRC}.bz2/$ENV{NEWBASE}-rc$ENV{NEWRC}.bz2/' upstream | ||||
|   grep -v patch-2.6.$OLDBASE-rc$OLDRC.bz2 sources > .sources.tmp; mv .sources.tmp sources | ||||
|   grep -v patch-2.6.$OLDBASE-rc$OLDRC-git$OLDGIT.bz2 .cvsignore >.cvsignore.tmp ; mv .cvsignore.tmp .cvsignore | ||||
|   if [ `grep -c patch-2.6.$NEWBASE-rc$NEWRC.bz2 upstream` -eq 0 ]; then | ||||
|     echo patch-2.6.$NEWBASE-rc$NEWRC.bz2 >> .cvsignore | ||||
|     echo patch-2.6.$NEWBASE-rc$NEWRC.bz2 >> upstream | ||||
|   fi | ||||
|   rm -f patch-2.6.$OLDBASE-rc$OLDRC.bz2 | ||||
|   rm -f patch-2.6.$OLDBASE-rc$OLDRC.bz2.sign | ||||
|   cvs remove patch-2.6.$OLDBASE-rc$OLDRC.bz2.sign | ||||
|   make download | ||||
|   make upload FILES=patch-2.6.$NEWBASE-rc$NEWRC.bz2 | ||||
|   cvs add patch-2.6.$NEWBASE-rc$NEWRC.bz2.sign | ||||
| 
 | ||||
|   # Another awkward (albeit unlikely) corner case. | ||||
|   # Moving from say 26-rc3-git1 to 26-rc4-git1 | ||||
|   # The above will grab the new -rc, but the below will | ||||
|   # think that the -git hasn't changed. | ||||
|   # Fudge around this, by pretending the old git was something crazy. | ||||
|   OLDGIT=99 | ||||
| fi | ||||
| 
 | ||||
| if [ "$OLDGIT" != "$NEWGIT" ]; then | ||||
|   if [ "$OLDRC" -eq 0 -a "$OLDGIT" -eq 0 ]; then | ||||
|     echo "Rebasing to pre-rc git$NEWGIT" | ||||
|   else | ||||
|     echo "Different git. Rebasing from git$OLDGIT to git$NEWGIT" | ||||
|   fi | ||||
|   perl -p -i -e 's/^%define\ gitrev.*/\%define\ gitrev\ $ENV{"NEWGIT"}/' kernel.spec | ||||
|   if [ "$OLDGIT" -ne 0 ]; then | ||||
|     if [ "$NEWGIT" -ne 0 ]; then | ||||
|       perl -p -i -e 's/$ENV{OLD}/$ENV{NEW}/' .cvsignore | ||||
|       perl -p -i -e 's/$ENV{OLD}/$ENV{NEW}/' upstream | ||||
|     fi | ||||
|     grep -v patch-$OLD.bz2 sources > .sources.tmp; mv .sources.tmp sources | ||||
|     grep -v patch-$OLD.bz2 upstream > .upstream.tmp; mv .upstream.tmp upstream | ||||
|   else | ||||
|     echo patch-$NEW.bz2 >> .cvsignore | ||||
|     echo patch-$NEW.bz2 >> upstream | ||||
|   fi | ||||
| 
 | ||||
|   make download | ||||
|   make upload FILES=patch-$NEW.bz2 | ||||
| 
 | ||||
|   cvs add patch-$NEW.bz2.sign | ||||
|   if [ "$OLDGIT" -ne 0 ]; then | ||||
|     rm -f patch-$OLD.bz2 | ||||
|     rm -f patch-$OLD.bz2.sign | ||||
|     cvs remove patch-$OLD.bz2.sign | ||||
|   fi | ||||
| fi | ||||
| 
 | ||||
| if [ "$OLDRC" != "$NEWRC" -o "$OLDGIT" != "$NEWGIT" ]; then | ||||
|   perl -p -i -e 's|^ApplyPatch\ git-linus.diff|#ApplyPatch\ git-linus.diff|' kernel.spec | ||||
|   > git-linus.diff | ||||
|   bumpspecfile.py kernel.spec "- $NEW" | ||||
|   make clog | ||||
|   exit 1 | ||||
| else | ||||
|   exit 0 | ||||
| fi | ||||
							
								
								
									
										26
									
								
								scripts/reconfig.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										26
									
								
								scripts/reconfig.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,26 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| base_sublevel=$(grep "^%define base_sublevel" kernel.spec | head -n1 | awk '{ print $3 }') | ||||
| 
 | ||||
| #if [ `grep -c "^%define released_kernel 1" kernel.spec` -ge 1 ]; then | ||||
|   V=$base_sublevel | ||||
| #else | ||||
| #  let V=$base_sublevel+1 | ||||
| #fi | ||||
| 
 | ||||
| cd kernel-2.6.$base_sublevel/linux-2.6.$base_sublevel.noarch/ | ||||
| rm -f kernel-*.config | ||||
| cp ../../kernel-2.6.$V-*.config . | ||||
| 
 | ||||
| for i in kernel-*.config | ||||
| do | ||||
| 	echo $i | ||||
| 	rm -f .config | ||||
| 	cp $i .config | ||||
| 	Arch=`head -1 .config | cut -b 3-` | ||||
| 	make ARCH=$Arch nonint_oldconfig > /dev/null || exit 1 | ||||
| 	echo "# $Arch" > configs/$i | ||||
| 	cat .config >> configs/$i | ||||
| 	echo | ||||
| done | ||||
| 
 | ||||
							
								
								
									
										64
									
								
								scripts/rediffall.pl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								scripts/rediffall.pl
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,64 @@ | ||||
| #!/usr/bin/perl -w | ||||
| # | ||||
| # Script to rediff all patches in the spec | ||||
| # Usage: perl -w rediffall.pl < kernel-2.4.spec | ||||
| # | ||||
| # $workdir is where the new rediff'ed patches are created | ||||
| # $origdir is where the original patches and tarball are located | ||||
| # | ||||
| # Note that both $workdir and $origdir must be absolute path names. | ||||
| # Suggestion: create a /kernel symbolic link to the top of your CVS tree. | ||||
| 
 | ||||
| my $workdir = "/dev/shm/redifftree"; | ||||
| my $origdir = "/home/davej/devel"; | ||||
| my $kernver = "linux-2.6.17"; | ||||
| my $datestrip = "s/^\\(\\(+++\\|---\\) [^[:blank:]]\\+\\)[[:blank:]].*/\\1/"; | ||||
| my $patchindex = 0; | ||||
| my @patchlist; | ||||
| 
 | ||||
| # phase 1: create a tree | ||||
| print "Extracting pristine source..\n"; | ||||
| system("mkdir -p $workdir"); | ||||
| system("rm -rf $workdir/*"); | ||||
| chdir("$workdir"); | ||||
| system("tar -jxvf $origdir/$kernver.tar.bz2 > /dev/null"); | ||||
| system("cp -al $kernver linux-$patchindex"); | ||||
| 
 | ||||
| # phase 2: read the spec from stdin and store all patches | ||||
| print "Reading specfile..\n"; | ||||
| 
 | ||||
| while (<>) { | ||||
| 	my $line = $_; | ||||
| 	if ($line =~ /^Patch([0-9]+)\: ([a-zA-Z0-9\-\_\.\+]+\.patch)/) { | ||||
| 		$patchlist[$1] = $2; | ||||
| 	} else { | ||||
| 		if ($line =~ /^Patch([0-9]+)\: ([a-zA-Z0-9\-\_\.]+\.bz2)/) { | ||||
| 			$patchlist[$1] = $2; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if ($line =~ /^%patch([0-9]+) -p1/) { | ||||
| 		# copy the tree, apply the patch, diff and remove the old tree | ||||
| 		my $oldindex = $patchindex; | ||||
| 		$patchindex = $1; | ||||
| 
 | ||||
| 		print "rediffing patch number $patchindex: $patchlist[$patchindex]\n"; | ||||
| 
 | ||||
| 		system("cp -al linux-$oldindex linux-$patchindex"); | ||||
| 		chdir("linux-$patchindex"); | ||||
| 		if ($patchlist[$patchindex] =~ /bz2/) { | ||||
| 			system("bzcat $origdir/$patchlist[$patchindex] | patch -p1 &>/dev/null"); | ||||
| 		} else { | ||||
| 			system("cat $origdir/$patchlist[$patchindex] | patch -p1 &>/dev/null"); | ||||
| 		} | ||||
| 		chdir("$workdir"); | ||||
| 		system("rm -f `find -name \"*orig\"`"); | ||||
| 		if ($patchlist[$patchindex] =~ /bz2/) { | ||||
| 		} else { | ||||
| 			system("diff -urNp --exclude-from=/home/davej/.exclude linux-$oldindex linux-$patchindex | sed '$datestrip' > $patchlist[$patchindex]"); | ||||
| 		} | ||||
| 		system("rm -rf linux-$oldindex"); | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| 1; | ||||
							
								
								
									
										222
									
								
								scripts/sort-config
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										222
									
								
								scripts/sort-config
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,222 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| SRC=($(ls config-* 2>/dev/null)) | ||||
| TGT=($(ls kernel-*/linux-*.noarch/configs/kernel-2.6.*-*.config \ | ||||
|           kernel-*/linux-*.noarch/configs/kernel-2.6.*-*-debug.config 2>/dev/null)) | ||||
| TGT1=(${TGT[*]#kernel-*/linux-*.noarch/configs/kernel-2.6.*-}) | ||||
| 
 | ||||
| ALL_OPTS="cdfimn" | ||||
| if [ $# -lt 2 ] ; then | ||||
|    echo -e "Usage:\n   $(basename $0) [-$ALL_OPTS] input target\n" | ||||
|    echo -e " Sort input config file into the same order as the target\n" | ||||
|    echo -e "      -c: insert comments about non-matching/impossible items" | ||||
|    echo -e "      -d: show raw unsorted output with extra debug text" | ||||
|    echo -e "      -f: force output to match what is in the target config," | ||||
|    echo -e "          and/or remove impossible config items" | ||||
|    echo -e "      -i: find impossible config items" | ||||
|    echo -e "      -m: find changed config items" | ||||
|    echo -e "      -n: do not sort output\n" | ||||
|    echo -e "   input: source config file" ' [' "${SRC[*]#config-}" ']\n' | ||||
|    echo -e "  target: output arch name" ' [' "${TGT1[*]%.config}" ']\n' | ||||
|    exit 1 | ||||
| fi | ||||
| 
 | ||||
| while getopts "$ALL_OPTS" OPTION ; do | ||||
| case $OPTION in | ||||
| c) | ||||
|    ADDCOMMENT=1 ;; | ||||
| d) | ||||
|    DEBUG=1 ;; | ||||
| f) | ||||
|    FORCE=1 ;; | ||||
| i) | ||||
|    FIND_IMPOSS=1 ;; | ||||
| m) | ||||
|    FIND_CHANGED=1 ;; | ||||
| n) | ||||
|    NOSORT=1 ;; | ||||
| \?) | ||||
|    exit 2 ;; | ||||
| esac | ||||
| done | ||||
| 
 | ||||
| if [ "$FORCE" -a "$ADDCOMMENT" ] ; then | ||||
| 	echo "-f and -c options cannot be used together" | ||||
| 	exit 2 | ||||
| fi | ||||
| 
 | ||||
| shift $((OPTIND-1)) | ||||
| 
 | ||||
| TEMPFILES="xx00 xx01 xx98 xx99" | ||||
| TEMPLEFT= | ||||
| for FILE in $TEMPFILES ; do | ||||
|    [ -f "$FILE" ] && TEMPLEFT="Y" | ||||
| done | ||||
| if [ "$TEMPLEFT" ] ; then | ||||
|    echo "WARNING! Output files named xx?? already exist." >&2 | ||||
|    read -p "Press <Enter> to erase files, or Ctrl-C to exit..." | ||||
|    echo >&2 | ||||
| fi | ||||
| rm -f $TEMPFILES | ||||
| 
 | ||||
| SRCFILE=config-$1 | ||||
| [ ! -f $SRCFILE ] && echo "Input file" $SRCFILE "missing" && exit 2 | ||||
| 
 | ||||
| TGTFILE=kernel-*/linux-*.noarch/configs/kernel-2.6.*-$2.config | ||||
| [ ! -f $TGTFILE ] && echo "No target file matching" $TGTFILE "exists" && exit 2 | ||||
| 
 | ||||
| [ "$FIND_IMPOSS" ] && \ | ||||
|    find kernel-*/*.noarch -name Kconfig\* -type f \ | ||||
|    | xargs egrep -s -h '^[[:space:]]*(menu)?config[[:space:]]+' \ | ||||
|    | sed -r 's/^[[:space:]]*(menu)?config[[:space:]]+/CONFIG_/' \ | ||||
|    | sort | uniq >xx98 | ||||
| 
 | ||||
| extract_optname() { | ||||
|          # extract the option name from $TEXT, setting $OPTNAME | ||||
|          OPTNAME= | ||||
|          if [ "${TEXT:0:7}" = "CONFIG_" ] ; then | ||||
|             OPTNAME=${TEXT%%=*} | ||||
|          elif [ "${TEXT:0:9}" = "# CONFIG_" ] ; then | ||||
|             OPTNAME=${TEXT%" is not set"} | ||||
|             OPTNAME=${OPTNAME#\# } | ||||
|          fi | ||||
| } | ||||
| 
 | ||||
| print_saved_comments() { | ||||
|       if [ $IX -gt 0 ] ; then | ||||
|          [ "$DEBUG" ] && echo "            ->" $IX "comments were saved" | ||||
|          (( IX-- )) | ||||
|          for IX in $(seq 0 $IX) ; do | ||||
|             echo "$LINE":"${SAVECOMMENT[$IX]}" | ||||
|          done | ||||
|          unset SAVECOMMENT | ||||
|          IX=0 | ||||
|       fi | ||||
| } | ||||
| 
 | ||||
| assign_line_number() { | ||||
|       # use input line numbers if not sorting | ||||
|       [ "$NOSORT" ] && LINE=$IN | ||||
|       # make sure it has a line number | ||||
|       [ -z "$LINE" ] && LINE=999999 | ||||
| } | ||||
| 
 | ||||
| IX=0 | ||||
| IN=0 | ||||
| declare -a SAVECOMMENT | ||||
| 
 | ||||
| cat ${SRCFILE} | { | ||||
| while read TEXT ; do | ||||
| 
 | ||||
|    LINE= | ||||
|    COMMENT= | ||||
| 
 | ||||
|    # replace empty lines | ||||
|    [ -z "$TEXT" ] && TEXT='//' | ||||
| 
 | ||||
|    if [ "${TEXT:0:7}" = "CONFIG_" -o "${TEXT:0:9}" = "# CONFIG_" ] ; then | ||||
| 
 | ||||
|       LINE=$(grep -n "^$TEXT" $TGTFILE | head -1 | cut -f 1 -d ':') | ||||
|       if [ -z "$LINE" ] ; then | ||||
|          [ "$DEBUG" ] && echo "nofind      ->" "$TEXT" | ||||
| 
 | ||||
|          extract_optname | ||||
|          if [ "$OPTNAME" ] ; then | ||||
| 
 | ||||
|             if [ "$FIND_CHANGED" ] ; then | ||||
|                for FINDTEXT in "^${OPTNAME}=" "^# ${OPTNAME} is not set" ; do | ||||
|                   if [ -z "$LINE" ] ; then | ||||
|                      [ "$DEBUG" ] && echo "looking for ->" "$FINDTEXT" | ||||
|                      LINE=$(grep -n "$FINDTEXT" $TGTFILE | head -1 | cut -f 1 -d ':') | ||||
|                      if [ "$LINE" ] ; then | ||||
|                         CHANGED=$(grep "$FINDTEXT" $TGTFILE | head -1) | ||||
|                         if [ "$FORCE" ] ; then | ||||
|                            TEXT=$CHANGED | ||||
|                            [ "$DEBUG" ] && echo 'forced      ->' "$TEXT" | ||||
|                         else | ||||
|                            if [ "$ADDCOMMENT" ] ; then | ||||
|                               if [ ${CHANGED:0:1} = '#' ] ; then | ||||
|                                  NEWOPT="not set" | ||||
|                               else | ||||
|                                  NEWOPT=${CHANGED#$OPTNAME} | ||||
|                               fi | ||||
|                               COMMENT="# -- Next option changed to \"${NEWOPT}\" at target line $LINE --" | ||||
|                            fi | ||||
|                         fi | ||||
|                      fi | ||||
|                   fi | ||||
|                done | ||||
|             fi | ||||
| 
 | ||||
|             if [ "$FIND_IMPOSS" -a -z "$LINE" -a -z "$COMMENT" ] ; then | ||||
|                POSSIBLE=$(grep -n "^$OPTNAME" xx98) | ||||
|                if [ -z "$POSSIBLE" ] ; then | ||||
|                   if [ "$ADDCOMMENT" ] ; then | ||||
|                      COMMENT="# -- Next option is impossible --" | ||||
|                   elif [ "$FORCE" ] ; then | ||||
|                      [ "$DEBUG" ] && echo 'impossible  ->' "$TEXT" | ||||
|                      TEXT="" | ||||
|                   fi | ||||
|                fi | ||||
|             fi | ||||
| 
 | ||||
|          fi | ||||
| 
 | ||||
|       fi | ||||
| 
 | ||||
|    else | ||||
|       # not a config variable | ||||
|       COMMENT="$TEXT" | ||||
|       TEXT= | ||||
|    fi | ||||
| 
 | ||||
|    [ "$DEBUG" -a "$COMMENT" ] && echo "comment     ->" "$LINE" "$COMMENT" | ||||
|    [ "$DEBUG" -a "$TEXT" ]    && echo "text        ->" "$LINE" "$TEXT" | ||||
| 
 | ||||
|    if [ "$TEXT" ] ; then | ||||
| 
 | ||||
|       assign_line_number | ||||
| 
 | ||||
|       # print the saved comments first | ||||
|       print_saved_comments | ||||
|       # now print the latest comment and text | ||||
|       [ "$COMMENT" ] && echo "$LINE":"$COMMENT" | ||||
|       echo "$LINE":"$TEXT" | ||||
| 
 | ||||
|    elif [ "$COMMENT" ] ; then | ||||
| 
 | ||||
|       # no output yet, save the comment | ||||
|       SAVECOMMENT[$IX]="$COMMENT" | ||||
|       let IX++ | ||||
|       [ "$DEBUG" ] && echo 'savecomment (#'${IX}')' | ||||
| 
 | ||||
|    fi | ||||
| 
 | ||||
|    let IN++ | ||||
| 
 | ||||
| done | ||||
| # flush the buffers | ||||
| assign_line_number | ||||
| print_saved_comments | ||||
| [ "$DEBUG" ] && echo "$IN lines read from input" | ||||
| } >xx99 | ||||
| 
 | ||||
| if [ "$DEBUG" ] ; then | ||||
|    # just show the raw output with debug info, then exit | ||||
|    cat xx99 | ||||
| else | ||||
| 
 | ||||
|    # split output into two files, for matched and unmatched items | ||||
|    cat xx99 | sort -s -t ":" -k 1g | csplit -k -s - /^999999/ 2>/dev/null | ||||
| 
 | ||||
|    cat xx00 | cut -f 2- -d ':' | sed 's/^\/\/$//' | ||||
|    if [ -s xx01 ] ; then | ||||
|       echo | ||||
|       echo '# ------------  UNMATCHED OPTIONS  ------------' | ||||
|       echo | ||||
|       cat xx01 | cut -f 2- -d ':' | sed 's/^\/\/$//' | ||||
|    fi | ||||
| 
 | ||||
| fi | ||||
| 
 | ||||
| rm -f $TEMPFILES | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user