Browse Source

ENH: Add option of adding random include files before doing CheckTypeSize

Andy Cedilnik 21 years ago
parent
commit
518de19f74
2 changed files with 14 additions and 2 deletions
  1. 4 0
      Modules/CheckTypeSize.c.in
  2. 10 2
      Modules/CheckTypeSize.cmake

+ 4 - 0
Modules/CheckTypeSize.c → Modules/CheckTypeSize.c.in

@@ -1,5 +1,7 @@
 #ifdef CHECK_TYPE_SIZE_TYPE
 
+@CHECK_TYPE_SIZE_PREINCLUDE@
+
 #ifdef HAVE_SYS_TYPES_H
 #  include <sys/types.h>
 #endif /* HAVE_SYS_TYPES_H */
@@ -12,6 +14,8 @@
 #  include <stddef.h>
 #endif /* HAVE_STDDEF_H */
 
+@CHECK_TYPE_SIZE_PREMAIN@
+
 #ifdef __CLASSIC_C__
 int main(){
   int ac;

+ 10 - 2
Modules/CheckTypeSize.cmake

@@ -18,6 +18,14 @@ MACRO(CHECK_TYPE_SIZE TYPE VARIABLE)
           "${MACRO_CHECK_TYPE_SIZE_FLAGS} -D${def}")
       ENDIF("${def}")
     ENDFOREACH(def)
+    SET(CHECK_TYPE_SIZE_PREMAIN)
+    FOREACH(def ${CMAKE_EXTRA_INCLUDE_FILES})
+      SET(CHECK_TYPE_SIZE_PREMAIN "${CHECK_TYPE_SIZE_PREMAIN}#include \"${def}\"\n")
+    ENDFOREACH(def)
+    CONFIGURE_FILE("${CMAKE_ROOT}/Modules/CheckTypeSize.c.in"
+      "${CMAKE_BINARY_DIR}/CMakeTmp/CheckTypeSize.c" IMMEDIATE @ONLY)
+    FILE(READ "${CMAKE_BINARY_DIR}/CMakeTmp/CheckTypeSize.c"
+      CHECK_TYPE_SIZE_FILE_CONTENT)
     MESSAGE(STATUS "Check size of ${TYPE}")
     IF(CMAKE_REQUIRED_LIBRARIES)
       SET(CHECK_TYPE_SIZE_ADD_LIBRARIES 
@@ -25,7 +33,7 @@ MACRO(CHECK_TYPE_SIZE TYPE VARIABLE)
     ENDIF(CMAKE_REQUIRED_LIBRARIES)
     TRY_RUN(${VARIABLE} HAVE_${VARIABLE}
       ${CMAKE_BINARY_DIR}
-      ${CMAKE_ROOT}/Modules/CheckTypeSize.c
+      "${CMAKE_BINARY_DIR}/CMakeTmp/CheckTypeSize.c"
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_TYPE_SIZE_FLAGS}
       "${CHECK_TYPE_SIZE_ADD_LIBRARIES}"
       OUTPUT_VARIABLE OUTPUT)
@@ -36,7 +44,7 @@ MACRO(CHECK_TYPE_SIZE TYPE VARIABLE)
     ELSE(HAVE_${VARIABLE})
       MESSAGE(STATUS "Check size of ${TYPE} - failed")
       FILE(APPEND ${CMAKE_BINARY_DIR}/CMakeError.log 
-        "Determining size of ${TYPE} failed with the following output:\n${OUTPUT}\n\n")
+        "Determining size of ${TYPE} failed with the following output:\n${OUTPUT}\nCheckTypeSize.c:\n${CHECK_TYPE_SIZE_FILE_CONTENT}\n\n")
     ENDIF(HAVE_${VARIABLE})
   ENDIF("HAVE_${VARIABLE}" MATCHES "^HAVE_${VARIABLE}$")
   SET(CMAKE_ALLOW_UNKNOWN_VARIABLE_READ_ACCESS )