From ca7fe96e6c4d43d230f47f3da6964e74692088d6 Mon Sep 17 00:00:00 2001 From: worthless443 Date: Sun, 19 Feb 2023 22:00:08 +0530 Subject: [PATCH 1/3] Emit warnings or errors if GCC version < 13 or Clang version < 16 --- CMakeLists.txt | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index e95738af..5f2a2d2a 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,15 @@ if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build type" FORCE) endif() +#set(CMAKE_CXX_COMPILER "/usr/bin/clang++") project(bounded_integer LANGUAGES CXX) +if(NOT DEFINED REQUIRED_GCC_VER ) + set(REQUIRED_GCC_VER 13) +endif() + +if(NOT DEFINED REQUIRED_CLANG_VER ) + set(REQUIRED_CLANG_VER 16) +endif() enable_testing() @@ -35,6 +43,27 @@ if (NOT has_parent) endif() endif() +if(DEFINED FATAL_ERR) + set(MFLAG_FETAL FATAL_ERROR) +else() + set(MFLAG_FETAL WARNING) +endif() + +if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") + string(REPLACE "." ";" __VLIST ${CMAKE_CXX_COMPILER_VERSION} ) + list(GET __VLIST 0 CXX_CMP_V_1) + if(${CXX_CMP_V_1} LESS ${REQUIRED_CLANG_VER}) + message(${MFLAG_FETAL} "${CMAKE_CXX_COMPILER_ID}: detected version ${CXX_CMP_V_1}(${CMAKE_CXX_COMPILER_VERSION}); you must use ver ${REQUIRED_CLANG_VER}") + endif() +elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") + string(REPLACE "." ";" __VLIST ${CMAKE_CXX_COMPILER_VERSION} ) + list(GET __VLIST 0 CXX_CMP_V_1) + if(${CXX_CMP_V_1} LESS ${REQUIRED_GCC_VER}) + message(${MFLAG_FETAL} "${CMAKE_CXX_COMPILER_ID}: detected version ${CXX_CMP_V_1}(${CMAKE_CXX_COMPILER_VERSION}); you must use ver ${REQUIRED_GCC_VER}") + endif() +endif() + + add_library(bounded INTERFACE) target_link_libraries(bounded INTERFACE From b04466c084fe78c9b67cca22caadd052713f7bb5 Mon Sep 17 00:00:00 2001 From: worthless443 Date: Mon, 20 Feb 2023 17:36:04 +0530 Subject: [PATCH 2/3] CMake: simplifying the version check --- CMakeLists.txt | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5f2a2d2a..c8488a31 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build type" FORCE) endif() -#set(CMAKE_CXX_COMPILER "/usr/bin/clang++") +set(CMAKE_CXX_COMPILER "/usr/bin/clang++") project(bounded_integer LANGUAGES CXX) if(NOT DEFINED REQUIRED_GCC_VER ) set(REQUIRED_GCC_VER 13) @@ -49,20 +49,21 @@ else() set(MFLAG_FETAL WARNING) endif() -if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") - string(REPLACE "." ";" __VLIST ${CMAKE_CXX_COMPILER_VERSION} ) +function(EMIT_VER_WARNINGS REQUIRED_VER) + string(REPLACE "." ";" __VLIST ${CMAKE_CXX_COMPILER_VERSION}) list(GET __VLIST 0 CXX_CMP_V_1) - if(${CXX_CMP_V_1} LESS ${REQUIRED_CLANG_VER}) - message(${MFLAG_FETAL} "${CMAKE_CXX_COMPILER_ID}: detected version ${CXX_CMP_V_1}(${CMAKE_CXX_COMPILER_VERSION}); you must use ver ${REQUIRED_CLANG_VER}") + if(${CXX_CMP_V_1} LESS ${REQUIRED_VER}) + message(${MFLAG_FETAL} "${CMAKE_CXX_COMPILER_ID}: detected version ${CXX_CMP_V_1}(${CMAKE_CXX_COMPILER_VERSION}); you must use ver ${REQUIRED_VER}") endif() +endfunction() + +if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") + EMIT_VER_WARNINGS(${REQUIRED_CLANG_VER}) elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") - string(REPLACE "." ";" __VLIST ${CMAKE_CXX_COMPILER_VERSION} ) - list(GET __VLIST 0 CXX_CMP_V_1) - if(${CXX_CMP_V_1} LESS ${REQUIRED_GCC_VER}) - message(${MFLAG_FETAL} "${CMAKE_CXX_COMPILER_ID}: detected version ${CXX_CMP_V_1}(${CMAKE_CXX_COMPILER_VERSION}); you must use ver ${REQUIRED_GCC_VER}") - endif() + EMIT_VER_WARNINGS(${REQUIRED_GCC_VER}) +else() + message(WARNING "UNKNOWN Compiler") endif() - add_library(bounded INTERFACE) From 9b534e2dd9ed4f99b092617c9494058abfa49bd5 Mon Sep 17 00:00:00 2001 From: worthless443 Date: Wed, 17 May 2023 02:32:38 +0530 Subject: [PATCH 3/3] Adding Error related flag for function EMIT_VER_WARNINGS --- CMakeLists.txt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c8488a31..6948828a 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,6 @@ if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build type" FORCE) endif() -set(CMAKE_CXX_COMPILER "/usr/bin/clang++") project(bounded_integer LANGUAGES CXX) if(NOT DEFINED REQUIRED_GCC_VER ) set(REQUIRED_GCC_VER 13) @@ -50,17 +49,26 @@ else() endif() function(EMIT_VER_WARNINGS REQUIRED_VER) + cmake_parse_arguments(FLAG "Else" "IF" "FAIL" ${ARGN}) string(REPLACE "." ";" __VLIST ${CMAKE_CXX_COMPILER_VERSION}) list(GET __VLIST 0 CXX_CMP_V_1) + if(NOT DEFINED FLAG_FAIL) + set(FLAG_FAIL FALSE) + endif() + if(FLAG_FAIL) + set(MFLAG_FATAL FATAL_ERROR) + else() + set(MFLAG_FATAL WARNING) + endif() if(${CXX_CMP_V_1} LESS ${REQUIRED_VER}) - message(${MFLAG_FETAL} "${CMAKE_CXX_COMPILER_ID}: detected version ${CXX_CMP_V_1}(${CMAKE_CXX_COMPILER_VERSION}); you must use ver ${REQUIRED_VER}") + message(${MFLAG_FATAL} "${CMAKE_CXX_COMPILER_ID}: detected version ${CXX_CMP_V_1}(${CMAKE_CXX_COMPILER_VERSION}); you must use version ${REQUIRED_VER}+") endif() endfunction() if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") - EMIT_VER_WARNINGS(${REQUIRED_CLANG_VER}) + EMIT_VER_WARNINGS(${REQUIRED_CLANG_VER} FAIL TRUE) elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") - EMIT_VER_WARNINGS(${REQUIRED_GCC_VER}) + EMIT_VER_WARNINGS(${REQUIRED_GCC_VER} FAIL TRUE) else() message(WARNING "UNKNOWN Compiler") endif()