X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=m4%2Finttypes.m4;h=b17cbdaa46192fcd80d8e6f383e1fbf23d70ae87;hb=b4feec417c7eae7c4a920986d8c81659ac5c9a79;hp=f2c9eb5ea8e0011b8f418ccdfd2149b7707e4fe8;hpb=1c01f30b6b6a4b087e613f7122095058bfa36c54;p=gnulib.git diff --git a/m4/inttypes.m4 b/m4/inttypes.m4 index f2c9eb5ea..b17cbdaa4 100644 --- a/m4/inttypes.m4 +++ b/m4/inttypes.m4 @@ -1,5 +1,5 @@ -# inttypes.m4 serial 2 -dnl Copyright (C) 2006 Free Software Foundation, Inc. +# inttypes.m4 serial 11 +dnl Copyright (C) 2006-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -22,20 +22,23 @@ AC_DEFUN([gl_INTTYPES_H], dnl - the existence of an , dnl - that imaxabs, imaxdiv, strtoimax, strtoumax are declared, dnl - some additional tests. - gl_cv_header_working_inttypes_h=no - if test $gl_cv_header_working_stdint_h = yes \ - && test $gl_cv_header_inttypes_h = yes \ - && test "$ac_cv_have_decl_imaxabs" = yes \ - && test "$ac_cv_have_decl_imaxdiv" = yes \ - && test "$ac_cv_have_decl_strtoimax" = yes \ - && test "$ac_cv_have_decl_strtoumax" = yes; then - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([ + AC_CACHE_CHECK([whether inttypes.h conforms to C99], + [gl_cv_header_working_inttypes_h], + [gl_cv_header_working_inttypes_h=no + if test "$gl_cv_header_working_stdint_h" = yes \ + && test $ac_cv_header_inttypes_h = yes \ + && test "$ac_cv_have_decl_imaxabs" = yes \ + && test "$ac_cv_have_decl_imaxdiv" = yes \ + && test "$ac_cv_have_decl_strtoimax" = yes \ + && test "$ac_cv_have_decl_strtoumax" = yes; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([ #include #define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ #define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ #define __STDC_FORMAT_MACROS 1 /* to make it work also in C++ mode */ -#include ABSOLUTE_INTTYPES_H +#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* work if build isn't clean */ +#include /* No need to duplicate the tests of stdint.m4; they are subsumed by $gl_cv_header_working_stdint_h = yes. */ @@ -60,6 +63,7 @@ const char *k = /* implicit string concatenation */ #endif #ifdef UINT32_MAX PRIo32 PRIu32 PRIx32 PRIX32 +#endif #ifdef INT64_MAX PRId64 PRIi64 #endif @@ -127,14 +131,35 @@ const char *l = /* implicit string concatenation */ SCNoPTR SCNuPTR SCNxPTR #endif ; - ])], - [gl_cv_header_working_inttypes_h=yes]) - fi - if test $gl_cv_header_working_inttypes_h = yes; then + ])], + [gl_cv_header_working_inttypes_h=yes]) + fi]) + + dnl Override always, so that the portability warnings work. + if false && test $gl_cv_header_working_inttypes_h = yes; then dnl Use the existing . INTTYPES_H='' else + AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) + gl_CHECK_NEXT_HEADERS([inttypes.h]) + + dnl Ensure that defines the limit macros, since gnulib's + dnl relies on them. This macro is only needed when a + dnl C++ compiler is in use; it has no effect for a C compiler. + dnl Also be careful to define __STDC_LIMIT_MACROS only when gnulib's + dnl is going to be created, and to avoid redefinition warnings + dnl if the __STDC_LIMIT_MACROS is already defined through the CPPFLAGS. + AC_DEFINE([GL_TRIGGER_STDC_LIMIT_MACROS], 1, + [Define to make the limit macros in visible.]) + AH_VERBATIM([__STDC_LIMIT_MACROS_ZZZ], +[/* Ensure that defines the limit macros, since gnulib's + relies on them. */ +#if defined __cplusplus && !defined __STDC_LIMIT_MACROS && GL_TRIGGER_STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS 1 +#endif +]) + PRIPTR_PREFIX= if test -n "$STDINT_H"; then dnl Using the gnulib . It always defines intptr_t to 'long'. @@ -163,30 +188,108 @@ const char *l = /* implicit string concatenation */ else HAVE_DECL_IMAXABS=0 fi - AC_SUBST([HAVE_DECL_IMAXABS]) if test "$ac_cv_have_decl_imaxdiv" = yes; then HAVE_DECL_IMAXDIV=1 else HAVE_DECL_IMAXDIV=0 fi - AC_SUBST([HAVE_DECL_IMAXDIV]) if test "$ac_cv_have_decl_strtoimax" = yes; then HAVE_DECL_STRTOIMAX=1 else HAVE_DECL_STRTOIMAX=0 fi - AC_SUBST([HAVE_DECL_STRTOIMAX]) if test "$ac_cv_have_decl_strtoumax" = yes; then HAVE_DECL_STRTOUMAX=1 else HAVE_DECL_STRTOUMAX=0 fi - AC_SUBST([HAVE_DECL_STRTOUMAX]) + + gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( + [INT32_MAX_LT_INTMAX_MAX], + [defined INT32_MAX && defined INTMAX_MAX], + [INT32_MAX < INTMAX_MAX], + [sizeof (int) < sizeof (long long int)]) + gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( + [INT64_MAX_EQ_LONG_MAX], + [defined INT64_MAX], + [INT64_MAX == LONG_MAX], + [sizeof (long long int) == sizeof (long int)]) + gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( + [UINT32_MAX_LT_UINTMAX_MAX], + [defined UINT32_MAX && defined UINTMAX_MAX], + [UINT32_MAX < UINTMAX_MAX], + [sizeof (unsigned int) < sizeof (unsigned long long int)]) + gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( + [UINT64_MAX_EQ_ULONG_MAX], + [defined UINT64_MAX], + [UINT64_MAX == ULONG_MAX], + [sizeof (unsigned long long int) == sizeof (unsigned long int)]) INTTYPES_H='inttypes.h' fi AC_SUBST(INTTYPES_H) ]) + +# Define the symbol $1 to be 1 if the condition is true, 0 otherwise. +# If $2 is true, the condition is $3; otherwise if long long int is supported +# approximate the condition with $4; otherwise, assume the condition is false. +# The condition should work on all C99 platforms; the approximations should be +# good enough to work on all practical pre-C99 platforms. +# $2 is evaluated by the C preprocessor, $3 and $4 as compile-time constants. +AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION], +[ + AC_CACHE_CHECK([whether $3], + [gl_cv_test_$1], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[/* Work also in C++ mode. */ + #define __STDC_LIMIT_MACROS 1 + + /* Work if build is not clean. */ + #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H + + #include + #if HAVE_STDINT_H + #include + #endif + + #if $2 + #define CONDITION ($3) + #elif HAVE_LONG_LONG_INT + #define CONDITION ($4) + #else + #define CONDITION 0 + #endif + int test[CONDITION ? 1 : -1];]])], + [gl_cv_test_$1=yes], + [gl_cv_test_$1=no])]) + if test $gl_cv_test_$1 = yes; then + $1=1; + else + $1=0; + fi + AC_SUBST([$1]) +]) + +AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_INTTYPES_H_DEFAULTS], +[ + GNULIB_IMAXABS=0; AC_SUBST([GNULIB_IMAXABS]) + GNULIB_IMAXDIV=0; AC_SUBST([GNULIB_IMAXDIV]) + GNULIB_STRTOIMAX=0; AC_SUBST([GNULIB_STRTOIMAX]) + GNULIB_STRTOUMAX=0; AC_SUBST([GNULIB_STRTOUMAX]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_DECL_IMAXABS=1; AC_SUBST([HAVE_DECL_IMAXABS]) + HAVE_DECL_IMAXDIV=1; AC_SUBST([HAVE_DECL_IMAXDIV]) + HAVE_DECL_STRTOIMAX=1; AC_SUBST([HAVE_DECL_STRTOIMAX]) + HAVE_DECL_STRTOUMAX=1; AC_SUBST([HAVE_DECL_STRTOUMAX]) +])