summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.txt67
-rwxr-xr-xscripts/bumpspecfile.py71
-rwxr-xr-xscripts/check-TODO.sh27
-rwxr-xr-xscripts/combine.sh34
-rw-r--r--scripts/configcommon.pl82
-rw-r--r--scripts/configdiff.pl76
-rw-r--r--scripts/cross-amd64.sh3
-rw-r--r--scripts/cross-i586.sh3
-rw-r--r--scripts/cross-i686.sh3
-rw-r--r--scripts/cross-ia64.sh2
-rw-r--r--scripts/cross-iseries.sh3
-rw-r--r--scripts/cross-ppc.sh3
-rw-r--r--scripts/cross-ppc64.sh3
-rw-r--r--scripts/cross-ppc8260.sh3
-rw-r--r--scripts/cross-ppc8560.sh3
-rw-r--r--scripts/cross-pseries.sh3
-rw-r--r--scripts/cross-s390.sh2
-rw-r--r--scripts/cross-s390x.sh2
-rwxr-xr-xscripts/get-snapshot.sh35
-rwxr-xr-xscripts/grab-logs.sh16
-rwxr-xr-xscripts/newpatch.sh21
-rwxr-xr-xscripts/pull-upstreams.sh13
-rwxr-xr-xscripts/rebase.sh199
-rwxr-xr-xscripts/reconfig.sh26
-rw-r--r--scripts/rediffall.pl64
-rwxr-xr-xscripts/sort-config222
26 files changed, 986 insertions, 0 deletions
diff --git a/README.txt b/README.txt
new file mode 100644
index 000000000..482f8ea5b
--- /dev/null
+++ b/README.txt
@@ -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.
+
diff --git a/scripts/bumpspecfile.py b/scripts/bumpspecfile.py
new file mode 100755
index 000000000..478e82871
--- /dev/null
+++ b/scripts/bumpspecfile.py
@@ -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)
+
diff --git a/scripts/check-TODO.sh b/scripts/check-TODO.sh
new file mode 100755
index 000000000..7067f0b44
--- /dev/null
+++ b/scripts/check-TODO.sh
@@ -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
+
diff --git a/scripts/combine.sh b/scripts/combine.sh
new file mode 100755
index 000000000..86a68d302
--- /dev/null
+++ b/scripts/combine.sh
@@ -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
diff --git a/scripts/configcommon.pl b/scripts/configcommon.pl
new file mode 100644
index 000000000..38bbe80dc
--- /dev/null
+++ b/scripts/configcommon.pl
@@ -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;
+
diff --git a/scripts/configdiff.pl b/scripts/configdiff.pl
new file mode 100644
index 000000000..848d8df0f
--- /dev/null
+++ b/scripts/configdiff.pl
@@ -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;
diff --git a/scripts/cross-amd64.sh b/scripts/cross-amd64.sh
new file mode 100644
index 000000000..b3119d8fc
--- /dev/null
+++ b/scripts/cross-amd64.sh
@@ -0,0 +1,3 @@
+export PATH=$PATH:/opt/cross/bin
+make CROSS_COMPILE=x86_64-linux- ARCH=x86_64 hammer
+
diff --git a/scripts/cross-i586.sh b/scripts/cross-i586.sh
new file mode 100644
index 000000000..000f4ae7e
--- /dev/null
+++ b/scripts/cross-i586.sh
@@ -0,0 +1,3 @@
+export PATH=$PATH:/opt/cross/bin
+make ARCH=i386 i586
+
diff --git a/scripts/cross-i686.sh b/scripts/cross-i686.sh
new file mode 100644
index 000000000..5c0cfe137
--- /dev/null
+++ b/scripts/cross-i686.sh
@@ -0,0 +1,3 @@
+export PATH=$PATH:/opt/cross/bin
+make ARCH=i386 i686
+
diff --git a/scripts/cross-ia64.sh b/scripts/cross-ia64.sh
new file mode 100644
index 000000000..5699a57c1
--- /dev/null
+++ b/scripts/cross-ia64.sh
@@ -0,0 +1,2 @@
+export PATH=$PATH:/opt/cross/bin
+make CROSS_COMPILE=ia64-linux- ARCH=ia64 ia64
diff --git a/scripts/cross-iseries.sh b/scripts/cross-iseries.sh
new file mode 100644
index 000000000..71bfd9156
--- /dev/null
+++ b/scripts/cross-iseries.sh
@@ -0,0 +1,3 @@
+export PATH=$PATH:/opt/cross/bin
+make CROSS_COMPILE=ppc64-linux- ARCH=ppc64 ppc64iseries
+
diff --git a/scripts/cross-ppc.sh b/scripts/cross-ppc.sh
new file mode 100644
index 000000000..c49b740f3
--- /dev/null
+++ b/scripts/cross-ppc.sh
@@ -0,0 +1,3 @@
+export PATH=$PATH:/opt/cross/bin
+make CROSS_COMPILE=ppc-linux- ARCH=ppc ppc
+
diff --git a/scripts/cross-ppc64.sh b/scripts/cross-ppc64.sh
new file mode 100644
index 000000000..fb29d4481
--- /dev/null
+++ b/scripts/cross-ppc64.sh
@@ -0,0 +1,3 @@
+export PATH=$PATH:/opt/cross/bin
+make CROSS_COMPILE=ppc64-linux- ARCH=ppc64 ppc64
+
diff --git a/scripts/cross-ppc8260.sh b/scripts/cross-ppc8260.sh
new file mode 100644
index 000000000..10fbc3292
--- /dev/null
+++ b/scripts/cross-ppc8260.sh
@@ -0,0 +1,3 @@
+export PATH=$PATH:/opt/cross/bin
+make CROSS_COMPILE=ppc-linux- ARCH=ppc ppc8260
+
diff --git a/scripts/cross-ppc8560.sh b/scripts/cross-ppc8560.sh
new file mode 100644
index 000000000..405f98a9c
--- /dev/null
+++ b/scripts/cross-ppc8560.sh
@@ -0,0 +1,3 @@
+export PATH=$PATH:/opt/cross/bin
+make CROSS_COMPILE=ppc-linux- ARCH=ppc ppc8560
+
diff --git a/scripts/cross-pseries.sh b/scripts/cross-pseries.sh
new file mode 100644
index 000000000..724a8e582
--- /dev/null
+++ b/scripts/cross-pseries.sh
@@ -0,0 +1,3 @@
+export PATH=$PATH:/opt/cross/bin
+make CROSS_COMPILE=ppc64-linux- ARCH=ppc64 pseries64
+
diff --git a/scripts/cross-s390.sh b/scripts/cross-s390.sh
new file mode 100644
index 000000000..4a274397c
--- /dev/null
+++ b/scripts/cross-s390.sh
@@ -0,0 +1,2 @@
+export PATH=$PATH:/opt/cross/bin
+make CROSS_COMPILE=s390-linux- ARCH=s390 s390
diff --git a/scripts/cross-s390x.sh b/scripts/cross-s390x.sh
new file mode 100644
index 000000000..1cdc98a73
--- /dev/null
+++ b/scripts/cross-s390x.sh
@@ -0,0 +1,2 @@
+export PATH=$PATH:/opt/cross/bin
+make CROSS_COMPILE=s390x-linux- ARCH=s390 s390x
diff --git a/scripts/get-snapshot.sh b/scripts/get-snapshot.sh
new file mode 100755
index 000000000..79d2b095e
--- /dev/null
+++ b/scripts/get-snapshot.sh
@@ -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
diff --git a/scripts/grab-logs.sh b/scripts/grab-logs.sh
new file mode 100755
index 000000000..8a445ec99
--- /dev/null
+++ b/scripts/grab-logs.sh
@@ -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
+
diff --git a/scripts/newpatch.sh b/scripts/newpatch.sh
new file mode 100755
index 000000000..0dc2e837c
--- /dev/null
+++ b/scripts/newpatch.sh
@@ -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
+
diff --git a/scripts/pull-upstreams.sh b/scripts/pull-upstreams.sh
new file mode 100755
index 000000000..e94fcfd48
--- /dev/null
+++ b/scripts/pull-upstreams.sh
@@ -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
diff --git a/scripts/rebase.sh b/scripts/rebase.sh
new file mode 100755
index 000000000..fc3157b24
--- /dev/null
+++ b/scripts/rebase.sh
@@ -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
diff --git a/scripts/reconfig.sh b/scripts/reconfig.sh
new file mode 100755
index 000000000..d9e8fa7c3
--- /dev/null
+++ b/scripts/reconfig.sh
@@ -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
+
diff --git a/scripts/rediffall.pl b/scripts/rediffall.pl
new file mode 100644
index 000000000..29f12beb9
--- /dev/null
+++ b/scripts/rediffall.pl
@@ -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;
diff --git a/scripts/sort-config b/scripts/sort-config
new file mode 100755
index 000000000..bc497ea0b
--- /dev/null
+++ b/scripts/sort-config
@@ -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