xref: /aosp_15_r20/external/curl/tests/test1165.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 Workeruse strict;
28*6236dae4SAndroid Build Coastguard Workeruse warnings;
29*6236dae4SAndroid Build Coastguard Worker
30*6236dae4SAndroid Build Coastguard Worker# the DISABLE options that can be set by configure
31*6236dae4SAndroid Build Coastguard Workermy %disable;
32*6236dae4SAndroid Build Coastguard Worker# the DISABLE options that can be set by CMakeLists.txt
33*6236dae4SAndroid Build Coastguard Workermy %disable_cmake;
34*6236dae4SAndroid Build Coastguard Worker# the DISABLE options propagated via curl_config.h.cmake
35*6236dae4SAndroid Build Coastguard Workermy %disable_cmake_config_h;
36*6236dae4SAndroid Build Coastguard Worker# the DISABLE options that are used in C files
37*6236dae4SAndroid Build Coastguard Workermy %file;
38*6236dae4SAndroid Build Coastguard Worker# the DISABLE options that are documented
39*6236dae4SAndroid Build Coastguard Workermy %docs;
40*6236dae4SAndroid Build Coastguard Worker
41*6236dae4SAndroid Build Coastguard Worker# we may get the dir root pointed out
42*6236dae4SAndroid Build Coastguard Workermy $root=$ARGV[0] || ".";
43*6236dae4SAndroid Build Coastguard Workermy $DOCS="CURL-DISABLE.md";
44*6236dae4SAndroid Build Coastguard Worker
45*6236dae4SAndroid Build Coastguard Workersub scanconf {
46*6236dae4SAndroid Build Coastguard Worker    my ($f)=@_;
47*6236dae4SAndroid Build Coastguard Worker    open S, "<$f";
48*6236dae4SAndroid Build Coastguard Worker    while(<S>) {
49*6236dae4SAndroid Build Coastguard Worker        if(/(CURL_DISABLE_[A-Z0-9_]+)/g) {
50*6236dae4SAndroid Build Coastguard Worker            my ($sym)=($1);
51*6236dae4SAndroid Build Coastguard Worker            $disable{$sym} = 1;
52*6236dae4SAndroid Build Coastguard Worker        }
53*6236dae4SAndroid Build Coastguard Worker    }
54*6236dae4SAndroid Build Coastguard Worker    close S;
55*6236dae4SAndroid Build Coastguard Worker}
56*6236dae4SAndroid Build Coastguard Worker
57*6236dae4SAndroid Build Coastguard Workersub scan_configure {
58*6236dae4SAndroid Build Coastguard Worker    opendir(my $m, "$root/m4") || die "Can't opendir $root/m4: $!";
59*6236dae4SAndroid Build Coastguard Worker    my @m4 = grep { /\.m4$/ } readdir($m);
60*6236dae4SAndroid Build Coastguard Worker    closedir $m;
61*6236dae4SAndroid Build Coastguard Worker    scanconf("$root/configure.ac");
62*6236dae4SAndroid Build Coastguard Worker    # scan all m4 files too
63*6236dae4SAndroid Build Coastguard Worker    for my $e (@m4) {
64*6236dae4SAndroid Build Coastguard Worker        scanconf("$root/m4/$e");
65*6236dae4SAndroid Build Coastguard Worker    }
66*6236dae4SAndroid Build Coastguard Worker}
67*6236dae4SAndroid Build Coastguard Worker
68*6236dae4SAndroid Build Coastguard Workersub scanconf_cmake {
69*6236dae4SAndroid Build Coastguard Worker    my ($hashr, $f)=@_;
70*6236dae4SAndroid Build Coastguard Worker    open S, "<$f";
71*6236dae4SAndroid Build Coastguard Worker    while(<S>) {
72*6236dae4SAndroid Build Coastguard Worker        if(/(CURL_DISABLE_[A-Z0-9_]+)/g) {
73*6236dae4SAndroid Build Coastguard Worker            my ($sym)=($1);
74*6236dae4SAndroid Build Coastguard Worker            if(not $sym =~ /^(CURL_DISABLE_INSTALL|CURL_DISABLE_TESTS|CURL_DISABLE_SRP)$/) {
75*6236dae4SAndroid Build Coastguard Worker                $hashr->{$sym} = 1;
76*6236dae4SAndroid Build Coastguard Worker            }
77*6236dae4SAndroid Build Coastguard Worker        }
78*6236dae4SAndroid Build Coastguard Worker    }
79*6236dae4SAndroid Build Coastguard Worker    close S;
80*6236dae4SAndroid Build Coastguard Worker}
81*6236dae4SAndroid Build Coastguard Worker
82*6236dae4SAndroid Build Coastguard Workersub scan_cmake {
83*6236dae4SAndroid Build Coastguard Worker    scanconf_cmake(\%disable_cmake, "$root/CMakeLists.txt");
84*6236dae4SAndroid Build Coastguard Worker}
85*6236dae4SAndroid Build Coastguard Worker
86*6236dae4SAndroid Build Coastguard Workersub scan_cmake_config_h {
87*6236dae4SAndroid Build Coastguard Worker    scanconf_cmake(\%disable_cmake_config_h, "$root/lib/curl_config.h.cmake");
88*6236dae4SAndroid Build Coastguard Worker}
89*6236dae4SAndroid Build Coastguard Worker
90*6236dae4SAndroid Build Coastguard Workersub scan_file {
91*6236dae4SAndroid Build Coastguard Worker    my ($source)=@_;
92*6236dae4SAndroid Build Coastguard Worker    open F, "<$source";
93*6236dae4SAndroid Build Coastguard Worker    while(<F>) {
94*6236dae4SAndroid Build Coastguard Worker        while(s/(CURL_DISABLE_[A-Z0-9_]+)//) {
95*6236dae4SAndroid Build Coastguard Worker            my ($sym)=($1);
96*6236dae4SAndroid Build Coastguard Worker            $file{$sym} = $source;
97*6236dae4SAndroid Build Coastguard Worker        }
98*6236dae4SAndroid Build Coastguard Worker    }
99*6236dae4SAndroid Build Coastguard Worker    close F;
100*6236dae4SAndroid Build Coastguard Worker}
101*6236dae4SAndroid Build Coastguard Worker
102*6236dae4SAndroid Build Coastguard Workersub scan_dir {
103*6236dae4SAndroid Build Coastguard Worker    my ($dir)=@_;
104*6236dae4SAndroid Build Coastguard Worker    opendir(my $dh, $dir) || die "Can't opendir $dir: $!";
105*6236dae4SAndroid Build Coastguard Worker    my @cfiles = grep { /\.[ch]\z/ && -f "$dir/$_" } readdir($dh);
106*6236dae4SAndroid Build Coastguard Worker    closedir $dh;
107*6236dae4SAndroid Build Coastguard Worker    for my $f (sort @cfiles) {
108*6236dae4SAndroid Build Coastguard Worker        scan_file("$dir/$f");
109*6236dae4SAndroid Build Coastguard Worker    }
110*6236dae4SAndroid Build Coastguard Worker}
111*6236dae4SAndroid Build Coastguard Worker
112*6236dae4SAndroid Build Coastguard Workersub scan_sources {
113*6236dae4SAndroid Build Coastguard Worker    scan_dir("$root/src");
114*6236dae4SAndroid Build Coastguard Worker    scan_dir("$root/lib");
115*6236dae4SAndroid Build Coastguard Worker    scan_dir("$root/lib/vtls");
116*6236dae4SAndroid Build Coastguard Worker    scan_dir("$root/lib/vauth");
117*6236dae4SAndroid Build Coastguard Worker}
118*6236dae4SAndroid Build Coastguard Worker
119*6236dae4SAndroid Build Coastguard Workersub scan_docs {
120*6236dae4SAndroid Build Coastguard Worker    open F, "<$root/docs/$DOCS";
121*6236dae4SAndroid Build Coastguard Worker    my $line = 0;
122*6236dae4SAndroid Build Coastguard Worker    while(<F>) {
123*6236dae4SAndroid Build Coastguard Worker        $line++;
124*6236dae4SAndroid Build Coastguard Worker        if(/^## `(CURL_DISABLE_[A-Z0-9_]+)`/g) {
125*6236dae4SAndroid Build Coastguard Worker            my ($sym)=($1);
126*6236dae4SAndroid Build Coastguard Worker            $docs{$sym} = $line;
127*6236dae4SAndroid Build Coastguard Worker        }
128*6236dae4SAndroid Build Coastguard Worker    }
129*6236dae4SAndroid Build Coastguard Worker    close F;
130*6236dae4SAndroid Build Coastguard Worker}
131*6236dae4SAndroid Build Coastguard Worker
132*6236dae4SAndroid Build Coastguard Workerscan_configure();
133*6236dae4SAndroid Build Coastguard Workerscan_cmake();
134*6236dae4SAndroid Build Coastguard Workerscan_cmake_config_h();
135*6236dae4SAndroid Build Coastguard Workerscan_sources();
136*6236dae4SAndroid Build Coastguard Workerscan_docs();
137*6236dae4SAndroid Build Coastguard Worker
138*6236dae4SAndroid Build Coastguard Worker
139*6236dae4SAndroid Build Coastguard Workermy $error = 0;
140*6236dae4SAndroid Build Coastguard Worker# Check the configure symbols for use in code
141*6236dae4SAndroid Build Coastguard Workerfor my $s (sort keys %disable) {
142*6236dae4SAndroid Build Coastguard Worker    if(!$file{$s}) {
143*6236dae4SAndroid Build Coastguard Worker        printf "Present in configure.ac, not used by code: %s\n", $s;
144*6236dae4SAndroid Build Coastguard Worker        $error++;
145*6236dae4SAndroid Build Coastguard Worker    }
146*6236dae4SAndroid Build Coastguard Worker    if(!$docs{$s}) {
147*6236dae4SAndroid Build Coastguard Worker        printf "Present in configure.ac, not documented in $DOCS: %s\n", $s;
148*6236dae4SAndroid Build Coastguard Worker        $error++;
149*6236dae4SAndroid Build Coastguard Worker    }
150*6236dae4SAndroid Build Coastguard Worker}
151*6236dae4SAndroid Build Coastguard Worker
152*6236dae4SAndroid Build Coastguard Worker# Check the CMakeLists.txt symbols for use in code
153*6236dae4SAndroid Build Coastguard Workerfor my $s (sort keys %disable_cmake) {
154*6236dae4SAndroid Build Coastguard Worker    if(!$file{$s}) {
155*6236dae4SAndroid Build Coastguard Worker        printf "Present in CMakeLists.txt, not used by code: %s\n", $s;
156*6236dae4SAndroid Build Coastguard Worker        $error++;
157*6236dae4SAndroid Build Coastguard Worker    }
158*6236dae4SAndroid Build Coastguard Worker    if(!$docs{$s}) {
159*6236dae4SAndroid Build Coastguard Worker        printf "Present in CMakeLists.txt, not documented in $DOCS: %s\n", $s;
160*6236dae4SAndroid Build Coastguard Worker        $error++;
161*6236dae4SAndroid Build Coastguard Worker    }
162*6236dae4SAndroid Build Coastguard Worker}
163*6236dae4SAndroid Build Coastguard Worker
164*6236dae4SAndroid Build Coastguard Worker# Check the CMakeLists.txt symbols for use in curl_config.h.cmake
165*6236dae4SAndroid Build Coastguard Workerfor my $s (sort keys %disable_cmake) {
166*6236dae4SAndroid Build Coastguard Worker    if(!$disable_cmake_config_h{$s}) {
167*6236dae4SAndroid Build Coastguard Worker        printf "Present in CMakeLists.txt, not propagated via curl_config.h.cmake: %s\n", $s;
168*6236dae4SAndroid Build Coastguard Worker        $error++;
169*6236dae4SAndroid Build Coastguard Worker    }
170*6236dae4SAndroid Build Coastguard Worker}
171*6236dae4SAndroid Build Coastguard Worker
172*6236dae4SAndroid Build Coastguard Worker# Check the code symbols for use in configure
173*6236dae4SAndroid Build Coastguard Workerfor my $s (sort keys %file) {
174*6236dae4SAndroid Build Coastguard Worker    if(!$disable{$s}) {
175*6236dae4SAndroid Build Coastguard Worker        printf "Not set by configure: %s (%s)\n", $s, $file{$s};
176*6236dae4SAndroid Build Coastguard Worker        $error++;
177*6236dae4SAndroid Build Coastguard Worker    }
178*6236dae4SAndroid Build Coastguard Worker    if(!$disable_cmake{$s}) {
179*6236dae4SAndroid Build Coastguard Worker        printf "Not set by CMakeLists.txt: %s (%s)\n", $s, $file{$s};
180*6236dae4SAndroid Build Coastguard Worker        $error++;
181*6236dae4SAndroid Build Coastguard Worker    }
182*6236dae4SAndroid Build Coastguard Worker    if(!$docs{$s}) {
183*6236dae4SAndroid Build Coastguard Worker        printf "Used in code, not documented in $DOCS: %s\n", $s;
184*6236dae4SAndroid Build Coastguard Worker        $error++;
185*6236dae4SAndroid Build Coastguard Worker    }
186*6236dae4SAndroid Build Coastguard Worker}
187*6236dae4SAndroid Build Coastguard Worker
188*6236dae4SAndroid Build Coastguard Worker# Check the documented symbols
189*6236dae4SAndroid Build Coastguard Workerfor my $s (sort keys %docs) {
190*6236dae4SAndroid Build Coastguard Worker    if(!$disable{$s}) {
191*6236dae4SAndroid Build Coastguard Worker        printf "Documented but not in configure: %s\n", $s;
192*6236dae4SAndroid Build Coastguard Worker        $error++;
193*6236dae4SAndroid Build Coastguard Worker    }
194*6236dae4SAndroid Build Coastguard Worker    if(!$disable_cmake{$s}) {
195*6236dae4SAndroid Build Coastguard Worker        printf "Documented but not in CMakeLists.txt: %s\n", $s;
196*6236dae4SAndroid Build Coastguard Worker        $error++;
197*6236dae4SAndroid Build Coastguard Worker    }
198*6236dae4SAndroid Build Coastguard Worker    if(!$file{$s}) {
199*6236dae4SAndroid Build Coastguard Worker        printf "Documented, but not used by code: %s\n", $s;
200*6236dae4SAndroid Build Coastguard Worker        $error++;
201*6236dae4SAndroid Build Coastguard Worker    }
202*6236dae4SAndroid Build Coastguard Worker}
203*6236dae4SAndroid Build Coastguard Worker
204*6236dae4SAndroid Build Coastguard Workerexit $error;
205