diff options
author | Mark Dickinson <dickinsm@gmail.com> | 2012-12-02 13:20:22 +0000 |
---|---|---|
committer | Mark Dickinson <dickinsm@gmail.com> | 2012-12-02 13:20:22 +0000 |
commit | 598946eb971b73fb47b8d32227b89bf5f5b659e1 (patch) | |
tree | d1d03e18aad60f97e53a561f6a763b2de28ce45f | |
parent | 016f123dcf902d3d85c5a1dd9f6f49f65090861f (diff) | |
download | cpython-598946eb971b73fb47b8d32227b89bf5f5b659e1.tar.gz |
Issue 10052: fix failed uint32_t / uint64_t / int32_t / int64_t detection on some platforms.
-rw-r--r-- | Include/pyport.h | 29 | ||||
-rwxr-xr-x | configure | 40 | ||||
-rw-r--r-- | configure.ac | 20 | ||||
-rw-r--r-- | pyconfig.h.in | 12 |
4 files changed, 93 insertions, 8 deletions
diff --git a/Include/pyport.h b/Include/pyport.h index 4ef0db2cdf..9666cf28f9 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -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. * However, it doesn't set HAVE_UINT32_T, so we do that here. */ -#if (defined UINT32_MAX || defined uint32_t) -#ifndef PY_UINT32_T +#ifdef uint32_t #define HAVE_UINT32_T 1 +#endif + +#ifdef HAVE_UINT32_T +#ifndef PY_UINT32_T #define PY_UINT32_T uint32_t #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 * long integer implementation, when 30-bit digits are enabled. */ -#if (defined UINT64_MAX || defined uint64_t) -#ifndef PY_UINT64_T +#ifdef uint64_t #define HAVE_UINT64_T 1 +#endif + +#ifdef HAVE_UINT64_T +#ifndef PY_UINT64_T #define PY_UINT64_T uint64_t #endif #endif /* Signed variants of the above */ -#if (defined INT32_MAX || defined int32_t) -#ifndef PY_INT32_T +#ifdef int32_t #define HAVE_INT32_T 1 +#endif + +#ifdef HAVE_INT32_T +#ifndef PY_INT32_T #define PY_INT32_T int32_t #endif #endif -#if (defined INT64_MAX || defined int64_t) -#ifndef PY_INT64_T + +#ifdef int64_t #define HAVE_INT64_T 1 +#endif + +#ifdef HAVE_INT64_T +#ifndef PY_INT64_T #define PY_INT64_T int64_t #endif #endif @@ -6755,6 +6755,21 @@ $as_echo "#define gid_t int" >>confdefs.h 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" case $ac_cv_c_uint32_t in #( no|yes) ;; #( @@ -6769,6 +6784,14 @@ _ACEOF ;; 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" case $ac_cv_c_uint64_t in #( no|yes) ;; #( @@ -6783,6 +6806,14 @@ _ACEOF ;; 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" case $ac_cv_c_int32_t in #( no|yes) ;; #( @@ -6794,6 +6825,14 @@ _ACEOF ;; 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" case $ac_cv_c_int64_t in #( no|yes) ;; #( @@ -6805,6 +6844,7 @@ _ACEOF ;; esac + 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 : diff --git a/configure.ac b/configure.ac index 97332af08c..ccb42d44cc 100644 --- a/configure.ac +++ b/configure.ac @@ -1469,10 +1469,30 @@ AC_TYPE_PID_T AC_DEFINE_UNQUOTED([RETSIGTYPE],[void],[assume C89 semantics that RETSIGTYPE is always void]) AC_TYPE_SIZE_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_CHECK_TYPE(uint64_t, + AC_DEFINE(HAVE_UINT64_T, 1, [Define if your compiler provides 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_CHECK_TYPE(int64_t, + AC_DEFINE(HAVE_INT64_T, 1, [Define if your compiler provides int64_t.]),,) AC_TYPE_INT64_T + AC_CHECK_TYPE(ssize_t, AC_DEFINE(HAVE_SSIZE_T, 1, [Define if your compiler provides ssize_t]),,) diff --git a/pyconfig.h.in b/pyconfig.h.in index ca8ccb695d..6fff165cf7 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -377,6 +377,12 @@ /* Define to 1 if you have the `initgroups' function. */ #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. */ #undef HAVE_INTTYPES_H @@ -863,6 +869,12 @@ /* Define this if you have tcl and TCL_UTF_MAX==6 */ #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'. */ #undef HAVE_UINTPTR_T |