Issue 10052: fix failed uint32_t / uint64_t / int32_t / int64_t detection on some platforms.

This commit is contained in:
Mark Dickinson 2012-12-02 12:11:38 +00:00
parent d8d1a0ab78
commit 983bc16c15
4 changed files with 93 additions and 8 deletions

View File

@ -87,9 +87,12 @@ Used in: PY_LONG_LONG
* uint32_t to be such a type unless stdint.h or inttypes.h defines uint32_t. * uint32_t to be such a type unless stdint.h or inttypes.h defines uint32_t.
* However, it doesn't set HAVE_UINT32_T, so we do that here. * However, it doesn't set HAVE_UINT32_T, so we do that here.
*/ */
#if (defined UINT32_MAX || defined uint32_t) #ifdef uint32_t
#ifndef PY_UINT32_T
#define HAVE_UINT32_T 1 #define HAVE_UINT32_T 1
#endif
#ifdef HAVE_UINT32_T
#ifndef PY_UINT32_T
#define PY_UINT32_T uint32_t #define PY_UINT32_T uint32_t
#endif #endif
#endif #endif
@ -97,23 +100,33 @@ Used in: PY_LONG_LONG
/* Macros for a 64-bit unsigned integer type; used for type 'twodigits' in the /* Macros for a 64-bit unsigned integer type; used for type 'twodigits' in the
* long integer implementation, when 30-bit digits are enabled. * long integer implementation, when 30-bit digits are enabled.
*/ */
#if (defined UINT64_MAX || defined uint64_t) #ifdef uint64_t
#ifndef PY_UINT64_T
#define HAVE_UINT64_T 1 #define HAVE_UINT64_T 1
#endif
#ifdef HAVE_UINT64_T
#ifndef PY_UINT64_T
#define PY_UINT64_T uint64_t #define PY_UINT64_T uint64_t
#endif #endif
#endif #endif
/* Signed variants of the above */ /* Signed variants of the above */
#if (defined INT32_MAX || defined int32_t) #ifdef int32_t
#ifndef PY_INT32_T
#define HAVE_INT32_T 1 #define HAVE_INT32_T 1
#endif
#ifdef HAVE_INT32_T
#ifndef PY_INT32_T
#define PY_INT32_T int32_t #define PY_INT32_T int32_t
#endif #endif
#endif #endif
#if (defined INT64_MAX || defined int64_t)
#ifndef PY_INT64_T #ifdef int64_t
#define HAVE_INT64_T 1 #define HAVE_INT64_T 1
#endif
#ifdef HAVE_INT64_T
#ifndef PY_INT64_T
#define PY_INT64_T int64_t #define PY_INT64_T int64_t
#endif #endif
#endif #endif

40
configure vendored
View File

@ -7433,6 +7433,21 @@ $as_echo "#define gid_t int" >>confdefs.h
fi fi
# There are two separate checks for each of the exact-width integer types we
# need. First we check whether the type is available using the usual
# AC_CHECK_TYPE macro with the default includes (which includes <inttypes.h>
# and <stdint.h> where available). We then also use the special type checks of
# the form AC_TYPE_UINT32_T, which in the case that uint32_t is not available
# directly, #define's uint32_t to be a suitable type.
ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "$ac_includes_default"
if test "x$ac_cv_type_uint32_t" = xyes; then :
$as_echo "#define HAVE_UINT32_T 1" >>confdefs.h
fi
ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t"
case $ac_cv_c_uint32_t in #( case $ac_cv_c_uint32_t in #(
no|yes) ;; #( no|yes) ;; #(
@ -7447,6 +7462,14 @@ _ACEOF
;; ;;
esac esac
ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "$ac_includes_default"
if test "x$ac_cv_type_uint64_t" = xyes; then :
$as_echo "#define HAVE_UINT64_T 1" >>confdefs.h
fi
ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t"
case $ac_cv_c_uint64_t in #( case $ac_cv_c_uint64_t in #(
no|yes) ;; #( no|yes) ;; #(
@ -7461,6 +7484,14 @@ _ACEOF
;; ;;
esac esac
ac_fn_c_check_type "$LINENO" "int32_t" "ac_cv_type_int32_t" "$ac_includes_default"
if test "x$ac_cv_type_int32_t" = xyes; then :
$as_echo "#define HAVE_INT32_T 1" >>confdefs.h
fi
ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t" ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t"
case $ac_cv_c_int32_t in #( case $ac_cv_c_int32_t in #(
no|yes) ;; #( no|yes) ;; #(
@ -7472,6 +7503,14 @@ _ACEOF
;; ;;
esac esac
ac_fn_c_check_type "$LINENO" "int64_t" "ac_cv_type_int64_t" "$ac_includes_default"
if test "x$ac_cv_type_int64_t" = xyes; then :
$as_echo "#define HAVE_INT64_T 1" >>confdefs.h
fi
ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t" ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t"
case $ac_cv_c_int64_t in #( case $ac_cv_c_int64_t in #(
no|yes) ;; #( no|yes) ;; #(
@ -7483,6 +7522,7 @@ _ACEOF
;; ;;
esac esac
ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default"
if test "x$ac_cv_type_ssize_t" = xyes; then : if test "x$ac_cv_type_ssize_t" = xyes; then :

View File

@ -1638,10 +1638,30 @@ AC_TYPE_PID_T
AC_DEFINE_UNQUOTED([RETSIGTYPE],[void],[assume C89 semantics that RETSIGTYPE is always void]) AC_DEFINE_UNQUOTED([RETSIGTYPE],[void],[assume C89 semantics that RETSIGTYPE is always void])
AC_TYPE_SIZE_T AC_TYPE_SIZE_T
AC_TYPE_UID_T AC_TYPE_UID_T
# There are two separate checks for each of the exact-width integer types we
# need. First we check whether the type is available using the usual
# AC_CHECK_TYPE macro with the default includes (which includes <inttypes.h>
# and <stdint.h> where available). We then also use the special type checks of
# the form AC_TYPE_UINT32_T, which in the case that uint32_t is not available
# directly, #define's uint32_t to be a suitable type.
AC_CHECK_TYPE(uint32_t,
AC_DEFINE(HAVE_UINT32_T, 1, [Define if your compiler provides uint32_t.]),,)
AC_TYPE_UINT32_T AC_TYPE_UINT32_T
AC_CHECK_TYPE(uint64_t,
AC_DEFINE(HAVE_UINT64_T, 1, [Define if your compiler provides uint64_t.]),,)
AC_TYPE_UINT64_T AC_TYPE_UINT64_T
AC_CHECK_TYPE(int32_t,
AC_DEFINE(HAVE_INT32_T, 1, [Define if your compiler provides int32_t.]),,)
AC_TYPE_INT32_T AC_TYPE_INT32_T
AC_CHECK_TYPE(int64_t,
AC_DEFINE(HAVE_INT64_T, 1, [Define if your compiler provides int64_t.]),,)
AC_TYPE_INT64_T AC_TYPE_INT64_T
AC_CHECK_TYPE(ssize_t, AC_CHECK_TYPE(ssize_t,
AC_DEFINE(HAVE_SSIZE_T, 1, [Define if your compiler provides ssize_t]),,) AC_DEFINE(HAVE_SSIZE_T, 1, [Define if your compiler provides ssize_t]),,)
AC_CHECK_TYPE(__uint128_t, AC_CHECK_TYPE(__uint128_t,

View File

@ -426,6 +426,12 @@
/* Define to 1 if you have the `initgroups' function. */ /* Define to 1 if you have the `initgroups' function. */
#undef HAVE_INITGROUPS #undef HAVE_INITGROUPS
/* Define if your compiler provides int32_t. */
#undef HAVE_INT32_T
/* Define if your compiler provides int64_t. */
#undef HAVE_INT64_T
/* Define to 1 if you have the <inttypes.h> header file. */ /* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H #undef HAVE_INTTYPES_H
@ -1047,6 +1053,12 @@
/* Define this if you have tcl and TCL_UTF_MAX==6 */ /* Define this if you have tcl and TCL_UTF_MAX==6 */
#undef HAVE_UCS4_TCL #undef HAVE_UCS4_TCL
/* Define if your compiler provides uint32_t. */
#undef HAVE_UINT32_T
/* Define if your compiler provides uint64_t. */
#undef HAVE_UINT64_T
/* Define to 1 if the system has the type `uintptr_t'. */ /* Define to 1 if the system has the type `uintptr_t'. */
#undef HAVE_UINTPTR_T #undef HAVE_UINTPTR_T