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 */
112 SCNdLEAST8 SCNiLEAST8 SCNoLEAST8 SCNuLEAST8 SCNxLEAST8
113 SCNdLEAST16 SCNiLEAST16 SCNoLEAST16 SCNuLEAST16 SCNxLEAST16
114 SCNdLEAST32 SCNiLEAST32 SCNoLEAST32 SCNuLEAST32 SCNxLEAST32
115 SCNdLEAST64 SCNiLEAST64
116 SCNoLEAST64 SCNuLEAST64 SCNxLEAST64
117 SCNdFAST8 SCNiFAST8 SCNoFAST8 SCNuFAST8 SCNxFAST8
118 SCNdFAST16 SCNiFAST16 SCNoFAST16 SCNuFAST16 SCNxFAST16
119 SCNdFAST32 SCNiFAST32 SCNoFAST32 SCNuFAST32 SCNxFAST32
120 SCNdFAST64 SCNiFAST64
121 SCNoFAST64 SCNuFAST64 SCNxFAST64
122 SCNdMAX SCNiMAX SCNoMAX SCNuMAX SCNxMAX
127 SCNoPTR SCNuPTR 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>.
138 dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h.
139 if test $ac_cv_header_inttypes_h = yes; then
140 gl_ABSOLUTE_HEADER([inttypes.h])
141 ABSOLUTE_INTTYPES_H=\"$gl_cv_absolute_inttypes_h\"
143 ABSOLUTE_INTTYPES_H=\"no/such/file/inttypes.h\"
145 AC_SUBST([ABSOLUTE_INTTYPES_H])
148 if test -n "$STDINT_H"; then
149 dnl Using the gnulib <stdint.h>. It always defines intptr_t to 'long'.
152 dnl Using the system's <stdint.h>.
153 for glpfx in '' l ll I64; do
156 l) gltype1='long int';;
157 ll) gltype1='long long int';;
158 I64) gltype1='__int64';;
161 [AC_LANG_PROGRAM([#include <stdint.h>
163 extern $gltype1 foo;])],
164 [PRIPTR_PREFIX='"'$glpfx'"'])
165 test -n "$PRIPTR_PREFIX" && break
168 AC_SUBST([PRIPTR_PREFIX])
170 if test "$ac_cv_have_decl_imaxabs" = yes; then
175 AC_SUBST([HAVE_DECL_IMAXABS])
177 if test "$ac_cv_have_decl_imaxdiv" = yes; then
182 AC_SUBST([HAVE_DECL_IMAXDIV])
184 if test "$ac_cv_have_decl_strtoimax" = yes; then
185 HAVE_DECL_STRTOIMAX=1
187 HAVE_DECL_STRTOIMAX=0
189 AC_SUBST([HAVE_DECL_STRTOIMAX])
191 if test "$ac_cv_have_decl_strtoumax" = yes; then
192 HAVE_DECL_STRTOUMAX=1
194 HAVE_DECL_STRTOUMAX=0
196 AC_SUBST([HAVE_DECL_STRTOUMAX])
198 INTTYPES_H='inttypes.h'