use Pod::Checker;
use File::Find;
use File::Basename;
+use File::Spec::Functions;
use Getopt::Std;
+use lib catdir(dirname($0), "perl");
+use OpenSSL::Util::Pod;
+# Options.
our($opt_s);
+our($opt_u);
+our($opt_h);
+our($opt_n);
+
+sub help()
+{
+ print <<EOF;
+Find small errors (nits) in documentation. Options:
+ -n Print nits in POD pages
+ -s Also print missing sections in POD pages (implies -n)
+ -u List undocumented functions
+ -h Print this help message
+EOF
+ exit;
+}
my $temp = '/tmp/docnits.txt';
my $OUT;
unlink $temp || warn "Can't remove $temp, $!";
}
-getopts('s');
+my %dups;
+
+sub parsenum()
+{
+ my $file = shift;
+ my @apis;
+
+ open my $IN, '<', $file
+ or die "Can't open $file, $!, stopped";
+
+ while ( <$IN> ) {
+ next if /\bNOEXIST\b/;
+ next if /\bEXPORT_VAR_AS_FUNC\b/;
+ push @apis, $1 if /([^\s]+).\s/;
+ }
+
+ close $IN;
+
+ print "# Found ", scalar(@apis), " in $file\n";
+ return sort @apis;
+}
+
+sub getdocced()
+{
+ my $dir = shift;
+ my %return;
+
+ foreach my $pod ( glob("$dir/*.pod") ) {
+ my %podinfo = extract_pod_info($pod);
+ foreach my $n ( @{$podinfo{names}} ) {
+ $return{$n} = $pod;
+ print "# Duplicate $n in $pod and $dups{$n}\n"
+ if defined $dups{$n} && $dups{$n} ne $pod;
+ $dups{$n} = $pod;
+ }
+ }
+
+ return %return;
+}
+
+my %docced;
+
+sub printem()
+{
+ my $libname = shift;
+ my $numfile = shift;
+ my $count = 0;
+
+ foreach my $func ( &parsenum($numfile) ) {
+ next if $docced{$func};
+
+ # Skip ASN1 utilities
+ next if $func =~ /^ASN1_/;
+
+ print "$libname:$func\n";
+ $count++;
+ }
+ print "# Found $count missing from $numfile\n\n";
+}
+
+
+getopts('nshu');
-foreach (@ARGV ? @ARGV : glob('doc/*/*.pod')) {
- &check($_);
+&help() if ( $opt_h );
+
+if ( $opt_n or $opt_s ) {
+ foreach (@ARGV ? @ARGV : glob('doc/*/*.pod')) {
+ &check($_);
+ }
+}
+if ( $opt_u ) {
+ my %temp = &getdocced('doc/man3');
+ foreach ( keys %temp ) {
+ $docced{$_} = $temp{$_};
+ }
+ &printem('crypto', 'util/libcrypto.num');
+ &printem('ssl', 'util/libssl.num');
}
exit;
+++ /dev/null
-#! /usr/bin/env perl
-# Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
-#
-# Licensed under the OpenSSL license (the "License"). You may not use
-# this file except in compliance with the License. You can obtain a copy
-# in the file LICENSE in the source distribution or at
-# https://www.openssl.org/source/license.html
-
-use strict;
-use warnings;
-
-use File::Spec::Functions;
-use File::Basename;
-#use File::Copy;
-#use File::Path;
-use lib catdir(dirname($0), "perl");
-use OpenSSL::Util::Pod;
-
-my %dups;
-
-sub parsenum()
-{
- my $file = shift;
- my @apis;
-
- open my $IN, '<', $file
- or die "Can't open $file, $!, stopped";
-
- while ( <$IN> ) {
- next if /\sNOEXIST/;
- next if /EXPORT_VAR_AS_FUNC/;
- push @apis, $1 if /([^\s]+).\s/;
- }
-
- close $IN;
-
- print "# Found ", scalar(@apis), " in $file\n";
- return sort @apis;
-}
-
-sub getdocced()
-{
- my $dir = shift;
- my %return;
-
- foreach my $pod ( glob("$dir/*.pod") ) {
- my %podinfo = extract_pod_info($pod);
- foreach my $n ( @{$podinfo{names}} ) {
- $return{$n} = $pod;
- print "# Duplicate $n in $pod and $dups{$n}\n"
- if defined $dups{$n} && $dups{$n} ne $pod;
- $dups{$n} = $pod;
- }
- }
-
- return %return;
-}
-
-my %docced = &getdocced('doc/man3');
-
-sub printem()
-{
- my $numfile = shift;
- my $count = 0;
-
- foreach my $func ( &parsenum($numfile) ) {
- next if $docced{$func};
-
- # Skip ASN1 utilities
- next if $func =~ /^ASN1_/;
-
- print $func, "\n";
- $count++;
- }
- print "# Found $count missing from $numfile\n\n";
-}
-
-&printem('util/libcrypto.num');
-&printem('util/libssl.num');