xref: /aosp_15_r20/external/curl/tests/test1222.pl (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker#!/usr/bin/env perl
2*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
3*6236dae4SAndroid Build Coastguard Worker#                                  _   _ ____  _
4*6236dae4SAndroid Build Coastguard Worker#  Project                     ___| | | |  _ \| |
5*6236dae4SAndroid Build Coastguard Worker#                             / __| | | | |_) | |
6*6236dae4SAndroid Build Coastguard Worker#                            | (__| |_| |  _ <| |___
7*6236dae4SAndroid Build Coastguard Worker#                             \___|\___/|_| \_\_____|
8*6236dae4SAndroid Build Coastguard Worker#
9*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al.
10*6236dae4SAndroid Build Coastguard Worker#
11*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which
12*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms
13*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html.
14*6236dae4SAndroid Build Coastguard Worker#
15*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell
16*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is
17*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file.
18*6236dae4SAndroid Build Coastguard Worker#
19*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied.
21*6236dae4SAndroid Build Coastguard Worker#
22*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl
23*6236dae4SAndroid Build Coastguard Worker#
24*6236dae4SAndroid Build Coastguard Worker#
25*6236dae4SAndroid Build Coastguard Worker###########################################################################
26*6236dae4SAndroid Build Coastguard Worker#
27*6236dae4SAndroid Build Coastguard Worker# Check that the deprecated statuses of functions and enum values in header
28*6236dae4SAndroid Build Coastguard Worker# files, manpages and symbols-in-versions are in sync.
29*6236dae4SAndroid Build Coastguard Worker
30*6236dae4SAndroid Build Coastguard Workeruse strict;
31*6236dae4SAndroid Build Coastguard Workeruse warnings;
32*6236dae4SAndroid Build Coastguard Worker
33*6236dae4SAndroid Build Coastguard Workeruse File::Basename;
34*6236dae4SAndroid Build Coastguard Worker
35*6236dae4SAndroid Build Coastguard Workermy $root=$ARGV[0] || ".";
36*6236dae4SAndroid Build Coastguard Workermy $incdir = "$root/include/curl";
37*6236dae4SAndroid Build Coastguard Workermy $docdir = "$root/docs";
38*6236dae4SAndroid Build Coastguard Workermy $libdocdir = "$docdir/libcurl";
39*6236dae4SAndroid Build Coastguard Workermy $errcode = 0;
40*6236dae4SAndroid Build Coastguard Worker
41*6236dae4SAndroid Build Coastguard Worker# Symbol-indexed hashes.
42*6236dae4SAndroid Build Coastguard Worker# Values are:
43*6236dae4SAndroid Build Coastguard Worker#     X       Not deprecated
44*6236dae4SAndroid Build Coastguard Worker#     ?       Deprecated in unknown version
45*6236dae4SAndroid Build Coastguard Worker#     x.yy.z  Deprecated in version x.yy.z
46*6236dae4SAndroid Build Coastguard Workermy %syminver;       # Symbols-in-versions deprecations.
47*6236dae4SAndroid Build Coastguard Workermy %hdr;            # Public header files deprecations.
48*6236dae4SAndroid Build Coastguard Workermy %funcman;        # Function manpages deprecations.
49*6236dae4SAndroid Build Coastguard Workermy %optman;         # Option manpages deprecations.
50*6236dae4SAndroid Build Coastguard Worker
51*6236dae4SAndroid Build Coastguard Worker
52*6236dae4SAndroid Build Coastguard Worker# Scan header file for public function and enum values. Flag them with
53*6236dae4SAndroid Build Coastguard Worker# the version they are deprecated in, if some.
54*6236dae4SAndroid Build Coastguard Workersub scan_header {
55*6236dae4SAndroid Build Coastguard Worker    my ($f)=@_;
56*6236dae4SAndroid Build Coastguard Worker    my $line = "";
57*6236dae4SAndroid Build Coastguard Worker    my $incomment = 0;
58*6236dae4SAndroid Build Coastguard Worker    my $inenum = 0;
59*6236dae4SAndroid Build Coastguard Worker
60*6236dae4SAndroid Build Coastguard Worker    open(my $h, "<", "$f");
61*6236dae4SAndroid Build Coastguard Worker    while(<$h>) {
62*6236dae4SAndroid Build Coastguard Worker      s/^\s*(.*?)\s*$/$1/;      # Trim.
63*6236dae4SAndroid Build Coastguard Worker      # Remove multi-line comment trail.
64*6236dae4SAndroid Build Coastguard Worker      if($incomment) {
65*6236dae4SAndroid Build Coastguard Worker        if($_ !~ /.*?\*\/\s*(.*)$/) {
66*6236dae4SAndroid Build Coastguard Worker          next;
67*6236dae4SAndroid Build Coastguard Worker        }
68*6236dae4SAndroid Build Coastguard Worker        $_ = $1;
69*6236dae4SAndroid Build Coastguard Worker        $incomment = 0;
70*6236dae4SAndroid Build Coastguard Worker      }
71*6236dae4SAndroid Build Coastguard Worker      if($line ne "") {
72*6236dae4SAndroid Build Coastguard Worker        # Unfold line.
73*6236dae4SAndroid Build Coastguard Worker        $_ = "$line $1";
74*6236dae4SAndroid Build Coastguard Worker        $line = "";
75*6236dae4SAndroid Build Coastguard Worker      }
76*6236dae4SAndroid Build Coastguard Worker      # Remove comments.
77*6236dae4SAndroid Build Coastguard Worker      while($_ =~ /^(.*?)\/\*.*?\*\/(.*)$/) {
78*6236dae4SAndroid Build Coastguard Worker        $_ = "$1 $2";
79*6236dae4SAndroid Build Coastguard Worker      }
80*6236dae4SAndroid Build Coastguard Worker      if($_ =~ /^(.*)\/\*/) {
81*6236dae4SAndroid Build Coastguard Worker        $_ = "$1 ";
82*6236dae4SAndroid Build Coastguard Worker        $incomment = 1;
83*6236dae4SAndroid Build Coastguard Worker      }
84*6236dae4SAndroid Build Coastguard Worker      s/^\s*(.*?)\s*$/$1/;      # Trim again.
85*6236dae4SAndroid Build Coastguard Worker      # Ignore preprocessor directives and blank lines.
86*6236dae4SAndroid Build Coastguard Worker      if($_ =~ /^(?:#|$)/) {
87*6236dae4SAndroid Build Coastguard Worker        next;
88*6236dae4SAndroid Build Coastguard Worker      }
89*6236dae4SAndroid Build Coastguard Worker      # Handle lines that may be continued as if they were folded.
90*6236dae4SAndroid Build Coastguard Worker      if($_ !~ /[;,{}]$/) {
91*6236dae4SAndroid Build Coastguard Worker        # Folded line.
92*6236dae4SAndroid Build Coastguard Worker        $line = $_;
93*6236dae4SAndroid Build Coastguard Worker        next;
94*6236dae4SAndroid Build Coastguard Worker      }
95*6236dae4SAndroid Build Coastguard Worker      if($_ =~ /CURLOPTDEPRECATED\(/) {
96*6236dae4SAndroid Build Coastguard Worker        # Handle deprecated CURLOPT_* option.
97*6236dae4SAndroid Build Coastguard Worker        if($_ !~ /CURLOPTDEPRECATED\(\s*(\S+)\s*,(?:.*?,){2}\s*(.*?)\s*,.*"\)/) {
98*6236dae4SAndroid Build Coastguard Worker          # Folded line.
99*6236dae4SAndroid Build Coastguard Worker          $line = $_;
100*6236dae4SAndroid Build Coastguard Worker          next;
101*6236dae4SAndroid Build Coastguard Worker        }
102*6236dae4SAndroid Build Coastguard Worker        $hdr{$1} = $2;
103*6236dae4SAndroid Build Coastguard Worker      }
104*6236dae4SAndroid Build Coastguard Worker      elsif($_ =~ /CURLOPT\(/) {
105*6236dae4SAndroid Build Coastguard Worker        # Handle non-deprecated CURLOPT_* option.
106*6236dae4SAndroid Build Coastguard Worker        if($_ !~ /CURLOPT\(\s*(\S+)\s*(?:,.*?){2}\)/) {
107*6236dae4SAndroid Build Coastguard Worker          # Folded line.
108*6236dae4SAndroid Build Coastguard Worker          $line = $_;
109*6236dae4SAndroid Build Coastguard Worker          next;
110*6236dae4SAndroid Build Coastguard Worker        }
111*6236dae4SAndroid Build Coastguard Worker        $hdr{$1} = "X";
112*6236dae4SAndroid Build Coastguard Worker      }
113*6236dae4SAndroid Build Coastguard Worker      else {
114*6236dae4SAndroid Build Coastguard Worker        my $version = "X";
115*6236dae4SAndroid Build Coastguard Worker
116*6236dae4SAndroid Build Coastguard Worker        # Get other kind of deprecation from this line.
117*6236dae4SAndroid Build Coastguard Worker        if($_ =~ /CURL_DEPRECATED\(/) {
118*6236dae4SAndroid Build Coastguard Worker          if($_ !~ /^(.*)CURL_DEPRECATED\(\s*(\S+?)\s*,.*?"\)(.*)$/) {
119*6236dae4SAndroid Build Coastguard Worker            # Folded line.
120*6236dae4SAndroid Build Coastguard Worker            $line = $_;
121*6236dae4SAndroid Build Coastguard Worker            next;
122*6236dae4SAndroid Build Coastguard Worker          }
123*6236dae4SAndroid Build Coastguard Worker         $version = $2;
124*6236dae4SAndroid Build Coastguard Worker         $_ = "$1 $3";
125*6236dae4SAndroid Build Coastguard Worker        }
126*6236dae4SAndroid Build Coastguard Worker        if($_ =~ /^CURL_EXTERN\s+.*\s+(\S+?)\s*\(/) {
127*6236dae4SAndroid Build Coastguard Worker          # Flag public function.
128*6236dae4SAndroid Build Coastguard Worker          $hdr{$1} = $version;
129*6236dae4SAndroid Build Coastguard Worker        }
130*6236dae4SAndroid Build Coastguard Worker        elsif($inenum && $_ =~ /(\w+)\s*[,=}]/) {
131*6236dae4SAndroid Build Coastguard Worker          # Flag enum value.
132*6236dae4SAndroid Build Coastguard Worker          $hdr{$1} = $version;
133*6236dae4SAndroid Build Coastguard Worker        }
134*6236dae4SAndroid Build Coastguard Worker      }
135*6236dae4SAndroid Build Coastguard Worker      # Remember if we are in an enum definition.
136*6236dae4SAndroid Build Coastguard Worker      $inenum |= ($_ =~ /\benum\b/);
137*6236dae4SAndroid Build Coastguard Worker      if($_ =~ /}/) {
138*6236dae4SAndroid Build Coastguard Worker        $inenum = 0;
139*6236dae4SAndroid Build Coastguard Worker      }
140*6236dae4SAndroid Build Coastguard Worker    }
141*6236dae4SAndroid Build Coastguard Worker    close $h;
142*6236dae4SAndroid Build Coastguard Worker}
143*6236dae4SAndroid Build Coastguard Worker
144*6236dae4SAndroid Build Coastguard Worker# Scan function manpage for options.
145*6236dae4SAndroid Build Coastguard Worker# Each option has to be declared as ".IP <option>" where <option> starts with
146*6236dae4SAndroid Build Coastguard Worker# the prefix. Flag each option with its deprecation version, if some.
147*6236dae4SAndroid Build Coastguard Workersub scan_man_for_opts {
148*6236dae4SAndroid Build Coastguard Worker    my ($f, $prefix)=@_;
149*6236dae4SAndroid Build Coastguard Worker    my $opt = "";
150*6236dae4SAndroid Build Coastguard Worker    my $line = "";
151*6236dae4SAndroid Build Coastguard Worker
152*6236dae4SAndroid Build Coastguard Worker    open(my $m, "<", "$f");
153*6236dae4SAndroid Build Coastguard Worker    while(<$m>) {
154*6236dae4SAndroid Build Coastguard Worker      if($_ =~ /^\./) {
155*6236dae4SAndroid Build Coastguard Worker        # roff directive found: end current option paragraph.
156*6236dae4SAndroid Build Coastguard Worker        my $o = $opt;
157*6236dae4SAndroid Build Coastguard Worker        $opt = "";
158*6236dae4SAndroid Build Coastguard Worker        if($_ =~ /^\.IP\s+((?:$prefix)_\w+)/) {
159*6236dae4SAndroid Build Coastguard Worker          # A new option has been found.
160*6236dae4SAndroid Build Coastguard Worker          $opt = $1;
161*6236dae4SAndroid Build Coastguard Worker        }
162*6236dae4SAndroid Build Coastguard Worker        $_ = $line;     # Get full paragraph.
163*6236dae4SAndroid Build Coastguard Worker        $line = "";
164*6236dae4SAndroid Build Coastguard Worker        s/\\f.//g;      # Remove font formatting.
165*6236dae4SAndroid Build Coastguard Worker        s/\s+/ /g;      # One line with single space only.
166*6236dae4SAndroid Build Coastguard Worker        if($o) {
167*6236dae4SAndroid Build Coastguard Worker          $funcman{$o} = "X";
168*6236dae4SAndroid Build Coastguard Worker          # Check if paragraph is mentioning deprecation.
169*6236dae4SAndroid Build Coastguard Worker          while($_ =~ /(?:deprecated|obsoleted?)\b\s*(?:in\b|since\b)?\s*(?:version\b|curl\b|libcurl\b)?\s*(\d[0-9.]*\d)?\b\s*(.*)$/i) {
170*6236dae4SAndroid Build Coastguard Worker            $funcman{$o} = $1 || "?";
171*6236dae4SAndroid Build Coastguard Worker            $_ = $2;
172*6236dae4SAndroid Build Coastguard Worker          }
173*6236dae4SAndroid Build Coastguard Worker        }
174*6236dae4SAndroid Build Coastguard Worker      }
175*6236dae4SAndroid Build Coastguard Worker      else {
176*6236dae4SAndroid Build Coastguard Worker        # Text line: accumulate.
177*6236dae4SAndroid Build Coastguard Worker        $line .= $_;
178*6236dae4SAndroid Build Coastguard Worker      }
179*6236dae4SAndroid Build Coastguard Worker    }
180*6236dae4SAndroid Build Coastguard Worker    close $m;
181*6236dae4SAndroid Build Coastguard Worker}
182*6236dae4SAndroid Build Coastguard Worker
183*6236dae4SAndroid Build Coastguard Worker# Scan manpage for deprecation in DESCRIPTION and/or AVAILABILITY sections.
184*6236dae4SAndroid Build Coastguard Workersub scan_man_page {
185*6236dae4SAndroid Build Coastguard Worker    my ($path, $sym, $table)=@_;
186*6236dae4SAndroid Build Coastguard Worker    my $version = "X";
187*6236dae4SAndroid Build Coastguard Worker
188*6236dae4SAndroid Build Coastguard Worker    if(open(my $fh, "<", "$path")) {
189*6236dae4SAndroid Build Coastguard Worker      my $section = "";
190*6236dae4SAndroid Build Coastguard Worker      my $line = "";
191*6236dae4SAndroid Build Coastguard Worker
192*6236dae4SAndroid Build Coastguard Worker      while(<$fh>) {
193*6236dae4SAndroid Build Coastguard Worker        if($_ =~ /\.so\s+man3\/(.*\.3\b)/) {
194*6236dae4SAndroid Build Coastguard Worker          # Handle manpage inclusion.
195*6236dae4SAndroid Build Coastguard Worker          scan_man_page(dirname($path) . "/$1", $sym, $table);
196*6236dae4SAndroid Build Coastguard Worker          $version = exists($$table{$sym})? $$table{$sym}: $version;
197*6236dae4SAndroid Build Coastguard Worker        }
198*6236dae4SAndroid Build Coastguard Worker        elsif($_ =~ /^\./) {
199*6236dae4SAndroid Build Coastguard Worker          # Line is a roff directive.
200*6236dae4SAndroid Build Coastguard Worker          if($_ =~ /^\.SH\b\s*(\w*)/) {
201*6236dae4SAndroid Build Coastguard Worker            # Section starts. End previous one.
202*6236dae4SAndroid Build Coastguard Worker            my $sh = $section;
203*6236dae4SAndroid Build Coastguard Worker
204*6236dae4SAndroid Build Coastguard Worker            $section = $1;
205*6236dae4SAndroid Build Coastguard Worker            $_ = $line;     # Previous section text.
206*6236dae4SAndroid Build Coastguard Worker            $line = "";
207*6236dae4SAndroid Build Coastguard Worker            s/\\f.//g;
208*6236dae4SAndroid Build Coastguard Worker            s/\s+/ /g;
209*6236dae4SAndroid Build Coastguard Worker            s/\\f.//g;      # Remove font formatting.
210*6236dae4SAndroid Build Coastguard Worker            s/\s+/ /g;      # One line with single space only.
211*6236dae4SAndroid Build Coastguard Worker            if($sh =~ /DESCRIPTION|DEPRECATED/) {
212*6236dae4SAndroid Build Coastguard Worker              while($_ =~ /(?:deprecated|obsoleted?)\b\s*(?:in\b|since\b)?\s*(?:version\b|curl\b|libcurl\b)?\s*(\d[0-9.]*\d)?\b\s*(.*)$/i) {
213*6236dae4SAndroid Build Coastguard Worker                # Flag deprecation status.
214*6236dae4SAndroid Build Coastguard Worker                if($version ne "X" && $version ne "?") {
215*6236dae4SAndroid Build Coastguard Worker                  if($1 && $1 ne $version) {
216*6236dae4SAndroid Build Coastguard Worker                    print "error: $sym manpage lists unmatching deprecation versions $version and $1\n";
217*6236dae4SAndroid Build Coastguard Worker                    $errcode++;
218*6236dae4SAndroid Build Coastguard Worker                  }
219*6236dae4SAndroid Build Coastguard Worker                }
220*6236dae4SAndroid Build Coastguard Worker                else {
221*6236dae4SAndroid Build Coastguard Worker                  $version = $1 || "?";
222*6236dae4SAndroid Build Coastguard Worker                }
223*6236dae4SAndroid Build Coastguard Worker                $_ = $2;
224*6236dae4SAndroid Build Coastguard Worker              }
225*6236dae4SAndroid Build Coastguard Worker            }
226*6236dae4SAndroid Build Coastguard Worker          }
227*6236dae4SAndroid Build Coastguard Worker        }
228*6236dae4SAndroid Build Coastguard Worker        else {
229*6236dae4SAndroid Build Coastguard Worker          # Text line: accumulate.
230*6236dae4SAndroid Build Coastguard Worker          $line .= $_;
231*6236dae4SAndroid Build Coastguard Worker        }
232*6236dae4SAndroid Build Coastguard Worker      }
233*6236dae4SAndroid Build Coastguard Worker      close $fh;
234*6236dae4SAndroid Build Coastguard Worker      $$table{$sym} = $version;
235*6236dae4SAndroid Build Coastguard Worker    }
236*6236dae4SAndroid Build Coastguard Worker}
237*6236dae4SAndroid Build Coastguard Worker
238*6236dae4SAndroid Build Coastguard Worker
239*6236dae4SAndroid Build Coastguard Worker# Read symbols-in-versions.
240*6236dae4SAndroid Build Coastguard Workeropen(my $fh, "<", "$libdocdir/symbols-in-versions") ||
241*6236dae4SAndroid Build Coastguard Worker  die "$libdocdir/symbols-in-versions";
242*6236dae4SAndroid Build Coastguard Workerwhile(<$fh>) {
243*6236dae4SAndroid Build Coastguard Worker  if($_ =~ /^((?:CURL|LIBCURL)\S+)\s+\S+\s*(\S*)\s*(\S*)$/) {
244*6236dae4SAndroid Build Coastguard Worker    if($3 eq "") {
245*6236dae4SAndroid Build Coastguard Worker      $syminver{$1} = "X";
246*6236dae4SAndroid Build Coastguard Worker      if($2 ne "" && $2 ne ".") {
247*6236dae4SAndroid Build Coastguard Worker        $syminver{$1} = $2;
248*6236dae4SAndroid Build Coastguard Worker      }
249*6236dae4SAndroid Build Coastguard Worker    }
250*6236dae4SAndroid Build Coastguard Worker  }
251*6236dae4SAndroid Build Coastguard Worker}
252*6236dae4SAndroid Build Coastguard Workerclose($fh);
253*6236dae4SAndroid Build Coastguard Worker
254*6236dae4SAndroid Build Coastguard Worker# Get header file names,
255*6236dae4SAndroid Build Coastguard Workeropendir(my $dh, $incdir) || die "Can't opendir $incdir";
256*6236dae4SAndroid Build Coastguard Workermy @hfiles = grep { /\.h$/ } readdir($dh);
257*6236dae4SAndroid Build Coastguard Workerclosedir $dh;
258*6236dae4SAndroid Build Coastguard Worker
259*6236dae4SAndroid Build Coastguard Worker# Get functions and enum symbols from header files.
260*6236dae4SAndroid Build Coastguard Workerfor(@hfiles) {
261*6236dae4SAndroid Build Coastguard Worker  scan_header("$incdir/$_");
262*6236dae4SAndroid Build Coastguard Worker}
263*6236dae4SAndroid Build Coastguard Worker
264*6236dae4SAndroid Build Coastguard Worker# Get function statuses from manpages.
265*6236dae4SAndroid Build Coastguard Workerforeach my $sym (keys %hdr) {
266*6236dae4SAndroid Build Coastguard Worker  if($sym =~/^(?:curl|curlx)_\w/) {
267*6236dae4SAndroid Build Coastguard Worker    scan_man_page("$libdocdir/$sym.3", $sym, \%funcman);
268*6236dae4SAndroid Build Coastguard Worker  }
269*6236dae4SAndroid Build Coastguard Worker}
270*6236dae4SAndroid Build Coastguard Worker
271*6236dae4SAndroid Build Coastguard Worker# Get options from function manpages.
272*6236dae4SAndroid Build Coastguard Workerscan_man_for_opts("$libdocdir/curl_easy_setopt.3", "CURLOPT");
273*6236dae4SAndroid Build Coastguard Workerscan_man_for_opts("$libdocdir/curl_easy_getinfo.3", "CURLINFO");
274*6236dae4SAndroid Build Coastguard Worker
275*6236dae4SAndroid Build Coastguard Worker# Get deprecation status from option manpages.
276*6236dae4SAndroid Build Coastguard Workerforeach my $sym (keys %syminver) {
277*6236dae4SAndroid Build Coastguard Worker  if($sym =~ /^(?:CURLOPT|CURLINFO)_\w+$/) {
278*6236dae4SAndroid Build Coastguard Worker    scan_man_page("$libdocdir/opts/$sym.3", $sym, \%optman);
279*6236dae4SAndroid Build Coastguard Worker  }
280*6236dae4SAndroid Build Coastguard Worker}
281*6236dae4SAndroid Build Coastguard Worker
282*6236dae4SAndroid Build Coastguard Worker# Print results.
283*6236dae4SAndroid Build Coastguard Workermy %keys = (%syminver, %funcman, %optman, %hdr);
284*6236dae4SAndroid Build Coastguard Workermy $leader = <<HEADER
285*6236dae4SAndroid Build Coastguard WorkerLegend:
286*6236dae4SAndroid Build Coastguard Worker<empty> Not listed
287*6236dae4SAndroid Build Coastguard WorkerX       Not deprecated
288*6236dae4SAndroid Build Coastguard Worker?       Deprecated in unknown version
289*6236dae4SAndroid Build Coastguard Workerx.yy.z  Deprecated in version x.yy.z
290*6236dae4SAndroid Build Coastguard Worker
291*6236dae4SAndroid Build Coastguard WorkerSymbol                                 symbols-in  func man  opt man   .h
292*6236dae4SAndroid Build Coastguard Worker                                       -versions
293*6236dae4SAndroid Build Coastguard WorkerHEADER
294*6236dae4SAndroid Build Coastguard Worker        ;
295*6236dae4SAndroid Build Coastguard Workerforeach my $sym (sort {$a cmp $b} keys %keys) {
296*6236dae4SAndroid Build Coastguard Worker  if($sym =~ /^(?:CURLOPT|CURLINFO|curl|curlx)_\w/) {
297*6236dae4SAndroid Build Coastguard Worker    my $s = exists($syminver{$sym})? $syminver{$sym}: " ";
298*6236dae4SAndroid Build Coastguard Worker    my $f = exists($funcman{$sym})? $funcman{$sym}: " ";
299*6236dae4SAndroid Build Coastguard Worker    my $o = exists($optman{$sym})? $optman{$sym}: " ";
300*6236dae4SAndroid Build Coastguard Worker    my $h = exists($hdr{$sym})? $hdr{$sym}: " ";
301*6236dae4SAndroid Build Coastguard Worker    my $r = " ";
302*6236dae4SAndroid Build Coastguard Worker
303*6236dae4SAndroid Build Coastguard Worker    # There are deprecated symbols in symbols-in-versions that are aliases
304*6236dae4SAndroid Build Coastguard Worker    # and thus not listed anywhere else. Ignore them.
305*6236dae4SAndroid Build Coastguard Worker    "$f$o$h" =~ /[X ]{3}/ && next;
306*6236dae4SAndroid Build Coastguard Worker
307*6236dae4SAndroid Build Coastguard Worker    # Check for inconsistencies between deprecations from the different sources.
308*6236dae4SAndroid Build Coastguard Worker    foreach my $k ($s, $f, $o, $h) {
309*6236dae4SAndroid Build Coastguard Worker      $r = $r eq " "? $k: $r;
310*6236dae4SAndroid Build Coastguard Worker      if($k ne " " && $r ne $k) {
311*6236dae4SAndroid Build Coastguard Worker        if($r eq "?") {
312*6236dae4SAndroid Build Coastguard Worker          $r = $k ne "X"? $k: "!";
313*6236dae4SAndroid Build Coastguard Worker        }
314*6236dae4SAndroid Build Coastguard Worker        elsif($r eq "X" || $k ne "?") {
315*6236dae4SAndroid Build Coastguard Worker          $r = "!";
316*6236dae4SAndroid Build Coastguard Worker        }
317*6236dae4SAndroid Build Coastguard Worker      }
318*6236dae4SAndroid Build Coastguard Worker    }
319*6236dae4SAndroid Build Coastguard Worker
320*6236dae4SAndroid Build Coastguard Worker    if($r eq "!") {
321*6236dae4SAndroid Build Coastguard Worker      print $leader;
322*6236dae4SAndroid Build Coastguard Worker      $leader = "";
323*6236dae4SAndroid Build Coastguard Worker      printf("%-38s %-11s %-9s %-9s %s\n", $sym, $s, $f, $o, $h);
324*6236dae4SAndroid Build Coastguard Worker      $errcode++;
325*6236dae4SAndroid Build Coastguard Worker    }
326*6236dae4SAndroid Build Coastguard Worker  }
327*6236dae4SAndroid Build Coastguard Worker}
328*6236dae4SAndroid Build Coastguard Worker
329*6236dae4SAndroid Build Coastguard Workerexit $errcode;
330