Skip to content

Commit 8a10107

Browse files
author
Chuck Atkins
committed
Utilize CMake's language standards abstraction when possible
1 parent 0956a50 commit 8a10107

File tree

1 file changed

+24
-8
lines changed

1 file changed

+24
-8
lines changed

tools/pybind11Tools.cmake

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,40 @@ find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
1818
include(CheckCXXCompilerFlag)
1919
include(CMakeParseArguments)
2020

21+
# Use the language standards abstraction if CMake supports it with the current compiler
22+
if(NOT CMAKE_VERSION VERSION_LESS 3.1)
23+
if(NOT CMAKE_CXX_STANDARD)
24+
if(CMAKE_CXX14_STANDARD_COMPILE_OPTION)
25+
set(CMAKE_CXX_STANDARD 14)
26+
elseif(CMAKE_CXX11_STANDARD_COMPILE_OPTION)
27+
set(CMAKE_CXX_STANDARD 11)
28+
endif()
29+
endif()
30+
if(CMAKE_CXX_STANDARD)
31+
set(CMAKE_CXX_EXTENSIONS OFF)
32+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
33+
endif()
34+
endif()
35+
36+
# Fall back to heuristics
2137
if(NOT PYBIND11_CPP_STANDARD AND NOT CMAKE_CXX_STANDARD)
22-
if(NOT MSVC)
38+
if(MSVC)
39+
set(PYBIND11_CPP_STANDARD /std:c++14)
40+
else()
2341
check_cxx_compiler_flag("-std=c++14" HAS_CPP14_FLAG)
24-
25-
if (HAS_CPP14_FLAG)
42+
if(HAS_CPP14_FLAG)
2643
set(PYBIND11_CPP_STANDARD -std=c++14)
2744
else()
2845
check_cxx_compiler_flag("-std=c++11" HAS_CPP11_FLAG)
29-
if (HAS_CPP11_FLAG)
46+
if(HAS_CPP11_FLAG)
3047
set(PYBIND11_CPP_STANDARD -std=c++11)
31-
else()
32-
message(FATAL_ERROR "Unsupported compiler -- pybind11 requires C++11 support!")
3348
endif()
3449
endif()
35-
elseif(MSVC)
36-
set(PYBIND11_CPP_STANDARD /std:c++14)
3750
endif()
3851

52+
if(NOT PYBIND11_CPP_STANDARD)
53+
message(FATAL_ERROR "Unsupported compiler -- pybind11 requires C++11 support!")
54+
endif()
3955
set(PYBIND11_CPP_STANDARD ${PYBIND11_CPP_STANDARD} CACHE STRING
4056
"C++ standard flag, e.g. -std=c++11, -std=c++14, /std:c++14. Defaults to C++14 mode." FORCE)
4157
endif()

0 commit comments

Comments
 (0)