diff --git a/.github/workflows/CI-unixish-docker.yml b/.github/workflows/CI-unixish-docker.yml index c5e51d5b4..118cb817f 100644 --- a/.github/workflows/CI-unixish-docker.yml +++ b/.github/workflows/CI-unixish-docker.yml @@ -19,7 +19,7 @@ jobs: strategy: matrix: - image: ["centos:7", "ubuntu:14.04", "ubuntu:16.04", "ubuntu:18.04", "ubuntu:23.10"] + image: ["ubuntu:16.04", "ubuntu:18.04", "ubuntu:23.10"] include: - build_gui: false - image: "ubuntu:23.10" @@ -39,13 +39,6 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Install missing software on CentOS 7 - if: matrix.image == 'centos:7' - run: | - yum install -y cmake gcc-c++ make pcre-devel - yum --enablerepo=extras install -y epel-release - yum install -y ccache - - name: Install missing software on ubuntu if: contains(matrix.image, 'ubuntu') run: | @@ -62,22 +55,12 @@ jobs: # - it doesn't support centos - name: ccache uses: hendrikmuhs/ccache-action@v1.2 - if: matrix.image != 'ubuntu:14.04' # no support for --set-config with: key: ${{ github.workflow }}-${{ matrix.image }} - # tests require CMake 3.9 - no ccache available - - name: CMake build (no tests / no ccache) - if: matrix.image == 'ubuntu:14.04' - run: | - mkdir cmake.output - cd cmake.output - cmake -G "Unix Makefiles" -DHAVE_RULES=On .. - cmake --build . -- -j$(nproc) - # tests require CMake 3.9 - ccache available - name: CMake build (no tests) - if: matrix.image == 'centos:7' || matrix.image == 'ubuntu:16.04' + if: matrix.image == 'ubuntu:16.04' run: | mkdir cmake.output cd cmake.output @@ -85,7 +68,7 @@ jobs: cmake --build . -- -j$(nproc) - name: CMake build - if: ${{ !matrix.build_gui && matrix.image != 'centos:7' && matrix.image != 'ubuntu:14.04' && matrix.image != 'ubuntu:16.04' }} + if: ${{ !matrix.build_gui && matrix.image != 'ubuntu:16.04' }} run: | mkdir cmake.output cd cmake.output @@ -99,7 +82,7 @@ jobs: cmake --build cmake.output -- -j$(nproc) - name: Run CMake test - if: matrix.image != 'centos:7' && matrix.image != 'ubuntu:14.04' && matrix.image != 'ubuntu:16.04' + if: matrix.image != 'ubuntu:16.04' run: | cmake --build cmake.output --target check -- -j$(nproc) @@ -107,7 +90,7 @@ jobs: strategy: matrix: - image: ["centos:7", "ubuntu:14.04", "ubuntu:16.04", "ubuntu:18.04", "ubuntu:23.10"] + image: ["ubuntu:16.04", "ubuntu:18.04", "ubuntu:23.10"] fail-fast: false # Prefer quick result runs-on: ubuntu-22.04 @@ -118,13 +101,6 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Install missing software on CentOS 7 - if: matrix.image == 'centos:7' - run: | - yum install -y gcc-c++ make which python3 pcre-devel - yum --enablerepo=extras install -y epel-release - yum install -y ccache - - name: Install missing software on ubuntu if: contains(matrix.image, 'ubuntu') run: | @@ -136,7 +112,6 @@ jobs: # - it doesn't support centos - name: ccache uses: hendrikmuhs/ccache-action@v1.2 - if: matrix.image != 'ubuntu:14.04' # no support for --set-config with: key: ${{ github.workflow }}-${{ matrix.image }} diff --git a/CMakeLists.txt b/CMakeLists.txt index 34dd57867..c4deaee89 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8.12) +cmake_minimum_required(VERSION 3.5) project(Cppcheck) include(cmake/cxx11.cmake) diff --git a/cmake/compilerCheck.cmake b/cmake/compilerCheck.cmake index 1167a5cbc..bc8d24c8a 100644 --- a/cmake/compilerCheck.cmake +++ b/cmake/compilerCheck.cmake @@ -1,14 +1,13 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8) - message(ERROR "GCC >= 4.8 required - detected ${CMAKE_CXX_COMPILER_VERSION} not supported") + if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1) + message(ERROR "GCC >= 5.1 required - detected ${CMAKE_CXX_COMPILER_VERSION} not supported") endif () elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") - # TODO: verify this - if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 2.9) - message(ERROR "Clang >= 2.9 required - detected ${CMAKE_CXX_COMPILER_VERSION} not supported") + if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.5) + message(ERROR "Clang >= 3.5 required - detected ${CMAKE_CXX_COMPILER_VERSION} not supported") endif () elseif(MSVC) - if (MSVC_VERSION VERSION_LESS 1800) - message(ERROR "Visual Studio >= 2013 (1800) required - detected ${MSVC_VERSION} not supported") + if (MSVC_VERSION VERSION_LESS 1900) + message(ERROR "Visual Studio >= 2015 (19.0) required - detected ${MSVC_VERSION} not supported") endif () endif() diff --git a/readme.md b/readme.md index 5094fa050..d14d73e10 100644 --- a/readme.md +++ b/readme.md @@ -27,22 +27,24 @@ You can stop the script whenever you like with Ctrl C. ## Compiling -Any C++11 compiler should work. For compilers with partial C++11 support it may work. If your compiler has the C++11 features that are available in Visual Studio 2013 / GCC 4.8 then it will work. +Cppcheck requires a C++ compiler with (partial) C++11 support. Minimum required versions are GCC 5.1 / Clang 3.5 / Visual Studio 2015. -To build the GUI, you need Qt. +To build the GUI application, you need to use the CMake or qmake (deprecated) build system. When building the command line tool, [PCRE](http://www.pcre.org/) is optional. It is used if you build with rules. There are multiple compilation choices: -* qmake - cross platform build tool -* cmake - cross platform build tool -* Windows: Visual Studio (VS 2013 and above) -* Windows: Qt Creator + mingw -* gnu make -* g++ 4.8 (or later) -* clang++ +* qmake - cross platform build tool (deprecated) +* CMake - cross platform build tool +* Windows: Visual Studio +* Windows: Qt Creator + MinGW +* GNU make +* GCC (g++) +* Clang (clang++) -### cmake +### CMake + +The minimum required version is CMake 3.5. Example, compiling Cppcheck with cmake: diff --git a/releasenotes.txt b/releasenotes.txt index 887223c85..29c5ac502 100644 --- a/releasenotes.txt +++ b/releasenotes.txt @@ -17,3 +17,5 @@ Deprecations: Other: - Added CMake option 'EXTERNALS_AS_SYSTEM' to treat external includes as 'SYSTEM' ones. +- The minimum required compiler versions have been bumped to GCC 5.1 / Clang 3.5 / Visual Studio 2015 +- The minimum required CMake version has been bumped to 3.5 diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 26d76976e..b4db4be9e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -60,7 +60,8 @@ if (BUILD_TESTS) endif() if (REGISTER_TESTS) - # CMP0064 requires 3.4 + # CMP0057 requires 3.3 - if (IN_LIST) + # CMP0064 requires 3.4 - if (TEST) # CMAKE_MATCH_ usage for if (MATCHES) requires 3.9 cmake_minimum_required(VERSION 3.9) cmake_policy(SET CMP0064 NEW)