|
Justin Vreeland |
794d92 |
# By Paul Bolle October 2014.
|
|
Justin Vreeland |
794d92 |
#
|
|
Justin Vreeland |
794d92 |
# Contributed to the public domain by its author.
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
use 5.016;
|
|
Justin Vreeland |
794d92 |
use warnings;
|
|
Justin Vreeland |
794d92 |
use autodie;
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
use File::Find;
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
my @Kconfigs;
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
my $Kconfigre = qr/Kconfig.*/;
|
|
Justin Vreeland |
794d92 |
my $configre = qr/^\s*(menu)?config\s+(?<config>(\w+))$/;
|
|
Justin Vreeland |
794d92 |
my $CONFIG_re = qr/\bCONFIG_(?<CONFIG_>(\w+))/;
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
sub match {
|
|
Justin Vreeland |
794d92 |
push( @Kconfigs, $File::Find::name ) if ($_ =~ $Kconfigre);
|
|
Justin Vreeland |
794d92 |
}
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
sub parse_kconfig {
|
|
Justin Vreeland |
794d92 |
my ($path) = @_;
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
my @ret;
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
open( my $kconfig, "<", $path );
|
|
Justin Vreeland |
794d92 |
my $slurp = do { local $/ = undef; <$kconfig> };
|
|
Justin Vreeland |
794d92 |
close( $kconfig );
|
|
Justin Vreeland |
794d92 |
my @lines = split ( /\n/, $slurp );
|
|
Justin Vreeland |
794d92 |
foreach my $line (@lines) {
|
|
Justin Vreeland |
794d92 |
if ($line =~ /$configre/) {
|
|
Justin Vreeland |
794d92 |
push( @ret, $+{config} );
|
|
Justin Vreeland |
794d92 |
}
|
|
Justin Vreeland |
794d92 |
}
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
@ret;
|
|
Justin Vreeland |
794d92 |
}
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
sub parse_shipped {
|
|
Justin Vreeland |
794d92 |
my ($path) = @_;
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
my @ret;
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
open( my $shipped, "<", $path );
|
|
Justin Vreeland |
794d92 |
my $slurp = do { local $/ = undef; <$shipped> };
|
|
Justin Vreeland |
794d92 |
close( $shipped );
|
|
Justin Vreeland |
794d92 |
my @lines = split ( /\n/, $slurp );
|
|
Justin Vreeland |
794d92 |
my $i = 1;
|
|
Justin Vreeland |
794d92 |
foreach my $line (@lines) {
|
|
Justin Vreeland |
794d92 |
if ($line =~ /$CONFIG_re/) {
|
|
Justin Vreeland |
794d92 |
push( @ret, [$i, $+{CONFIG_}] );
|
|
Justin Vreeland |
794d92 |
}
|
|
Justin Vreeland |
794d92 |
$i++;
|
|
Justin Vreeland |
794d92 |
}
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
@ret;
|
|
Justin Vreeland |
794d92 |
}
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
exit main ( @ARGV );
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
sub main {
|
|
Justin Vreeland |
794d92 |
my %configs;
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
find( \&match, @_ );
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
foreach my $Kconfig (@Kconfigs) {
|
|
Justin Vreeland |
794d92 |
my (@tmp) = parse_kconfig( $Kconfig );
|
|
Justin Vreeland |
794d92 |
foreach my $config ( @tmp ) {
|
|
Justin Vreeland |
794d92 |
$configs{ $config }++;
|
|
Justin Vreeland |
794d92 |
}
|
|
Justin Vreeland |
794d92 |
}
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
foreach my $shipped (glob("*.config")) {
|
|
Justin Vreeland |
794d92 |
my (@tmp) = parse_shipped( $shipped );
|
|
Justin Vreeland |
794d92 |
foreach my $ref ( @tmp ) {
|
|
Justin Vreeland |
794d92 |
say( STDERR "$shipped:$ref->[0]: No Kconfig symbol matches 'CONFIG_$ref->[1]'" )
|
|
Justin Vreeland |
794d92 |
unless (grep( /^$ref->[1]$/, keys( %configs )));
|
|
Justin Vreeland |
794d92 |
}
|
|
Justin Vreeland |
794d92 |
}
|
|
Justin Vreeland |
794d92 |
|
|
Justin Vreeland |
794d92 |
0;
|
|
Justin Vreeland |
794d92 |
}
|
|
Justin Vreeland |
794d92 |
|