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