Restore README.txt, scripts.

This commit is contained in:
Roland McGrath 2010-07-29 19:24:43 -07:00
parent 7f2b706ac8
commit 11487c5358
26 changed files with 986 additions and 0 deletions

67
README.txt Normal file
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View File

@ -0,0 +1,3 @@
export PATH=$PATH:/opt/cross/bin
make ARCH=i386 i586

3
scripts/cross-i686.sh Normal file
View File

@ -0,0 +1,3 @@
export PATH=$PATH:/opt/cross/bin
make ARCH=i386 i686

2
scripts/cross-ia64.sh Normal file
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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