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
67 PRIo64 PRIu64 PRIx64 PRIX64
69 PRIdLEAST8 PRIiLEAST8 PRIoLEAST8 PRIuLEAST8 PRIxLEAST8 PRIXLEAST8
70 PRIdLEAST16 PRIiLEAST16 PRIoLEAST16 PRIuLEAST16 PRIxLEAST16 PRIXLEAST16
71 PRIdLEAST32 PRIiLEAST32 PRIoLEAST32 PRIuLEAST32 PRIxLEAST32 PRIXLEAST32
72 PRIdLEAST64 PRIiLEAST64
73 PRIoLEAST64 PRIuLEAST64 PRIxLEAST64 PRIXLEAST64
74 PRIdFAST8 PRIiFAST8 PRIoFAST8 PRIuFAST8 PRIxFAST8 PRIXFAST8
75 PRIdFAST16 PRIiFAST16 PRIoFAST16 PRIuFAST16 PRIxFAST16 PRIXFAST16
76 PRIdFAST32 PRIiFAST32 PRIoFAST32 PRIuFAST32 PRIxFAST32 PRIXFAST32
78 PRIoFAST64 PRIuFAST64 PRIxFAST64 PRIXFAST64
79 PRIdMAX PRIiMAX PRIoMAX PRIuMAX PRIxMAX PRIXMAX
84 PRIoPTR PRIuPTR PRIxPTR PRIXPTR
87 const char *l = /* implicit string concatenation */
92 SCNo8 SCNu8 SCNx8 SCNX8
98 SCNo16 SCNu16 SCNx16 SCNX16
104 SCNo32 SCNu32 SCNx32 SCNX32
110 SCNo64 SCNu64 SCNx64 SCNX64
112 SCNdLEAST8 SCNiLEAST8 SCNoLEAST8 SCNuLEAST8 SCNxLEAST8 SCNXLEAST8
113 SCNdLEAST16 SCNiLEAST16 SCNoLEAST16 SCNuLEAST16 SCNxLEAST16 SCNXLEAST16
114 SCNdLEAST32 SCNiLEAST32 SCNoLEAST32 SCNuLEAST32 SCNxLEAST32 SCNXLEAST32
115 SCNdLEAST64 SCNiLEAST64
116 SCNoLEAST64 SCNuLEAST64 SCNxLEAST64 SCNXLEAST64
117 SCNdFAST8 SCNiFAST8 SCNoFAST8 SCNuFAST8 SCNxFAST8 SCNXFAST8
118 SCNdFAST16 SCNiFAST16 SCNoFAST16 SCNuFAST16 SCNxFAST16 SCNXFAST16
119 SCNdFAST32 SCNiFAST32 SCNoFAST32 SCNuFAST32 SCNxFAST32 SCNXFAST32
120 SCNdFAST64 SCNiFAST64
121 SCNoFAST64 SCNuFAST64 SCNxFAST64 SCNXFAST64
122 SCNdMAX SCNiMAX SCNoMAX SCNuMAX SCNxMAX SCNXMAX
127 SCNoPTR SCNuPTR SCNxPTR SCNXPTR
131 [gl_cv_header_working_inttypes_h=yes])
133 if test $gl_cv_header_working_inttypes_h = yes; then
134 dnl Use the existing <inttypes.h>.
139 if test -n "$STDINT_H"; then
140 dnl Using the gnulib <stdint.h>. It always defines intptr_t to 'long'.
143 dnl Using the system's <stdint.h>.
144 for glpfx in '' l ll I64; do
147 l) gltype1='long int';;
148 ll) gltype1='long long int';;
149 I64) gltype1='__int64';;
152 [AC_LANG_PROGRAM([#include <stdint.h>
154 extern $gltype1 foo;])],
155 [PRIPTR_PREFIX='"'$glpfx'"'])
156 test -n "$PRIPTR_PREFIX" && break
159 AC_SUBST([PRIPTR_PREFIX])
161 if test "$ac_cv_have_decl_imaxabs" = yes; then
166 AC_SUBST([HAVE_DECL_IMAXABS])
168 if test "$ac_cv_have_decl_imaxdiv" = yes; then
173 AC_SUBST([HAVE_DECL_IMAXDIV])
175 if test "$ac_cv_have_decl_strtoimax" = yes; then
176 HAVE_DECL_STRTOIMAX=1
178 HAVE_DECL_STRTOIMAX=0
180 AC_SUBST([HAVE_DECL_STRTOIMAX])
182 if test "$ac_cv_have_decl_strtoumax" = yes; then
183 HAVE_DECL_STRTOUMAX=1
185 HAVE_DECL_STRTOUMAX=0
187 AC_SUBST([HAVE_DECL_STRTOUMAX])
189 INTTYPES_H='inttypes.h'