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 = "^\\#if LINUX_VERSION_CODE (==|!=|<|<=|>|>=) " .
32 "KERNEL_VERSION\\((\\d+),(\\d+),(\\d+)\\)";
33 $re_elif = "^\\#elif LINUX_VERSION_CODE (==|!=|<|<=|>|>=) " .
34 "KERNEL_VERSION\\((\\d+),(\\d+),(\\d+)\\)";
39 if (defined($opt_v)) {
46 if (defined($opt_v)) {
47 strip_kversion($opt_v);
50 if (defined($opt_i)) {
55 print if (defined($_));
63 if ($lines[$i] =~ /include.*linux(\/can)?\/version\.h/) {
64 delete_line($i, "<del>");
67 if ($lines[$i] =~ /RCSID/) {
68 delete_line($i, "<del>");
69 while ($lines[++$i] eq "\n") {
70 delete_line($i, "<skip>");
74 if ($lines[$i] =~ /\$Id.*\$/) {
75 delete_line($i, "<del>");
76 while ($lines[++$i] eq " *\n") {
77 delete_line($i, "<skip>");
86 my($i, $state, $skip, $level);
95 $state = compare($version, $1, $2, $3, $4);
97 delete_line($i, "<del>");
98 $skip = ($lines[$i-1] eq "\n");
101 if ($level == 0 && /$re_elif/) {
102 $state = compare($version, $1, $2, $3, $4);
105 delete_line($i, "<del>");
106 } elsif ($level == 0 && /^\#else/) {
109 delete_line($i, "<del>");
110 } elsif ($level == 0 && /^\#endif/) {
112 delete_line($i, "<del>");
114 while ($skip && $lines[$i+1] eq "\n") {
116 delete_line($i, "<skip>");
120 delete_line($i, "<del>");
121 } elsif (/^\#endif/) {
123 delete_line($i, "<del>");
124 } elsif ($state == 1) {
127 delete_line($i, "<del>");
134 my($version, $op, $major, $minor, $patchlevel) = @_;
136 my($mj, $mn, $pl) = split(/\./, $version);
138 if ($op eq "==" && $mj == $major && $mn == $minor && $pl == $patchlevel) {
140 } elsif ($op eq "!=" &&
141 ($mj != $major || $mn != $minor || $pl != $patchlevel)) {
143 } elsif ($op eq "<" &&
145 $mj == $major && ($mn < $minor ||
146 $mn == $minor && $pl < $patchlevel))) {
148 } elsif ($op eq "<=" &&
150 $mj == $major && ($mn < $minor ||
151 $mn == $minor && $pl <= $patchlevel))) {
153 } elsif ($op eq ">" &&
155 $mj == $major && ($mn > $minor ||
156 $mn == $minor && $pl > $patchlevel))) {
158 } elsif ($op eq ">=" &&
160 $mj == $major && ($mn > $minor ||
161 $mn == $minor && $pl >= $patchlevel))) {
169 my($lineno, $dbg) = @_;
172 $lines[$lineno] = "$dbg\n";
174 undef($lines[$lineno]);