Browse Source

ENH: Make compiler id detection more robust

  - Split INFO strings in source into multiple pieces
    to make sure assembly or other listings produced
    by the compiler are never matched by the regex
  - Store INFO strings via pointer instead of array
    to convince some compilers to store the string
    literally in the binary
  - This should help make it work for sdcc 2.8.0 RC1
Brad King 18 years ago
parent
commit
70c2dc8a64
3 changed files with 15 additions and 3 deletions
  1. 5 1
      Modules/CMakeCCompilerId.c.in
  2. 5 1
      Modules/CMakeCXXCompilerId.cpp.in
  3. 5 1
      Modules/CMakePlatformId.h.in

+ 5 - 1
Modules/CMakeCCompilerId.c.in

@@ -75,6 +75,10 @@ int main() { return 0; }
 
 #endif
 
-char info_compiler[] = "INFO:compiler[" COMPILER_ID "]";
+/* Construct the string literal in pieces to prevent the source from
+   getting matched.  Store it in a pointer rather than an array
+   because some compilers will just produce instructions to fill the
+   array rather than assigning a pointer to a static array.  */
+char* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
 
 @CMAKE_C_COMPILER_ID_PLATFORM_CONTENT@

+ 5 - 1
Modules/CMakeCXXCompilerId.cpp.in

@@ -63,6 +63,10 @@ int main() { return 0; }
 
 #endif
 
-char info_compiler[] = "INFO:compiler[" COMPILER_ID "]";
+/* Construct the string literal in pieces to prevent the source from
+   getting matched.  Store it in a pointer rather than an array
+   because some compilers will just produce instructions to fill the
+   array rather than assigning a pointer to a static array.  */
+char* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
 
 @CMAKE_CXX_COMPILER_ID_PLATFORM_CONTENT@

+ 5 - 1
Modules/CMakePlatformId.h.in

@@ -76,4 +76,8 @@
 
 #endif
 
-char info_platform[] = "INFO:platform[" PLATFORM_ID "]";
+/* Construct the string literal in pieces to prevent the source from
+   getting matched.  Store it in a pointer rather than an array
+   because some compilers will just produce instructions to fill the
+   array rather than assigning a pointer to a static array.  */
+char* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";