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