Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/pkg
Path: blob/main/external/curl/tests/test1165.pl
2650 views
1
#!/usr/bin/env perl
2
#***************************************************************************
3
# _ _ ____ _
4
# Project ___| | | | _ \| |
5
# / __| | | | |_) | |
6
# | (__| |_| | _ <| |___
7
# \___|\___/|_| \_\_____|
8
#
9
# Copyright (C) Daniel Stenberg, <[email protected]>, et al.
10
#
11
# This software is licensed as described in the file COPYING, which
12
# you should have received as part of this distribution. The terms
13
# are also available at https://curl.se/docs/copyright.html.
14
#
15
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
16
# copies of the Software, and permit persons to whom the Software is
17
# furnished to do so, under the terms of the COPYING file.
18
#
19
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20
# KIND, either express or implied.
21
#
22
# SPDX-License-Identifier: curl
23
#
24
###########################################################################
25
26
use strict;
27
use warnings;
28
29
# the DISABLE options that can be set by configure
30
my %disable;
31
# the DISABLE options that can be set by CMakeLists.txt
32
my %disable_cmake;
33
# the DISABLE options propagated via curl_config.h.cmake
34
my %disable_cmake_config_h;
35
# the DISABLE options that are used in C files
36
my %file;
37
# the DISABLE options that are documented
38
my %docs;
39
40
# we may get the dir root pointed out
41
my $root=$ARGV[0] || ".";
42
my $DOCS="CURL-DISABLE.md";
43
44
sub scanconf {
45
my ($f)=@_;
46
open S, "<$f";
47
while(<S>) {
48
if(/(CURL_DISABLE_[A-Z0-9_]+)/g) {
49
my ($sym)=($1);
50
$disable{$sym} = 1;
51
}
52
}
53
close S;
54
}
55
56
sub scan_configure {
57
opendir(my $m, "$root/m4") || die "Can't opendir $root/m4: $!";
58
my @m4 = grep { /\.m4$/ } readdir($m);
59
closedir $m;
60
scanconf("$root/configure.ac");
61
# scan all m4 files too
62
for my $e (@m4) {
63
scanconf("$root/m4/$e");
64
}
65
}
66
67
sub scanconf_cmake {
68
my ($hashr, $f)=@_;
69
open S, "<$f";
70
while(<S>) {
71
if(/(CURL_DISABLE_[A-Z0-9_]+)/g) {
72
my ($sym)=($1);
73
if(not $sym =~ /^(CURL_DISABLE_INSTALL|CURL_DISABLE_TESTS|CURL_DISABLE_SRP)$/) {
74
$hashr->{$sym} = 1;
75
}
76
}
77
}
78
close S;
79
}
80
81
sub scan_cmake {
82
scanconf_cmake(\%disable_cmake, "$root/CMakeLists.txt");
83
}
84
85
sub scan_cmake_config_h {
86
scanconf_cmake(\%disable_cmake_config_h, "$root/lib/curl_config.h.cmake");
87
}
88
89
my %whitelisted = ("CURL_DISABLE_TYPECHECK" => 1);
90
91
sub scan_file {
92
my ($source)=@_;
93
open F, "<$source";
94
while(<F>) {
95
while(s/(CURL_DISABLE_[A-Z0-9_]+)//) {
96
my ($sym)=($1);
97
98
if(!$whitelisted{$sym}) {
99
$file{$sym} = $source;
100
}
101
}
102
}
103
close F;
104
}
105
106
sub scan_dir {
107
my ($dir)=@_;
108
opendir(my $dh, $dir) || die "Can't opendir $dir: $!";
109
my @cfiles = grep { /\.[ch]\z/ && -f "$dir/$_" } readdir($dh);
110
closedir $dh;
111
for my $f (sort @cfiles) {
112
scan_file("$dir/$f");
113
}
114
}
115
116
sub scan_sources {
117
scan_dir("$root/src");
118
scan_dir("$root/lib");
119
scan_dir("$root/lib/vtls");
120
scan_dir("$root/lib/vauth");
121
}
122
123
sub scan_docs {
124
open F, "<$root/docs/$DOCS";
125
my $line = 0;
126
while(<F>) {
127
$line++;
128
if(/^## `(CURL_DISABLE_[A-Z0-9_]+)`/g) {
129
my ($sym)=($1);
130
$docs{$sym} = $line;
131
}
132
}
133
close F;
134
}
135
136
scan_configure();
137
scan_cmake();
138
scan_cmake_config_h();
139
scan_sources();
140
scan_docs();
141
142
143
my $error = 0;
144
# Check the configure symbols for use in code
145
for my $s (sort keys %disable) {
146
if(!$file{$s}) {
147
printf "Present in configure.ac, not used by code: %s\n", $s;
148
$error++;
149
}
150
if(!$docs{$s}) {
151
printf "Present in configure.ac, not documented in $DOCS: %s\n", $s;
152
$error++;
153
}
154
}
155
156
# Check the CMakeLists.txt symbols for use in code
157
for my $s (sort keys %disable_cmake) {
158
if(!$file{$s}) {
159
printf "Present in CMakeLists.txt, not used by code: %s\n", $s;
160
$error++;
161
}
162
if(!$docs{$s}) {
163
printf "Present in CMakeLists.txt, not documented in $DOCS: %s\n", $s;
164
$error++;
165
}
166
}
167
168
# Check the CMakeLists.txt symbols for use in curl_config.h.cmake
169
for my $s (sort keys %disable_cmake) {
170
if(!$disable_cmake_config_h{$s}) {
171
printf "Present in CMakeLists.txt, not propagated via curl_config.h.cmake: %s\n", $s;
172
$error++;
173
}
174
}
175
176
# Check the code symbols for use in configure
177
for my $s (sort keys %file) {
178
if(!$disable{$s}) {
179
printf "Not set by configure: %s (%s)\n", $s, $file{$s};
180
$error++;
181
}
182
if(!$disable_cmake{$s}) {
183
printf "Not set by CMakeLists.txt: %s (%s)\n", $s, $file{$s};
184
$error++;
185
}
186
if(!$docs{$s}) {
187
printf "Used in code, not documented in $DOCS: %s\n", $s;
188
$error++;
189
}
190
}
191
192
# Check the documented symbols
193
for my $s (sort keys %docs) {
194
if(!$disable{$s}) {
195
printf "Documented but not in configure: %s\n", $s;
196
$error++;
197
}
198
if(!$disable_cmake{$s}) {
199
printf "Documented but not in CMakeLists.txt: %s\n", $s;
200
$error++;
201
}
202
if(!$file{$s}) {
203
printf "Documented, but not used by code: %s\n", $s;
204
$error++;
205
}
206
}
207
208
exit $error;
209
210