diff options
author | Stephen Kelly <steveire@gmail.com> | 2014-06-05 11:16:56 (GMT) |
---|---|---|
committer | Stephen Kelly <steveire@gmail.com> | 2014-06-09 21:42:20 (GMT) |
commit | ddec418a8f27e62ae9f37cd03d28a42eeaa1527f (patch) | |
tree | f36773a88e895389731ad39ce298de8641bed2b7 /Modules | |
parent | b70295760c22414ca80f51704ee1ab63872e0a7a (diff) | |
download | CMake-ddec418a8f27e62ae9f37cd03d28a42eeaa1527f.zip CMake-ddec418a8f27e62ae9f37cd03d28a42eeaa1527f.tar.gz CMake-ddec418a8f27e62ae9f37cd03d28a42eeaa1527f.tar.bz2 |
Features: Add compiler version support to WriteCompilerDetectionHeader.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/WriteCompilerDetectionHeader.cmake | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/Modules/WriteCompilerDetectionHeader.cmake b/Modules/WriteCompilerDetectionHeader.cmake index 3f8d835..561a558 100644 --- a/Modules/WriteCompilerDetectionHeader.cmake +++ b/Modules/WriteCompilerDetectionHeader.cmake @@ -52,7 +52,15 @@ # Feature Test Macros # =================== # -# For each compiler, a preprocessor test of the compiler version is generated +# For each compiler, a preprocessor macro is generated matching +# ``<PREFIX>_COMPILER_IS_<compiler>`` which has the content either ``0`` +# or ``1``, depending on the compiler in use. Preprocessor macros for +# compiler version components are generated matching +# ``<PREFIX>_COMPILER_VERSION_MAJOR`` ``<PREFIX>_COMPILER_VERSION_MINOR`` +# and ``<PREFIX>_COMPILER_VERSION_PATCH`` containing decimal values +# for the corresponding compiler version components, if defined. +# +# A preprocessor test is generated based on the compiler version # denoting whether each feature is enabled. A preprocessor macro # matching ``<PREFIX>_COMPILER_<FEATURE>``, where ``<FEATURE>`` is the # upper-case ``<feature>`` name, is generated to contain the value @@ -166,6 +174,8 @@ function(_load_compiler_variables CompilerId lang) foreach(feature ${ARGN}) set(_cmake_feature_test_${CompilerId}_${feature} ${_cmake_feature_test_${feature}} PARENT_SCOPE) endforeach() + include("${CMAKE_ROOT}/Modules/Compiler/${CompilerId}-DetermineCompiler.cmake" OPTIONAL) + set(_compiler_id_version_compute_${CompilerId} ${_compiler_id_version_compute} PARENT_SCOPE) endfunction() function(write_compiler_detection_header @@ -210,11 +220,20 @@ function(write_compiler_detection_header GNU Clang ) + + set(_hex_compilers ADSP Borland Embarcadero SunPro) + foreach(_comp ${_WCD_COMPILERS}) list(FIND compilers ${_comp} idx) if (idx EQUAL -1) message(FATAL_ERROR "Unsupported compiler ${_comp}.") endif() + if (NOT _need_hex_conversion) + list(FIND _hex_compilers ${_comp} idx) + if (NOT idx EQUAL -1) + set(_need_hex_conversion TRUE) + endif() + endif() endforeach() set(file_content " @@ -228,6 +247,21 @@ function(write_compiler_detection_header set(file_content "${file_content}\n${_WCD_PROLOG}\n") endif() + if (_need_hex_conversion) + set(file_content "${file_content} +#define ${prefix_arg}_DEC(X) (X) +#define ${prefix_arg}_HEX(X) ( \\ + ((X)>>28 & 0xF) * 10000000 + \\ + ((X)>>24 & 0xF) * 1000000 + \\ + ((X)>>20 & 0xF) * 100000 + \\ + ((X)>>16 & 0xF) * 10000 + \\ + ((X)>>12 & 0xF) * 1000 + \\ + ((X)>>8 & 0xF) * 100 + \\ + ((X)>>4 & 0xF) * 10 + \\ + ((X) & 0xF) \\ + )\n") + endif() + foreach(feature ${_WCD_FEATURES}) if (feature MATCHES "^cxx_") list(APPEND _langs CXX) @@ -271,6 +305,21 @@ function(write_compiler_detection_header # if !(${_cmake_oldestSupported_${compiler}}) # error Unsupported compiler version # endif\n") + + set(PREFIX ${prefix_arg}_) + if (_need_hex_conversion) + set(MACRO_DEC ${prefix_arg}_DEC) + set(MACRO_HEX ${prefix_arg}_HEX) + else() + set(MACRO_DEC) + set(MACRO_HEX) + endif() + string(CONFIGURE "${_compiler_id_version_compute_${compiler}}" VERSION_BLOCK @ONLY) + set(file_content "${file_content}${VERSION_BLOCK}\n") + set(PREFIX) + set(MACRO_DEC) + set(MACRO_HEX) + set(pp_if "elif") foreach(feature ${${_lang}_features}) string(TOUPPER ${feature} feature_upper) |