From dd869cf80885a671dc7dfa54cbbcc57a16d49150 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20St=C3=B6neberg?= Date: Wed, 3 Jan 2024 11:05:32 +0100 Subject: [PATCH] added CMake option `EXTERNALS_AS_SYSTEM` to treat external includes as `SYSTEM` ones (#5386) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Although these files are part of our repo changes are being done via their original projects so it might make sense to treat these as system includes for some people instead of local ones. Co-authored-by: Daniel Marjamäki --- cli/CMakeLists.txt | 8 ++++---- cmake/compileroptions.cmake | 8 ++++++++ cmake/options.cmake | 2 ++ cmake/printInfo.cmake | 2 ++ gui/CMakeLists.txt | 2 +- gui/test/filelist/CMakeLists.txt | 3 ++- lib/CMakeLists.txt | 8 ++++---- releasenotes.txt | 2 +- test/CMakeLists.txt | 4 ++-- tools/CMakeLists.txt | 3 ++- 10 files changed, 28 insertions(+), 14 deletions(-) diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index 0221817d929..728062ccdb3 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -6,11 +6,11 @@ list(REMOVE_ITEM srcs ${mainfile}) add_library(cli_objs OBJECT ${hdrs} ${srcs}) target_include_directories(cli_objs PRIVATE ${PROJECT_SOURCE_DIR}/lib/) if(USE_BUNDLED_TINYXML2) - target_include_directories(cli_objs PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2/) + target_externals_include_directories(cli_objs PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2/) else() target_include_directories(cli_objs SYSTEM PRIVATE ${tinyxml2_INCLUDE_DIRS}) endif() -target_include_directories(cli_objs PRIVATE ${PROJECT_SOURCE_DIR}/externals/simplecpp/) +target_externals_include_directories(cli_objs PRIVATE ${PROJECT_SOURCE_DIR}/externals/simplecpp/) if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS) target_precompile_headers(cli_objs PRIVATE precompiled.h) endif() @@ -38,11 +38,11 @@ endif() add_executable(cppcheck ${cppcheck_SOURCES}) target_include_directories(cppcheck PRIVATE ${PROJECT_SOURCE_DIR}/lib/) if(USE_BUNDLED_TINYXML2) - target_include_directories(cppcheck PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2/) + target_externals_include_directories(cppcheck PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2/) else() target_include_directories(cppcheck SYSTEM PRIVATE ${tinyxml2_INCLUDE_DIRS}) endif() -target_include_directories(cppcheck PRIVATE ${PROJECT_SOURCE_DIR}/externals/simplecpp/) +target_externals_include_directories(cppcheck PRIVATE ${PROJECT_SOURCE_DIR}/externals/simplecpp/) if (HAVE_RULES) target_link_libraries(cppcheck ${PCRE_LIBRARY}) endif() diff --git a/cmake/compileroptions.cmake b/cmake/compileroptions.cmake index 5d4f67b1b54..23c51be4f90 100644 --- a/cmake/compileroptions.cmake +++ b/cmake/compileroptions.cmake @@ -16,6 +16,14 @@ function(target_compile_options_safe TARGET FLAG) endif() endfunction() +function(target_externals_include_directories TARGET) + if (EXTERNALS_AS_SYSTEM) + target_include_directories(${TARGET} SYSTEM ${ARGN}) + else() + target_include_directories(${TARGET} ${ARGN}) + endif() +endfunction() + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Weverything) endif() diff --git a/cmake/options.cmake b/cmake/options.cmake index 00b639de796..8083532d08a 100644 --- a/cmake/options.cmake +++ b/cmake/options.cmake @@ -17,7 +17,9 @@ option(ANALYZE_ADDRESS "Clang dynamic analyzer: fast memory error detector. option(ANALYZE_THREAD "Clang dynamic analyzer: tool that detects data races. " OFF) option(ANALYZE_UNDEFINED "Clang dynamic analyzer: undefined behavior checker. " OFF) option(ANALYZE_DATAFLOW "Clang dynamic analyzer: general dynamic dataflow analysis." OFF) + option(WARNINGS_ARE_ERRORS "Treat warnings as errors" OFF) +option(EXTERNALS_AS_SYSTEM "Treat externals as system includes" OFF) set(USE_MATCHCOMPILER "Auto" CACHE STRING "Usage of match compiler") set_property(CACHE USE_MATCHCOMPILER PROPERTY STRINGS Auto Off On Verify) diff --git a/cmake/printInfo.cmake b/cmake/printInfo.cmake index edef367f799..3ccc78db542 100644 --- a/cmake/printInfo.cmake +++ b/cmake/printInfo.cmake @@ -25,7 +25,9 @@ message( STATUS "ANALYZE_ADDRESS = ${ANALYZE_ADDRESS}" ) message( STATUS "ANALYZE_THREAD = ${ANALYZE_THREAD}" ) message( STATUS "ANALYZE_UNDEFINED = ${ANALYZE_UNDEFINED}" ) message( STATUS "ANALYZE_DATAFLOW = ${ANALYZE_DATAFLOW}" ) +message( STATUS ) message( STATUS "WARNINGS_ARE_ERRORS = ${WARNINGS_ARE_ERRORS}" ) +message( STATUS "EXTERNALS_AS_SYSTEM = ${EXTERNALS_AS_SYSTEM}" ) message( STATUS ) message( STATUS "USE_MATCHCOMPILER = ${USE_MATCHCOMPILER}" ) message( STATUS "USE_MATCHCOMPILER_OPT = ${USE_MATCHCOMPILER_OPT}" ) diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index d7fb059111b..31fe62eaf64 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -38,7 +38,7 @@ CheckOptions: set_target_properties(cppcheck-gui PROPERTIES WIN32_EXECUTABLE ON) target_include_directories(cppcheck-gui PRIVATE ${PROJECT_SOURCE_DIR}/lib/) if(USE_BUNDLED_TINYXML2) - target_include_directories(cppcheck-gui PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2/) + target_externals_include_directories(cppcheck-gui PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2/) else() target_include_directories(cppcheck-gui SYSTEM PRIVATE ${tinyxml2_INCLUDE_DIRS}) endif() diff --git a/gui/test/filelist/CMakeLists.txt b/gui/test/filelist/CMakeLists.txt index 5b3413a1493..4131b3316e6 100644 --- a/gui/test/filelist/CMakeLists.txt +++ b/gui/test/filelist/CMakeLists.txt @@ -10,7 +10,8 @@ add_executable(test-filelist ${CMAKE_SOURCE_DIR}/lib/utils.cpp $ ) -target_include_directories(test-filelist PRIVATE ${CMAKE_SOURCE_DIR}/gui ${CMAKE_SOURCE_DIR}/lib ${CMAKE_SOURCE_DIR}/externals/simplecpp) +target_include_directories(test-filelist PRIVATE ${CMAKE_SOURCE_DIR}/gui ${CMAKE_SOURCE_DIR}/lib) +target_externals_include_directories(test-filelist PRIVATE ${CMAKE_SOURCE_DIR}/externals/simplecpp) target_compile_definitions(test-filelist PRIVATE SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}") target_link_libraries(test-filelist ${QT_CORE_LIB} ${QT_TEST_LIB}) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index bd0a77ddeda..cd08c0e429a 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -43,14 +43,14 @@ if (BUILD_CORE_DLL) else() add_library(cppcheck-core OBJECT ${srcs_lib} ${hdrs}) endif() -target_include_directories(cppcheck-core PRIVATE ${PROJECT_SOURCE_DIR}/externals/) +target_externals_include_directories(cppcheck-core PRIVATE ${PROJECT_SOURCE_DIR}/externals/) if(USE_BUNDLED_TINYXML2) - target_include_directories(cppcheck-core PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2/) + target_externals_include_directories(cppcheck-core PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2/) else() target_include_directories(cppcheck-core SYSTEM PRIVATE ${tinyxml2_INCLUDE_DIRS}) endif() -target_include_directories(cppcheck-core PRIVATE ${PROJECT_SOURCE_DIR}/externals/picojson/) -target_include_directories(cppcheck-core PRIVATE ${PROJECT_SOURCE_DIR}/externals/simplecpp/) +target_externals_include_directories(cppcheck-core PRIVATE ${PROJECT_SOURCE_DIR}/externals/picojson/) +target_externals_include_directories(cppcheck-core PRIVATE ${PROJECT_SOURCE_DIR}/externals/simplecpp/) if (HAVE_RULES) target_include_directories(cppcheck-core SYSTEM PRIVATE ${PCRE_INCLUDE}) endif() diff --git a/releasenotes.txt b/releasenotes.txt index 0db51f000bf..887223c857b 100644 --- a/releasenotes.txt +++ b/releasenotes.txt @@ -16,4 +16,4 @@ Deprecations: - Other: -- +- Added CMake option 'EXTERNALS_AS_SYSTEM' to treat external includes as 'SYSTEM' ones. diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index e99afca4e8b..26d76976e4d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -12,11 +12,11 @@ if (BUILD_TESTS) add_executable(testrunner ${testrunner_SOURCES}) target_include_directories(testrunner PRIVATE ${PROJECT_SOURCE_DIR}/lib/ ${PROJECT_SOURCE_DIR}/cli/) if(USE_BUNDLED_TINYXML2) - target_include_directories(testrunner PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2) + target_externals_include_directories(testrunner PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2) else() target_include_directories(testrunner SYSTEM PRIVATE ${tinyxml2_INCLUDE_DIRS}) endif() - target_include_directories(testrunner PRIVATE ${PROJECT_SOURCE_DIR}/externals/simplecpp/) + target_externals_include_directories(testrunner PRIVATE ${PROJECT_SOURCE_DIR}/externals/simplecpp/) if (HAVE_RULES) target_link_libraries(testrunner ${PCRE_LIBRARY}) endif() diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index ce5eb2821df..4f9ea9d7007 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -17,7 +17,8 @@ add_executable(dmake EXCLUDE_FROM_ALL ${CMAKE_SOURCE_DIR}/lib/utils.cpp $ ) -target_include_directories(dmake PRIVATE ${CMAKE_SOURCE_DIR}/cli ${CMAKE_SOURCE_DIR}/lib ${CMAKE_SOURCE_DIR}/externals/simplecpp) +target_include_directories(dmake PRIVATE ${CMAKE_SOURCE_DIR}/cli ${CMAKE_SOURCE_DIR}/lib) +target_externals_include_directories(dmake PRIVATE ${CMAKE_SOURCE_DIR}/externals/simplecpp) if (WIN32 AND NOT BORLAND) if(NOT MINGW) target_link_libraries(dmake Shlwapi.lib)