Annotation of embedaddon/curl/docs/examples/version-check.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) 1998 - 2020, 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: # This script accepts a source file as input on the command line.
25: #
26: # It first loads the 'symbols-in-versions' document and stores a lookup
27: # table for all known symbols for which version they were introduced.
28: #
29: # It then scans the given source file to dig up all symbols starting with CURL.
30: # Finally, it sorts the internal list of found symbols (using the version
31: # number as sort key) and then it outputs the most recent version number and
32: # the symbols from that version that are used.
33: #
34: # Usage:
35: #
36: # version-check.pl [source file]
37: #
38:
39: open(S, "<../libcurl/symbols-in-versions") || die;
40:
41: my %doc;
42: my %rem;
43: while(<S>) {
44: if(/(^CURL[^ \n]*) *(.*)/) {
45: my ($sym, $rest)=($1, $2);
46: my @a=split(/ +/, $rest);
47:
48: $doc{$sym}=$a[0]; # when it was introduced
49:
50: if($a[2]) {
51: # this symbol is documented to have been present the last time
52: # in this release
53: $rem{$sym}=$a[2];
54: }
55: }
56:
57: }
58:
59: close(S);
60:
61: sub age {
62: my ($ver)=@_;
63:
64: my @s=split(/\./, $ver);
65: return $s[0]*10000+$s[1]*100+$s[2];
66: }
67:
68: my %used;
69: open(C, "<$ARGV[0]") || die;
70:
71: while(<C>) {
72: if(/\W(CURL[_A-Z0-9v]+)\W/) {
73: #print "$1\n";
74: $used{$1}++;
75: }
76: }
77:
78: close(C);
79:
80: sub sortversions {
81: my $r = age($doc{$a}) <=> age($doc{$b});
82: if(!$r) {
83: $r = $a cmp $b;
84: }
85: return $r;
86: }
87:
88: my @recent = reverse sort sortversions keys %used;
89:
90: # the most recent symbol
91: my $newsym = $recent[0];
92: # the most recent version
93: my $newver = $doc{$newsym};
94:
95: print "The scanned source uses these symbols introduced in $newver:\n";
96:
97: for my $w (@recent) {
98: if($doc{$w} eq $newver) {
99: printf " $w\n";
100: next;
101: }
102: last;
103: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>