Sfoglia il codice sorgente

Add two commonly used modules. First one checks if the function exists, the second one checks the size of type

Andy Cedilnik 23 anni fa
parent
commit
76e9af1575

+ 15 - 0
Modules/CheckFunctionExists.c

@@ -0,0 +1,15 @@
+#ifdef CHECK_FUNCTION_EXISTS
+
+char CHECK_FUNCTION_EXISTS();
+
+int main()
+{
+  CHECK_FUNCTION_EXISTS();
+  return 0;
+}
+
+#else  /* CHECK_FUNCTION_EXISTS */
+
+#  error "CHECK_FUNCTION_EXISTS has to specify the function"
+
+#endif /* CHECK_FUNCTION_EXISTS */

+ 22 - 0
Modules/CheckFunctionExists.cmake

@@ -0,0 +1,22 @@
+#
+# Check if the type exists and determine size of type.  if the type
+# exists, the size will be stored to the variable.
+#
+# CHECK_TYPE_SIZE - macro which checks the size of type
+# VARIABLE - variable to store size if the type exists.
+#
+
+MACRO(CHECK_FUNCTION_EXISTS FUNCTION VARIABLE)
+  TRY_COMPILE(COMPILE_OK
+             ${PROJECT_BINARY_DIR}
+             ${CMAKE_ROOT}/Modules/CheckFunctionExists.c
+             COMPILE_DEFINITIONS -DCHECK_FUNCTION_EXISTS=${FUNCTION} 
+             OUTPUT_VARIABLE OUTPUT)
+  IF(COMPILE_OK)
+    SET(${VARIABLE} ${COMPILE_OK})
+  ELSE(COMPILE_OK)
+    WRITE_FILE(${PROJECT_BINARY_DIR}/CMakeError.log 
+      "Determining if the function ${FUNCTION} exists failed with the following output:\n"
+      "${OUTPUT}\n")
+  ENDIF(COMPILE_OK)
+ENDMACRO(CHECK_FUNCTION_EXISTS)

+ 20 - 0
Modules/CheckSizeOf.c

@@ -0,0 +1,20 @@
+#ifdef CHECK_SIZE_OF
+
+#ifdef HAVE_SYS_TYPES_H
+#  include <sys/types.h>
+#endif /* HAVE_SYS_TYPES_H */
+
+#ifdef HAVE_STDINT_H
+#  include <stdint.h>
+#endif /* HAVE_STDINT_H */
+
+int main()
+{
+  return sizeof(CHECK_SIZE_OF);
+}
+
+#else  /* CHECK_SIZE_OF */
+
+#  error "CHECK_SIZE_OF has to specify the type"
+
+#endif /* CHECK_SIZE_OF */

+ 21 - 0
Modules/CheckSizeOf.cmake

@@ -0,0 +1,21 @@
+#
+# Check if the type exists and determine size of type.  if the type
+# exists, the size will be stored to the variable.
+#
+# CHECK_TYPE_SIZE - macro which checks the size of type
+# VARIABLE - variable to store size if the type exists.
+#
+
+MACRO(CHECK_TYPE_SIZE TYPE VARIABLE)
+  TRY_RUN(RUN_RESULT COMPILE_OK 
+          ${PROJECT_BINARY_DIR}
+          ${CMAKE_ROOT}/Modules/CheckSizeOf.c
+          COMPILE_DEFINITIONS -DCHECK_SIZE_OF="${TYPE}"
+          OUTPUT_VARIABLE OUTPUT)
+  IF(COMPILE_OK)
+    SET(${VARIABLE} ${RUN_RESULT})
+  ELSE(COMPILE_OK)
+    WRITE_FILE(${PROJECT_BINARY_DIR}/CMakeError.log 
+      "Determining size of ${TYPE} failed with the following output:\n${OUTPUT}\n")
+  ENDIF(COMPILE_OK)
+ENDMACRO(CHECK_TYPE_SIZE)