|
|
@@ -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)
|