mirror of
https://github.com/curl/curl.git
synced 2026-08-26 11:13:36 +03:00
typecheck-gcc.h: fix the typechecks
Refreshed, cleaned up, improved and now checks *all* options. This must have stopped working at some point. gcc-14 least shows these warnings with this change, not without. Add test 745 to verify that all options listed in curl.h is also checked by the typechecker. This improved checker found almost 30 mistakes in the curl git repository. Closes #17143
This commit is contained in:
parent
29e0a8a09b
commit
79b4e56b3f
5 changed files with 462 additions and 197 deletions
|
|
@ -51,6 +51,7 @@ TESTSCRIPTS = \
|
|||
test1488.pl \
|
||||
test1544.pl \
|
||||
test1707.pl \
|
||||
test745.pl \
|
||||
test971.pl
|
||||
|
||||
EXTRA_DIST = \
|
||||
|
|
|
|||
|
|
@ -107,6 +107,7 @@ test709 test710 test711 test712 test713 test714 test715 test716 test717 \
|
|||
test718 test719 test720 test721 test722 test723 test724 test725 test726 \
|
||||
test727 test728 test729 test730 test731 test732 test733 test734 test735 \
|
||||
test736 test737 test738 test739 test740 test741 test742 test743 test744 \
|
||||
test745 \
|
||||
\
|
||||
test780 test781 test782 test783 test784 test785 test786 test787 test788 \
|
||||
test789 test790 test791 \
|
||||
|
|
|
|||
31
tests/data/test745
Normal file
31
tests/data/test745
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
<testcase>
|
||||
<info>
|
||||
<keywords>
|
||||
source analysis
|
||||
symbols-in-versions
|
||||
</keywords>
|
||||
</info>
|
||||
|
||||
#
|
||||
# Client-side
|
||||
<client>
|
||||
<server>
|
||||
none
|
||||
</server>
|
||||
|
||||
<name>
|
||||
Verify that typecheck-gcc and curl.h are in sync
|
||||
</name>
|
||||
|
||||
<command type="perl">
|
||||
%SRCDIR/test745.pl %SRCDIR/..
|
||||
</command>
|
||||
</client>
|
||||
|
||||
<verify>
|
||||
<stdout>
|
||||
OK
|
||||
</stdout>
|
||||
</verify>
|
||||
|
||||
</testcase>
|
||||
84
tests/test745.pl
Executable file
84
tests/test745.pl
Executable file
|
|
@ -0,0 +1,84 @@
|
|||
#!/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
|
||||
#
|
||||
###########################################################################
|
||||
#
|
||||
#
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
# we may get the dir root pointed out
|
||||
my $root=$ARGV[0] || ".";
|
||||
|
||||
my %typecheck; # from the include file
|
||||
my %enum; # from libcurl-errors.3
|
||||
|
||||
sub gettypecheck {
|
||||
open(my $f, "<", "$root/include/curl/typecheck-gcc.h")
|
||||
|| die "no typecheck file";
|
||||
while(<$f>) {
|
||||
chomp;
|
||||
if($_ =~ /\(option\) == (CURL[^ \)]*)/) {
|
||||
$typecheck{$1}++;
|
||||
}
|
||||
}
|
||||
close($f);
|
||||
}
|
||||
|
||||
sub getinclude {
|
||||
open(my $f, "<", "$root/include/curl/curl.h")
|
||||
|| die "no curl.h";
|
||||
while(<$f>) {
|
||||
if($_ =~ /\((CURLOPT[^,]*), (CURLOPTTYPE_[^,]*)/) {
|
||||
my ($opt, $type) = ($1, $2);
|
||||
if($type !~ /LONG|VALUES|BLOB|OFF_T/) {
|
||||
$enum{$opt}++;
|
||||
}
|
||||
}
|
||||
}
|
||||
$enum{"CURLOPT_SOCKS5_GSSAPI_SERVICE"}++;
|
||||
$enum{"CURLOPT_CONV_FROM_NETWORK_FUNCTION"}++;
|
||||
$enum{"CURLOPT_CONV_FROM_UTF8_FUNCTION"}++;
|
||||
$enum{"CURLOPT_CONV_TO_NETWORK_FUNCTION"}++;
|
||||
close($f);
|
||||
}
|
||||
|
||||
gettypecheck();
|
||||
getinclude();
|
||||
|
||||
my $error;
|
||||
for(sort keys %typecheck) {
|
||||
if($typecheck{$_} && !$enum{$_}) {
|
||||
print "$_ is not in curl.h\n";
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
|
||||
for(sort keys %enum) {
|
||||
if($enum{$_} && !$typecheck{$_}) {
|
||||
print "$_ is not checked in typecheck-gcc-h\n";
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
print "OK\n" if(!$error);
|
||||
Loading…
Add table
Add a link
Reference in a new issue