xref: /aosp_15_r20/external/curl/tests/test1139.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# Scan symbols-in-version (which is verified to be correct by test 1119), then
27*6236dae4SAndroid Build Coastguard Worker# verify that each option mention in there that should have its own manpage
28*6236dae4SAndroid Build Coastguard Worker# actually does.
29*6236dae4SAndroid Build Coastguard Worker#
30*6236dae4SAndroid Build Coastguard Worker# In addition, make sure that every current option to curl_easy_setopt,
31*6236dae4SAndroid Build Coastguard Worker# curl_easy_getinfo and curl_multi_setopt are also mentioned in their
32*6236dae4SAndroid Build Coastguard Worker# corresponding main (index) manpage.
33*6236dae4SAndroid Build Coastguard Worker#
34*6236dae4SAndroid Build Coastguard Worker# src/tool_getparam.c lists all options curl can parse
35*6236dae4SAndroid Build Coastguard Worker# docs/curl.1 documents all command line options
36*6236dae4SAndroid Build Coastguard Worker# src/tool_listhelp.c outputs all options with curl -h
37*6236dae4SAndroid Build Coastguard Worker# - make sure they're all in sync
38*6236dae4SAndroid Build Coastguard Worker#
39*6236dae4SAndroid Build Coastguard Worker# Output all deviances to stderr.
40*6236dae4SAndroid Build Coastguard Worker
41*6236dae4SAndroid Build Coastguard Workeruse strict;
42*6236dae4SAndroid Build Coastguard Workeruse warnings;
43*6236dae4SAndroid Build Coastguard Worker
44*6236dae4SAndroid Build Coastguard Worker# we may get the dir roots pointed out
45*6236dae4SAndroid Build Coastguard Workermy $root=$ARGV[0] || ".";
46*6236dae4SAndroid Build Coastguard Workermy $buildroot=$ARGV[1] || ".";
47*6236dae4SAndroid Build Coastguard Workermy $syms = "$root/docs/libcurl/symbols-in-versions";
48*6236dae4SAndroid Build Coastguard Workermy $curlh = "$root/include/curl/curl.h";
49*6236dae4SAndroid Build Coastguard Workermy $errors=0;
50*6236dae4SAndroid Build Coastguard Worker
51*6236dae4SAndroid Build Coastguard Worker# the prepopulated alias list is the CURLINFO_* defines that are used for the
52*6236dae4SAndroid Build Coastguard Worker# debug function callback and the fact that they use the same prefix as the
53*6236dae4SAndroid Build Coastguard Worker# curl_easy_getinfo options was a mistake.
54*6236dae4SAndroid Build Coastguard Workermy %alias = (
55*6236dae4SAndroid Build Coastguard Worker    'CURLINFO_DATA_IN' => 'none',
56*6236dae4SAndroid Build Coastguard Worker    'CURLINFO_DATA_OUT' => 'none',
57*6236dae4SAndroid Build Coastguard Worker    'CURLINFO_END' => 'none',
58*6236dae4SAndroid Build Coastguard Worker    'CURLINFO_HEADER_IN' => 'none',
59*6236dae4SAndroid Build Coastguard Worker    'CURLINFO_HEADER_OUT' => 'none',
60*6236dae4SAndroid Build Coastguard Worker    'CURLINFO_LASTONE' => 'none',
61*6236dae4SAndroid Build Coastguard Worker    'CURLINFO_NONE' => 'none',
62*6236dae4SAndroid Build Coastguard Worker    'CURLINFO_SSL_DATA_IN' => 'none',
63*6236dae4SAndroid Build Coastguard Worker    'CURLINFO_SSL_DATA_OUT' => 'none',
64*6236dae4SAndroid Build Coastguard Worker    'CURLINFO_TEXT' => 'none'
65*6236dae4SAndroid Build Coastguard Worker    );
66*6236dae4SAndroid Build Coastguard Worker
67*6236dae4SAndroid Build Coastguard Workersub scanmdpage {
68*6236dae4SAndroid Build Coastguard Worker    my ($file, @words) = @_;
69*6236dae4SAndroid Build Coastguard Worker
70*6236dae4SAndroid Build Coastguard Worker    open(my $mh, "<", "$file") ||
71*6236dae4SAndroid Build Coastguard Worker        die "could not open $file";
72*6236dae4SAndroid Build Coastguard Worker    my @m;
73*6236dae4SAndroid Build Coastguard Worker    while(<$mh>) {
74*6236dae4SAndroid Build Coastguard Worker        if($_ =~ /^## (.*)/) {
75*6236dae4SAndroid Build Coastguard Worker            my $w = $1;
76*6236dae4SAndroid Build Coastguard Worker            # "unquote" minuses
77*6236dae4SAndroid Build Coastguard Worker            $w =~ s/\\-/-/g;
78*6236dae4SAndroid Build Coastguard Worker            push @m, $w;
79*6236dae4SAndroid Build Coastguard Worker        }
80*6236dae4SAndroid Build Coastguard Worker    }
81*6236dae4SAndroid Build Coastguard Worker    close($mh);
82*6236dae4SAndroid Build Coastguard Worker
83*6236dae4SAndroid Build Coastguard Worker    my @ms = sort @m;
84*6236dae4SAndroid Build Coastguard Worker    for my $i (0 .. $#m) {
85*6236dae4SAndroid Build Coastguard Worker        if($ms[$i] ne $m[$i]) {
86*6236dae4SAndroid Build Coastguard Worker            print STDERR "$file:1:ERROR: $m[$i] is not alphabetical (expected $ms[$i])\n";
87*6236dae4SAndroid Build Coastguard Worker            $errors++;
88*6236dae4SAndroid Build Coastguard Worker            # no point in reporting many
89*6236dae4SAndroid Build Coastguard Worker            last;
90*6236dae4SAndroid Build Coastguard Worker        }
91*6236dae4SAndroid Build Coastguard Worker    }
92*6236dae4SAndroid Build Coastguard Worker    foreach my $m (@words) {
93*6236dae4SAndroid Build Coastguard Worker        my @g = grep(/$m/, @m);
94*6236dae4SAndroid Build Coastguard Worker        if(!$g[0]) {
95*6236dae4SAndroid Build Coastguard Worker            print STDERR "Missing mention of $m in $file\n";
96*6236dae4SAndroid Build Coastguard Worker            $errors++;
97*6236dae4SAndroid Build Coastguard Worker        }
98*6236dae4SAndroid Build Coastguard Worker    }
99*6236dae4SAndroid Build Coastguard Worker}
100*6236dae4SAndroid Build Coastguard Worker
101*6236dae4SAndroid Build Coastguard Workermy $r;
102*6236dae4SAndroid Build Coastguard Worker
103*6236dae4SAndroid Build Coastguard Worker# check for define aliases
104*6236dae4SAndroid Build Coastguard Workeropen($r, "<", "$curlh") ||
105*6236dae4SAndroid Build Coastguard Worker    die "no curl.h";
106*6236dae4SAndroid Build Coastguard Workerwhile(<$r>) {
107*6236dae4SAndroid Build Coastguard Worker    if(/^\#define (CURL(OPT|INFO|MOPT)_\w+) (.*)/) {
108*6236dae4SAndroid Build Coastguard Worker        $alias{$1}=$3;
109*6236dae4SAndroid Build Coastguard Worker    }
110*6236dae4SAndroid Build Coastguard Worker}
111*6236dae4SAndroid Build Coastguard Workerclose($r);
112*6236dae4SAndroid Build Coastguard Worker
113*6236dae4SAndroid Build Coastguard Workermy @curlopt;
114*6236dae4SAndroid Build Coastguard Workermy @curlinfo;
115*6236dae4SAndroid Build Coastguard Workermy @curlmopt;
116*6236dae4SAndroid Build Coastguard Workeropen($r, "<", "$syms") ||
117*6236dae4SAndroid Build Coastguard Worker    die "no input file";
118*6236dae4SAndroid Build Coastguard Workerwhile(<$r>) {
119*6236dae4SAndroid Build Coastguard Worker    chomp;
120*6236dae4SAndroid Build Coastguard Worker    my $l= $_;
121*6236dae4SAndroid Build Coastguard Worker    if($l =~ /(CURL(OPT|INFO|MOPT)_\w+) *([0-9.]*) *([0-9.-]*) *([0-9.]*)/) {
122*6236dae4SAndroid Build Coastguard Worker        my ($opt, $type, $add, $dep, $rem) = ($1, $2, $3, $4, $5);
123*6236dae4SAndroid Build Coastguard Worker
124*6236dae4SAndroid Build Coastguard Worker        if($alias{$opt}) {
125*6236dae4SAndroid Build Coastguard Worker            #print "$opt => $alias{$opt}\n";
126*6236dae4SAndroid Build Coastguard Worker        }
127*6236dae4SAndroid Build Coastguard Worker        elsif($rem) {
128*6236dae4SAndroid Build Coastguard Worker            # $opt was removed in $rem
129*6236dae4SAndroid Build Coastguard Worker            # so don't check for that
130*6236dae4SAndroid Build Coastguard Worker        }
131*6236dae4SAndroid Build Coastguard Worker        else {
132*6236dae4SAndroid Build Coastguard Worker            if($type eq "OPT") {
133*6236dae4SAndroid Build Coastguard Worker                push @curlopt, $opt,
134*6236dae4SAndroid Build Coastguard Worker            }
135*6236dae4SAndroid Build Coastguard Worker            elsif($type eq "INFO") {
136*6236dae4SAndroid Build Coastguard Worker                push @curlinfo, $opt,
137*6236dae4SAndroid Build Coastguard Worker            }
138*6236dae4SAndroid Build Coastguard Worker            elsif($type eq "MOPT") {
139*6236dae4SAndroid Build Coastguard Worker                push @curlmopt, $opt,
140*6236dae4SAndroid Build Coastguard Worker            }
141*6236dae4SAndroid Build Coastguard Worker            if(! -f "$root/docs/libcurl/opts/$opt.md") {
142*6236dae4SAndroid Build Coastguard Worker                print STDERR "Missing $opt.md\n";
143*6236dae4SAndroid Build Coastguard Worker                $errors++;
144*6236dae4SAndroid Build Coastguard Worker            }
145*6236dae4SAndroid Build Coastguard Worker        }
146*6236dae4SAndroid Build Coastguard Worker    }
147*6236dae4SAndroid Build Coastguard Worker}
148*6236dae4SAndroid Build Coastguard Workerclose($r);
149*6236dae4SAndroid Build Coastguard Worker
150*6236dae4SAndroid Build Coastguard Workerscanmdpage("$root/docs/libcurl/curl_easy_setopt.md", @curlopt);
151*6236dae4SAndroid Build Coastguard Workerscanmdpage("$root/docs/libcurl/curl_easy_getinfo.md", @curlinfo);
152*6236dae4SAndroid Build Coastguard Workerscanmdpage("$root/docs/libcurl/curl_multi_setopt.md", @curlmopt);
153*6236dae4SAndroid Build Coastguard Worker
154*6236dae4SAndroid Build Coastguard Worker# using this hash array, we can skip specific options
155*6236dae4SAndroid Build Coastguard Workermy %opts = (
156*6236dae4SAndroid Build Coastguard Worker    # pretend these --no options exists in tool_getparam.c
157*6236dae4SAndroid Build Coastguard Worker    '--no-alpn' => 1,
158*6236dae4SAndroid Build Coastguard Worker    '--no-npn' => 1,
159*6236dae4SAndroid Build Coastguard Worker    '-N, --no-buffer' => 1,
160*6236dae4SAndroid Build Coastguard Worker    '--no-sessionid' => 1,
161*6236dae4SAndroid Build Coastguard Worker    '--no-keepalive' => 1,
162*6236dae4SAndroid Build Coastguard Worker    '--no-progress-meter' => 1,
163*6236dae4SAndroid Build Coastguard Worker    '--no-clobber' => 1,
164*6236dae4SAndroid Build Coastguard Worker
165*6236dae4SAndroid Build Coastguard Worker    # pretend these options without -no exist in curl.1 and tool_listhelp.c
166*6236dae4SAndroid Build Coastguard Worker    '--alpn' => 6,
167*6236dae4SAndroid Build Coastguard Worker    '--npn' => 6,
168*6236dae4SAndroid Build Coastguard Worker    '--eprt' => 6,
169*6236dae4SAndroid Build Coastguard Worker    '--epsv' => 6,
170*6236dae4SAndroid Build Coastguard Worker    '--keepalive' => 6,
171*6236dae4SAndroid Build Coastguard Worker    '-N, --buffer' => 6,
172*6236dae4SAndroid Build Coastguard Worker    '--sessionid' => 6,
173*6236dae4SAndroid Build Coastguard Worker    '--progress-meter' => 6,
174*6236dae4SAndroid Build Coastguard Worker    '--clobber' => 6,
175*6236dae4SAndroid Build Coastguard Worker
176*6236dae4SAndroid Build Coastguard Worker    # deprecated options do not need to be in tool_help.c nor curl.1
177*6236dae4SAndroid Build Coastguard Worker    '--krb4' => 6,
178*6236dae4SAndroid Build Coastguard Worker    '--ftp-ssl' => 6,
179*6236dae4SAndroid Build Coastguard Worker    '--ftp-ssl-reqd' => 6,
180*6236dae4SAndroid Build Coastguard Worker    '--include' => 6,
181*6236dae4SAndroid Build Coastguard Worker
182*6236dae4SAndroid Build Coastguard Worker    # for tests and debug only, can remain hidden
183*6236dae4SAndroid Build Coastguard Worker    '--test-event' => 6,
184*6236dae4SAndroid Build Coastguard Worker    '--wdebug' => 6,
185*6236dae4SAndroid Build Coastguard Worker    );
186*6236dae4SAndroid Build Coastguard Worker
187*6236dae4SAndroid Build Coastguard Worker
188*6236dae4SAndroid Build Coastguard Worker#########################################################################
189*6236dae4SAndroid Build Coastguard Worker# parse the curl code that parses the command line arguments!
190*6236dae4SAndroid Build Coastguard Workeropen($r, "<", "$root/src/tool_getparam.c") ||
191*6236dae4SAndroid Build Coastguard Worker    die "no input file";
192*6236dae4SAndroid Build Coastguard Workermy $list;
193*6236dae4SAndroid Build Coastguard Workermy @getparam; # store all parsed parameters
194*6236dae4SAndroid Build Coastguard Worker
195*6236dae4SAndroid Build Coastguard Workermy $prevlong = "";
196*6236dae4SAndroid Build Coastguard Workermy $no = 0;
197*6236dae4SAndroid Build Coastguard Workerwhile(<$r>) {
198*6236dae4SAndroid Build Coastguard Worker    $no++;
199*6236dae4SAndroid Build Coastguard Worker    chomp;
200*6236dae4SAndroid Build Coastguard Worker    if(/struct LongShort aliases/) {
201*6236dae4SAndroid Build Coastguard Worker        $list=1;
202*6236dae4SAndroid Build Coastguard Worker    }
203*6236dae4SAndroid Build Coastguard Worker    elsif($list) {
204*6236dae4SAndroid Build Coastguard Worker        if( /^  \{(\"[^,]*\").*\'(.)\', (.*)\}/) {
205*6236dae4SAndroid Build Coastguard Worker            my ($l, $s, $rd)=($1, $2, $3);
206*6236dae4SAndroid Build Coastguard Worker            my $sh;
207*6236dae4SAndroid Build Coastguard Worker            my $lo;
208*6236dae4SAndroid Build Coastguard Worker            my $title;
209*6236dae4SAndroid Build Coastguard Worker            if(($l cmp $prevlong) < 0) {
210*6236dae4SAndroid Build Coastguard Worker                print STDERR "tool_getparam.c:$no: '$l' is NOT placed in alpha-order\n";
211*6236dae4SAndroid Build Coastguard Worker            }
212*6236dae4SAndroid Build Coastguard Worker            if($l =~ /\"(.*)\"/) {
213*6236dae4SAndroid Build Coastguard Worker                # long option
214*6236dae4SAndroid Build Coastguard Worker                $lo = $1;
215*6236dae4SAndroid Build Coastguard Worker                $title="--$lo";
216*6236dae4SAndroid Build Coastguard Worker            }
217*6236dae4SAndroid Build Coastguard Worker            if($s ne " ") {
218*6236dae4SAndroid Build Coastguard Worker                # a short option
219*6236dae4SAndroid Build Coastguard Worker                $sh = $s;
220*6236dae4SAndroid Build Coastguard Worker                $title="-$sh, $title";
221*6236dae4SAndroid Build Coastguard Worker            }
222*6236dae4SAndroid Build Coastguard Worker            push @getparam, $title;
223*6236dae4SAndroid Build Coastguard Worker            $opts{$title} |= 1;
224*6236dae4SAndroid Build Coastguard Worker            $prevlong = $l;
225*6236dae4SAndroid Build Coastguard Worker        }
226*6236dae4SAndroid Build Coastguard Worker    }
227*6236dae4SAndroid Build Coastguard Worker}
228*6236dae4SAndroid Build Coastguard Workerclose($r);
229*6236dae4SAndroid Build Coastguard Worker
230*6236dae4SAndroid Build Coastguard Worker#########################################################################
231*6236dae4SAndroid Build Coastguard Worker# parse the curl.1 manpage, extract all documented command line options
232*6236dae4SAndroid Build Coastguard Worker# The manpage may or may not be rebuilt, so check both possible locations
233*6236dae4SAndroid Build Coastguard Workeropen($r, "<", "$buildroot/docs/cmdline-opts/curl.1") || open($r, "<", "$root/docs/cmdline-opts/curl.1") ||
234*6236dae4SAndroid Build Coastguard Worker    die "failed getting curl.1";
235*6236dae4SAndroid Build Coastguard Workermy @manpage; # store all parsed parameters
236*6236dae4SAndroid Build Coastguard Workerwhile(<$r>) {
237*6236dae4SAndroid Build Coastguard Worker    chomp;
238*6236dae4SAndroid Build Coastguard Worker    my $l= $_;
239*6236dae4SAndroid Build Coastguard Worker    $l =~ s/\\-/-/g;
240*6236dae4SAndroid Build Coastguard Worker    if($l =~ /^\.IP \"(-[^\"]*)\"/) {
241*6236dae4SAndroid Build Coastguard Worker        my $str = $1;
242*6236dae4SAndroid Build Coastguard Worker        my $combo;
243*6236dae4SAndroid Build Coastguard Worker        if($str =~ /^-(.), --([a-z0-9.-]*)/) {
244*6236dae4SAndroid Build Coastguard Worker            # figure out the -short, --long combo
245*6236dae4SAndroid Build Coastguard Worker            $combo = "-$1, --$2";
246*6236dae4SAndroid Build Coastguard Worker        }
247*6236dae4SAndroid Build Coastguard Worker        elsif($str =~ /^--([a-z0-9.-]*)/) {
248*6236dae4SAndroid Build Coastguard Worker            # figure out the --long name
249*6236dae4SAndroid Build Coastguard Worker            $combo = "--$1";
250*6236dae4SAndroid Build Coastguard Worker        }
251*6236dae4SAndroid Build Coastguard Worker        if($combo) {
252*6236dae4SAndroid Build Coastguard Worker            push @manpage, $combo;
253*6236dae4SAndroid Build Coastguard Worker            $opts{$combo} |= 2;
254*6236dae4SAndroid Build Coastguard Worker        }
255*6236dae4SAndroid Build Coastguard Worker    }
256*6236dae4SAndroid Build Coastguard Worker}
257*6236dae4SAndroid Build Coastguard Workerclose($r);
258*6236dae4SAndroid Build Coastguard Worker
259*6236dae4SAndroid Build Coastguard Worker
260*6236dae4SAndroid Build Coastguard Worker#########################################################################
261*6236dae4SAndroid Build Coastguard Worker# parse the curl code that outputs the curl -h list
262*6236dae4SAndroid Build Coastguard Workeropen($r, "<", "$root/src/tool_listhelp.c") ||
263*6236dae4SAndroid Build Coastguard Worker    die "no input file";
264*6236dae4SAndroid Build Coastguard Workermy @toolhelp; # store all parsed parameters
265*6236dae4SAndroid Build Coastguard Workerwhile(<$r>) {
266*6236dae4SAndroid Build Coastguard Worker    chomp;
267*6236dae4SAndroid Build Coastguard Worker    my $l= $_;
268*6236dae4SAndroid Build Coastguard Worker    if(/^  \{\" *(.*)/) {
269*6236dae4SAndroid Build Coastguard Worker        my $str=$1;
270*6236dae4SAndroid Build Coastguard Worker        my $combo;
271*6236dae4SAndroid Build Coastguard Worker        if($str =~ /^-(.), --([a-z0-9.-]*)/) {
272*6236dae4SAndroid Build Coastguard Worker            # figure out the -short, --long combo
273*6236dae4SAndroid Build Coastguard Worker            $combo = "-$1, --$2";
274*6236dae4SAndroid Build Coastguard Worker        }
275*6236dae4SAndroid Build Coastguard Worker        elsif($str =~ /^--([a-z0-9.-]*)/) {
276*6236dae4SAndroid Build Coastguard Worker            # figure out the --long name
277*6236dae4SAndroid Build Coastguard Worker            $combo = "--$1";
278*6236dae4SAndroid Build Coastguard Worker        }
279*6236dae4SAndroid Build Coastguard Worker        if($combo) {
280*6236dae4SAndroid Build Coastguard Worker            push @toolhelp, $combo;
281*6236dae4SAndroid Build Coastguard Worker            $opts{$combo} |= 4;
282*6236dae4SAndroid Build Coastguard Worker        }
283*6236dae4SAndroid Build Coastguard Worker
284*6236dae4SAndroid Build Coastguard Worker    }
285*6236dae4SAndroid Build Coastguard Worker}
286*6236dae4SAndroid Build Coastguard Workerclose($r);
287*6236dae4SAndroid Build Coastguard Worker
288*6236dae4SAndroid Build Coastguard Worker#
289*6236dae4SAndroid Build Coastguard Worker# Now we have three arrays with options to cross-reference.
290*6236dae4SAndroid Build Coastguard Worker
291*6236dae4SAndroid Build Coastguard Workerforeach my $o (keys %opts) {
292*6236dae4SAndroid Build Coastguard Worker    my $where = $opts{$o};
293*6236dae4SAndroid Build Coastguard Worker
294*6236dae4SAndroid Build Coastguard Worker    if($where != 7) {
295*6236dae4SAndroid Build Coastguard Worker        # this is not in all three places
296*6236dae4SAndroid Build Coastguard Worker        $errors++;
297*6236dae4SAndroid Build Coastguard Worker        my $exists;
298*6236dae4SAndroid Build Coastguard Worker        my $missing;
299*6236dae4SAndroid Build Coastguard Worker        if($where & 1) {
300*6236dae4SAndroid Build Coastguard Worker            $exists=" tool_getparam.c";
301*6236dae4SAndroid Build Coastguard Worker        }
302*6236dae4SAndroid Build Coastguard Worker        else {
303*6236dae4SAndroid Build Coastguard Worker            $missing=" tool_getparam.c";
304*6236dae4SAndroid Build Coastguard Worker        }
305*6236dae4SAndroid Build Coastguard Worker        if($where & 2) {
306*6236dae4SAndroid Build Coastguard Worker            $exists.= " curl.1";
307*6236dae4SAndroid Build Coastguard Worker        }
308*6236dae4SAndroid Build Coastguard Worker        else {
309*6236dae4SAndroid Build Coastguard Worker            $missing.= " curl.1";
310*6236dae4SAndroid Build Coastguard Worker        }
311*6236dae4SAndroid Build Coastguard Worker        if($where & 4) {
312*6236dae4SAndroid Build Coastguard Worker            $exists .= " tool_listhelp.c";
313*6236dae4SAndroid Build Coastguard Worker        }
314*6236dae4SAndroid Build Coastguard Worker        else {
315*6236dae4SAndroid Build Coastguard Worker            $missing .= " tool_listhelp.c";
316*6236dae4SAndroid Build Coastguard Worker        }
317*6236dae4SAndroid Build Coastguard Worker
318*6236dae4SAndroid Build Coastguard Worker        print STDERR "$o is not in$missing (but in$exists)\n";
319*6236dae4SAndroid Build Coastguard Worker    }
320*6236dae4SAndroid Build Coastguard Worker}
321*6236dae4SAndroid Build Coastguard Worker
322*6236dae4SAndroid Build Coastguard Workerprint STDERR "$errors\n";
323