| #!/usr/bin/env perl | |
| #*************************************************************************** | |
| # _ _ ____ _ | |
| # Project ___| | | | _ \| | | |
| # / __| | | | |_) | | | |
| # | (__| |_| | _ <| |___ | |
| # \___|\___/|_| \_\_____| | |
| # | |
| # Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, 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 http://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. | |
| # | |
| ########################################################################### | |
| # This script accepts a source file as input on the command line. | |
| # | |
| # It first loads the 'symbols-in-versions' document and stores a lookup | |
| # table for all known symbols for which version they were introduced. | |
| # | |
| # It then scans the given source file to dig up all symbols starting with CURL. | |
| # Finally, it sorts the internal list of found symbols (using the version | |
| # number as sort key) and then it outputs the most recent version number and | |
| # the symbols from that version that are used. | |
| # | |
| # Usage: | |
| # | |
| # version-check.pl [source file] | |
| # | |
| open(S, "<../libcurl/symbols-in-versions") || die; | |
| my %doc; | |
| my %rem; | |
| while(<S>) { | |
| if(/(^CURL[^ \n]*) *(.*)/) { | |
| my ($sym, $rest)=($1, $2); | |
| my @a=split(/ +/, $rest); | |
| $doc{$sym}=$a[0]; # when it was introduced | |
| if($a[2]) { | |
| # this symbol is documented to have been present the last time | |
| # in this release | |
| $rem{$sym}=$a[2]; | |
| } | |
| } | |
| } | |
| close(S); | |
| sub age { | |
| my ($ver)=@_; | |
| my @s=split(/\./, $ver); | |
| return $s[0]*10000+$s[1]*100+$s[2]; | |
| } | |
| my %used; | |
| open(C, "<$ARGV[0]") || die; | |
| while(<C>) { | |
| if(/\W(CURL[_A-Z0-9v]+)\W/) { | |
| #print "$1\n"; | |
| $used{$1}++; | |
| } | |
| } | |
| close(C); | |
| sub sortversions { | |
| my $r = age($doc{$a}) <=> age($doc{$b}); | |
| if(!$r) { | |
| $r = $a cmp $b; | |
| } | |
| return $r; | |
| } | |
| my @recent = reverse sort sortversions keys %used; | |
| # the most recent symbol | |
| my $newsym = $recent[0]; | |
| # the most recent version | |
| my $newver = $doc{$newsym}; | |
| print "The scanned source uses these symbols introduced in $newver:\n"; | |
| for my $w (@recent) { | |
| if($doc{$w} eq $newver) { | |
| printf " $w\n"; | |
| next; | |
| } | |
| last; | |
| } | |