summaryrefslogtreecommitdiffstats
path: root/scripts/check-configs.pl
diff options
context:
space:
mode:
authorLaura Abbott <labbott@fedoraproject.org>2015-09-01 15:03:08 -0700
committerLaura Abbott <labbott@fedoraproject.org>2015-09-01 15:59:56 -0700
commitd07b889185195409a6090ed3e12fff475b4258f4 (patch)
treec2b98784a9c45c2ba5420c4a256c03d1c1c2e125 /scripts/check-configs.pl
parent07775e21b6d0c7b9c2251deb8cb5ef3052a38c6e (diff)
downloadkernel-d07b889185195409a6090ed3e12fff475b4258f4.tar.gz
kernel-d07b889185195409a6090ed3e12fff475b4258f4.tar.xz
kernel-d07b889185195409a6090ed3e12fff475b4258f4.zip
Linux v4.2
This is a squashed patch of the history from F22 + the 4.2 rebase
Diffstat (limited to 'scripts/check-configs.pl')
-rw-r--r--scripts/check-configs.pl83
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..10282aa74
--- /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;
+}
+