#!/usr/bin/env perl #*************************************************************************** # _ _ ____ _ # Project ___| | | | _ \| | # / __| | | | |_) | | # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # # Copyright (C) 2010 - 2020, Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms # are also available at https://curl.haxx.se/docs/copyright.html. # # You may opt to use, copy, modify, merge, publish, distribute and/or sell # copies of the Software, and permit persons to whom the Software is # furnished to do so, under the terms of the COPYING file. # # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY # KIND, either express or implied. # ########################################################################### # # # - Get all options mentioned in the $cmddir. # - Make sure they're all mentioned in the $opts document # - Make usre that the version in $opts matches the version in the file in # $cmddir # my $opts = $ARGV[0]; my $cmddir = $ARGV[1]; sub cmdfiles { my ($dir)=@_; opendir(my $dh, $dir) || die "Can't opendir $dir: $!"; my @opts = grep { /\.d$/ && -f "$dir/$_" } readdir($dh); closedir $dh; for(@opts) { $_ =~ s/\.d$//; $file{$_}=1; } return @opts; } sub mentions { my ($f) = @_; my @options; open(F, "<$f"); while() { chomp; if(/(.*) +([0-9.]+)/) { my ($flag, $version)=($1, $2); # store the name without the leading dashes $flag =~ s/^--//; # cut out short option (if present) $flag =~ s/ \(-.\)//; # store the name without trailing space $flag =~ s/ +$//; push @options, $flag; # options-in-versions says... $oiv{$flag} = $version; } } return @options; } sub versioncheck { my ($f, $v)=@_; open(F, "<$cmddir/$f.d"); while() { chomp; if(/^Added: ([0-9.]+)/) { if($1 ne $v) { print STDERR "$f lists $v in doc but $1 in file\n"; $error++; } last; } } close(F); } # get all the files my @cmdopts = cmdfiles($cmddir); # get all the options mentioned in $o my @veropts = mentions($opts); # check if all files are in the doc for my $c (sort @cmdopts) { if($oiv{$c}) { # present, but at same version? versioncheck($c, $oiv{$c}); } else { print STDERR "$c is in the directory but not in file!\n"; $error++; } } # check if the all options in the doc have files for my $v (sort @veropts) { if($file{$v}) { # present } else { print STDERR "$v is in the doc but NOT as a file!\n"; $error++; } } exit $error;