Add infrastructure to detect secondary compiler version information
Create a `CMAKE_<LANG>_COMPILER_VERSION_INTERNAL` variable to hold a secondary/internal compiler version number detected at the same time as the primary compiler version. This will be useful for some compilers where we need such a number to determine correct usage. Inspired-by: Stefan Andersson <tfosm@hotmail.com> Suggested-by: Norbert Lange <norbert.lange@andritz.com> Issue: #17264
This commit is contained in:
parent
f952f16d23
commit
b96ca728f1
@ -400,6 +400,7 @@ Variables for Languages
|
|||||||
/variable/CMAKE_LANG_COMPILER_PREDEFINES_COMMAND
|
/variable/CMAKE_LANG_COMPILER_PREDEFINES_COMMAND
|
||||||
/variable/CMAKE_LANG_COMPILER_TARGET
|
/variable/CMAKE_LANG_COMPILER_TARGET
|
||||||
/variable/CMAKE_LANG_COMPILER_VERSION
|
/variable/CMAKE_LANG_COMPILER_VERSION
|
||||||
|
/variable/CMAKE_LANG_COMPILER_VERSION_INTERNAL
|
||||||
/variable/CMAKE_LANG_COMPILE_OBJECT
|
/variable/CMAKE_LANG_COMPILE_OBJECT
|
||||||
/variable/CMAKE_LANG_CREATE_SHARED_LIBRARY
|
/variable/CMAKE_LANG_CREATE_SHARED_LIBRARY
|
||||||
/variable/CMAKE_LANG_CREATE_SHARED_MODULE
|
/variable/CMAKE_LANG_CREATE_SHARED_MODULE
|
||||||
|
8
Help/variable/CMAKE_LANG_COMPILER_VERSION_INTERNAL.rst
Normal file
8
Help/variable/CMAKE_LANG_COMPILER_VERSION_INTERNAL.rst
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
CMAKE_<LANG>_COMPILER_VERSION_INTERNAL
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
An internal variable subject to change.
|
||||||
|
|
||||||
|
This is used to identify the variant of a compiler based on an internal
|
||||||
|
version number. For some compilers this is needed to determine the
|
||||||
|
correct usage.
|
@ -2,6 +2,7 @@ set(CMAKE_C_COMPILER "@CMAKE_C_COMPILER@")
|
|||||||
set(CMAKE_C_COMPILER_ARG1 "@CMAKE_C_COMPILER_ARG1@")
|
set(CMAKE_C_COMPILER_ARG1 "@CMAKE_C_COMPILER_ARG1@")
|
||||||
set(CMAKE_C_COMPILER_ID "@CMAKE_C_COMPILER_ID@")
|
set(CMAKE_C_COMPILER_ID "@CMAKE_C_COMPILER_ID@")
|
||||||
set(CMAKE_C_COMPILER_VERSION "@CMAKE_C_COMPILER_VERSION@")
|
set(CMAKE_C_COMPILER_VERSION "@CMAKE_C_COMPILER_VERSION@")
|
||||||
|
set(CMAKE_C_COMPILER_VERSION_INTERNAL "@CMAKE_C_COMPILER_VERSION_INTERNAL@")
|
||||||
set(CMAKE_C_COMPILER_WRAPPER "@CMAKE_C_COMPILER_WRAPPER@")
|
set(CMAKE_C_COMPILER_WRAPPER "@CMAKE_C_COMPILER_WRAPPER@")
|
||||||
set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "@CMAKE_C_STANDARD_COMPUTED_DEFAULT@")
|
set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "@CMAKE_C_STANDARD_COMPUTED_DEFAULT@")
|
||||||
set(CMAKE_C_COMPILE_FEATURES "@CMAKE_C_COMPILE_FEATURES@")
|
set(CMAKE_C_COMPILE_FEATURES "@CMAKE_C_COMPILE_FEATURES@")
|
||||||
|
@ -67,6 +67,9 @@ int main(int argc, char* argv[])
|
|||||||
#ifdef COMPILER_VERSION_MAJOR
|
#ifdef COMPILER_VERSION_MAJOR
|
||||||
require += info_version[argc];
|
require += info_version[argc];
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef COMPILER_VERSION_INTERNAL
|
||||||
|
require += info_version_internal[argc];
|
||||||
|
#endif
|
||||||
#ifdef SIMULATE_ID
|
#ifdef SIMULATE_ID
|
||||||
require += info_simulate[argc];
|
require += info_simulate[argc];
|
||||||
#endif
|
#endif
|
||||||
|
@ -2,6 +2,7 @@ set(CMAKE_CXX_COMPILER "@CMAKE_CXX_COMPILER@")
|
|||||||
set(CMAKE_CXX_COMPILER_ARG1 "@CMAKE_CXX_COMPILER_ARG1@")
|
set(CMAKE_CXX_COMPILER_ARG1 "@CMAKE_CXX_COMPILER_ARG1@")
|
||||||
set(CMAKE_CXX_COMPILER_ID "@CMAKE_CXX_COMPILER_ID@")
|
set(CMAKE_CXX_COMPILER_ID "@CMAKE_CXX_COMPILER_ID@")
|
||||||
set(CMAKE_CXX_COMPILER_VERSION "@CMAKE_CXX_COMPILER_VERSION@")
|
set(CMAKE_CXX_COMPILER_VERSION "@CMAKE_CXX_COMPILER_VERSION@")
|
||||||
|
set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "@CMAKE_CXX_COMPILER_VERSION_INTERNAL@")
|
||||||
set(CMAKE_CXX_COMPILER_WRAPPER "@CMAKE_CXX_COMPILER_WRAPPER@")
|
set(CMAKE_CXX_COMPILER_WRAPPER "@CMAKE_CXX_COMPILER_WRAPPER@")
|
||||||
set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "@CMAKE_CXX_STANDARD_COMPUTED_DEFAULT@")
|
set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "@CMAKE_CXX_STANDARD_COMPUTED_DEFAULT@")
|
||||||
set(CMAKE_CXX_COMPILE_FEATURES "@CMAKE_CXX_COMPILE_FEATURES@")
|
set(CMAKE_CXX_COMPILE_FEATURES "@CMAKE_CXX_COMPILE_FEATURES@")
|
||||||
|
@ -55,6 +55,9 @@ int main(int argc, char* argv[])
|
|||||||
#ifdef COMPILER_VERSION_MAJOR
|
#ifdef COMPILER_VERSION_MAJOR
|
||||||
require += info_version[argc];
|
require += info_version[argc];
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef COMPILER_VERSION_INTERNAL
|
||||||
|
require += info_version_internal[argc];
|
||||||
|
#endif
|
||||||
#ifdef SIMULATE_ID
|
#ifdef SIMULATE_ID
|
||||||
require += info_simulate[argc];
|
require += info_simulate[argc];
|
||||||
#endif
|
#endif
|
||||||
|
@ -108,6 +108,7 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
|
|||||||
set(CMAKE_${lang}_XCODE_CURRENT_ARCH "${CMAKE_${lang}_XCODE_CURRENT_ARCH}" PARENT_SCOPE)
|
set(CMAKE_${lang}_XCODE_CURRENT_ARCH "${CMAKE_${lang}_XCODE_CURRENT_ARCH}" PARENT_SCOPE)
|
||||||
set(CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX "${CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX}" PARENT_SCOPE)
|
set(CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX "${CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX}" PARENT_SCOPE)
|
||||||
set(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_${lang}_COMPILER_VERSION}" PARENT_SCOPE)
|
set(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_${lang}_COMPILER_VERSION}" PARENT_SCOPE)
|
||||||
|
set(CMAKE_${lang}_COMPILER_VERSION_INTERNAL "${CMAKE_${lang}_COMPILER_VERSION_INTERNAL}" PARENT_SCOPE)
|
||||||
set(CMAKE_${lang}_COMPILER_WRAPPER "${CMAKE_${lang}_COMPILER_WRAPPER}" PARENT_SCOPE)
|
set(CMAKE_${lang}_COMPILER_WRAPPER "${CMAKE_${lang}_COMPILER_WRAPPER}" PARENT_SCOPE)
|
||||||
set(CMAKE_${lang}_SIMULATE_ID "${CMAKE_${lang}_SIMULATE_ID}" PARENT_SCOPE)
|
set(CMAKE_${lang}_SIMULATE_ID "${CMAKE_${lang}_SIMULATE_ID}" PARENT_SCOPE)
|
||||||
set(CMAKE_${lang}_SIMULATE_VERSION "${CMAKE_${lang}_SIMULATE_VERSION}" PARENT_SCOPE)
|
set(CMAKE_${lang}_SIMULATE_VERSION "${CMAKE_${lang}_SIMULATE_VERSION}" PARENT_SCOPE)
|
||||||
@ -473,6 +474,7 @@ function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
|
|||||||
set(COMPILER_VERSION_MINOR 0)
|
set(COMPILER_VERSION_MINOR 0)
|
||||||
set(COMPILER_VERSION_PATCH 0)
|
set(COMPILER_VERSION_PATCH 0)
|
||||||
set(COMPILER_VERSION_TWEAK 0)
|
set(COMPILER_VERSION_TWEAK 0)
|
||||||
|
set(COMPILER_VERSION_INTERNAL "")
|
||||||
set(HAVE_COMPILER_VERSION_MAJOR 0)
|
set(HAVE_COMPILER_VERSION_MAJOR 0)
|
||||||
set(HAVE_COMPILER_VERSION_MINOR 0)
|
set(HAVE_COMPILER_VERSION_MINOR 0)
|
||||||
set(HAVE_COMPILER_VERSION_PATCH 0)
|
set(HAVE_COMPILER_VERSION_PATCH 0)
|
||||||
@ -514,6 +516,10 @@ function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
|
|||||||
string(REGEX REPLACE "^0+([0-9])" "\\1" COMPILER_VERSION "${CMAKE_MATCH_1}")
|
string(REGEX REPLACE "^0+([0-9])" "\\1" COMPILER_VERSION "${CMAKE_MATCH_1}")
|
||||||
string(REGEX REPLACE "\\.0+([0-9])" ".\\1" COMPILER_VERSION "${COMPILER_VERSION}")
|
string(REGEX REPLACE "\\.0+([0-9])" ".\\1" COMPILER_VERSION "${COMPILER_VERSION}")
|
||||||
endif()
|
endif()
|
||||||
|
if("${info}" MATCHES "INFO:compiler_version_internal\\[([^]\"]*)\\]")
|
||||||
|
string(REGEX REPLACE "^0+([0-9])" "\\1" COMPILER_VERSION_INTERNAL "${CMAKE_MATCH_1}")
|
||||||
|
string(REGEX REPLACE "\\.0+([0-9])" ".\\1" COMPILER_VERSION_INTERNAL "${COMPILER_VERSION_INTERNAL}")
|
||||||
|
endif()
|
||||||
foreach(comp MAJOR MINOR PATCH TWEAK)
|
foreach(comp MAJOR MINOR PATCH TWEAK)
|
||||||
foreach(digit 1 2 3 4 5 6 7 8 9)
|
foreach(digit 1 2 3 4 5 6 7 8 9)
|
||||||
if("${info}" MATCHES "INFO:compiler_version_${comp}_digit_${digit}\\[([0-9])\\]")
|
if("${info}" MATCHES "INFO:compiler_version_${comp}_digit_${digit}\\[([0-9])\\]")
|
||||||
@ -589,6 +595,7 @@ function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
|
|||||||
set(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID "${ARCHITECTURE_ID}")
|
set(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID "${ARCHITECTURE_ID}")
|
||||||
set(MSVC_${lang}_ARCHITECTURE_ID "${ARCHITECTURE_ID}")
|
set(MSVC_${lang}_ARCHITECTURE_ID "${ARCHITECTURE_ID}")
|
||||||
set(CMAKE_${lang}_COMPILER_VERSION "${COMPILER_VERSION}")
|
set(CMAKE_${lang}_COMPILER_VERSION "${COMPILER_VERSION}")
|
||||||
|
set(CMAKE_${lang}_COMPILER_VERSION_INTERNAL "${COMPILER_VERSION_INTERNAL}")
|
||||||
set(CMAKE_${lang}_SIMULATE_ID "${SIMULATE_ID}")
|
set(CMAKE_${lang}_SIMULATE_ID "${SIMULATE_ID}")
|
||||||
set(CMAKE_${lang}_SIMULATE_VERSION "${SIMULATE_VERSION}")
|
set(CMAKE_${lang}_SIMULATE_VERSION "${SIMULATE_VERSION}")
|
||||||
endif()
|
endif()
|
||||||
@ -640,6 +647,7 @@ function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
|
|||||||
set(MSVC_${lang}_ARCHITECTURE_ID "${MSVC_${lang}_ARCHITECTURE_ID}"
|
set(MSVC_${lang}_ARCHITECTURE_ID "${MSVC_${lang}_ARCHITECTURE_ID}"
|
||||||
PARENT_SCOPE)
|
PARENT_SCOPE)
|
||||||
set(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_${lang}_COMPILER_VERSION}" PARENT_SCOPE)
|
set(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_${lang}_COMPILER_VERSION}" PARENT_SCOPE)
|
||||||
|
set(CMAKE_${lang}_COMPILER_VERSION_INTERNAL "${CMAKE_${lang}_COMPILER_VERSION_INTERNAL}" PARENT_SCOPE)
|
||||||
set(CMAKE_${lang}_COMPILER_WRAPPER "${COMPILER_WRAPPER}" PARENT_SCOPE)
|
set(CMAKE_${lang}_COMPILER_WRAPPER "${COMPILER_WRAPPER}" PARENT_SCOPE)
|
||||||
set(CMAKE_${lang}_SIMULATE_ID "${CMAKE_${lang}_SIMULATE_ID}" PARENT_SCOPE)
|
set(CMAKE_${lang}_SIMULATE_ID "${CMAKE_${lang}_SIMULATE_ID}" PARENT_SCOPE)
|
||||||
set(CMAKE_${lang}_SIMULATE_VERSION "${CMAKE_${lang}_SIMULATE_VERSION}" PARENT_SCOPE)
|
set(CMAKE_${lang}_SIMULATE_VERSION "${CMAKE_${lang}_SIMULATE_VERSION}" PARENT_SCOPE)
|
||||||
|
@ -201,6 +201,15 @@ char const info_version[] = {
|
|||||||
']','\0'};
|
']','\0'};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Construct a string literal encoding the internal version number. */
|
||||||
|
#ifdef COMPILER_VERSION_INTERNAL
|
||||||
|
char const info_version_internal[] = {
|
||||||
|
'I', 'N', 'F', 'O', ':',
|
||||||
|
'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
|
||||||
|
'i','n','t','e','r','n','a','l','[',
|
||||||
|
COMPILER_VERSION_INTERNAL,']','\0'};
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Construct a string literal encoding the version number components. */
|
/* Construct a string literal encoding the version number components. */
|
||||||
#ifdef SIMULATE_VERSION_MAJOR
|
#ifdef SIMULATE_VERSION_MAJOR
|
||||||
char const info_simulate_version[] = {
|
char const info_simulate_version[] = {
|
||||||
|
Loading…
Reference in New Issue
Block a user