diff options
author | Justin M. Forbes <jforbes@fedoraproject.org> | 2020-08-12 08:03:24 -0500 |
---|---|---|
committer | Justin M. Forbes <jforbes@fedoraproject.org> | 2020-08-12 08:03:24 -0500 |
commit | 47a895f435cccb2cb14eb5d0c52d2f6d4d904907 (patch) | |
tree | 628be9cf983bcdfedd940131f8f7187020cff5f2 /scripts/check-configs.pl | |
parent | 29d3f64f7e887d5cf9ae5f496febe5954fc49117 (diff) | |
download | kernel-47a895f435cccb2cb14eb5d0c52d2f6d4d904907.tar.gz kernel-47a895f435cccb2cb14eb5d0c52d2f6d4d904907.tar.xz kernel-47a895f435cccb2cb14eb5d0c52d2f6d4d904907.zip |
Linux v5.8.1
Signed-off-by: Justin M. Forbes <jforbes@fedoraproject.org>
Diffstat (limited to 'scripts/check-configs.pl')
-rw-r--r-- | scripts/check-configs.pl | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/scripts/check-configs.pl b/scripts/check-configs.pl new file mode 100644 index 000000000..c74acf1d4 --- /dev/null +++ b/scripts/check-configs.pl @@ -0,0 +1,83 @@ +# By Paul Bolle October 2014. +# +# Contributed to the public domain by its author. + +use 5.016; +use warnings; +use autodie; + +use File::Find; + +my @Kconfigs; + +my $Kconfigre = qr/Kconfig.*/; +my $configre = qr/^\s*(menu)?config\s+(?<config>(\w+))$/; +my $CONFIG_re = qr/\bCONFIG_(?<CONFIG_>(\w+))/; + +sub match { + push( @Kconfigs, $File::Find::name ) if ($_ =~ $Kconfigre); +} + +sub parse_kconfig { + my ($path) = @_; + + my @ret; + + open( my $kconfig, "<", $path ); + my $slurp = do { local $/ = undef; <$kconfig> }; + close( $kconfig ); + my @lines = split ( /\n/, $slurp ); + foreach my $line (@lines) { + if ($line =~ /$configre/) { + push( @ret, $+{config} ); + } + } + + @ret; +} + +sub parse_shipped { + my ($path) = @_; + + my @ret; + + open( my $shipped, "<", $path ); + my $slurp = do { local $/ = undef; <$shipped> }; + close( $shipped ); + my @lines = split ( /\n/, $slurp ); + my $i = 1; + foreach my $line (@lines) { + if ($line =~ /$CONFIG_re/) { + push( @ret, [$i, $+{CONFIG_}] ); + } + $i++; + } + + @ret; +} + +exit main ( @ARGV ); + +sub main { + my %configs; + + find( \&match, @_ ); + + foreach my $Kconfig (@Kconfigs) { + my (@tmp) = parse_kconfig( $Kconfig ); + foreach my $config ( @tmp ) { + $configs{ $config }++; + } + } + + foreach my $shipped (glob("*.config")) { + my (@tmp) = parse_shipped( $shipped ); + foreach my $ref ( @tmp ) { + say( STDERR "$shipped:$ref->[0]: No Kconfig symbol matches 'CONFIG_$ref->[1]'" ) + unless (grep( /^$ref->[1]$/, keys( %configs ))); + } + } + + 0; +} + |