On Thu, Oct 2, 2014 at 4:49 AM, Paul Bolle <pebolle@xxxxxxxxxx> wrote: > Josh, > > Here's a perl script I cobbled together that checks for references to > unknown Kconfig macros. Tested on top of current master. Invoke like > this: > perl "$WHAT_SHALL_I_CALL_THIS.pl" $SOME_DIR/kernel-3.16.fc20/linux-3.17.0-0.rc7.git1.1.fc20.x86_64 > > (I stopped tracking rawhide long ago.) > > I'll send a patch generated with the aid of this script shortly. > > It seems overkill to invoke (something like) this every build. But > perhaps the package maintainers can include (something like) it before > they push changes into master. I would imagine it being most useful during the merge window kernels. Perhaps running it once per -rc build would be sufficient to keep things clean. > The call of "glob("config-*")" is an accident waiting to happen, but I > couldn't be bothered to replace it with a call of "git ls-files > "config-*"". > > Have fun! If you have no objections, I'll likely add this to the scripts/ directory in the kernel pkg repo. That way it's there and people that can actually read perl can modify it, etc. Have a preference on a name? I was thinking "zombie_kconfig.pl". josh > > > Paul Bolle > > # 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; > } > _______________________________________________ kernel mailing list kernel@xxxxxxxxxxxxxxxxxxxxxxx https://admin.fedoraproject.org/mailman/listinfo/kernel