diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index a3ec48cf..a16e5e89 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -63,7 +63,7 @@ jobs: elif [ "${{ matrix.compiler }}" == "mingw" ]; then cmake -S . -B build -DCMAKE_BUILD_TYPE=${{ matrix.configuration }} -DMATIO_USE_CONAN=ON -DMATIO_SHARED=OFF -G "MinGW Makefiles" else - cmake -S . -B build -DCMAKE_BUILD_TYPE=${{ matrix.configuration }} -DMATIO_USE_CONAN=ON -DMATIO_SHARED=OFF + cmake -S . -B build -DCMAKE_BUILD_TYPE=${{ matrix.configuration }} -DMATIO_USE_CONAN=ON -DMATIO_SHARED=OFF -DMATIO_ENABLE_CPPCHECK=ON fi - name: Build with ${{ matrix.compiler }} run: | diff --git a/CMakeLists.txt b/CMakeLists.txt index 745f549e..a99f4047 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,7 @@ include(GNUInstallDirs) include(cmake/options.cmake) include(cmake/conan.cmake) include(cmake/thirdParties.cmake) +include(cmake/staticAnalyzers.cmake) include(cmake/compilerOptions.cmake) include(cmake/getopt.cmake) include(cmake/src.cmake) diff --git a/cmake/options.cmake b/cmake/options.cmake index f2e36459..4531d8e8 100644 --- a/cmake/options.cmake +++ b/cmake/options.cmake @@ -36,3 +36,5 @@ elseif(MATIO_DEFAULT_FILE_VERSION STREQUAL "7.3") else() message(ERROR "Unrecognized MAT file version") endif() + +option(MATIO_ENABLE_CPPCHECK "Enable static analysis with Cppcheck." OFF) diff --git a/cmake/staticAnalyzers.cmake b/cmake/staticAnalyzers.cmake new file mode 100644 index 00000000..085937ed --- /dev/null +++ b/cmake/staticAnalyzers.cmake @@ -0,0 +1,14 @@ +if(MATIO_ENABLE_CPPCHECK) + find_program(CPPCHECK cppcheck) + if(CPPCHECK) + set(CMAKE_C_CPPCHECK ${CPPCHECK} + --suppress=missingInclude + --enable=all + --inline-suppr + --inconclusive -i ${CMAKE_SOURCE_DIR}/imgui/lib + ) + message(VERBOSE "Cppcheck finished setting up.") + else() + message(SEND_ERROR "Cppcheck requested but executable not found.") + endif() +endif() diff --git a/cmake/thirdParties.cmake b/cmake/thirdParties.cmake index 86989f09..ead7ce62 100644 --- a/cmake/thirdParties.cmake +++ b/cmake/thirdParties.cmake @@ -12,16 +12,20 @@ if(MATIO_WITH_HDF5) endif() if(MATIO_USE_CONAN) + set(MATIO_CONAN_REQUIRES "hdf5/[>=1.8 <1.15]" "zlib/[>=1.2.3]") + if(MATIO_ENABLE_CPPCHECK) + list(APPEND MATIO_CONAN_REQUIRES "cppcheck") + endif() if(HDF5_USE_STATIC_LIBRARIES) conan_cmake_run( - REQUIRES "hdf5/[>=1.8 <1.15]" "zlib/[>=1.2.3]" + REQUIRES ${MATIO_CONAN_REQUIRES} BASIC_SETUP CMAKE_TARGETS OPTIONS hdf5:shared=False zlib:shared=False BUILD missing ) else() conan_cmake_run( - REQUIRES "hdf5/[>=1.8 <1.15]" "zlib/[>=1.2.3]" + REQUIRES ${MATIO_CONAN_REQUIRES} BASIC_SETUP CMAKE_TARGETS OPTIONS hdf5:shared=True zlib:shared=True BUILD missing)