diff options
author | Thomas Munro | 2024-12-04 01:46:59 +0000 |
---|---|---|
committer | Thomas Munro | 2024-12-04 02:05:38 +0000 |
commit | 962da900ac8f0927f1af2fd811ca67fa163c873a (patch) | |
tree | 5839c22d2ad7bc68ddfd1e4debc734ef5df3a9d1 /configure.ac | |
parent | 3b08d5224d7df71cc111d8522cf6190fc02f6fb9 (diff) |
Use <stdint.h> and <inttypes.h> for c.h integers.
Redefine our exact width types with standard C99 types and macros,
including int64_t, INT64_MAX, INT64_C(), PRId64 etc. We were already
using <stdint.h> types in a few places.
One complication is that Windows' <inttypes.h> uses format strings like
"%I64d", "%I32", "%I" for PRI*64, PRI*32, PTR*PTR, instead of mapping to
other standardized format strings like "%lld" etc as seen on other known
systems. Teach our snprintf.c to understand them.
This removes a lot of configure clutter, and should also allow 64-bit
numbers and other standard types to be used in localized messages
without casting.
Reviewed-by: Peter Eisentraut <[email protected]>
Discussion: https://postgr.es/m/ME3P282MB3166F9D1F71F787929C0C7E7B6312%40ME3P282MB3166.AUSP282.PROD.OUTLOOK.COM
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 52 |
1 files changed, 5 insertions, 47 deletions
diff --git a/configure.ac b/configure.ac index 399aae4eed9..247ae97fa4c 100644 --- a/configure.ac +++ b/configure.ac @@ -1604,6 +1604,7 @@ PGAC_C_STATIC_ASSERT PGAC_C_TYPEOF PGAC_C_TYPES_COMPATIBLE PGAC_C_BUILTIN_CONSTANT_P +PGAC_C_BUILTIN_OP_OVERFLOW PGAC_C_BUILTIN_UNREACHABLE PGAC_C_COMPUTED_GOTO PGAC_STRUCT_TIMEZONE @@ -1906,54 +1907,18 @@ for the exact reason.]])], # Run tests below here # -------------------- -dnl Check to see if we have a working 64-bit integer type. -dnl Since Postgres 8.4, we no longer support compilers without a working -dnl 64-bit type; but we have to determine whether that type is called -dnl "long int" or "long long int". - -PGAC_TYPE_64BIT_INT([long int]) - -if test x"$HAVE_LONG_INT_64" = x"yes" ; then - pg_int64_type="long int" -else - PGAC_TYPE_64BIT_INT([long long int]) - if test x"$HAVE_LONG_LONG_INT_64" = x"yes" ; then - pg_int64_type="long long int" - else - AC_MSG_ERROR([Cannot find a working 64-bit integer type.]) - fi -fi - -AC_DEFINE_UNQUOTED(PG_INT64_TYPE, $pg_int64_type, - [Define to the name of a signed 64-bit integer type.]) - -# Select the printf length modifier that goes with that, too. -if test x"$pg_int64_type" = x"long long int" ; then - INT64_MODIFIER='"ll"' -else - INT64_MODIFIER='"l"' -fi - -AC_DEFINE_UNQUOTED(INT64_MODIFIER, $INT64_MODIFIER, - [Define to the appropriate printf length modifier for 64-bit ints.]) - -# has to be down here, rather than with the other builtins, because -# the test uses PG_INT64_TYPE. -PGAC_C_BUILTIN_OP_OVERFLOW - # Check size of void *, size_t (enables tweaks for > 32bit address space) AC_CHECK_SIZEOF([void *]) AC_CHECK_SIZEOF([size_t]) AC_CHECK_SIZEOF([long]) +AC_CHECK_SIZEOF([long long]) # Determine memory alignment requirements for the basic C data types. AC_CHECK_ALIGNOF(short) AC_CHECK_ALIGNOF(int) AC_CHECK_ALIGNOF(long) -if test x"$HAVE_LONG_LONG_INT_64" = x"yes" ; then - AC_CHECK_ALIGNOF(long long int) -fi +AC_CHECK_ALIGNOF(int64_t) AC_CHECK_ALIGNOF(double) # Compute maximum alignment of any basic type. @@ -1977,12 +1942,11 @@ MAX_ALIGNOF=$ac_cv_alignof_double if test $ac_cv_alignof_long -gt $MAX_ALIGNOF ; then AC_MSG_ERROR([alignment of 'long' is greater than the alignment of 'double']) fi -if test x"$HAVE_LONG_LONG_INT_64" = xyes && test $ac_cv_alignof_long_long_int -gt $MAX_ALIGNOF ; then - AC_MSG_ERROR([alignment of 'long long int' is greater than the alignment of 'double']) +if test $ac_cv_alignof_int64_t -gt $MAX_ALIGNOF ; then + AC_MSG_ERROR([alignment of 'int64_t' is greater than the alignment of 'double']) fi AC_DEFINE_UNQUOTED(MAXIMUM_ALIGNOF, $MAX_ALIGNOF, [Define as the maximum alignment requirement of any C data type.]) - # Some compilers offer a 128-bit integer scalar type. PGAC_TYPE_128BIT_INT @@ -2472,12 +2436,6 @@ AC_CONFIG_HEADERS([src/include/pg_config.h], echo >src/include/stamp-h ]) -AC_CONFIG_HEADERS([src/include/pg_config_ext.h], -[ -# Update timestamp for pg_config_ext.h (see Makefile.global) -echo >src/include/stamp-ext-h -]) - AC_CONFIG_HEADERS([src/interfaces/ecpg/include/ecpg_config.h], [echo >src/interfaces/ecpg/include/stamp-h]) |