Skip to content

Commit 588c32b

Browse files
authored
Merge pull request #271 from FeignClaims/feat/update_c_cxx_latest_standard
feat: Update default language standard to the latest standard + feat: Set cppcheck default std instead of defaulting standard based on it
2 parents 8da3903 + 67f136d commit 588c32b

File tree

2 files changed

+23
-52
lines changed

2 files changed

+23
-52
lines changed

src/Standards.cmake

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
include_guard()
22

3+
function(_set_language_standard output language)
4+
foreach(version IN LISTS ARGN)
5+
if(DEFINED "CMAKE_${language}${version}_STANDARD_COMPILE_OPTION" OR DEFINED "CMAKE_${language}${version}_EXTENSION_COMPILE_OPTION")
6+
set("${output}" "${version}" PARENT_SCOPE)
7+
break()
8+
endif()
9+
endforeach()
10+
endfunction()
11+
312
# Set the default copmiler standards if not specified
413
macro(set_standards)
514

@@ -8,19 +17,7 @@ macro(set_standards)
817
# Like not having compiler warnings on by default, this fixes another `bad` default for the compilers
918
# If someone needs an older standard like c++11 although their compiler supports c++20, they can override this by passing -D CMAKE_CXX_STANDARD=11.
1019
if("${CMAKE_CXX_STANDARD}" STREQUAL "")
11-
if(DEFINED CMAKE_CXX20_STANDARD_COMPILE_OPTION OR DEFINED CMAKE_CXX20_EXTENSION_COMPILE_OPTION)
12-
set(CXX_LATEST_STANDARD 20)
13-
elseif(DEFINED CMAKE_CXX17_STANDARD_COMPILE_OPTION OR DEFINED
14-
CMAKE_CXX17_EXTENSION_COMPILE_OPTION
15-
)
16-
set(CXX_LATEST_STANDARD 17)
17-
elseif(DEFINED CMAKE_CXX14_STANDARD_COMPILE_OPTION OR DEFINED
18-
CMAKE_CXX14_EXTENSION_COMPILE_OPTION
19-
)
20-
set(CXX_LATEST_STANDARD 14)
21-
else()
22-
set(CXX_LATEST_STANDARD 11)
23-
endif()
20+
_set_language_standard(CXX_LATEST_STANDARD CXX 23 20 17 14 11)
2421
message(
2522
STATUS
2623
"The default CMAKE_CXX_STANDARD used by external targets and tools is not set yet. Using the latest supported C++ standard that is ${CXX_LATEST_STANDARD}"
@@ -29,19 +26,7 @@ macro(set_standards)
2926
endif()
3027

3128
if("${CMAKE_C_STANDARD}" STREQUAL "")
32-
if(NOT
33-
${ProjectOptions_ENABLE_CPPCHECK} # cppcheck doesn't support C17 https://sourceforge.net/p/cppcheck/discussion/general/thread/19ea152bba/
34-
AND DEFINED CMAKE_C17_STANDARD_COMPILE_OPTION
35-
OR DEFINED CMAKE_C17_EXTENSION_COMPILE_OPTION
36-
)
37-
set(C_LATEST_STANDARD 17)
38-
elseif(DEFINED CMAKE_C11_STANDARD_COMPILE_OPTION OR DEFINED CMAKE_C11_EXTENSION_COMPILE_OPTION)
39-
set(C_LATEST_STANDARD 11)
40-
elseif(DEFINED CMAKE_C99_STANDARD_COMPILE_OPTION OR DEFINED CMAKE_C99_EXTENSION_COMPILE_OPTION)
41-
set(C_LATEST_STANDARD 99)
42-
else()
43-
set(C_LATEST_STANDARD 90)
44-
endif()
29+
_set_language_standard(C_LATEST_STANDARD C 23 20 17 11 99 90)
4530
message(
4631
STATUS
4732
"The default CMAKE_C_STANDARD used by external targets and tools is not set yet. Using the latest supported C standard that is ${C_LATEST_STANDARD}"

src/StaticAnalyzers.cmake

Lines changed: 12 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,21 @@ macro(enable_cppcheck CPPCHECK_OPTIONS)
3838
set(CMAKE_C_CPPCHECK ${CMAKE_CXX_CPPCHECK})
3939

4040
if(NOT "${CMAKE_CXX_STANDARD}" STREQUAL "")
41-
set(CMAKE_CXX_CPPCHECK ${CMAKE_CXX_CPPCHECK} --std=c++${CMAKE_CXX_STANDARD})
41+
if(CMAKE_CXX_STANDARD MATCHES [[03|11|14|17|20]])
42+
set(CMAKE_CXX_CPPCHECK ${CMAKE_CXX_CPPCHECK} --std=c++${CMAKE_CXX_STANDARD})
43+
else()
44+
message(${WARNING_MESSAGE} "cppcheck dosen't support specified C++ standard ${CMAKE_CXX_STANDARD}. Using the cppcheck default C++ standard version.")
45+
endif()
4246
endif()
4347

4448
if(NOT "${CMAKE_C_STANDARD}" STREQUAL "")
45-
set(CMAKE_C_CPPCHECK ${CMAKE_C_CPPCHECK} --std=c${CMAKE_C_STANDARD})
49+
if(CMAKE_C_STANDARD MATCHES [[90]])
50+
set(CMAKE_C_CPPCHECK ${CMAKE_C_CPPCHECK} --std=c89)
51+
elseif(CMAKE_C_STANDARD MATCHES [[99|11]])
52+
set(CMAKE_C_CPPCHECK ${CMAKE_C_CPPCHECK} --std=c${CMAKE_C_STANDARD})
53+
else()
54+
message(${WARNING_MESSAGE} "cppcheck dosen't support specified C standard ${CMAKE_C_STANDARD}. Using the cppcheck default C standard version.")
55+
endif()
4656
endif()
4757

4858
else()
@@ -54,14 +64,6 @@ function(_enable_clang_tidy_setup_cl CXX_FLAGS C_FLAGS)
5464
set(CLANG_TIDY_CXX_FLAGS ${CXX_FLAGS})
5565
set(CLANG_TIDY_C_FLAGS ${C_FLAGS})
5666

57-
if(CMAKE_CXX_STANDARD)
58-
list(APPEND CLANG_TIDY_CXX_FLAGS -extra-arg=/std:c++${CMAKE_CXX_STANDARD})
59-
endif()
60-
61-
if(CMAKE_C_STANDARD)
62-
list(APPEND CLANG_TIDY_C_FLAGS -extra-arg=/std:c${CMAKE_C_STANDARD})
63-
endif()
64-
6567
set(CLANG_TIDY_CXX_FLAGS ${CLANG_TIDY_CXX_FLAGS} PARENT_SCOPE)
6668
set(CLANG_TIDY_C_FLAGS ${CLANG_TIDY_C_FLAGS} PARENT_SCOPE)
6769
endfunction()
@@ -143,22 +145,6 @@ function(_enable_clang_tidy_setup CXX_FLAGS C_FLAGS)
143145
set(CLANG_TIDY_CXX_FLAGS ${CXX_FLAGS})
144146
set(CLANG_TIDY_C_FLAGS ${C_FLAGS})
145147

146-
if(CMAKE_CXX_STANDARD)
147-
if(CMAKE_CXX_EXTENSIONS)
148-
list(APPEND CLANG_TIDY_CXX_FLAGS -extra-arg=-std=gnu++${CMAKE_CXX_STANDARD})
149-
else()
150-
list(APPEND CLANG_TIDY_CXX_FLAGS -extra-arg=-std=c++${CMAKE_CXX_STANDARD})
151-
endif()
152-
endif()
153-
154-
if(CMAKE_C_STANDARD)
155-
if(CMAKE_C_EXTENSIONS)
156-
list(APPEND CLANG_TIDY_C_FLAGS -extra-arg=-std=gnu${CMAKE_C_STANDARD})
157-
else()
158-
list(APPEND CLANG_TIDY_C_FLAGS -extra-arg=-std=c${CMAKE_C_STANDARD})
159-
endif()
160-
endif()
161-
162148
if(CMAKE_CROSSCOMPILING)
163149
_enable_clang_tidy_setup_cross("${CLANG_TIDY_CXX_FLAGS}" "${CLANG_TIDY_C_FLAGS}")
164150
endif()

0 commit comments

Comments
 (0)