8985cfb689
We can run this once per RC (or somewhat frequently) to keep the split config-* files clean of dead Kconfig options
84 lines
1.4 KiB
Perl
84 lines
1.4 KiB
Perl
# 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;
|
|
}
|
|
|