forked from rpms/kernel
		
	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;
 | |
| }
 | |
| 
 |