Browse Source

CMakeDetermineCompilerABI: Look for more INFO strings in test binary

Explicitly use only the first occurrence of each matched INFO string
since previously we only extracted the first two anyway.
Brad King 5 years ago
parent
commit
606b34b3a6
1 changed files with 5 additions and 3 deletions
  1. 5 3
      Modules/CMakeDetermineCompilerABI.cmake

+ 5 - 3
Modules/CMakeDetermineCompilerABI.cmake

@@ -75,12 +75,14 @@ function(CMAKE_DETERMINE_COMPILER_ABI lang src)
       message(CHECK_PASS "done")
       file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
         "Detecting ${lang} compiler ABI info compiled with the following output:\n${OUTPUT}\n\n")
-      file(STRINGS "${BIN}" ABI_STRINGS LIMIT_COUNT 2 REGEX "INFO:[A-Za-z0-9_]+\\[[^]]*\\]")
+      file(STRINGS "${BIN}" ABI_STRINGS LIMIT_COUNT 32 REGEX "INFO:[A-Za-z0-9_]+\\[[^]]*\\]")
+      set(ABI_SIZEOF_DPTR "NOTFOUND")
+      set(ABI_NAME "NOTFOUND")
       foreach(info ${ABI_STRINGS})
-        if("${info}" MATCHES "INFO:sizeof_dptr\\[0*([^]]*)\\]")
+        if("${info}" MATCHES "INFO:sizeof_dptr\\[0*([^]]*)\\]" AND NOT ABI_SIZEOF_DPTR)
           set(ABI_SIZEOF_DPTR "${CMAKE_MATCH_1}")
         endif()
-        if("${info}" MATCHES "INFO:abi\\[([^]]*)\\]")
+        if("${info}" MATCHES "INFO:abi\\[([^]]*)\\]" AND NOT ABI_NAME)
           set(ABI_NAME "${CMAKE_MATCH_1}")
         endif()
       endforeach()