2 dnl Copyright (C) 2006-2007 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 AC_CACHE_CHECK([whether inttypes.h conforms to C99],
26 [gl_cv_header_working_inttypes_h],
27 [gl_cv_header_working_inttypes_h=no
28 if test "$gl_cv_header_working_stdint_h" = yes \
29 && test $ac_cv_header_inttypes_h = yes \
30 && test "$ac_cv_have_decl_imaxabs" = yes \
31 && test "$ac_cv_have_decl_imaxdiv" = yes \
32 && test "$ac_cv_have_decl_strtoimax" = yes \
33 && test "$ac_cv_have_decl_strtoumax" = yes; then
37 #define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
38 #define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
39 #define __STDC_FORMAT_MACROS 1 /* to make it work also in C++ mode */
40 #define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* work if build isn't clean */
43 /* No need to duplicate the tests of stdint.m4; they are subsumed by
44 $gl_cv_header_working_stdint_h = yes. */
46 /* Tests for macros supposed to be defined in inttypes.h. */
48 const char *k = /* implicit string concatenation */
53 PRIo8 PRIu8 PRIx8 PRIX8
59 PRIo16 PRIu16 PRIx16 PRIX16
65 PRIo32 PRIu32 PRIx32 PRIX32
71 PRIo64 PRIu64 PRIx64 PRIX64
73 PRIdLEAST8 PRIiLEAST8 PRIoLEAST8 PRIuLEAST8 PRIxLEAST8 PRIXLEAST8
74 PRIdLEAST16 PRIiLEAST16 PRIoLEAST16 PRIuLEAST16 PRIxLEAST16 PRIXLEAST16
75 PRIdLEAST32 PRIiLEAST32 PRIoLEAST32 PRIuLEAST32 PRIxLEAST32 PRIXLEAST32
76 PRIdLEAST64 PRIiLEAST64
77 PRIoLEAST64 PRIuLEAST64 PRIxLEAST64 PRIXLEAST64
78 PRIdFAST8 PRIiFAST8 PRIoFAST8 PRIuFAST8 PRIxFAST8 PRIXFAST8
79 PRIdFAST16 PRIiFAST16 PRIoFAST16 PRIuFAST16 PRIxFAST16 PRIXFAST16
80 PRIdFAST32 PRIiFAST32 PRIoFAST32 PRIuFAST32 PRIxFAST32 PRIXFAST32
82 PRIoFAST64 PRIuFAST64 PRIxFAST64 PRIXFAST64
83 PRIdMAX PRIiMAX PRIoMAX PRIuMAX PRIxMAX PRIXMAX
88 PRIoPTR PRIuPTR PRIxPTR PRIXPTR
91 const char *l = /* implicit string concatenation */
116 SCNdLEAST8 SCNiLEAST8 SCNoLEAST8 SCNuLEAST8 SCNxLEAST8
117 SCNdLEAST16 SCNiLEAST16 SCNoLEAST16 SCNuLEAST16 SCNxLEAST16
118 SCNdLEAST32 SCNiLEAST32 SCNoLEAST32 SCNuLEAST32 SCNxLEAST32
119 SCNdLEAST64 SCNiLEAST64
120 SCNoLEAST64 SCNuLEAST64 SCNxLEAST64
121 SCNdFAST8 SCNiFAST8 SCNoFAST8 SCNuFAST8 SCNxFAST8
122 SCNdFAST16 SCNiFAST16 SCNoFAST16 SCNuFAST16 SCNxFAST16
123 SCNdFAST32 SCNiFAST32 SCNoFAST32 SCNuFAST32 SCNxFAST32
124 SCNdFAST64 SCNiFAST64
125 SCNoFAST64 SCNuFAST64 SCNxFAST64
126 SCNdMAX SCNiMAX SCNoMAX SCNuMAX SCNxMAX
131 SCNoPTR SCNuPTR SCNxPTR
135 [gl_cv_header_working_inttypes_h=yes])
138 dnl Override <inttypes.h> always, so that the portability warnings work.
139 if false && test $gl_cv_header_working_inttypes_h = yes; then
140 dnl Use the existing <inttypes.h>.
144 AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
145 gl_CHECK_NEXT_HEADERS([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
176 if test "$ac_cv_have_decl_imaxdiv" = yes; then
182 if test "$ac_cv_have_decl_strtoimax" = yes; then
183 HAVE_DECL_STRTOIMAX=1
185 HAVE_DECL_STRTOIMAX=0
188 if test "$ac_cv_have_decl_strtoumax" = yes; then
189 HAVE_DECL_STRTOUMAX=1
191 HAVE_DECL_STRTOUMAX=0
194 INTTYPES_H='inttypes.h'
199 AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR],
201 dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
202 AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
203 GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
206 AC_DEFUN([gl_INTTYPES_H_DEFAULTS],
208 GNULIB_IMAXABS=0; AC_SUBST([GNULIB_IMAXABS])
209 GNULIB_IMAXDIV=0; AC_SUBST([GNULIB_IMAXDIV])
210 GNULIB_STRTOIMAX=0; AC_SUBST([GNULIB_STRTOIMAX])
211 GNULIB_STRTOUMAX=0; AC_SUBST([GNULIB_STRTOUMAX])
212 dnl Assume proper GNU behavior unless another module says otherwise.
213 HAVE_DECL_IMAXABS=1; AC_SUBST([HAVE_DECL_IMAXABS])
214 HAVE_DECL_IMAXDIV=1; AC_SUBST([HAVE_DECL_IMAXDIV])
215 HAVE_DECL_STRTOIMAX=1; AC_SUBST([HAVE_DECL_STRTOIMAX])
216 HAVE_DECL_STRTOUMAX=1; AC_SUBST([HAVE_DECL_STRTOUMAX])