1include(Compiler/GNU)
2__compiler_gnu(CXX)
3
4
5if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
6    AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
7    AND CMAKE_DEPFILE_FLAGS_CXX)
8  # dependencies are computed by the compiler itself
9  set(CMAKE_CXX_DEPFILE_FORMAT gcc)
10  set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
11endif()
12
13set(CMAKE_CXX_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c++)
14
15if (WIN32)
16  if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.6)
17    set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fno-keep-inline-dllexport")
18  endif()
19else()
20  if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0)
21    set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
22  endif()
23endif()
24
25if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4)
26  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++98")
27  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
28endif()
29
30if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7)
31  set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
32  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
33  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
34elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.4)
35  # 4.3 supports 0x variants
36  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++0x")
37  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++0x")
38endif()
39
40if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8.1)
41  set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
42endif()
43
44if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)
45  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
46  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
47elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
48  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++1y")
49  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
50endif()
51
52if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)
53  set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
54endif()
55
56if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
57  set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17")
58  set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
59elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1)
60  set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++1z")
61  set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
62endif()
63
64if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 11.1)
65  set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++20")
66  set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++20")
67  set(CMAKE_CXX23_STANDARD_COMPILE_OPTION "-std=c++23")
68  set(CMAKE_CXX23_EXTENSION_COMPILE_OPTION "-std=gnu++23")
69elseif(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0)
70  set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++2a")
71  set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
72endif()
73
74__compiler_check_default_language_standard(CXX 3.4 98 6.0 14 11.1 17)
75