123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #!/usr/bin/env perl
- #***************************************************************************
- # _ _ ____ _
- # Project ___| | | | _ \| |
- # / __| | | | |_) | |
- # | (__| |_| | _ <| |___
- # \___|\___/|_| \_\_____|
- #
- # Copyright (C) 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 https://curl.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.
- #
- # SPDX-License-Identifier: curl
- #
- ###########################################################################
- # 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;
- }
|