]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Ensure that int64_t, int32_t, int16_t, intmax_t, uint64_t, uint32_t,
authorTim Kientzle <kientzle@gmail.com>
Sun, 23 Jan 2011 06:14:21 +0000 (01:14 -0500)
committerTim Kientzle <kientzle@gmail.com>
Sun, 23 Jan 2011 06:14:21 +0000 (01:14 -0500)
uint16_t, and uintmax_t are all defined by probing the available
integer types and their sizes during the configure, then using that
information to typedef the required types at compile time.

SVN-Revision: 2939

CMakeLists.txt
build/cmake/config.h.in

index 989279098ab51e48dfcd6d02e6bb7ebce3120dcc..f755ff10f24b79bcc891371eb77d13091bcfd59e 100644 (file)
@@ -637,13 +637,29 @@ CHECK_STRUCT_MEMBER("struct tm" tm_sec
 #
 # Check for integer types
 #
-# XXX There must be a way to make this simpler <sigh> XXXX
 #
-CHECK_TYPE_SIZE("long long int"            LONG_LONG_INT)
-CHECK_TYPE_SIZE("unsigned long long"       UNSIGNED_LONG_LONG)
-CHECK_TYPE_SIZE("unsigned long long int"   UNSIGNED_LONG_LONG_INT)
+CHECK_TYPE_SIZE("short" SIZE_OF_SHORT)
+CHECK_TYPE_SIZE("int" SIZE_OF_INT)
+CHECK_TYPE_SIZE("long" SIZE_OF_LONG)
+CHECK_TYPE_SIZE("long long"     SIZE_OF_LONG_LONG)
+
+CHECK_TYPE_SIZE("unsigned short" SIZE_OF_UNSIGNED_SHORT)
+CHECK_TYPE_SIZE("unsigned" SIZE_OF_UNSIGNED)
+CHECK_TYPE_SIZE("unsigned long" SIZE_OF_UNSIGNED_LONG)
+CHECK_TYPE_SIZE("unsigned long long" SIZE_OF_UNSIGNED_LONG_LONG)
+
+CHECK_TYPE_SIZE("__int64" __INT64)
+CHECK_TYPE_SIZE("unsigned __int64" UNSIGNED___INT64)
+
+CHECK_TYPE_SIZE(int16_t INT16_T) 
+CHECK_TYPE_SIZE(int32_t INT32_T)
+CHECK_TYPE_SIZE(int64_t INT64_T)
+CHECK_TYPE_SIZE(intmax_t INTMAX_T)
+CHECK_TYPE_SIZE(uint16_t UINT16_T) 
+CHECK_TYPE_SIZE(uint32_t UINT32_T) 
+CHECK_TYPE_SIZE(uint64_t UINT64_T)
+CHECK_TYPE_SIZE(uintmax_t UINTMAX_T)
 
-#
 CHECK_TYPE_SIZE(dev_t       DEV_T)
 IF(NOT HAVE_DEV_T)
   IF(MSVC)
@@ -669,23 +685,6 @@ IF(NOT HAVE_ID_T)
   ENDIF(WIN32)
 ENDIF(NOT HAVE_ID_T)
 #
-CHECK_TYPE_SIZE(int32_t    INT32_T)
-IF(NOT HAVE_INT32_T)
-  SET(int32_t "int")
-ENDIF(NOT HAVE_INT32_T)
-#
-CHECK_TYPE_SIZE(int64_t     INT64_T)
-IF(NOT HAVE_INT64_T)
-  IF(WIN32)
-    SET(int64_t __int64)
-  ENDIF(WIN32)
-ENDIF(NOT HAVE_INT64_T)
-#
-CHECK_TYPE_SIZE(intmax_t    INTMAX_T)
-IF(NOT HAVE_INTMAX_T)
-  SET(intmax_t "int64_t")
-ENDIF(NOT HAVE_INTMAX_T)
-#
 CHECK_TYPE_SIZE(mode_t      MODE_T)
 IF(NOT HAVE_MODE_T)
   IF(WIN32)
@@ -736,28 +735,6 @@ IF(NOT HAVE_PID_T)
   ENDIF(WIN32)
 ENDIF(NOT HAVE_PID_T)
 #
-CHECK_TYPE_SIZE(uint16_t    UINT16_T)
-IF(NOT HAVE_UINT16_T)
-  SET(uint16_t "unsigned short")
-ENDIF(NOT HAVE_UINT16_T)
-#
-CHECK_TYPE_SIZE(uint32_t    UINT32_T)
-IF(NOT HAVE_UINT32_T)
-  SET(uint32_t "unsigned int")
-ENDIF(NOT HAVE_UINT32_T)
-#
-CHECK_TYPE_SIZE(uint64_t    UINT64_T)
-IF(NOT HAVE_UINT64_T)
-  IF(WIN32)
-    SET(uint64_t "unsigned __int64")
-  ENDIF(WIN32)
-ENDIF(NOT HAVE_UINT64_T)
-#
-CHECK_TYPE_SIZE(uintmax_t   UINTMAX_T)
-IF(NOT HAVE_UINTMAX_T)
-  SET(uintmax_t "uint64_t")
-ENDIF(NOT HAVE_UINTMAX_T)
-#
 CHECK_TYPE_SIZE(intptr_t   INTPTR_T)
 IF(NOT HAVE_INTPTR_T)
   IF("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
index f523ce40238cd9be9e3dbaea8ab4c8908de46eae..1b886b804745b6c95ad0b2678b7c4a7980058063 100644 (file)
@@ -1,4 +1,167 @@
-/* config.h.  Generated from config.h.cmake by cmake configure */
+/* config.h.  Generated from build/cmake/config.h.in by cmake configure */
+
+/*
+ * Ensure we have C99-style int64_t, etc, all defined.
+ */
+
+/* First, we need to know if the system has already defined them. */
+#cmakedefine HAVE_INT16_T
+#cmakedefine HAVE_INT32_T
+#cmakedefine HAVE_INT64_T
+#cmakedefine HAVE_INTMAX_T
+
+#cmakedefine HAVE_UINT16_T
+#cmakedefine HAVE_UINT32_T
+#cmakedefine HAVE_UINT64_T
+#cmakedefine HAVE_UINTMAX_T
+
+/* We might have the types we want under other spellings. */
+#cmakedefine HAVE___INT64
+#cmakedefine HAVE_U_INT64_T
+#cmakedefine HAVE_UNSIGNED___INT64
+
+/* The sizes of various standard integer types. */
+@SIZE_OF_SHORT_CODE@
+@SIZE_OF_INT_CODE@
+@SIZE_OF_LONG_CODE@
+@SIZE_OF_LONG_LONG_CODE@
+@SIZE_OF_UNSIGNED_SHORT_CODE@
+@SIZE_OF_UNSIGNED_CODE@
+@SIZE_OF_UNSIGNED_LONG_CODE@
+@SIZE_OF_UNSIGNED_LONG_LONG_CODE@
+
+/*
+ * If we lack int64_t, define it to the first of __int64, int, long, and long long
+ * that exists and is the right size.
+ */
+#if !defined(HAVE_INT64_T) && defined(HAVE___INT64)
+typedef __int64 int64_t;
+#define HAVE_INT64_T
+#endif
+
+#if !defined(HAVE_INT64_T) && SIZE_OF_INT == 8
+typedef int int64_t;
+#define HAVE_INT64_T
+#endif
+
+#if !defined(HAVE_INT64_T) && SIZE_OF_LONG == 8
+typedef long int64_t;
+#define HAVE_INT64_T
+#endif
+
+#if !defined(HAVE_INT64_T) && SIZE_OF_LONG_LONG == 8
+typedef long long int64_t;
+#define HAVE_INT64_T
+#endif
+
+#if !defined(HAVE_INT64_T)
+#error No 64-bit integer type was found.
+#endif
+
+/*
+ * Similarly for int32_t
+ */
+#if !defined(HAVE_INT32_T) && SIZE_OF_INT == 4
+typedef long int32_t;
+#define HAVE_INT32_T
+#endif
+
+#if !defined(HAVE_INT32_T) && SIZE_OF_LONG == 4
+typedef long int32_t;
+#define HAVE_INT32_T
+#endif
+
+#if !defined(HAVE_INT32_T)
+#error No 32-bit integer type was found.
+#endif
+
+/*
+ * Similarly for int16_t
+ */
+#if !defined(HAVE_INT16_T) && SIZE_OF_INT == 2
+typedef int int16_t;
+#define HAVE_INT16_T
+#endif
+
+#if !defined(HAVE_INT16_T) && SIZE_OF_SHORT == 2
+typedef short int16_t;
+#define HAVE_INT16_T
+#endif
+
+#if !defined(HAVE_INT16_T)
+#error No 16-bit integer type was found.
+#endif
+
+/*
+ * Similarly for uint64_t
+ */
+#if !defined(HAVE_UINT64_T) && defined(HAVE_UNSIGNED___INT64)
+typedef unsigned __int64 uint64_t;
+#define HAVE_UINT64_T
+#endif
+
+#if !defined(HAVE_UINT64_T) && SIZE_OF_UNSIGNED == 8
+typedef unsigned uint64_t;
+#define HAVE_UINT64_T
+#endif
+
+#if !defined(HAVE_UINT64_T) && SIZE_OF_UNSIGNED_LONG == 8
+typedef unsigned long uint64_t;
+#define HAVE_UINT64_T
+#endif
+
+#if !defined(HAVE_UINT64_T) && SIZE_OF_UNSIGNED_LONG_LONG == 8
+typedef unsigned long long uint64_t;
+#define HAVE_UINT64_T
+#endif
+
+#if !defined(HAVE_UINT64_T)
+#error No 64-bit unsigned integer type was found.
+#endif
+
+
+/*
+ * Similarly for uint32_t
+ */
+#if !defined(HAVE_UINT32_T) && SIZE_OF_UNSIGNED == 4
+typedef unsigned uint32_t;
+#define HAVE_UINT32_T
+#endif
+
+#if !defined(HAVE_UINT32_T) && SIZE_OF_UNSIGNED_LONG == 4
+typedef unsigned long uint32_t;
+#define HAVE_UINT32_T
+#endif
+
+#if !defined(HAVE_UINT32_T)
+#error No 32-bit unsigned integer type was found.
+#endif
+
+/*
+ * Similarly for uint16_t
+ */
+#if !defined(HAVE_UINT16_T) && SIZE_OF_UNSIGNED == 2
+typedef unsigned uint16_t;
+#define HAVE_UINT16_T
+#endif
+
+#if !defined(HAVE_UINT16_T) && SIZE_OF_UNSIGNED_SHORT == 2
+typedef unsigned short uint16_t;
+#define HAVE_UINT16_T
+#endif
+
+#if !defined(HAVE_UINT16_T)
+#error No 16-bit unsigned integer type was found.
+#endif
+
+/* Define intmax_t and uintmax_t if they are not already defined. */
+#if !defined(HAVE_INTMAX_T)
+typedef int64_t intmax_t;
+#endif
+
+#if !defined(HAVE_UINTMAX_T)
+typedef uint64_t uintmax_t;
+#endif
 
 /* MD5 via ARCHIVE_HASH_MD5_LIBC supported. */
 #cmakedefine ARCHIVE_HASH_MD5_LIBC
 /* Define to 1 if you have the <grp.h> header file. */
 #cmakedefine HAVE_GRP_H 1
 
-/* Define to 1 if the system has the type `intmax_t'. */
-#cmakedefine HAVE_INTMAX_T 1
-
 /* Define to 1 if you have the <inttypes.h> header file. */
 #cmakedefine HAVE_INTTYPES_H 1
 
 /* Define to 1 if you have the `tzset' function. */
 #cmakedefine HAVE_TZSET 1
 
-/* Define to 1 if the system has the type `uintmax_t'. */
-#cmakedefine HAVE_UINTMAX_T 1
-
 /* Define to 1 if you have the <unistd.h> header file. */
 #cmakedefine HAVE_UNISTD_H 1
 
 /* Define for large files, on AIX-style hosts. */
 #cmakedefine _LARGE_FILES ${_LARGE_FILES}
 
-/* Define for Solaris 2.5.1 so the uint64_t typedef from <sys/synch.h>,
-   <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
-   #define below would cause a syntax error. */
-#cmakedefine _UINT64_T
-
 /* Define for Windows to use Windows 2000+ APIs. */
 #cmakedefine _WIN32_WINNT ${_WIN32_WINNT}
 #cmakedefine WINVER ${WINVER}
 /* Define to `unsigned long' if <sys/types.h> does not define. */
 #cmakedefine id_t ${id_t}
 
-/* Define to `int' if <sys/types.h> doesn't define. */
-#cmakedefine int32_t ${int32_t}
-
-/* Define to the type of a signed integer type of width exactly 64 bits if
-   such a type exists and the standard includes do not define it. */
-#cmakedefine int64_t ${int64_t}
-
-/* Define to the widest signed integer type if <stdint.h> and <inttypes.h> do
-   not define. */
-#cmakedefine intmax_t ${intmax_t}
-
 /* Define to `int' if <sys/types.h> does not define. */
 #cmakedefine mode_t ${mode_t}
 
 /* Define to `int' if <sys/types.h> doesn't define. */
 #cmakedefine uid_t ${uid_t}
 
-/* Define to `unsigned short' if <sys/types.h> doesn't define. */
-#cmakedefine uint16_t ${uint16_t}
-
-/* Define to `unsigned int' if <sys/types.h> doesn't define. */
-#cmakedefine uint32_t ${uint32_t}
-
-/* Define to the type of an unsigned integer type of width exactly 64 bits if
-   such a type exists and the standard includes do not define it. */
-#cmakedefine uint64_t ${uint64_t}
-
-/* Define to the widest unsigned integer type if <stdint.h> and <inttypes.h>
-   do not define. */
-#cmakedefine uintmax_t ${uintmax_t}
-
 /* Define to `int' if <sys/types.h> does not define. */
 #cmakedefine intptr_t ${intptr_t}