5 # Strip lines from sources files:
7 # * Eliminate CPP conditional compilation for different kernel version, i.e.
8 # eliminate all occurences of #if LINUX_VERSION_CODE < KERNEL_VERSION(...)
9 # and likewise for <=, >, and >=.
11 # * Eliminate all Subversion $Id$ and RCSID() lines.
15 # strip-src [-v <version>] [-i] [-d] [<file>]
17 # The -v option will generate a source file for specified kernel version
18 # where <version> is the kernel version you want the code to be generated
19 # for, in the form <major>.<minor>.<patchlevel>.
21 # The -i option will strip all Subversion $Id$ lines from the the source.
23 # The -d (debug) option will give you some output on what the program does.
25 # If <file> is given, read that source file, otherwise stdin.
27 # The result will be output on stdout.
29 require("getopts.pl");
31 $re = "^\\#if LINUX_VERSION_CODE (<|<=|>|>=) " .
32 "KERNEL_VERSION\\((\\d+),(\\d+),(\\d+)\\)";
37 if (defined($opt_v)) {
44 if (defined($opt_v)) {
45 strip_kversion($opt_v);
48 if (defined($opt_i)) {
53 print if (defined($_));
61 if ($lines[$i] =~ /include.*linux(\/can)?\/version\.h/) {
62 delete_line($i, "<del>");
65 if ($lines[$i] =~ /RCSID/) {
66 delete_line($i, "<del>");
67 while ($lines[++$i] eq "\n") {
68 delete_line($i, "<skip>");
72 if ($lines[$i] =~ /\$Id.*\$/) {
73 delete_line($i, "<del>");
74 while ($lines[++$i] eq " *\n") {
75 delete_line($i, "<skip>");
84 my($i, $state, $skip, $level);
89 for ($i = 1; $i <= $#lines; $i++) {
93 $state = compare($version, $1, $2, $3, $4);
94 delete_line($i, "<del>");
95 $skip = ($lines[$i-1] eq "\n");
98 if ($level == 0 && /^\#else/) {
100 delete_line($i, "<del>");
101 } elsif ($level == 0 && /^\#endif/) {
103 delete_line($i, "<del>");
105 while ($skip && $lines[$i+1] eq "\n") {
107 delete_line($i, "<skip>");
111 delete_line($i, "<del>");
112 } elsif (/^\#endif/) {
114 delete_line($i, "<del>");
115 } elsif ($state == 1) {
118 delete_line($i, "<del>");
125 my($version, $op, $major, $minor, $patchlevel) = @_;
127 my($mj, $mn, $pl) = split(/\./, $version);
131 $mj == $major && ($mn < $minor ||
132 $mn == $minor && $pl < $patchlevel))) {
134 } elsif ($op eq "<=" &&
136 $mj == $major && ($mn < $minor ||
137 $mn == $minor && $pl <= $patchlevel))) {
139 } elsif ($op eq ">" &&
141 $mj == $major && ($mn > $minor ||
142 $mn == $minor && $pl > $patchlevel))) {
144 } elsif ($op eq ">=" &&
146 $mj == $major && ($mn > $minor ||
147 $mn == $minor && $pl >= $patchlevel))) {
155 my($lineno, $dbg) = @_;
158 $lines[$lineno] = "$dbg\n";
160 undef($lines[$lineno]);