| #! /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") ) { |
| next if $pod eq 'doc/crypto/crypto.pod'; |
| next if $pod eq 'doc/ssl/ssl.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} = $pod; |
| } |
| } |
| |
| return %return; |
| } |
| |
| sub printem() |
| { |
| my $docdir = shift; |
| my $numfile = shift; |
| my %docced = &getdocced($docdir); |
| 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('doc/crypto', 'util/libcrypto.num'); |
| &printem('doc/ssl', 'util/libssl.num'); |