summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2020-12-04 13:25:37 (GMT)
committerKitware Robot <kwrobot@kitware.com>2020-12-04 13:27:02 (GMT)
commit1525385b20bdfbdb8f82d3f46ec1b8006605c91f (patch)
tree1a81541f5d4f688df3866fa557d24c6ea8be1bd4
parent22b4bea318392a717ae83071ed33d734ef351ad9 (diff)
parentf25ac39deeba879bb521f5c6f6ed3bc79ad5602c (diff)
downloadCMake-1525385b20bdfbdb8f82d3f46ec1b8006605c91f.zip
CMake-1525385b20bdfbdb8f82d3f46ec1b8006605c91f.tar.gz
CMake-1525385b20bdfbdb8f82d3f46ec1b8006605c91f.tar.bz2
Merge topic 'compiler-id-extra-text' into release-3.19
f25ac39dee CMakeDetermineCompilerId: Tolerate stray text around INFO strings 5cb66f17ca CMakeDetermineCompilerId: Add whitespace to clarify logic 1ee99104f7 CMakeDetermineCompilerId: Filter IAR-AVR format INFO strings earlier Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5570
-rw-r--r--Modules/CMakeDetermineCompilerId.cmake23
1 files changed, 16 insertions, 7 deletions
diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake
index a982d2c..937a120 100644
--- a/Modules/CMakeDetermineCompilerId.cmake
+++ b/Modules/CMakeDetermineCompilerId.cmake
@@ -752,19 +752,28 @@ function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
break()
endif()
endforeach()
- set(COMPILER_ID_TWICE)
+
# With the IAR Compiler, some strings are found twice, first time as incomplete
# list like "?<Constant "INFO:compiler[IAR]">". Remove the incomplete copies.
list(FILTER CMAKE_${lang}_COMPILER_ID_STRINGS EXCLUDE REGEX "\\?<Constant \\\"")
+
+ # The IAR-AVR compiler uses a binary format that places a '6'
+ # character (0x34) before each character in the string. Strip
+ # out these characters without removing any legitimate characters.
+ if(CMAKE_${lang}_COMPILER_ID_STRINGS MATCHES "(.)I.N.F.O.:.")
+ string(REGEX REPLACE "${CMAKE_MATCH_1}([^;])" "\\1"
+ CMAKE_${lang}_COMPILER_ID_STRINGS "${CMAKE_${lang}_COMPILER_ID_STRINGS}")
+ endif()
+
+ # Remove arbitrary text that may appear before or after each INFO string.
+ string(REGEX MATCHALL "INFO:[A-Za-z0-9_]+\\[([^]\"]*)\\]"
+ CMAKE_${lang}_COMPILER_ID_STRINGS "${CMAKE_${lang}_COMPILER_ID_STRINGS}")
+
# In C# binaries, some strings are found more than once.
list(REMOVE_DUPLICATES CMAKE_${lang}_COMPILER_ID_STRINGS)
+
+ set(COMPILER_ID_TWICE)
foreach(info ${CMAKE_${lang}_COMPILER_ID_STRINGS})
- # The IAR-AVR compiler uses a binary format that places a '6'
- # character (0x34) before each character in the string. Strip
- # out these characters without removing any legitimate characters.
- if("${info}" MATCHES "(.)I.N.F.O.:.")
- string(REGEX REPLACE "${CMAKE_MATCH_1}(.)" "\\1" info "${info}")
- endif()
if("${info}" MATCHES "INFO:compiler\\[([^]\"]*)\\]")
if(COMPILER_ID)
set(COMPILER_ID_TWICE 1)