diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fd56c98ff4..7345496204 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -138,6 +138,18 @@ l:tidy-fedora43: - .cmake_cdash_artifacts - .rules +l:pvs-studio-fedora43: + extends: + - .fedora43_pvs_studio + - .cmake_build_linux + - .linux_x86_64_tags + - .cmake_cdash_artifacts + - .rules + variables: + CMAKE_CI_JOB_CONTINUOUS: "true" + CMAKE_CI_JOB_NIGHTLY: "true" + CMAKE_CI_JOB_NO_MR: "true" + l:sphinx-fedora43: extends: - .fedora43_sphinx diff --git a/.gitlab/ci/configure_fedora43_pvs_studio.cmake b/.gitlab/ci/configure_fedora43_pvs_studio.cmake new file mode 100644 index 0000000000..ff6e7f0601 --- /dev/null +++ b/.gitlab/ci/configure_fedora43_pvs_studio.cmake @@ -0,0 +1,3 @@ +set(configure_no_sccache 1) +set(CMake_RUN_PVS_STUDIO ON CACHE BOOL "") +include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake") diff --git a/.gitlab/ci/env_fedora43_pvs_studio.sh b/.gitlab/ci/env_fedora43_pvs_studio.sh new file mode 100644 index 0000000000..36dba853f1 --- /dev/null +++ b/.gitlab/ci/env_fedora43_pvs_studio.sh @@ -0,0 +1 @@ +. .gitlab/ci/pvs-studio-env.sh diff --git a/.gitlab/os-linux.yml b/.gitlab/os-linux.yml index 5e6f1ee5ad..c27f87c6dc 100644 --- a/.gitlab/os-linux.yml +++ b/.gitlab/os-linux.yml @@ -132,6 +132,14 @@ CMAKE_CONFIGURATION: fedora43_tidy CMAKE_CI_NO_INSTALL: 1 +.fedora43_pvs_studio: + extends: .fedora43 + environment: + name: pvs-studio + variables: + CMAKE_CONFIGURATION: fedora43_pvs_studio + CMAKE_CI_NO_INSTALL: 1 + .fedora43_clang_analyzer: extends: .fedora43 diff --git a/CMakeLists.txt b/CMakeLists.txt index 06778c7d4c..b3913155b1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -391,6 +391,22 @@ if(CMake_RUN_IWYU) list(APPEND CMAKE_CXX_INCLUDE_WHAT_YOU_USE ${CMake_IWYU_OPTIONS}) endif() +option(CMake_RUN_PVS_STUDIO "Run pvs-studio-analyzer with the compiler." OFF) +if(CMake_RUN_PVS_STUDIO) + if(CMake_SOURCE_DIR STREQUAL CMake_BINARY_DIR) + message(FATAL_ERROR "CMake_RUN_PVS_STUDIO requires an out-of-source build!") + endif() + find_program(PVS_STUDIO_COMMAND NAMES pvs-studio-analyzer) + if(NOT PVS_STUDIO_COMMAND) + message(FATAL_ERROR "CMake_RUN_PVS_STUDIO is ON but pvs-studio-analyzer is not found!") + endif() + set(CMAKE_CXX_PVS_STUDIO + "${PVS_STUDIO_COMMAND}" analyze + -a GA + --apply-pvs-configs + --project-root "${CMAKE_SOURCE_DIR}" + ) +endif() #----------------------------------------------------------------------- # a macro that only sets the FOLDER target property if it's