From a72f0e8486b5b95d4c21c6d8134addaed501c931 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 9 Jul 2025 11:56:40 -0500 Subject: [PATCH 01/24] CMake cleanup --- CMakeLists.txt | 1 + cli/CMakeLists.txt | 40 +++++------------------------ cmake/compileroptions.cmake | 7 +++++ cmake/findDependencies.cmake | 6 +++-- externals/simplecpp/CMakeLists.txt | 10 ++++---- externals/tinyxml2/CMakeLists.txt | 22 ++++++++-------- frontend/CMakeLists.txt | 5 ++-- gui/CMakeLists.txt | 24 +++-------------- gui/test/xmlreportv2/CMakeLists.txt | 12 +-------- lib/CMakeLists.txt | 23 +++++++---------- test/CMakeLists.txt | 23 ++--------------- tools/dmake/CMakeLists.txt | 17 +----------- 12 files changed, 53 insertions(+), 137 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a99ce95e6ae..28fd19ace84 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -100,6 +100,7 @@ if(USE_BUNDLED_TINYXML2) add_subdirectory(externals/tinyxml2) endif() add_subdirectory(externals/simplecpp) +add_subdirectory(externals/picojson) add_subdirectory(lib) # CppCheck Library add_subdirectory(frontend) add_subdirectory(cli) # Client application diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index 8ea47196350..4283d62924a 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -5,20 +5,11 @@ if (BUILD_CLI) file(GLOB mainfile "main.cpp") list(REMOVE_ITEM srcs ${mainfile}) - add_library(cli_objs OBJECT ${hdrs} ${srcs}) - target_include_directories(cli_objs PRIVATE ${PROJECT_SOURCE_DIR}/lib/ ${PROJECT_SOURCE_DIR}/frontend/) - if(USE_BUNDLED_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_externals_include_directories(cli_objs PRIVATE ${PROJECT_SOURCE_DIR}/externals/picojson/) - target_externals_include_directories(cli_objs PRIVATE ${PROJECT_SOURCE_DIR}/externals/simplecpp/) + add_library(cli ${hdrs} ${srcs}) + target_include_directories(cli PUBLIC .) + target_link_libraries(cli PRIVATE cppcheck-core frontend tinyxml2 simplecpp picojson) if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS) - target_precompile_headers(cli_objs PRIVATE precompiled.h) - endif() - if (BUILD_CORE_DLL) - target_compile_definitions(cli_objs PRIVATE CPPCHECKLIB_IMPORT TINYXML2_IMPORT) + target_precompile_headers(cli PRIVATE precompiled.h) endif() if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 13) @@ -26,26 +17,13 @@ if (BUILD_CLI) set_source_files_properties(processexecutor.cpp PROPERTIES COMPILE_FLAGS -Wno-reserved-identifier) endif() - list(APPEND cppcheck_SOURCES ${hdrs} ${mainfile} $ $) - if (NOT BUILD_CORE_DLL) - list(APPEND cppcheck_SOURCES $) - list(APPEND cppcheck_SOURCES $) - if(USE_BUNDLED_TINYXML2) - list(APPEND cppcheck_SOURCES $) - endif() - endif() + list(APPEND cppcheck_SOURCES ${hdrs} ${mainfile}) if (WIN32) list(APPEND cppcheck_SOURCES version.rc) endif() add_executable(cppcheck ${cppcheck_SOURCES}) - target_include_directories(cppcheck PRIVATE ${PROJECT_SOURCE_DIR}/lib/) - if(USE_BUNDLED_TINYXML2) - target_externals_include_directories(cppcheck PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2/) - else() - target_include_directories(cppcheck SYSTEM PRIVATE ${tinyxml2_INCLUDE_DIRS}) - endif() - target_externals_include_directories(cppcheck PRIVATE ${PROJECT_SOURCE_DIR}/externals/simplecpp/) + target_link_libraries(cppcheck PRIVATE cppcheck-core cli tinyxml2 simplecpp) if (HAVE_RULES) target_link_libraries(cppcheck ${PCRE_LIBRARY}) endif() @@ -56,13 +34,7 @@ if (BUILD_CLI) target_link_libraries(cppcheck shlwapi) endif() endif() - if(tinyxml2_FOUND AND NOT USE_BUNDLED_TINYXML2) - target_link_libraries(cppcheck ${tinyxml2_LIBRARIES}) - endif() target_link_libraries(cppcheck ${CMAKE_THREAD_LIBS_INIT}) - if (BUILD_CORE_DLL) - target_link_libraries(cppcheck cppcheck-core) - endif() add_dependencies(cppcheck copy_cfg) add_dependencies(cppcheck copy_addons) diff --git a/cmake/compileroptions.cmake b/cmake/compileroptions.cmake index ada39cea21f..b59422c0c75 100644 --- a/cmake/compileroptions.cmake +++ b/cmake/compileroptions.cmake @@ -24,6 +24,13 @@ function(target_externals_include_directories TARGET) endif() endfunction() +function(target_dll_compile_definitions TARGET EXPORT IMPORT) + if (BUILD_SHARED_LIBS AND MSVC) + target_compile_definitions(simplecpp_objs PRIVATE ${EXPORT}) + target_compile_definitions(simplecpp_objs INTERFACE ${IMPORT}) + endif() +endfunction() + if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Weverything) endif() diff --git a/cmake/findDependencies.cmake b/cmake/findDependencies.cmake index 1cca94ff6c8..9cc9ee8cab7 100644 --- a/cmake/findDependencies.cmake +++ b/cmake/findDependencies.cmake @@ -67,10 +67,10 @@ else() endif() if(NOT USE_BUNDLED_TINYXML2) + add_library(tinyxml2 INTERFACE) find_package(tinyxml2 QUIET) if(TARGET tinyxml2::tinyxml2) - set(tinyxml2_LIBRARIES "tinyxml2::tinyxml2") - set(tinyxml2_INCLUDE_DIRS $) + target_link_libraries(tinyxml2 INTERFACE tinyxml2::tinyxml2) else() find_library(tinyxml2_LIBRARIES tinyxml2) find_path(tinyxml2_INCLUDE_DIRS tinyxml2.h) @@ -79,6 +79,8 @@ if(NOT USE_BUNDLED_TINYXML2) else() set(tinyxml2_FOUND 1) endif() + target_link_libraries(tinyxml2 INTERFACE ${tinyxml2_LIBRARIES}) + target_include_directories(tinyxml2 INTERFACE ${tinyxml2_INCLUDE_DIRS}) endif() endif() diff --git a/externals/simplecpp/CMakeLists.txt b/externals/simplecpp/CMakeLists.txt index 18430fea55e..dfc0e03a838 100644 --- a/externals/simplecpp/CMakeLists.txt +++ b/externals/simplecpp/CMakeLists.txt @@ -1,11 +1,11 @@ file(GLOB hdrs "*.h") file(GLOB srcs "*.cpp") -add_library(simplecpp_objs OBJECT ${srcs} ${hdrs}) -if (BUILD_CORE_DLL) - target_compile_definitions(simplecpp_objs PRIVATE SIMPLECPP_EXPORT) -endif() +add_library(simplecpp ${srcs} ${hdrs}) +target_dll_compile_definitions(simplecpp SIMPLECPP_EXPORT SIMPLECPP_IMPORT) if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - target_compile_options_safe(simplecpp_objs -Wno-zero-as-null-pointer-constant) + target_compile_options_safe(simplecpp -Wno-zero-as-null-pointer-constant) endif() + +target_include_directories(simplecpp PUBLIC .) diff --git a/externals/tinyxml2/CMakeLists.txt b/externals/tinyxml2/CMakeLists.txt index f1e7adaa01a..f1293930049 100644 --- a/externals/tinyxml2/CMakeLists.txt +++ b/externals/tinyxml2/CMakeLists.txt @@ -1,24 +1,24 @@ file(GLOB hdrs "*.h") file(GLOB srcs "*.cpp") -add_library(tinyxml2_objs OBJECT ${srcs} ${hdrs}) -if (BUILD_CORE_DLL) - target_compile_definitions(tinyxml2_objs PRIVATE TINYXML2_EXPORT) -endif() +add_library(tinyxml2 ${srcs} ${hdrs}) +target_dll_compile_definitions(tinyxml2 TINYXML2_EXPORT TINYXML2_IMPORT) # TODO: needs to be fixed upstream if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - target_compile_options(tinyxml2_objs PRIVATE -Wno-suggest-attribute=format) - target_compile_options(tinyxml2_objs PRIVATE -Wno-useless-cast) + target_compile_options(tinyxml2 PRIVATE -Wno-suggest-attribute=format) + target_compile_options(tinyxml2 PRIVATE -Wno-useless-cast) endif() if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - target_compile_options_safe(tinyxml2_objs -Wno-implicit-fallthrough) - target_compile_options_safe(tinyxml2_objs -Wno-suggest-destructor-override) - target_compile_options_safe(tinyxml2_objs -Wno-zero-as-null-pointer-constant) - target_compile_options_safe(tinyxml2_objs -Wno-format-nonliteral) - target_compile_options_safe(tinyxml2_objs -Wno-inconsistent-missing-destructor-override) + target_compile_options_safe(tinyxml2 -Wno-implicit-fallthrough) + target_compile_options_safe(tinyxml2 -Wno-suggest-destructor-override) + target_compile_options_safe(tinyxml2 -Wno-zero-as-null-pointer-constant) + target_compile_options_safe(tinyxml2 -Wno-format-nonliteral) + target_compile_options_safe(tinyxml2 -Wno-inconsistent-missing-destructor-override) endif() if(CYGWIN) target_compile_definitions(-D_LARGEFILE_SOURCE) # required for fseeko() and ftello() endif() +target_include_directories(tinyxml2 PUBLIC .) + diff --git a/frontend/CMakeLists.txt b/frontend/CMakeLists.txt index e5e64bfe85b..12bd2a949c6 100644 --- a/frontend/CMakeLists.txt +++ b/frontend/CMakeLists.txt @@ -1,5 +1,6 @@ file(GLOB hdrs "*.h") file(GLOB srcs "*.cpp") -add_library(frontend_objs OBJECT ${hdrs} ${srcs}) -target_include_directories(frontend_objs PRIVATE ${PROJECT_SOURCE_DIR}/lib) \ No newline at end of file +add_library(frontend OBJECT ${hdrs} ${srcs}) +target_include_directories(frontend PUBLIC .) +target_link_libraries(frontend PRIVATE cppcheck-core) diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 143f96620b9..c53bbff1a96 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -20,44 +20,26 @@ CheckOptions: list(APPEND cppcheck-gui-deps ${hdrs} ${uis_hdrs} ${resources} ${qms}) add_custom_target(gui-build-deps SOURCES ${cppcheck-gui-deps}) - list(APPEND cppcheck-gui_SOURCES ${srcs} $) - if (NOT BUILD_CORE_DLL) - list(APPEND cppcheck-gui_SOURCES $ $) - if(USE_BUNDLED_TINYXML2) - list(APPEND cppcheck-gui_SOURCES $) - endif() - endif() + list(APPEND cppcheck-gui_SOURCES ${srcs}) if (WIN32) list(APPEND cppcheck-gui_SOURCES cppcheck-gui.rc) endif() add_executable(cppcheck-gui ${cppcheck-gui-deps} ${cppcheck-gui_SOURCES}) + target_link_libraries(frontend_objs cppcheck-core simplecpp tinyxml2 picojson) + set_target_properties(cppcheck-gui PROPERTIES AUTOMOC ON) set_target_properties(cppcheck-gui PROPERTIES WIN32_EXECUTABLE ON) - target_include_directories(cppcheck-gui PRIVATE ${PROJECT_SOURCE_DIR}/lib/ ${PROJECT_SOURCE_DIR}/frontend/) - if(USE_BUNDLED_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() - target_include_directories(cppcheck-gui PRIVATE ${PROJECT_SOURCE_DIR}/externals/picojson/) if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS) target_precompile_headers(cppcheck-gui PRIVATE precompiled.h) endif() if (HAVE_RULES) target_link_libraries(cppcheck-gui ${PCRE_LIBRARY}) endif() - if(tinyxml2_FOUND AND NOT USE_BUNDLED_TINYXML2) - target_link_libraries(cppcheck-gui ${tinyxml2_LIBRARIES}) - endif() target_link_libraries(cppcheck-gui ${QT_CORE_LIB} ${QT_GUI_LIB} ${QT_WIDGETS_LIB} ${QT_PRINTSUPPORT_LIB} ${QT_HELP_LIB} ${QT_NETWORK_LIB}) if(WITH_QCHART) target_link_libraries(cppcheck-gui ${QT_CHARTS_LIB}) endif() - if (BUILD_CORE_DLL) - target_compile_definitions(cppcheck-gui PRIVATE CPPCHECKLIB_IMPORT TINYXML2_IMPORT) - target_link_libraries(cppcheck-gui cppcheck-core) - endif() if(MSVC) # compilation will fail as e.g. QList::realloc would be replaced by MSVC's macro definition target_compile_definitions(cppcheck-gui PRIVATE $<$:DISABLE_CRTDBG_MAP_ALLOC>) diff --git a/gui/test/xmlreportv2/CMakeLists.txt b/gui/test/xmlreportv2/CMakeLists.txt index 180101930cf..c6ad4f51eae 100644 --- a/gui/test/xmlreportv2/CMakeLists.txt +++ b/gui/test/xmlreportv2/CMakeLists.txt @@ -1,12 +1,6 @@ qt_wrap_cpp(test-xmlreportv2_SRC testxmlreportv2.h) add_custom_target(build-xmlreportv2-deps SOURCES ${test-xmlreportv2_SRC}) add_dependencies(gui-build-deps build-xmlreportv2-deps) -if (NOT BUILD_CORE_DLL) - list(APPEND test-xmlreportv2_SRC $ $) - if(USE_BUNDLED_TINYXML2) - list(APPEND test-xmlreportv2_SRC $) - endif() -endif() add_executable(test-xmlreportv2 ${test-xmlreportv2_SRC} testxmlreportv2.cpp @@ -17,17 +11,13 @@ add_executable(test-xmlreportv2 ) target_include_directories(test-xmlreportv2 PRIVATE ${CMAKE_SOURCE_DIR}/gui ${CMAKE_SOURCE_DIR}/lib) target_compile_definitions(test-xmlreportv2 PRIVATE SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}") -target_link_libraries(test-xmlreportv2 ${QT_CORE_LIB} ${QT_TEST_LIB}) +target_link_libraries(test-xmlreportv2 ${QT_CORE_LIB} ${QT_TEST_LIB} cppcheck-core) if (HAVE_RULES) target_link_libraries(test-xmlreportv2 ${PCRE_LIBRARY}) endif() if(tinyxml2_FOUND AND NOT USE_BUNDLED_TINYXML2) target_link_libraries(test-xmlreportv2 ${tinyxml2_LIBRARIES}) endif() -if (BUILD_CORE_DLL) - target_compile_definitions(test-xmlreportv2 PRIVATE CPPCHECKLIB_IMPORT TINYXML2_IMPORT) - target_link_libraries(test-xmlreportv2 cppcheck-core) -endif() if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") if(QT_VERSION VERSION_LESS "6.0.0") # Q_UNUSED() in generated code - see https://bugreports.qt.io/browse/QTBUG-82978 diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 7a884164761..1dad3095848 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -37,25 +37,20 @@ else() set(srcs_lib ${srcs}) endif() -if (BUILD_CORE_DLL) - add_library(cppcheck-core SHARED ${srcs_lib} ${hdrs} $ $ version.rc) - target_compile_definitions(cppcheck-core PRIVATE CPPCHECKLIB_EXPORT TINYXML2_EXPORT SIMPLECPP_EXPORT) -else() - add_library(cppcheck-core OBJECT ${srcs_lib} ${hdrs}) -endif() -target_externals_include_directories(cppcheck-core PRIVATE ${PROJECT_SOURCE_DIR}/externals/) -if(USE_BUNDLED_TINYXML2) - target_externals_include_directories(cppcheck-core PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2/) -else() - target_include_directories(cppcheck-core SYSTEM PRIVATE ${tinyxml2_INCLUDE_DIRS}) +add_library(cppcheck-core ${srcs_lib} ${hdrs}) +target_dll_compile_definitions(simplecpp_objs CPPCHECKLIB_EXPORT CPPCHECKLIB_IMPORT) +if (BUILD_SHARED_LIBS AND MSVC) + target_sources(cppcheck-core PRIVATE version.rc) endif() -target_externals_include_directories(cppcheck-core PRIVATE ${PROJECT_SOURCE_DIR}/externals/picojson/) -target_externals_include_directories(cppcheck-core PRIVATE ${PROJECT_SOURCE_DIR}/externals/simplecpp/) + +target_include_directories(cppcheck-core PUBLIC .) +target_link_libraries(cppcheck-core PRIVATE tinyxml2 simplecpp picojson) + if (HAVE_RULES) target_include_directories(cppcheck-core SYSTEM PRIVATE ${PCRE_INCLUDE}) endif() if (Boost_FOUND) - target_include_directories(cppcheck-core SYSTEM PRIVATE ${Boost_INCLUDE_DIRS}) + target_include_directories(cppcheck-core SYSTEM PUBLIC ${Boost_INCLUDE_DIRS}) endif() if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 0155cd15e80..c2659a941f8 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -4,22 +4,10 @@ if (BUILD_TESTS) file(GLOB hdrs "*.h") file(GLOB srcs "*.cpp") - list(APPEND testrunner_SOURCES ${hdrs} ${srcs} $ $) - if (NOT BUILD_CORE_DLL) - list(APPEND testrunner_SOURCES $ $) - if(USE_BUNDLED_TINYXML2) - list(APPEND testrunner_SOURCES $) - endif() - endif() + list(APPEND testrunner_SOURCES ${hdrs} ${srcs}) add_executable(testrunner ${testrunner_SOURCES}) - target_include_directories(testrunner PRIVATE ${PROJECT_SOURCE_DIR}/lib/ ${PROJECT_SOURCE_DIR}/cli/ ${PROJECT_SOURCE_DIR}/frontend/) - if(USE_BUNDLED_TINYXML2) - target_externals_include_directories(testrunner PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2) - else() - target_include_directories(testrunner SYSTEM PRIVATE ${tinyxml2_INCLUDE_DIRS}) - endif() - target_externals_include_directories(testrunner PRIVATE ${PROJECT_SOURCE_DIR}/externals/simplecpp/) + target_link_libraries(testrunner cppcheck-core tinyxml2 simplecpp frontend cli) if (HAVE_RULES) target_link_libraries(testrunner ${PCRE_LIBRARY}) endif() @@ -30,14 +18,7 @@ if (BUILD_TESTS) target_link_libraries(testrunner shlwapi) endif() endif() - if(tinyxml2_FOUND AND NOT USE_BUNDLED_TINYXML2) - target_link_libraries(testrunner ${tinyxml2_LIBRARIES}) - endif() target_link_libraries(testrunner ${CMAKE_THREAD_LIBS_INIT}) - if (BUILD_CORE_DLL) - target_compile_definitions(testrunner PRIVATE CPPCHECKLIB_IMPORT SIMPLECPP_IMPORT) - target_link_libraries(testrunner cppcheck-core) - endif() if (CMAKE_CXX_COMPILER_ID MATCHES "GNU") # (void) in ASSERT_THROW* macros might trigger this target_compile_options_safe(testrunner -Wno-useless-cast) diff --git a/tools/dmake/CMakeLists.txt b/tools/dmake/CMakeLists.txt index 5af693eb179..cbe7040ef2f 100644 --- a/tools/dmake/CMakeLists.txt +++ b/tools/dmake/CMakeLists.txt @@ -1,23 +1,8 @@ -# TODO: when using ccache and matchcompiler this will accessed before the file was generated and thus the build fails -set(srcs_lib pathmatch.cpp path.cpp utils.cpp) -foreach(file ${srcs_lib}) - if (NOT USE_MATCHCOMPILER_OPT STREQUAL "Off") - set(src "${CMAKE_BINARY_DIR}/lib/build/mc_${file}") - set_source_files_properties(${src} PROPERTIES GENERATED TRUE) - else() - set(src "${CMAKE_SOURCE_DIR}/lib/${file}") - endif() - set(srcs_tools ${srcs_tools} ${src}) -endforeach() add_executable(dmake EXCLUDE_FROM_ALL dmake.cpp - ${CMAKE_SOURCE_DIR}/cli/filelister.cpp - ${srcs_tools} - $ ) -target_include_directories(dmake PRIVATE ${CMAKE_SOURCE_DIR}/cli ${CMAKE_SOURCE_DIR}/lib) -target_externals_include_directories(dmake PRIVATE ${CMAKE_SOURCE_DIR}/externals/simplecpp) +target_link_libraries(dmake cppcheck-core cli simplecpp) if (WIN32 AND NOT BORLAND) if(NOT MINGW) target_link_libraries(dmake Shlwapi.lib) From 753650008f15fedef2077826c0cddfdb5e301582 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 9 Jul 2025 12:01:13 -0500 Subject: [PATCH 02/24] Add missing cmake file --- externals/picojson/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 externals/picojson/CMakeLists.txt diff --git a/externals/picojson/CMakeLists.txt b/externals/picojson/CMakeLists.txt new file mode 100644 index 00000000000..cf599375f16 --- /dev/null +++ b/externals/picojson/CMakeLists.txt @@ -0,0 +1,4 @@ + +add_library(picojson INTERFACE) +target_include_directories(picojson INTERFACE .) + From 9524828da9d5952129fe40b27c43e526c8574e5f Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 9 Jul 2025 12:01:53 -0500 Subject: [PATCH 03/24] Fix cmake --- gui/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index c53bbff1a96..e6b60cc40c7 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -26,7 +26,7 @@ CheckOptions: endif() add_executable(cppcheck-gui ${cppcheck-gui-deps} ${cppcheck-gui_SOURCES}) - target_link_libraries(frontend_objs cppcheck-core simplecpp tinyxml2 picojson) + target_link_libraries(cppcheck-gui cppcheck-core simplecpp tinyxml2 picojson) set_target_properties(cppcheck-gui PROPERTIES AUTOMOC ON) set_target_properties(cppcheck-gui PROPERTIES WIN32_EXECUTABLE ON) From aae3fa0c8f620c7484a740cebcaa5fe86a5aab1c Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 9 Jul 2025 12:02:32 -0500 Subject: [PATCH 04/24] Consistent link libraries --- cli/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index 4283d62924a..c3a82548226 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -23,7 +23,7 @@ if (BUILD_CLI) endif() add_executable(cppcheck ${cppcheck_SOURCES}) - target_link_libraries(cppcheck PRIVATE cppcheck-core cli tinyxml2 simplecpp) + target_link_libraries(cppcheck cppcheck-core cli tinyxml2 simplecpp) if (HAVE_RULES) target_link_libraries(cppcheck ${PCRE_LIBRARY}) endif() From e5f8f8ccb1e7b9f44728ebf238ac6cf9c1e5105d Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 9 Jul 2025 15:06:07 -0500 Subject: [PATCH 05/24] Use object library --- cmake/compileroptions.cmake | 21 +++++++++++++++++--- externals/simplecpp/CMakeLists.txt | 2 +- externals/tinyxml2/CMakeLists.txt | 2 +- lib/CMakeLists.txt | 31 +++++++++++++++++++++++------- 4 files changed, 44 insertions(+), 12 deletions(-) diff --git a/cmake/compileroptions.cmake b/cmake/compileroptions.cmake index b59422c0c75..1c05e627da8 100644 --- a/cmake/compileroptions.cmake +++ b/cmake/compileroptions.cmake @@ -24,10 +24,25 @@ function(target_externals_include_directories TARGET) endif() endfunction() -function(target_dll_compile_definitions TARGET EXPORT IMPORT) +function(target_dll_compile_definitions TARGET) + set(options) + set(oneValueArgs IMPORT EXPORT) + set(multiValueArgs) + + cmake_parse_arguments(PARSE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + if(PARSE_UNPARSED_ARGUMENTS) + message( + FATAL_ERROR "Unknown keywords given to target_dll_compile_definitions(): \"${PARSE_UNPARSED_ARGUMENTS}\"") + endif() + + if (BUILD_SHARED_LIBS AND MSVC) - target_compile_definitions(simplecpp_objs PRIVATE ${EXPORT}) - target_compile_definitions(simplecpp_objs INTERFACE ${IMPORT}) + if(PARSE_EXPORT) + target_compile_definitions(simplecpp_objs PRIVATE ${PARSE_EXPORT}) + endif() + if(PARSE_IMPORT) + target_compile_definitions(simplecpp_objs INTERFACE ${PARSE_IMPORT}) + endif() endif() endfunction() diff --git a/externals/simplecpp/CMakeLists.txt b/externals/simplecpp/CMakeLists.txt index dfc0e03a838..820add0963d 100644 --- a/externals/simplecpp/CMakeLists.txt +++ b/externals/simplecpp/CMakeLists.txt @@ -2,7 +2,7 @@ file(GLOB hdrs "*.h") file(GLOB srcs "*.cpp") add_library(simplecpp ${srcs} ${hdrs}) -target_dll_compile_definitions(simplecpp SIMPLECPP_EXPORT SIMPLECPP_IMPORT) +target_dll_compile_definitions(simplecpp EXPORT SIMPLECPP_EXPORT IMPORT SIMPLECPP_IMPORT) if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") target_compile_options_safe(simplecpp -Wno-zero-as-null-pointer-constant) diff --git a/externals/tinyxml2/CMakeLists.txt b/externals/tinyxml2/CMakeLists.txt index f1293930049..126d2cc2d82 100644 --- a/externals/tinyxml2/CMakeLists.txt +++ b/externals/tinyxml2/CMakeLists.txt @@ -2,7 +2,7 @@ file(GLOB hdrs "*.h") file(GLOB srcs "*.cpp") add_library(tinyxml2 ${srcs} ${hdrs}) -target_dll_compile_definitions(tinyxml2 TINYXML2_EXPORT TINYXML2_IMPORT) +target_dll_compile_definitions(tinyxml2 EXPORT TINYXML2_EXPORT IMPORT TINYXML2_IMPORT) # TODO: needs to be fixed upstream if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 1dad3095848..3f91763cbbc 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -37,22 +37,39 @@ else() set(srcs_lib ${srcs}) endif() -add_library(cppcheck-core ${srcs_lib} ${hdrs}) -target_dll_compile_definitions(simplecpp_objs CPPCHECKLIB_EXPORT CPPCHECKLIB_IMPORT) +if(BUILD_SHARED_LIBS) + add_library(cppcheck-core ${srcs_lib} ${hdrs}) + add_library(cppcheck-core-private ALIAS cppcheck-core) +else() + # A OBJECT library is used because the auto-registration doesn't work with static libraries + add_library(cppcheck-core-private OBJECT ${srcs_lib} ${hdrs}) + add_library(cppcheck-core INTERFACE) + target_link_libraries(cppcheck-core INTERFACE $) + add_dependencies(cppcheck-core cppcheck-core-private) +endif() if (BUILD_SHARED_LIBS AND MSVC) target_sources(cppcheck-core PRIVATE version.rc) endif() -target_include_directories(cppcheck-core PUBLIC .) -target_link_libraries(cppcheck-core PRIVATE tinyxml2 simplecpp picojson) +target_dll_compile_definitions(cppcheck-core EXPORT CPPCHECKLIB_EXPORT) +target_dll_compile_definitions(cppcheck-core-private IMPORT CPPCHECKLIB_IMPORT) + +target_include_directories(cppcheck-core INTERFACE .) +foreach(lib tinyxml2 simplecpp picojson) + if (NOT BUILD_SHARED_LIBS) + target_link_libraries(cppcheck-core INTERFACE $) + endif() + target_link_libraries(cppcheck-core-private PRIVATE ${lib}) +endforeach() if (HAVE_RULES) - target_include_directories(cppcheck-core SYSTEM PRIVATE ${PCRE_INCLUDE}) + target_include_directories(cppcheck-core-private SYSTEM PRIVATE ${PCRE_INCLUDE}) endif() if (Boost_FOUND) - target_include_directories(cppcheck-core SYSTEM PUBLIC ${Boost_INCLUDE_DIRS}) + target_include_directories(cppcheck-core SYSTEM INTERFACE ${Boost_INCLUDE_DIRS}) + target_include_directories(cppcheck-core-private SYSTEM PRIVATE ${Boost_INCLUDE_DIRS}) endif() if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS) - target_precompile_headers(cppcheck-core PRIVATE precompiled.h) + target_precompile_headers(cppcheck-core-private PRIVATE precompiled.h) endif() From 599a54e781d81181a9b169c2be021e6d7f41d6d0 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 9 Jul 2025 15:21:25 -0500 Subject: [PATCH 06/24] Use targets --- cmake/compileroptions.cmake | 4 ++-- gui/test/filelist/CMakeLists.txt | 11 +++-------- gui/test/resultstree/CMakeLists.txt | 16 ++-------------- 3 files changed, 7 insertions(+), 24 deletions(-) diff --git a/cmake/compileroptions.cmake b/cmake/compileroptions.cmake index 1c05e627da8..ebab5343d3b 100644 --- a/cmake/compileroptions.cmake +++ b/cmake/compileroptions.cmake @@ -38,10 +38,10 @@ function(target_dll_compile_definitions TARGET) if (BUILD_SHARED_LIBS AND MSVC) if(PARSE_EXPORT) - target_compile_definitions(simplecpp_objs PRIVATE ${PARSE_EXPORT}) + target_compile_definitions(${TARGET} PRIVATE ${PARSE_EXPORT}) endif() if(PARSE_IMPORT) - target_compile_definitions(simplecpp_objs INTERFACE ${PARSE_IMPORT}) + target_compile_definitions(${TARGET} INTERFACE ${PARSE_IMPORT}) endif() endif() endfunction() diff --git a/gui/test/filelist/CMakeLists.txt b/gui/test/filelist/CMakeLists.txt index 09b5fcc29ef..a7c735775cf 100644 --- a/gui/test/filelist/CMakeLists.txt +++ b/gui/test/filelist/CMakeLists.txt @@ -5,15 +5,10 @@ add_executable(test-filelist ${test-filelist_SRC} testfilelist.cpp ${CMAKE_SOURCE_DIR}/gui/filelist.cpp - ${CMAKE_SOURCE_DIR}/lib/pathmatch.cpp - ${CMAKE_SOURCE_DIR}/lib/path.cpp - ${CMAKE_SOURCE_DIR}/lib/utils.cpp - $ ) -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_include_directories(test-filelist PRIVATE ${CMAKE_SOURCE_DIR}/gui) target_compile_definitions(test-filelist PRIVATE SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}") -target_link_libraries(test-filelist ${QT_CORE_LIB} ${QT_TEST_LIB}) +target_link_libraries(test-filelist ${QT_CORE_LIB} ${QT_TEST_LIB} cppcheck-core simplecpp) if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") if(QT_VERSION VERSION_LESS "6.0.0") @@ -30,4 +25,4 @@ if (REGISTER_GUI_TESTS) add_test(NAME test-filelist COMMAND $) endif() -add_dependencies(gui-tests test-filelist) \ No newline at end of file +add_dependencies(gui-tests test-filelist) diff --git a/gui/test/resultstree/CMakeLists.txt b/gui/test/resultstree/CMakeLists.txt index 0d0c8f1634f..a1653608df7 100644 --- a/gui/test/resultstree/CMakeLists.txt +++ b/gui/test/resultstree/CMakeLists.txt @@ -6,10 +6,6 @@ qt_wrap_cpp(test-resultstree_SRC ${CMAKE_SOURCE_DIR}/gui/threadhandler.h ${CMAKE_SOURCE_DIR}/gui/threadresult.h ) -if(USE_BUNDLED_TINYXML2) - list(APPEND test-resultstree_SRC $) -endif() -list(APPEND test-resultstree_SRC $ $) add_custom_target(build-resultstree-deps SOURCES ${test-resultstree_SRC}) add_dependencies(gui-build-deps build-resultstree-deps) add_executable(test-resultstree @@ -21,22 +17,14 @@ add_executable(test-resultstree ${CMAKE_SOURCE_DIR}/gui/report.cpp ${CMAKE_SOURCE_DIR}/gui/xmlreportv2.cpp ) -target_include_directories(test-resultstree PRIVATE ${CMAKE_SOURCE_DIR}/gui ${CMAKE_SOURCE_DIR}/lib) -target_externals_include_directories(test-resultstree PRIVATE ${CMAKE_SOURCE_DIR}/externals/simplecpp) -if(USE_BUNDLED_TINYXML2) - target_externals_include_directories(test-resultstree PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2/) -else() - target_include_directories(test-resultstree SYSTEM PRIVATE ${tinyxml2_INCLUDE_DIRS}) -endif() +target_include_directories(test-resultstree PRIVATE ${CMAKE_SOURCE_DIR}/gui) +target_link_libraries(test-resultstree cppcheck-core simplecpp tinyxml2) if (HAVE_RULES) target_link_libraries(test-resultstree ${PCRE_LIBRARY}) target_include_directories(test-resultstree SYSTEM PRIVATE ${PCRE_INCLUDE}) endif() target_compile_definitions(test-resultstree PRIVATE SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}") target_link_libraries(test-resultstree ${QT_CORE_LIB} ${QT_GUI_LIB} ${QT_WIDGETS_LIB} ${QT_TEST_LIB}) -if(tinyxml2_FOUND AND NOT USE_BUNDLED_TINYXML2) - target_link_libraries(test-resultstree ${tinyxml2_LIBRARIES}) -endif() if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") if(QT_VERSION VERSION_LESS "6.0.0") From 74f853f8631c1a3e76141d07a1d6e0dba25c1dbc Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 9 Jul 2025 17:25:20 -0500 Subject: [PATCH 07/24] Remove const to fix cast --- cli/cppcheckexecutor.cpp | 2 +- externals/picojson/CMakeLists.txt | 2 +- externals/simplecpp/CMakeLists.txt | 2 +- externals/tinyxml2/CMakeLists.txt | 2 +- gui/test/resultstree/CMakeLists.txt | 6 ++++++ gui/test/resultstree/testresultstree.cpp | 10 +++++----- 6 files changed, 15 insertions(+), 9 deletions(-) diff --git a/cli/cppcheckexecutor.cpp b/cli/cppcheckexecutor.cpp index 0e30939a77e..6df1e75bccd 100644 --- a/cli/cppcheckexecutor.cpp +++ b/cli/cppcheckexecutor.cpp @@ -734,7 +734,7 @@ int CppCheckExecutor::executeCommand(std::string exe, std::vector a #ifdef _WIN32 const int res = _pclose(p); #else - const int res = pclose(p); + int res = pclose(p); #endif if (res == -1) { // error occurred // TODO: how to provide to caller? diff --git a/externals/picojson/CMakeLists.txt b/externals/picojson/CMakeLists.txt index cf599375f16..a2696fd703f 100644 --- a/externals/picojson/CMakeLists.txt +++ b/externals/picojson/CMakeLists.txt @@ -1,4 +1,4 @@ add_library(picojson INTERFACE) -target_include_directories(picojson INTERFACE .) +target_include_directories(picojson SYSTEM INTERFACE .) diff --git a/externals/simplecpp/CMakeLists.txt b/externals/simplecpp/CMakeLists.txt index 820add0963d..5c226b2d848 100644 --- a/externals/simplecpp/CMakeLists.txt +++ b/externals/simplecpp/CMakeLists.txt @@ -8,4 +8,4 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") target_compile_options_safe(simplecpp -Wno-zero-as-null-pointer-constant) endif() -target_include_directories(simplecpp PUBLIC .) +target_include_directories(simplecpp SYSTEM PUBLIC .) diff --git a/externals/tinyxml2/CMakeLists.txt b/externals/tinyxml2/CMakeLists.txt index 126d2cc2d82..5a7c942306d 100644 --- a/externals/tinyxml2/CMakeLists.txt +++ b/externals/tinyxml2/CMakeLists.txt @@ -20,5 +20,5 @@ if(CYGWIN) target_compile_definitions(-D_LARGEFILE_SOURCE) # required for fseeko() and ftello() endif() -target_include_directories(tinyxml2 PUBLIC .) +target_include_directories(tinyxml2 SYSTEM PUBLIC .) diff --git a/gui/test/resultstree/CMakeLists.txt b/gui/test/resultstree/CMakeLists.txt index a1653608df7..0d68454280c 100644 --- a/gui/test/resultstree/CMakeLists.txt +++ b/gui/test/resultstree/CMakeLists.txt @@ -39,6 +39,12 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") target_compile_options_safe(test-resultstree -Wno-missing-noreturn) endif() +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + # caused by mocks + target_compile_options_safe(test-resultstree -Wno-suggest-attribute=noreturn) +endif() + + if (REGISTER_GUI_TESTS) # TODO: might crash - see #13223 #add_test(NAME test-resultstree COMMAND $ -platform offscreen) diff --git a/gui/test/resultstree/testresultstree.cpp b/gui/test/resultstree/testresultstree.cpp index 0e595bb5b56..66889aab51d 100644 --- a/gui/test/resultstree/testresultstree.cpp +++ b/gui/test/resultstree/testresultstree.cpp @@ -84,10 +84,10 @@ ThreadHandler::~ThreadHandler() = default; bool ThreadHandler::isChecking() const { return false; } -void ThreadHandler::stop() { +NORETURN void ThreadHandler::stop() { throw 1; } -void ThreadHandler::threadDone() { +NORETURN void ThreadHandler::threadDone() { throw 1; } Application& ApplicationList::getApplication(const int /*unused*/) { @@ -107,13 +107,13 @@ QString XmlReport::unquoteMessage(const QString &message) { return message; } XmlReport::XmlReport(const QString& filename) : Report(filename) {} -void ThreadResult::fileChecked(const QString & /*unused*/) { +NORETURN void ThreadResult::fileChecked(const QString & /*unused*/) { throw 1; } -void ThreadResult::reportOut(const std::string & /*unused*/, Color /*unused*/) { +NORETURN void ThreadResult::reportOut(const std::string & /*unused*/, Color /*unused*/) { throw 1; } -void ThreadResult::reportErr(const ErrorMessage & /*unused*/) { +NORETURN void ThreadResult::reportErr(const ErrorMessage & /*unused*/) { throw 1; } From 91afb23812e1c1bbc642c55213ebaf92931d064f Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 9 Jul 2025 17:28:02 -0500 Subject: [PATCH 08/24] Remove noreturn --- gui/test/resultstree/testresultstree.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/gui/test/resultstree/testresultstree.cpp b/gui/test/resultstree/testresultstree.cpp index 66889aab51d..0e595bb5b56 100644 --- a/gui/test/resultstree/testresultstree.cpp +++ b/gui/test/resultstree/testresultstree.cpp @@ -84,10 +84,10 @@ ThreadHandler::~ThreadHandler() = default; bool ThreadHandler::isChecking() const { return false; } -NORETURN void ThreadHandler::stop() { +void ThreadHandler::stop() { throw 1; } -NORETURN void ThreadHandler::threadDone() { +void ThreadHandler::threadDone() { throw 1; } Application& ApplicationList::getApplication(const int /*unused*/) { @@ -107,13 +107,13 @@ QString XmlReport::unquoteMessage(const QString &message) { return message; } XmlReport::XmlReport(const QString& filename) : Report(filename) {} -NORETURN void ThreadResult::fileChecked(const QString & /*unused*/) { +void ThreadResult::fileChecked(const QString & /*unused*/) { throw 1; } -NORETURN void ThreadResult::reportOut(const std::string & /*unused*/, Color /*unused*/) { +void ThreadResult::reportOut(const std::string & /*unused*/, Color /*unused*/) { throw 1; } -NORETURN void ThreadResult::reportErr(const ErrorMessage & /*unused*/) { +void ThreadResult::reportErr(const ErrorMessage & /*unused*/) { throw 1; } From 00c462ad2d819d786780cbdcddb3ca7a7bff8726 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 9 Jul 2025 17:44:53 -0500 Subject: [PATCH 09/24] Fix pcre linking --- cli/CMakeLists.txt | 3 --- gui/test/xmlreportv2/CMakeLists.txt | 8 +------- lib/CMakeLists.txt | 2 +- test/CMakeLists.txt | 3 --- 4 files changed, 2 insertions(+), 14 deletions(-) diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index c3a82548226..9b4156f14e4 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -24,9 +24,6 @@ if (BUILD_CLI) add_executable(cppcheck ${cppcheck_SOURCES}) target_link_libraries(cppcheck cppcheck-core cli tinyxml2 simplecpp) - if (HAVE_RULES) - target_link_libraries(cppcheck ${PCRE_LIBRARY}) - endif() if (WIN32 AND NOT BORLAND) if(NOT MINGW) target_link_libraries(cppcheck Shlwapi.lib) diff --git a/gui/test/xmlreportv2/CMakeLists.txt b/gui/test/xmlreportv2/CMakeLists.txt index c6ad4f51eae..8249e32f3ea 100644 --- a/gui/test/xmlreportv2/CMakeLists.txt +++ b/gui/test/xmlreportv2/CMakeLists.txt @@ -9,15 +9,9 @@ add_executable(test-xmlreportv2 ${CMAKE_SOURCE_DIR}/gui/xmlreport.cpp ${CMAKE_SOURCE_DIR}/gui/xmlreportv2.cpp ) -target_include_directories(test-xmlreportv2 PRIVATE ${CMAKE_SOURCE_DIR}/gui ${CMAKE_SOURCE_DIR}/lib) +target_include_directories(test-xmlreportv2 PRIVATE ${CMAKE_SOURCE_DIR}/gui) target_compile_definitions(test-xmlreportv2 PRIVATE SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}") target_link_libraries(test-xmlreportv2 ${QT_CORE_LIB} ${QT_TEST_LIB} cppcheck-core) -if (HAVE_RULES) - target_link_libraries(test-xmlreportv2 ${PCRE_LIBRARY}) -endif() -if(tinyxml2_FOUND AND NOT USE_BUNDLED_TINYXML2) - target_link_libraries(test-xmlreportv2 ${tinyxml2_LIBRARIES}) -endif() if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") if(QT_VERSION VERSION_LESS "6.0.0") # Q_UNUSED() in generated code - see https://bugreports.qt.io/browse/QTBUG-82978 diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 3f91763cbbc..37d85eb2822 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -55,7 +55,7 @@ target_dll_compile_definitions(cppcheck-core EXPORT CPPCHECKLIB_EXPORT) target_dll_compile_definitions(cppcheck-core-private IMPORT CPPCHECKLIB_IMPORT) target_include_directories(cppcheck-core INTERFACE .) -foreach(lib tinyxml2 simplecpp picojson) +foreach(lib tinyxml2 simplecpp picojson ${PCRE_LIBRARY}) if (NOT BUILD_SHARED_LIBS) target_link_libraries(cppcheck-core INTERFACE $) endif() diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index c2659a941f8..a31ab810dfe 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -8,9 +8,6 @@ if (BUILD_TESTS) add_executable(testrunner ${testrunner_SOURCES}) target_link_libraries(testrunner cppcheck-core tinyxml2 simplecpp frontend cli) - if (HAVE_RULES) - target_link_libraries(testrunner ${PCRE_LIBRARY}) - endif() if (WIN32 AND NOT BORLAND) if(NOT MINGW) target_link_libraries(testrunner Shlwapi.lib) From 0e7f4029e3bb52a0e0c372603726926a82dff58b Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 9 Jul 2025 17:49:40 -0500 Subject: [PATCH 10/24] Add frontend --- gui/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index e6b60cc40c7..ff412d710fb 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -26,7 +26,7 @@ CheckOptions: endif() add_executable(cppcheck-gui ${cppcheck-gui-deps} ${cppcheck-gui_SOURCES}) - target_link_libraries(cppcheck-gui cppcheck-core simplecpp tinyxml2 picojson) + target_link_libraries(cppcheck-gui cppcheck-core simplecpp tinyxml2 picojson frontend) set_target_properties(cppcheck-gui PROPERTIES AUTOMOC ON) set_target_properties(cppcheck-gui PROPERTIES WIN32_EXECUTABLE ON) From ca5c192d03d4b48a856dfe5a1bd617f6f11302ef Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 9 Jul 2025 18:09:09 -0500 Subject: [PATCH 11/24] Remove SYSTEM --- externals/tinyxml2/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/externals/tinyxml2/CMakeLists.txt b/externals/tinyxml2/CMakeLists.txt index 5a7c942306d..126d2cc2d82 100644 --- a/externals/tinyxml2/CMakeLists.txt +++ b/externals/tinyxml2/CMakeLists.txt @@ -20,5 +20,5 @@ if(CYGWIN) target_compile_definitions(-D_LARGEFILE_SOURCE) # required for fseeko() and ftello() endif() -target_include_directories(tinyxml2 SYSTEM PUBLIC .) +target_include_directories(tinyxml2 PUBLIC .) From be40581acfc7cff081b05c18eced40d66350b0c7 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 9 Jul 2025 18:40:33 -0500 Subject: [PATCH 12/24] Disable precompile headers for now --- lib/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 37d85eb2822..4b66515f55a 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -70,6 +70,6 @@ if (Boost_FOUND) target_include_directories(cppcheck-core-private SYSTEM PRIVATE ${Boost_INCLUDE_DIRS}) endif() -if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS) - target_precompile_headers(cppcheck-core-private PRIVATE precompiled.h) -endif() +# if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS) +# target_precompile_headers(cppcheck-core-private PRIVATE precompiled.h) +# endif() From e6906133bc14597430430dfea1fbacadc62b87e4 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 10 Jul 2025 09:42:10 -0500 Subject: [PATCH 13/24] Remove OBJECT --- frontend/CMakeLists.txt | 2 +- lib/CMakeLists.txt | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/CMakeLists.txt b/frontend/CMakeLists.txt index 12bd2a949c6..17d10bb4f00 100644 --- a/frontend/CMakeLists.txt +++ b/frontend/CMakeLists.txt @@ -1,6 +1,6 @@ file(GLOB hdrs "*.h") file(GLOB srcs "*.cpp") -add_library(frontend OBJECT ${hdrs} ${srcs}) +add_library(frontend ${hdrs} ${srcs}) target_include_directories(frontend PUBLIC .) target_link_libraries(frontend PRIVATE cppcheck-core) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 4b66515f55a..37d85eb2822 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -70,6 +70,6 @@ if (Boost_FOUND) target_include_directories(cppcheck-core-private SYSTEM PRIVATE ${Boost_INCLUDE_DIRS}) endif() -# if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS) -# target_precompile_headers(cppcheck-core-private PRIVATE precompiled.h) -# endif() +if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS) + target_precompile_headers(cppcheck-core-private PRIVATE precompiled.h) +endif() From 151d3d0cb6b9daf54b92650bcf42d9098eb7f4e7 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 10 Jul 2025 09:52:55 -0500 Subject: [PATCH 14/24] Use target_external_include_directories --- externals/picojson/CMakeLists.txt | 2 +- externals/simplecpp/CMakeLists.txt | 2 +- externals/tinyxml2/CMakeLists.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/externals/picojson/CMakeLists.txt b/externals/picojson/CMakeLists.txt index a2696fd703f..937a89c12b3 100644 --- a/externals/picojson/CMakeLists.txt +++ b/externals/picojson/CMakeLists.txt @@ -1,4 +1,4 @@ add_library(picojson INTERFACE) -target_include_directories(picojson SYSTEM INTERFACE .) +target_externals_include_directories(picojson INTERFACE .) diff --git a/externals/simplecpp/CMakeLists.txt b/externals/simplecpp/CMakeLists.txt index 5c226b2d848..50f139739a7 100644 --- a/externals/simplecpp/CMakeLists.txt +++ b/externals/simplecpp/CMakeLists.txt @@ -8,4 +8,4 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") target_compile_options_safe(simplecpp -Wno-zero-as-null-pointer-constant) endif() -target_include_directories(simplecpp SYSTEM PUBLIC .) +target_externals_include_directories(simplecpp PUBLIC .) diff --git a/externals/tinyxml2/CMakeLists.txt b/externals/tinyxml2/CMakeLists.txt index 126d2cc2d82..9f15c558682 100644 --- a/externals/tinyxml2/CMakeLists.txt +++ b/externals/tinyxml2/CMakeLists.txt @@ -20,5 +20,5 @@ if(CYGWIN) target_compile_definitions(-D_LARGEFILE_SOURCE) # required for fseeko() and ftello() endif() -target_include_directories(tinyxml2 PUBLIC .) +target_externals_include_directories(tinyxml2 PUBLIC .) From 0276fd8cac0f2dc0d73a6aaec6b13a03c35664dd Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 10 Jul 2025 10:02:56 -0500 Subject: [PATCH 15/24] Update target name --- .github/workflows/selfcheck.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/selfcheck.yml b/.github/workflows/selfcheck.yml index d58178a5c1a..566b9e822a4 100644 --- a/.github/workflows/selfcheck.yml +++ b/.github/workflows/selfcheck.yml @@ -71,7 +71,7 @@ jobs: # make sure auto-generated GUI files exist make -C cmake.output autogen # make sure the precompiled headers exist - make -C cmake.output lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx + make -C cmake.output lib/CMakeFiles/cppcheck-core-private.dir/cmake_pch.hxx.cxx make -C cmake.output test/CMakeFiles/testrunner.dir/cmake_pch.hxx.cxx # make sure the auto-generated GUI dependencies exist make -C cmake.output gui-build-deps @@ -98,7 +98,7 @@ jobs: # make sure auto-generated GUI files exist make -C cmake.output.notest autogen # make sure the precompiled headers exist - make -C cmake.output.notest lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx + make -C cmake.output.notest lib/CMakeFiles/cppcheck-core-private.dir/cmake_pch.hxx.cxx # make sure the auto-generated GUI dependencies exist make -C cmake.output.notest gui-build-deps @@ -119,7 +119,7 @@ jobs: - name: Generate dependencies (no test / no gui) run: | # make sure the precompiled headers exist - make -C cmake.output.notest_nogui lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx + make -C cmake.output.notest_nogui lib/CMakeFiles/cppcheck-core-private.dir/cmake_pch.hxx.cxx # TODO: find a way to report unmatched suppressions without need to add information checks - name: Self check (unusedFunction / no test / no gui) @@ -140,7 +140,7 @@ jobs: # make sure auto-generated GUI files exist make -C cmake.output.notest_nocli autogen # make sure the precompiled headers exist - make -C cmake.output.notest_nocli lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx + make -C cmake.output.notest_nocli lib/CMakeFiles/cppcheck-core-private.dir/cmake_pch.hxx.cxx # make sure the auto-generated GUI dependencies exist make -C cmake.output.notest_nocli gui-build-deps From 25d871988d0e11a8404da31899ebb62be582ae3b Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 10 Jul 2025 15:30:40 -0500 Subject: [PATCH 16/24] Add verbose flag --- .github/workflows/CI-unixish-docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI-unixish-docker.yml b/.github/workflows/CI-unixish-docker.yml index d3b4ba8a5f4..70dbda1a58c 100644 --- a/.github/workflows/CI-unixish-docker.yml +++ b/.github/workflows/CI-unixish-docker.yml @@ -74,7 +74,7 @@ jobs: if: matrix.build_gui run: | cmake -S . -B cmake.output -G "Unix Makefiles" -DHAVE_RULES=On -DBUILD_TESTS=On -DBUILD_GUI=On -DUSE_QT6=On -DWITH_QCHART=On -DBUILD_TRIAGE=On -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache - cmake --build cmake.output -- -j$(nproc) + cmake --build cmake.output -- VERBOSE=1 - name: Run CMake test run: | From f95486d53c70bcfce115dbebdbd644847983450e Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 10 Jul 2025 17:11:24 -0500 Subject: [PATCH 17/24] Remove interface library --- .github/workflows/selfcheck.yml | 8 ++++---- lib/CMakeLists.txt | 23 +++++++---------------- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/.github/workflows/selfcheck.yml b/.github/workflows/selfcheck.yml index 566b9e822a4..d58178a5c1a 100644 --- a/.github/workflows/selfcheck.yml +++ b/.github/workflows/selfcheck.yml @@ -71,7 +71,7 @@ jobs: # make sure auto-generated GUI files exist make -C cmake.output autogen # make sure the precompiled headers exist - make -C cmake.output lib/CMakeFiles/cppcheck-core-private.dir/cmake_pch.hxx.cxx + make -C cmake.output lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx make -C cmake.output test/CMakeFiles/testrunner.dir/cmake_pch.hxx.cxx # make sure the auto-generated GUI dependencies exist make -C cmake.output gui-build-deps @@ -98,7 +98,7 @@ jobs: # make sure auto-generated GUI files exist make -C cmake.output.notest autogen # make sure the precompiled headers exist - make -C cmake.output.notest lib/CMakeFiles/cppcheck-core-private.dir/cmake_pch.hxx.cxx + make -C cmake.output.notest lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx # make sure the auto-generated GUI dependencies exist make -C cmake.output.notest gui-build-deps @@ -119,7 +119,7 @@ jobs: - name: Generate dependencies (no test / no gui) run: | # make sure the precompiled headers exist - make -C cmake.output.notest_nogui lib/CMakeFiles/cppcheck-core-private.dir/cmake_pch.hxx.cxx + make -C cmake.output.notest_nogui lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx # TODO: find a way to report unmatched suppressions without need to add information checks - name: Self check (unusedFunction / no test / no gui) @@ -140,7 +140,7 @@ jobs: # make sure auto-generated GUI files exist make -C cmake.output.notest_nocli autogen # make sure the precompiled headers exist - make -C cmake.output.notest_nocli lib/CMakeFiles/cppcheck-core-private.dir/cmake_pch.hxx.cxx + make -C cmake.output.notest_nocli lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx # make sure the auto-generated GUI dependencies exist make -C cmake.output.notest_nocli gui-build-deps diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 37d85eb2822..954ee27ca72 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -39,37 +39,28 @@ endif() if(BUILD_SHARED_LIBS) add_library(cppcheck-core ${srcs_lib} ${hdrs}) - add_library(cppcheck-core-private ALIAS cppcheck-core) else() # A OBJECT library is used because the auto-registration doesn't work with static libraries - add_library(cppcheck-core-private OBJECT ${srcs_lib} ${hdrs}) - add_library(cppcheck-core INTERFACE) - target_link_libraries(cppcheck-core INTERFACE $) - add_dependencies(cppcheck-core cppcheck-core-private) + add_library(cppcheck-core OBJECT ${srcs_lib} ${hdrs}) endif() if (BUILD_SHARED_LIBS AND MSVC) target_sources(cppcheck-core PRIVATE version.rc) endif() -target_dll_compile_definitions(cppcheck-core EXPORT CPPCHECKLIB_EXPORT) -target_dll_compile_definitions(cppcheck-core-private IMPORT CPPCHECKLIB_IMPORT) +target_dll_compile_definitions(cppcheck-core EXPORT CPPCHECKLIB_EXPORT IMPORT CPPCHECKLIB_IMPORT) -target_include_directories(cppcheck-core INTERFACE .) +target_include_directories(cppcheck-core PUBLIC .) foreach(lib tinyxml2 simplecpp picojson ${PCRE_LIBRARY}) - if (NOT BUILD_SHARED_LIBS) - target_link_libraries(cppcheck-core INTERFACE $) - endif() - target_link_libraries(cppcheck-core-private PRIVATE ${lib}) + target_link_libraries(cppcheck-core PRIVATE ${lib}) endforeach() if (HAVE_RULES) - target_include_directories(cppcheck-core-private SYSTEM PRIVATE ${PCRE_INCLUDE}) + target_include_directories(cppcheck-core SYSTEM PRIVATE ${PCRE_INCLUDE}) endif() if (Boost_FOUND) - target_include_directories(cppcheck-core SYSTEM INTERFACE ${Boost_INCLUDE_DIRS}) - target_include_directories(cppcheck-core-private SYSTEM PRIVATE ${Boost_INCLUDE_DIRS}) + target_include_directories(cppcheck-core SYSTEM PUBLIC ${Boost_INCLUDE_DIRS}) endif() if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS) - target_precompile_headers(cppcheck-core-private PRIVATE precompiled.h) + target_precompile_headers(cppcheck-core PRIVATE precompiled.h) endif() From 5416baa59434fe04f534cdf6d3545fbd633dcb76 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 10 Jul 2025 17:45:51 -0500 Subject: [PATCH 18/24] Make cli available for dmake --- cli/CMakeLists.txt | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index 9b4156f14e4..2664a29a65d 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -1,22 +1,22 @@ -if (BUILD_CLI) - file(GLOB hdrs "*.h") - file(GLOB srcs "*.cpp") - file(GLOB mainfile "main.cpp") - list(REMOVE_ITEM srcs ${mainfile}) +file(GLOB hdrs "*.h") +file(GLOB srcs "*.cpp") +file(GLOB mainfile "main.cpp") +list(REMOVE_ITEM srcs ${mainfile}) - add_library(cli ${hdrs} ${srcs}) - target_include_directories(cli PUBLIC .) - target_link_libraries(cli PRIVATE cppcheck-core frontend tinyxml2 simplecpp picojson) - if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS) - target_precompile_headers(cli PRIVATE precompiled.h) - endif() +add_library(cli ${hdrs} ${srcs}) +target_include_directories(cli PUBLIC .) +target_link_libraries(cli PRIVATE cppcheck-core frontend tinyxml2 simplecpp picojson) +if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS) + target_precompile_headers(cli PRIVATE precompiled.h) +endif() - if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 13) - # false positive warning in Clang 13 - caused by FD_ZERO macro - set_source_files_properties(processexecutor.cpp PROPERTIES COMPILE_FLAGS -Wno-reserved-identifier) - endif() +if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 13) + # false positive warning in Clang 13 - caused by FD_ZERO macro + set_source_files_properties(processexecutor.cpp PROPERTIES COMPILE_FLAGS -Wno-reserved-identifier) +endif() +if (BUILD_CLI) list(APPEND cppcheck_SOURCES ${hdrs} ${mainfile}) if (WIN32) list(APPEND cppcheck_SOURCES version.rc) From 063a2f81a325619cbedc4d93dab173b35e8c9d3e Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 10 Jul 2025 17:51:30 -0500 Subject: [PATCH 19/24] Fix issues with building with cli disabled --- CMakeLists.txt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 28fd19ace84..3b337181d49 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,12 +47,13 @@ if(LIBXML2_XMLLINT_EXECUTABLE) add_dependencies(validatePlatforms validatePlatforms-${platformname}) endforeach() - add_custom_target(errorlist-xml $ --errorlist > ${CMAKE_BINARY_DIR}/errorlist.xml - DEPENDS cppcheck) - - add_custom_target(example-xml $ --xml --enable=all --inconclusive --max-configs=1 ${CMAKE_SOURCE_DIR}/samples 2> ${CMAKE_BINARY_DIR}/example.xml - DEPENDS cppcheck) + if(BUILD_CLI) + add_custom_target(errorlist-xml $ --errorlist > ${CMAKE_BINARY_DIR}/errorlist.xml + DEPENDS cppcheck) + add_custom_target(example-xml $ --xml --enable=all --inconclusive --max-configs=1 ${CMAKE_SOURCE_DIR}/samples 2> ${CMAKE_BINARY_DIR}/example.xml + DEPENDS cppcheck) + endif() add_custom_target(createXMLExamples DEPENDS errorlist-xml example-xml) if(Python_EXECUTABLE) From 5a27ccaf4369df1ef233c2c3115369fe79e42485 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 10 Jul 2025 19:40:58 -0500 Subject: [PATCH 20/24] Remove verbose flag --- .github/workflows/CI-unixish-docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI-unixish-docker.yml b/.github/workflows/CI-unixish-docker.yml index 70dbda1a58c..d3b4ba8a5f4 100644 --- a/.github/workflows/CI-unixish-docker.yml +++ b/.github/workflows/CI-unixish-docker.yml @@ -74,7 +74,7 @@ jobs: if: matrix.build_gui run: | cmake -S . -B cmake.output -G "Unix Makefiles" -DHAVE_RULES=On -DBUILD_TESTS=On -DBUILD_GUI=On -DUSE_QT6=On -DWITH_QCHART=On -DBUILD_TRIAGE=On -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache - cmake --build cmake.output -- VERBOSE=1 + cmake --build cmake.output -- -j$(nproc) - name: Run CMake test run: | From a4b579dc157ed02ff5da9094ac94697660f5a871 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 10 Jul 2025 20:00:35 -0500 Subject: [PATCH 21/24] Remove foreach loop --- lib/CMakeLists.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 954ee27ca72..d7a94de352e 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -50,9 +50,7 @@ endif() target_dll_compile_definitions(cppcheck-core EXPORT CPPCHECKLIB_EXPORT IMPORT CPPCHECKLIB_IMPORT) target_include_directories(cppcheck-core PUBLIC .) -foreach(lib tinyxml2 simplecpp picojson ${PCRE_LIBRARY}) - target_link_libraries(cppcheck-core PRIVATE ${lib}) -endforeach() +target_link_libraries(cppcheck-core PRIVATE tinyxml2 simplecpp picojson ${PCRE_LIBRARY}) if (HAVE_RULES) target_include_directories(cppcheck-core SYSTEM PRIVATE ${PCRE_INCLUDE}) From f211acd9283f9593f80dbe9caf4082dd1e20c0b5 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 18 Sep 2025 09:05:44 -0500 Subject: [PATCH 22/24] Add back const --- cli/cppcheckexecutor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/cppcheckexecutor.cpp b/cli/cppcheckexecutor.cpp index 8933e51ae11..184cd00cd2f 100644 --- a/cli/cppcheckexecutor.cpp +++ b/cli/cppcheckexecutor.cpp @@ -737,7 +737,7 @@ int CppCheckExecutor::executeCommand(std::string exe, std::vector a // the W* macros cast to int* on macOS int res = pclose(p); #else - int res = pclose(p); + const int res = pclose(p); #endif if (res == -1) { // error occurred // TODO: how to provide to caller? From 5c47f9e64f4961c51c8401a07892511c2ce54ce5 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 18 Sep 2025 09:06:17 -0500 Subject: [PATCH 23/24] Remove line --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bf3248468e4..12b1b44f839 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,7 +47,6 @@ if(LIBXML2_XMLLINT_EXECUTABLE) add_dependencies(validatePlatforms validatePlatforms-${platformname}) endforeach() - if(TARGET cppcheck) add_custom_target(errorlist-xml $ --errorlist > ${CMAKE_BINARY_DIR}/errorlist.xml DEPENDS cppcheck) From 872f922162cf3bf84bf4eee39205bbfca99f3b7b Mon Sep 17 00:00:00 2001 From: Paul Date: Tue, 28 Oct 2025 13:46:34 -0500 Subject: [PATCH 24/24] Remove duplicate line --- gui/test/resultstree/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/gui/test/resultstree/CMakeLists.txt b/gui/test/resultstree/CMakeLists.txt index 288011c77e0..c0b08195ea7 100644 --- a/gui/test/resultstree/CMakeLists.txt +++ b/gui/test/resultstree/CMakeLists.txt @@ -45,7 +45,6 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") target_compile_options_safe(test-resultstree -Wno-suggest-attribute=noreturn) endif() - if (REGISTER_GUI_TESTS) # TODO: might crash - see #13223 #add_test(NAME test-resultstree COMMAND $ -platform offscreen)