Annotation of embedaddon/curl/tests/disable-scan.pl, revision 1.1.1.1

1.1       misho       1: #!/usr/bin/env perl
                      2: #***************************************************************************
                      3: #                                  _   _ ____  _
                      4: #  Project                     ___| | | |  _ \| |
                      5: #                             / __| | | | |_) | |
                      6: #                            | (__| |_| |  _ <| |___
                      7: #                             \___|\___/|_| \_\_____|
                      8: #
                      9: # Copyright (C) 2010-2019, Daniel Stenberg, <daniel@haxx.se>, et al.
                     10: #
                     11: # This software is licensed as described in the file COPYING, which
                     12: # you should have received as part of this distribution. The terms
                     13: # are also available at https://curl.haxx.se/docs/copyright.html.
                     14: #
                     15: # You may opt to use, copy, modify, merge, publish, distribute and/or sell
                     16: # copies of the Software, and permit persons to whom the Software is
                     17: # furnished to do so, under the terms of the COPYING file.
                     18: #
                     19: # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
                     20: # KIND, either express or implied.
                     21: #
                     22: ###########################################################################
                     23: #
                     24: 
                     25: use strict;
                     26: use warnings;
                     27: 
                     28: # the DISABLE options that can be set by configure
                     29: my %disable;
                     30: # the DISABLE options that are used in C files
                     31: my %file;
                     32: # the DISABLE options that are documented
                     33: my %docs;
                     34: 
                     35: # we may get the dir root pointed out
                     36: my $root=$ARGV[0] || ".";
                     37: my $DOCS="CURL-DISABLE.md";
                     38: 
                     39: sub scan_configure {
                     40:     open S, "<$root/configure.ac";
                     41:     while(<S>) {
                     42:         if(/(CURL_DISABLE_[A-Z_]+)/g) {
                     43:             my ($sym)=($1);
                     44:             $disable{$sym} = 1;
                     45:         }
                     46:     }
                     47:     close S;
                     48: }
                     49: 
                     50: sub scan_file {
                     51:     my ($source)=@_;
                     52:     open F, "<$source";
                     53:     while(<F>) {
                     54:         if(/(CURL_DISABLE_[A-Z_]+)/g) {
                     55:             my ($sym)=($1);
                     56:             $file{$sym} = $source;
                     57:         }
                     58:     }
                     59:     close F;
                     60: }
                     61: 
                     62: sub scan_dir {
                     63:     my ($dir)=@_;
                     64:     opendir(my $dh, $dir) || die "Can't opendir $dir: $!";
                     65:     my @cfiles = grep { /\.c\z/ && -f "$dir/$_" } readdir($dh);
                     66:     closedir $dh;
                     67:     for my $f (sort @cfiles) {
                     68:         scan_file("$dir/$f");
                     69:     }
                     70: }
                     71: 
                     72: sub scan_sources {
                     73:     scan_dir("$root/src");
                     74:     scan_dir("$root/lib");
                     75:     scan_dir("$root/lib/vtls");
                     76:     scan_dir("$root/lib/vauth");
                     77: }
                     78: 
                     79: sub scan_docs {
                     80:     open F, "<$root/docs/$DOCS";
                     81:     my $line = 0;
                     82:     while(<F>) {
                     83:         $line++;
                     84:         if(/^## (CURL_DISABLE_[A-Z_]+)/g) {
                     85:             my ($sym)=($1);
                     86:             $docs{$sym} = $line;
                     87:         }
                     88:     }
                     89:     close F;
                     90: }
                     91: 
                     92: scan_configure();
                     93: scan_sources();
                     94: scan_docs();
                     95: 
                     96: 
                     97: my $error = 0;
                     98: # Check the configure symbols for use in code
                     99: for my $s (sort keys %disable) {
                    100:     if(!$file{$s}) {
                    101:         printf "Present in configure.ac, not used by code: %s\n", $s;
                    102:         $error++;
                    103:     }
                    104:     if(!$docs{$s}) {
                    105:         printf "Present in configure.ac, not documented in $DOCS: %s\n", $s;
                    106:         $error++;
                    107:     }
                    108: }
                    109: 
                    110: # Check the code symbols for use in configure
                    111: for my $s (sort keys %file) {
                    112:     if(!$disable{$s}) {
                    113:         printf "Not set by configure: %s (%s)\n", $s, $file{$s};
                    114:         $error++;
                    115:     }
                    116:     if(!$docs{$s}) {
                    117:         printf "Used in code, not documented in $DOCS: %s\n", $s;
                    118:         $error++;
                    119:     }
                    120: }
                    121: 
                    122: # Check the documented symbols
                    123: for my $s (sort keys %docs) {
                    124:     if(!$disable{$s}) {
                    125:         printf "Documented but not in configure: %s\n", $s;
                    126:         $error++;
                    127:     }
                    128:     if(!$file{$s}) {
                    129:         printf "Documented, but not used by code: %s\n", $s;
                    130:         $error++;
                    131:     }
                    132: }
                    133: 
                    134: exit $error;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>