mirror of
https://github.com/curl/curl.git
synced 2026-04-11 12:01:42 +08:00
Fix bigger and smaller kinks in how clang-tidy is configured and used.
Sync behavior more between autotools and cmake, lib/src and tests. Bump
clang-tidy minimum version and prepare logic to allow using clang-tidy
to a fuller extent.
- move clang-tidy settings from builds to a new `.clang-tidy.yml`.
To make it easy to see and edit checks at one place. Also to allow
using the `--checks=` option internally to silence tests-specific
checks. (clang-tidy does not support multiple `--check=` options via
the command-line.)
Use explicit `--config-file=` option to point to the configuration.
- .clang-tidy.yml: link to documentation.
- suppress `clang-diagnostic-nullability-extension` due to a false
positive in libtests with `CURL_WERROR=ON` and `PICKY_COMPILER=OFF`.
- .clang-tidy.yml: enable `portability-*`, `misc-const-correctness`.
- drop `--quiet` clang-tidy option by default to make its working a bit
more transparent. The extra output is minimial.
- consistently use double-dashes in clang-tidy command-line options.
Supported by clang-tidy 9.0.0+ (2019-09-19). Before this patch single
and double were used arbitrarily.
- src/tool_parsecfg: silence false positive `clang-analyzer-unix.Stream`.
Seen with clang 18 + clang-tidy 19 and 20 (only with autotools.)
- INTERNALS: require clang-tidy 14.0.0+. For the `--config-file` option.
- INTERNALS: recommend clang-tidy 19.1.0+, to avoid bogus
`clang-analyzer-valist.Uninitialized` warnings. (bug details below)
autotools:
- allow configuring the clang-tidy tool via `CLANG_TIDY` env.
Also to use in GHA to point to a suffixed clang-tody tool.
- fix to pass CFLAGS to lib, src sources.
(keep omitting them when using a non-clang compiler.)
- fix to pass `--warnings-as-errors=*` in quotes to avoid globbing.
cmake:
- fix to not pass an empty `-I` to clang-tidy.
- fix to pass CFLAGS (picky warnings) to clang-tidy for test sources.
(keep omitting them when using a non-clang compiler.)
- fix to disable `clang-diagnostic-unused-function` for test sources.
(tests have static entry points, which trigger this check when
checking them as individidual sources.)
- fix forwarding `CURL_CLANG_TIDYFLAGS` to clang-tidy.
- force disable picky warnings when running clang-tidy with a non-clang
compiler. To not pass these flags when checking lib and src.
CI:
- GHA/linux: avoid clang-tidy bug by upgrading to v19, and drop the
workaround.
- GHA/linux: switch to clang from gcc in the clang-tidy job. Using gcc
doesn't allow passing CFLAGS to clang-tidy, making it less effective.
(My guess this was one factor contributing to this job often missing
to find certain issues compared to GHA/macos.)
I recomment using clang-tidy with a clang compiler, preferably the same
version or one that's compatible. Other cases are best effort, and may
fail if a C flag is passed to clang-tidy that it does not understand.
Picky warnings are mostly omitted when using a non-clang compiler,
reducing its usefulness.
Details and reproducer for the v18 (and earlier) clang-tidy bug,
previously affecting the GHA/linux job:
clang-tidy <=18 emits false warnings way when passing multiple C sources
at once (as done with autotools):
```sh
cat > src1.c <<EOF
#include <string.h>
static void dummy(void *p) { memcmp(p, p, 0); }
EOF
cat > src2.c <<EOF
#include <stdarg.h>
void vafunc(int option, ...)
{
va_list param;
va_start(param, option);
if(option)
(void)va_arg(param, int);
va_end(param);
}
EOF
/opt/homebrew/opt/llvm@18/bin/clang-tidy --checks=clang-analyzer-valist.Uninitialized src1.c src2.c
# src2.c:7:11: warning: va_arg() is called on an uninitialized va_list [clang-analyzer-valist.Uninitialized]
```
Follow-up to e86542038d #17047
Closes #20605
183 lines
5.3 KiB
Makefile
183 lines
5.3 KiB
Makefile
#***************************************************************************
|
|
# _ _ ____ _
|
|
# 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
|
|
#
|
|
###########################################################################
|
|
|
|
AUTOMAKE_OPTIONS = foreign
|
|
|
|
ACLOCAL_AMFLAGS = -I m4
|
|
|
|
CMAKE_DIST = \
|
|
CMake/cmake_uninstall.in.cmake \
|
|
CMake/curl-config.in.cmake \
|
|
CMake/CurlSymbolHiding.cmake \
|
|
CMake/CurlTests.c \
|
|
CMake/FindBrotli.cmake \
|
|
CMake/FindCares.cmake \
|
|
CMake/FindGnuTLS.cmake \
|
|
CMake/FindGSS.cmake \
|
|
CMake/FindLDAP.cmake \
|
|
CMake/FindLibbacktrace.cmake \
|
|
CMake/FindLibgsasl.cmake \
|
|
CMake/FindLibidn2.cmake \
|
|
CMake/FindLibpsl.cmake \
|
|
CMake/FindLibrtmp.cmake \
|
|
CMake/FindLibssh.cmake \
|
|
CMake/FindLibssh2.cmake \
|
|
CMake/FindLibuv.cmake \
|
|
CMake/FindMbedTLS.cmake \
|
|
CMake/FindNGHTTP2.cmake \
|
|
CMake/FindNGHTTP3.cmake \
|
|
CMake/FindNGTCP2.cmake \
|
|
CMake/FindNettle.cmake \
|
|
CMake/FindQuiche.cmake \
|
|
CMake/FindRustls.cmake \
|
|
CMake/FindWolfSSL.cmake \
|
|
CMake/FindZstd.cmake \
|
|
CMake/Macros.cmake \
|
|
CMake/OtherTests.cmake \
|
|
CMake/PickyWarnings.cmake \
|
|
CMake/Utilities.cmake \
|
|
CMake/unix-cache.cmake \
|
|
CMake/win32-cache.cmake \
|
|
CMakeLists.txt \
|
|
tests/cmake/CMakeLists.txt \
|
|
tests/cmake/test.c \
|
|
tests/cmake/test.sh
|
|
|
|
EXTRA_DIST = CHANGES.md COPYING RELEASE-NOTES Dockerfile .clang-tidy.yml .editorconfig $(CMAKE_DIST)
|
|
|
|
DISTCLEANFILES = buildinfo.txt
|
|
|
|
bin_SCRIPTS = curl-config
|
|
|
|
SUBDIRS = lib docs src scripts
|
|
DIST_SUBDIRS = $(SUBDIRS) tests projects include docs
|
|
|
|
pkgconfigdir = $(libdir)/pkgconfig
|
|
pkgconfig_DATA = libcurl.pc
|
|
|
|
dist-hook:
|
|
rm -rf $(top_builddir)/tests/log
|
|
find $(distdir) -name "*.dist" -exec rm -- {} \;
|
|
(distit=`find $(srcdir) -name "*.dist" | grep -v Makefile`; \
|
|
for file in $$distit; do \
|
|
strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \
|
|
cp -p $$file $(distdir)$$strip; \
|
|
done)
|
|
|
|
check: test examples check-docs
|
|
|
|
if CROSSCOMPILING
|
|
test-full: test
|
|
test-nonflaky: test
|
|
test-torture: test
|
|
test-event: test
|
|
test-am: test
|
|
test-ci: test
|
|
pytest: test
|
|
pytest-ci: test
|
|
|
|
test:
|
|
@echo "NOTICE: we cannot run the tests when cross-compiling!"
|
|
|
|
else
|
|
|
|
test:
|
|
@(cd tests; $(MAKE) all quiet-test)
|
|
|
|
test-full:
|
|
@(cd tests; $(MAKE) all full-test)
|
|
|
|
test-nonflaky:
|
|
@(cd tests; $(MAKE) all nonflaky-test)
|
|
|
|
test-torture:
|
|
@(cd tests; $(MAKE) all torture-test)
|
|
|
|
test-event:
|
|
@(cd tests; $(MAKE) all event-test)
|
|
|
|
test-am:
|
|
@(cd tests; $(MAKE) all am-test)
|
|
|
|
test-ci:
|
|
@(cd tests; $(MAKE) all ci-test)
|
|
|
|
pytest:
|
|
@(cd tests; $(MAKE) all default-pytest)
|
|
|
|
pytest-ci:
|
|
@(cd tests; $(MAKE) all ci-pytest)
|
|
|
|
endif
|
|
|
|
examples:
|
|
@(cd docs/examples; $(MAKE) check)
|
|
|
|
check-docs:
|
|
@(cd docs/libcurl; $(MAKE) check)
|
|
|
|
# We extend the standard install with a custom hook:
|
|
if BUILD_DOCS
|
|
install-data-hook:
|
|
(cd include && $(MAKE) install)
|
|
(cd docs && $(MAKE) install)
|
|
(cd docs/libcurl && $(MAKE) install)
|
|
else
|
|
install-data-hook:
|
|
(cd include && $(MAKE) install)
|
|
(cd docs && $(MAKE) install)
|
|
endif
|
|
|
|
# We extend the standard uninstall with a custom hook:
|
|
uninstall-hook:
|
|
(cd include && $(MAKE) uninstall)
|
|
(cd docs && $(MAKE) uninstall)
|
|
(cd docs/libcurl && $(MAKE) uninstall)
|
|
|
|
ca-bundle: $(srcdir)/scripts/mk-ca-bundle.pl
|
|
@echo "generating a fresh ca-bundle.crt"
|
|
@perl $(srcdir)/scripts/mk-ca-bundle.pl -b -l -u lib/ca-bundle.crt
|
|
|
|
ca-firefox: $(srcdir)/scripts/firefox-db2pem.sh
|
|
@echo "generating a fresh ca-bundle.crt"
|
|
$(srcdir)/scripts/firefox-db2pem.sh lib/ca-bundle.crt
|
|
|
|
checksrc:
|
|
(cd lib && $(MAKE) checksrc)
|
|
(cd src && $(MAKE) checksrc)
|
|
(cd tests && $(MAKE) checksrc)
|
|
(cd include/curl && $(MAKE) checksrc)
|
|
(cd docs/examples && $(MAKE) checksrc)
|
|
(cd projects && $(MAKE) checksrc)
|
|
|
|
lint: checksrc
|
|
@PERL@ $(top_srcdir)/scripts/spacecheck.pl
|
|
|
|
tidy:
|
|
(cd src && $(MAKE) tidy)
|
|
(cd lib && $(MAKE) tidy)
|
|
|
|
clean-local:
|
|
(cd tests && $(MAKE) clean)
|