2 dnl Copyright (C) 2006 Free Software Foundation, Inc.
3 dnl This file is free software; the Free Software Foundation
4 dnl gives unlimited permission to copy and/or distribute it,
5 dnl with or without modifications, as long as this notice is preserved.
7 dnl From Derek Price, Bruno Haible.
8 dnl Test whether <inttypes.h> is supported or must be substituted.
10 AC_DEFUN([gl_INTTYPES_H],
12 AC_REQUIRE([gl_STDINT_H])
13 AC_REQUIRE([gt_INTTYPES_PRI])
14 AC_CHECK_DECLS_ONCE([imaxabs])
15 AC_CHECK_DECLS_ONCE([imaxdiv])
16 AC_CHECK_DECLS_ONCE([strtoimax])
17 AC_CHECK_DECLS_ONCE([strtoumax])
19 dnl Now see if we need a substitute <inttypes.h>.
20 dnl A complete <inttypes.h> requires
21 dnl - a complete <stdint.h>,
22 dnl - the existence of an <inttypes.h>,
23 dnl - that imaxabs, imaxdiv, strtoimax, strtoumax are declared,
24 dnl - some additional tests.
25 gl_cv_header_working_inttypes_h=no
26 if test $gl_cv_header_working_stdint_h = yes \
27 && test $gl_cv_header_inttypes_h = yes \
28 && test "$ac_cv_have_decl_imaxabs" = yes \
29 && test "$ac_cv_have_decl_imaxdiv" = yes \
30 && test "$ac_cv_have_decl_strtoimax" = yes \
31 && test "$ac_cv_have_decl_strtoumax" = yes; then
35 #define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
36 #define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
37 #define __STDC_FORMAT_MACROS 1 /* to make it work also in C++ mode */
38 #include ABSOLUTE_INTTYPES_H
40 /* No need to duplicate the tests of stdint.m4; they are subsumed by
41 $gl_cv_header_working_stdint_h = yes. */
43 /* Tests for macros supposed to be defined in inttypes.h. */
45 const char *k = /* implicit string concatenation */
50 PRIo8 PRIu8 PRIx8 PRIX8
56 PRIo16 PRIu16 PRIx16 PRIX16
62 PRIo32 PRIu32 PRIx32 PRIX32
68 PRIo64 PRIu64 PRIx64 PRIX64
70 PRIdLEAST8 PRIiLEAST8 PRIoLEAST8 PRIuLEAST8 PRIxLEAST8 PRIXLEAST8
71 PRIdLEAST16 PRIiLEAST16 PRIoLEAST16 PRIuLEAST16 PRIxLEAST16 PRIXLEAST16
72 PRIdLEAST32 PRIiLEAST32 PRIoLEAST32 PRIuLEAST32 PRIxLEAST32 PRIXLEAST32
73 PRIdLEAST64 PRIiLEAST64
74 PRIoLEAST64 PRIuLEAST64 PRIxLEAST64 PRIXLEAST64
75 PRIdFAST8 PRIiFAST8 PRIoFAST8 PRIuFAST8 PRIxFAST8 PRIXFAST8
76 PRIdFAST16 PRIiFAST16 PRIoFAST16 PRIuFAST16 PRIxFAST16 PRIXFAST16
77 PRIdFAST32 PRIiFAST32 PRIoFAST32 PRIuFAST32 PRIxFAST32 PRIXFAST32
79 PRIoFAST64 PRIuFAST64 PRIxFAST64 PRIXFAST64
80 PRIdMAX PRIiMAX PRIoMAX PRIuMAX PRIxMAX PRIXMAX
85 PRIoPTR PRIuPTR PRIxPTR PRIXPTR
88 const char *l = /* implicit string concatenation */
113 SCNdLEAST8 SCNiLEAST8 SCNoLEAST8 SCNuLEAST8 SCNxLEAST8
114 SCNdLEAST16 SCNiLEAST16 SCNoLEAST16 SCNuLEAST16 SCNxLEAST16
115 SCNdLEAST32 SCNiLEAST32 SCNoLEAST32 SCNuLEAST32 SCNxLEAST32
116 SCNdLEAST64 SCNiLEAST64
117 SCNoLEAST64 SCNuLEAST64 SCNxLEAST64
118 SCNdFAST8 SCNiFAST8 SCNoFAST8 SCNuFAST8 SCNxFAST8
119 SCNdFAST16 SCNiFAST16 SCNoFAST16 SCNuFAST16 SCNxFAST16
120 SCNdFAST32 SCNiFAST32 SCNoFAST32 SCNuFAST32 SCNxFAST32
121 SCNdFAST64 SCNiFAST64
122 SCNoFAST64 SCNuFAST64 SCNxFAST64
123 SCNdMAX SCNiMAX SCNoMAX SCNuMAX SCNxMAX
128 SCNoPTR SCNuPTR SCNxPTR
132 [gl_cv_header_working_inttypes_h=yes])
134 if test $gl_cv_header_working_inttypes_h = yes; then
135 dnl Use the existing <inttypes.h>.
139 dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h.
140 if test $ac_cv_header_inttypes_h = yes; then
141 gl_ABSOLUTE_HEADER([inttypes.h])
142 ABSOLUTE_INTTYPES_H=\"$gl_cv_absolute_inttypes_h\"
144 ABSOLUTE_INTTYPES_H=\"no/such/file/inttypes.h\"
146 AC_SUBST([ABSOLUTE_INTTYPES_H])
149 if test -n "$STDINT_H"; then
150 dnl Using the gnulib <stdint.h>. It always defines intptr_t to 'long'.
153 dnl Using the system's <stdint.h>.
154 for glpfx in '' l ll I64; do
157 l) gltype1='long int';;
158 ll) gltype1='long long int';;
159 I64) gltype1='__int64';;
162 [AC_LANG_PROGRAM([#include <stdint.h>
164 extern $gltype1 foo;])],
165 [PRIPTR_PREFIX='"'$glpfx'"'])
166 test -n "$PRIPTR_PREFIX" && break
169 AC_SUBST([PRIPTR_PREFIX])
171 if test "$ac_cv_have_decl_imaxabs" = yes; then
176 AC_SUBST([HAVE_DECL_IMAXABS])
178 if test "$ac_cv_have_decl_imaxdiv" = yes; then
183 AC_SUBST([HAVE_DECL_IMAXDIV])
185 if test "$ac_cv_have_decl_strtoimax" = yes; then
186 HAVE_DECL_STRTOIMAX=1
188 HAVE_DECL_STRTOIMAX=0
190 AC_SUBST([HAVE_DECL_STRTOIMAX])
192 if test "$ac_cv_have_decl_strtoumax" = yes; then
193 HAVE_DECL_STRTOUMAX=1
195 HAVE_DECL_STRTOUMAX=0
197 AC_SUBST([HAVE_DECL_STRTOUMAX])
199 INTTYPES_H='inttypes.h'