forked from colognechip/mISDN
-
Notifications
You must be signed in to change notification settings - Fork 0
/
stddiff
executable file
·206 lines (184 loc) · 4.07 KB
/
stddiff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
#!/bin/sh
KERNELDIR=/lib/modules/$(uname -r)/build
KERNFIRST=false
PREPARSER="./preparser"
DODIFF=dodiff
UNIQUE=false
dodiff() {
if $KERNFIRST ; then
diff -u $EXTRAOPT $2 $1
else
diff -u $EXTRAOPT $1 $2
fi
}
dodiffuni() {
echo -n "Processing $1 ... "
TMPNAME=/tmp/`basename $1`.$$
$PREPARSER -c $CTRLNAME $1 $TMPNAME
RES=$?
if [ "$RES" -eq "0" ] ; then
echo diff original
dodiff $1 $2
rm $TMPNAME
return 0
fi
if [ "$RES" -eq "2" ] ; then
echo diff modified
dodiff $TMPNAME $2
rm $TMPNAME
return 0
fi
echo "problem with $PREPARSER retcode $RES"
exit 1
}
#
# Print usage and exit
#
usage() {
cat<<EOM
stddiff is used for generating diffs of the cvs-tree
versus the kernel-tree.
stddiff [-r] [-h] [-k DIR] [-u] [-c FILE] [-w] [files ...]
Options:
-h This Text.
-r Reverse direction (kernel versus cvs).
-k DIR Kerneltree is in DIR instead of /usr/src/linux
-u Make a diff for a unique kernel-tree
(preprocessing with $PREPARSER)
-c FILE Use FILE as control file for $PREPARSER (only with -u)
-w Ignore white space when comparing lines
Without any files given, within the whole tree, the "right"
files are diffed. When any files are given in the commandline,
only those are diffed.
EOM
exit
}
#
# Check, if argument is a linux kernel dir
#
checkkernel() {
if [ -f $1/Makefile ] ; then
# if [ "`grep ^vmlinux: $1/Makefile | grep vmlinux`" != "" ] ; then
return 0
# fi
fi
echo "The given argument does not look like a kernel dir"
exit 1
}
#
# Determine a control file name
#
calc_ctrl_file() {
eval `sed -n 's/^\([A-Z]*\) = \([0-9]*\)$/\1=\2/p' $KERNELDIR/Makefile`
echo "Current kernel version is $VERSION.$PATCHLEVEL.$SUBLEVEL"
if [ -z "$CTRLNAME" ] ; then
CTRLNAME=v$VERSION.$PATCHLEVEL.$SUBLEVEL.ctrl
if [ -f $CTRLNAME ] ; then
return 0
fi
CTRLNAME=v$VERSION.$PATCHLEVEL.ctrl
if [ -f $CTRLNAME ] ; then
return 0
fi
CTRLNAME=default.ctrl
fi
if [ -f $CTRLNAME ] ; then
return 0
fi
echo "No control file found"
exit 1
}
#
# Determine a version depend file name
#
calc_version_file() {
VERSION_NAME=$1.v$VERSION.$PATCHLEVEL.$SUBLEVEL
if [ -f $VERSION_NAME ] ; then
return 0
fi
VERSION_NAME=$1.v$VERSION.$PATCHLEVEL
if [ -f $VERSION_NAME ] ; then
return 0
fi
VERSION_NAME=""
return 1
}
while getopts :rhk:uc:w a ; do
case $a in
\?) case $OPTARG in
k) echo "-k requires Kernel directory parameter"
;;
*) echo "Unknown option: -$OPTARG"
echo "Try stddiff -h"
;;
esac
exit 1
;;
k) checkkernel $OPTARG
KERNELDIR=$OPTARG
;;
c) CTRLNAME=$OPTARG
;;
u) UNIQUE=true
;;
r) KERNFIRST=true
;;
w) EXTRAOPT=-w
;;
h) usage
;;
esac
done
shift `expr $OPTIND - 1`
if [ -z "$VERSION" -o -z "$PATCHLEVEL" ] ; then
if ! [ -f $KERNELDIR/Makefile ] ; then
echo "VERSION/PATCHLEVEL not set and no Makefile to read from"
exit 1
fi
eval `sed -n 's/^\([A-Z]*\) = \([0-9]*\)$/\1=\2/p' $KERNELDIR/Makefile`
fi
echo "Current kernel version is $VERSION.$PATCHLEVEL.$SUBLEVEL"
if $UNIQUE ; then
DODIFF=dodiffuni
calc_ctrl_file
fi
echo -n "Using $DODIFF $EXTRAOPT"
if $UNIQUE ; then
echo " with controlfile $CTRLNAME"
else
echo
fi
if [ $# != 0 ]; then
for i in $* ; do
$DODIFF $i $KERNELDIR/$i
done
else
for i in drivers/isdn/hardware/mISDN/*.[ch] ; do
$DODIFF $i $KERNELDIR/$i
done
for i in include/linux/*.h ; do
if [ "$i" = "include/linux/isdn_compat.h" -a \
"$UNIQUE" = "true" ] ; then
echo "$i skipped"
else
$DODIFF $i $KERNELDIR/$i
fi
done
for i in drivers/isdn/hardware/Makefile \
drivers/isdn/hardware/Kconfig \
drivers/isdn/hardware/mISDN/Makefile \
drivers/isdn/hardware/mISDN/Rules.make \
drivers/isdn/hardware/mISDN/Kconfig ; do
calc_version_file $i
if [ -n "$VERSION_NAME" ] ; then
dodiff $VERSION_NAME $KERNELDIR/$i
else
if [ -f $i ] ; then
echo "use version independ $i for version v$VERSION.$PATCHLEVEL.$SUBLEVEL"
$DODIFF $i $KERNELDIR/$i
else
echo "no $i for version v$VERSION.$PATCHLEVEL.$SUBLEVEL found -- skipped"
fi
fi
done
fi