The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/scripts/checkconfig.pl

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 #! /usr/bin/perl
    2 #
    3 # checkconfig: find uses of CONFIG_* names without matching definitions.
    4 # Copyright abandoned, 1998, Michael Elizabeth Chastain <mailto:mec@shout.net>.
    5 
    6 use integer;
    7 
    8 $| = 1;
    9 
   10 foreach $file (@ARGV)
   11 {
   12     # Open this file.
   13     open(FILE, $file) || die "Can't open $file: $!\n";
   14 
   15     # Initialize variables.
   16     my $fInComment   = 0;
   17     my $fInString    = 0;
   18     my $fUseConfig   = 0;
   19     my $iLinuxConfig = 0;
   20     my %configList   = ();
   21 
   22     LINE: while ( <FILE> )
   23     {
   24         # Strip comments.
   25         $fInComment && (s+^.*?\*/+ +o ? ($fInComment = 0) : next);
   26         m+/\*+o && (s+/\*.*?\*/+ +go, (s+/\*.*$+ +o && ($fInComment = 1)));
   27 
   28         # Pick up definitions.
   29         if ( m/^\s*#/o )
   30         {
   31             $iLinuxConfig      = $. if m/^\s*#\s*include\s*"linux\/config\.h"/o;
   32             $configList{uc $1} = 1  if m/^\s*#\s*include\s*"config\/(\S*)\.h"/o;
   33         }
   34 
   35         # Strip strings.
   36         $fInString && (s+^.*?"+ +o ? ($fInString = 0) : next);
   37         m+"+o && (s+".*?"+ +go, (s+".*$+ +o && ($fInString = 1)));
   38 
   39         # Pick up definitions.
   40         if ( m/^\s*#/o )
   41         {
   42             $iLinuxConfig      = $. if m/^\s*#\s*include\s*<linux\/config\.h>/o;
   43             $configList{uc $1} = 1  if m/^\s*#\s*include\s*<config\/(\S*)\.h>/o;
   44             $configList{$1}    = 1  if m/^\s*#\s*define\s+CONFIG_(\w*)/o;
   45             $configList{$1}    = 1  if m/^\s*#\s*undef\s+CONFIG_(\w*)/o;
   46         }
   47 
   48         # Look for usages.
   49         next unless m/CONFIG_/o;
   50         WORD: while ( m/\bCONFIG_(\w+)/og )
   51         {
   52             $fUseConfig = 1;
   53             last LINE if $iLinuxConfig;
   54             next WORD if exists $configList{$1};
   55             print "$file: $.: need CONFIG_$1.\n";
   56             $configList{$1} = 0;
   57         }
   58     }
   59 
   60     # Report superfluous includes.
   61     if ( $iLinuxConfig && ! $fUseConfig )
   62         { print "$file: $iLinuxConfig: linux/config.h not needed.\n"; }
   63 
   64     close(FILE);
   65 }

Cache object: 90f784027a45b164e1a5b312ac655d4e


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.