blob: bd34e71933b205634703d2e0b5b6210c59e81b55 (
plain)
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
|
#!/usr/bin/perl
use strict;
my $kdir=shift or die "should specify a kernel dir";
my $infile=shift or die "should specify an input config file";
my $outfile=shift or die "should specify an output config file";
my $out;
sub check_spin_lock()
{
my $file = "$kdir/include/linux/netdevice.h";
my $old_syntax = 1;
open INNET, "<$file" or die "File not found: $file";
while (<INNET>) {
if (m/netif_tx_lock_bh/) {
$old_syntax = 0;
last;
}
}
if ($old_syntax) {
$out.= "\n#define OLD_XMIT_LOCK 1\n";
}
close INNET;
}
sub check_sound_driver_h()
{
my $file = "$kdir/include/sound/driver.h";
my $old_syntax = 1;
open INNET, "<$file" or return;
while (<INNET>) {
if (m/This file is deprecated/) {
$old_syntax = 0;
last;
}
}
if ($old_syntax) {
$out.= "\n#define NEED_SOUND_DRIVER_H 1\n";
}
close INNET;
}
sub check_snd_pcm_rate_to_rate_bit()
{
my $file = "$kdir/include/sound/pcm.h";
my $old_syntax = 1;
open INNET, "<$file" or die "File not found: $file";
while (<INNET>) {
if (m/snd_pcm_rate_to_rate_bit/) {
$old_syntax = 0;
last;
}
}
if ($old_syntax) {
$out.= "\n#define COMPAT_PCM_TO_RATE_BIT 1\n";
}
close INNET;
}
sub check_snd_ctl_boolean_mono_info()
{
my $file = "$kdir/include/sound/control.h";
my $old_syntax = 1;
open INNET, "<$file" or die "File not found: $file";
while (<INNET>) {
if (m/snd_ctl_boolean_mono_info/) {
$old_syntax = 0;
last;
}
}
if ($old_syntax) {
$out.= "\n#define COMPAT_SND_CTL_BOOLEAN_MONO 1\n";
}
close INNET;
}
sub check_bool()
{
my $file = "$kdir/include/linux/types.h";
my $old_syntax = 1;
open INDEP, "<$file" or die "File not found: $file";
while (<INDEP>) {
if (m/^\s*typedef.*bool;/) {
$old_syntax = 0;
last;
}
}
if ($old_syntax) {
$out.= "\n#define NEED_BOOL_TYPE 1\n";
}
close INDEP;
}
sub check_other_dependencies()
{
check_spin_lock();
check_sound_driver_h();
check_snd_ctl_boolean_mono_info();
check_snd_pcm_rate_to_rate_bit();
check_bool();
}
# Do the basic rules
open IN, "<$infile" or die "File not found: $infile";
$out.= "#ifndef __CONFIG_COMPAT_H__\n";
$out.= "#define __CONFIG_COMPAT_H__\n\n";
$out.= "#include <linux/autoconf.h>\n\n";
while(<IN>) {
next unless /^(\S+)\s*:= (\S+)$/;
$out.= "#undef $1\n";
$out.= "#undef $1_MODULE\n";
if($2 eq "n") {
next;
} elsif($2 eq "m") {
$out.= "#define $1_MODULE 1\n";
} elsif($2 eq "y") {
$out.= "#define $1 1\n";
} else {
$out.= "#define $1 $2\n";
}
}
close IN;
check_other_dependencies();
open OUT, ">$outfile" or die 'Unable to write $outfile';
print OUT "$out\n#endif\n";
close OUT
|