1193326SedAC_DEFUN([GCC_STDINT_TYPES],
2193326Sed[AC_REQUIRE([AC_TYPE_INT8_T])
3193326SedAC_REQUIRE([AC_TYPE_INT16_T])
4193326SedAC_REQUIRE([AC_TYPE_INT32_T])
5193326SedAC_REQUIRE([AC_TYPE_INT64_T])
6193326SedAC_REQUIRE([AC_TYPE_INTMAX_T])
7193326SedAC_REQUIRE([AC_TYPE_INTPTR_T])
8193326SedAC_REQUIRE([AC_TYPE_UINT8_T])
9239462SdimAC_REQUIRE([AC_TYPE_UINT16_T])
10239462SdimAC_REQUIRE([AC_TYPE_UINT32_T])
11239462SdimAC_REQUIRE([AC_TYPE_UINT64_T])
12239462SdimAC_REQUIRE([AC_TYPE_UINTMAX_T])
13193326SedAC_REQUIRE([AC_TYPE_UINTPTR_T])])
14193326Sed
15212904Sdimdnl @synopsis GCC_HEADER_STDINT [( HEADER-TO-GENERATE [, HEADERS-TO-CHECK])]
16249423Sdimdnl
17198092Srdivackydnl the "ISO C9X: 7.18 Integer types <stdint.h>" section requires the
18249423Sdimdnl existence of an include file <stdint.h> that defines a set of
19234353Sdimdnl typedefs, especially uint8_t,int32_t,uintptr_t.
20212904Sdimdnl Many older installations will not provide this file, but some will
21249423Sdimdnl have the very same definitions in <inttypes.h>. In other environments
22193326Seddnl we can use the inet-types in <sys/types.h> which would define the
23210299Seddnl typedefs int8_t and u_int8_t respectivly.
24263508Sdimdnl
25204643Srdivackydnl This macros will create a local "_stdint.h" or the headerfile given as
26198092Srdivackydnl an argument. In many cases that file will pick the definition from a
27198092Srdivackydnl "#include <stdint.h>" or "#include <inttypes.h>" statement, while
28198092Srdivackydnl in other environments it will provide the set of basic 'stdint's defined:
29249423Sdimdnl int8_t,uint8_t,int16_t,uint16_t,int32_t,uint32_t,intptr_t,uintptr_t
30249423Sdimdnl int_least32_t.. int_fast32_t.. intmax_t
31249423Sdimdnl which may or may not rely on the definitions of other files.
32249423Sdimdnl
33249423Sdimdnl Sometimes the stdint.h or inttypes.h headers conflict with sys/types.h,
34249423Sdimdnl so we test the headers together with sys/types.h and always include it
35263508Sdimdnl into the generated header (to match the tests with the generated file).
36249423Sdimdnl Hopefully this is not a big annoyance.
37234353Sdimdnl
38193326Seddnl If your installed header files require the stdint-types you will want to
39221345Sdimdnl create an installable file mylib-int.h that all your other installable
40193326Seddnl header may include. So, for a library package named "mylib", just use
41212904Sdimdnl      GCC_HEADER_STDINT(mylib-int.h)
42193326Seddnl in configure.ac and install that header file in Makefile.am along with
43249423Sdimdnl the other headers (mylib.h).  The mylib-specific headers can simply
44249423Sdimdnl use "#include <mylib-int.h>" to obtain the stdint-types.
45249423Sdimdnl
46249423Sdimdnl Remember, if the system already had a valid <stdint.h>, the generated
47249423Sdimdnl file will include it directly. No need for fuzzy HAVE_STDINT_H things...
48249423Sdimdnl
49249423Sdimdnl @author  Guido Draheim <guidod@gmx.de>, Paolo Bonzini <bonzini@gnu.org>
50249423Sdim
51249423SdimAC_DEFUN([GCC_HEADER_STDINT],
52249423Sdim[m4_define(_GCC_STDINT_H, m4_ifval($1, $1, _stdint.h))
53249423Sdim
54249423Sdiminttype_headers=`echo inttypes.h sys/inttypes.h $2 | sed -e 's/,/ /g'`
55249423Sdim
56249423Sdimacx_cv_header_stdint=stddef.h
57249423Sdimacx_cv_header_stdint_kind="(already complete)"
58249423Sdimfor i in stdint.h $inttype_headers; do
59249423Sdim  unset ac_cv_type_uintptr_t
60249423Sdim  unset ac_cv_type_uintmax_t
61249423Sdim  unset ac_cv_type_int_least32_t
62249423Sdim  unset ac_cv_type_int_fast32_t
63249423Sdim  unset ac_cv_type_uint64_t
64249423Sdim  _AS_ECHO_N([looking for a compliant stdint.h in $i, ])
65249423Sdim  AC_CHECK_TYPE(uintmax_t,[acx_cv_header_stdint=$i],continue,[#include <sys/types.h>
66249423Sdim#include <$i>])
67249423Sdim  AC_CHECK_TYPE(uintptr_t,,[acx_cv_header_stdint_kind="(mostly complete)"], [#include <sys/types.h>
68249423Sdim#include <$i>])
69249423Sdim  AC_CHECK_TYPE(int_least32_t,,[acx_cv_header_stdint_kind="(mostly complete)"], [#include <sys/types.h>
70249423Sdim#include <$i>])
71249423Sdim  AC_CHECK_TYPE(int_fast32_t,,[acx_cv_header_stdint_kind="(mostly complete)"], [#include <sys/types.h>
72249423Sdim#include <$i>])
73249423Sdim  AC_CHECK_TYPE(uint64_t,,[acx_cv_header_stdint_kind="(lacks uint64_t)"], [#include <sys/types.h>
74249423Sdim#include <$i>])
75249423Sdim  break
76249423Sdimdone
77249423Sdimif test "$acx_cv_header_stdint" = stddef.h; then
78249423Sdim  acx_cv_header_stdint_kind="(lacks uintmax_t)"
79249423Sdim  for i in stdint.h $inttype_headers; do
80212904Sdim    unset ac_cv_type_uintptr_t
81218893Sdim    unset ac_cv_type_uint32_t
82212904Sdim    unset ac_cv_type_uint64_t
83212904Sdim    _AS_ECHO_N([looking for an incomplete stdint.h in $i, ])
84212904Sdim    AC_CHECK_TYPE(uint32_t,[acx_cv_header_stdint=$i],continue,[#include <sys/types.h>
85212904Sdim#include <$i>])
86204643Srdivacky    AC_CHECK_TYPE(uint64_t,,,[#include <sys/types.h>
87204643Srdivacky#include <$i>])
88204643Srdivacky    AC_CHECK_TYPE(uintptr_t,,,[#include <sys/types.h>
89204643Srdivacky#include <$i>])
90204643Srdivacky    break
91204643Srdivacky  done
92204643Srdivackyfi
93204643Srdivackyif test "$acx_cv_header_stdint" = stddef.h; then
94204643Srdivacky  acx_cv_header_stdint_kind="(u_intXX_t style)"
95204643Srdivacky  for i in sys/types.h $inttype_headers; do
96204643Srdivacky    unset ac_cv_type_u_int32_t
97204643Srdivacky    unset ac_cv_type_u_int64_t
98204643Srdivacky    _AS_ECHO_N([looking for u_intXX_t types in $i, ])
99204643Srdivacky    AC_CHECK_TYPE(u_int32_t,[acx_cv_header_stdint=$i],continue,[#include <sys/types.h>
100204643Srdivacky#include <$i>])
101204643Srdivacky    AC_CHECK_TYPE(u_int64_t,,,[#include <sys/types.h>
102204643Srdivacky#include <$i>])
103204643Srdivacky    break
104204643Srdivacky  done
105204643Srdivackyfi
106210299Sedif test "$acx_cv_header_stdint" = stddef.h; then
107210299Sed  acx_cv_header_stdint_kind="(using manual detection)"
108204643Srdivackyfi
109204643Srdivacky
110204643Srdivackytest -z "$ac_cv_type_uintptr_t" && ac_cv_type_uintptr_t=no
111204643Srdivackytest -z "$ac_cv_type_uint64_t" && ac_cv_type_uint64_t=no
112204643Srdivackytest -z "$ac_cv_type_u_int64_t" && ac_cv_type_u_int64_t=no
113204643Srdivackytest -z "$ac_cv_type_int_least32_t" && ac_cv_type_int_least32_t=no
114204643Srdivackytest -z "$ac_cv_type_int_fast32_t" && ac_cv_type_int_fast32_t=no
115204643Srdivacky
116204643Srdivacky# ----------------- Summarize what we found so far
117204643Srdivacky
118204643SrdivackyAC_MSG_CHECKING([what to include in _GCC_STDINT_H])
119204643Srdivacky
120204643Srdivackycase `AS_BASENAME(_GCC_STDINT_H)` in
121218893Sdim  stdint.h) AC_MSG_WARN([are you sure you want it there?]) ;;
122204643Srdivacky  inttypes.h) AC_MSG_WARN([are you sure you want it there?]) ;;
123204643Srdivacky  *) ;;
124210299Sedesac
125218893Sdim
126210299SedAC_MSG_RESULT($acx_cv_header_stdint $acx_cv_header_stdint_kind)
127210299Sed
128210299Sed# ----------------- done included file, check C basic types --------
129218893Sdim
130218893Sdim# Lacking an uintptr_t?  Test size of void *
131210299Sedcase "$acx_cv_header_stdint:$ac_cv_type_uintptr_t" in
132204643Srdivacky  stddef.h:* | *:no) AC_CHECK_SIZEOF(void *) ;;
133204643Srdivackyesac
134218893Sdim
135204643Srdivacky# Lacking an uint64_t?  Test size of long
136218893Sdimcase "$acx_cv_header_stdint:$ac_cv_type_uint64_t:$ac_cv_type_u_int64_t" in
137210299Sed  stddef.h:*:* | *:no:no) AC_CHECK_SIZEOF(long) ;;
138204643Srdivackyesac
139210299Sed
140218893Sdimif test $acx_cv_header_stdint = stddef.h; then
141210299Sed  # Lacking a good header?  Test size of everything and deduce all types.
142210299Sed  AC_CHECK_SIZEOF(int)
143210299Sed  AC_CHECK_SIZEOF(short)
144210299Sed  AC_CHECK_SIZEOF(char)
145210299Sed
146210299Sed  AC_MSG_CHECKING(for type equivalent to int8_t)
147210299Sed  case "$ac_cv_sizeof_char" in
148210299Sed    1) acx_cv_type_int8_t=char ;;
149218893Sdim    *) AC_MSG_ERROR([no 8-bit type, please report a bug])
150210299Sed  esac
151204643Srdivacky  AC_MSG_RESULT($acx_cv_type_int8_t)
152204643Srdivacky
153204643Srdivacky  AC_MSG_CHECKING(for type equivalent to int16_t)
154204643Srdivacky  case "$ac_cv_sizeof_int:$ac_cv_sizeof_short" in
155204643Srdivacky    2:*) acx_cv_type_int16_t=int ;;
156219077Sdim    *:2) acx_cv_type_int16_t=short ;;
157204643Srdivacky    *) AC_MSG_ERROR([no 16-bit type, please report a bug])
158204643Srdivacky  esac
159204643Srdivacky  AC_MSG_RESULT($acx_cv_type_int16_t)
160204643Srdivacky
161204643Srdivacky  AC_MSG_CHECKING(for type equivalent to int32_t)
162204643Srdivacky  case "$ac_cv_sizeof_int:$ac_cv_sizeof_long" in
163204643Srdivacky    4:*) acx_cv_type_int32_t=int ;;
164204643Srdivacky    *:4) acx_cv_type_int32_t=long ;;
165204643Srdivacky    *) AC_MSG_ERROR([no 32-bit type, please report a bug])
166218893Sdim  esac
167204643Srdivacky  AC_MSG_RESULT($acx_cv_type_int32_t)
168204643Srdivackyfi
169204643Srdivacky
170204643Srdivacky# These tests are here to make the output prettier
171204643Srdivacky
172204643Srdivackyif test "$ac_cv_type_uint64_t" != yes && test "$ac_cv_type_u_int64_t" != yes; then
173204643Srdivacky  case "$ac_cv_sizeof_long" in
174204643Srdivacky    8) acx_cv_type_int64_t=long ;;
175204643Srdivacky  esac
176204643Srdivacky  AC_MSG_CHECKING(for type equivalent to int64_t)
177204643Srdivacky  AC_MSG_RESULT(${acx_cv_type_int64_t-'using preprocessor symbols'})
178218893Sdimfi
179204643Srdivacky
180204643Srdivacky# Now we can use the above types
181204643Srdivacky
182204643Srdivackyif test "$ac_cv_type_uintptr_t" != yes; then
183204643Srdivacky  AC_MSG_CHECKING(for type equivalent to intptr_t)
184204643Srdivacky  case $ac_cv_sizeof_void_p in
185204643Srdivacky    2) acx_cv_type_intptr_t=int16_t ;;
186204643Srdivacky    4) acx_cv_type_intptr_t=int32_t ;;
187221345Sdim    8) acx_cv_type_intptr_t=int64_t ;;
188204643Srdivacky    *) AC_MSG_ERROR([no equivalent for intptr_t, please report a bug])
189204643Srdivacky  esac
190204643Srdivacky  AC_MSG_RESULT($acx_cv_type_intptr_t)
191221345Sdimfi
192204643Srdivacky
193204643Srdivacky# ----------------- done all checks, emit header -------------
194204643SrdivackyAC_CONFIG_COMMANDS(_GCC_STDINT_H, [
195204643Srdivackyif test "$GCC" = yes; then
196204643Srdivacky  echo "/* generated for " `$CC --version | sed 1q` "*/" > tmp-stdint.h
197204643Srdivackyelse
198204643Srdivacky  echo "/* generated for $CC */" > tmp-stdint.h
199204643Srdivackyfi
200204643Srdivacky
201204643Srdivackysed 's/^ *//' >> tmp-stdint.h <<EOF
202204643Srdivacky
203212904Sdim  #ifndef GCC_GENERATED_STDINT_H
204204643Srdivacky  #define GCC_GENERATED_STDINT_H 1
205204643Srdivacky
206204643Srdivacky  #include <sys/types.h>
207204643SrdivackyEOF
208204643Srdivacky
209204643Srdivackyif test "$acx_cv_header_stdint" != stdint.h; then
210204643Srdivacky  echo "#include <stddef.h>" >> tmp-stdint.h
211204643Srdivackyfi
212212904Sdimif test "$acx_cv_header_stdint" != stddef.h; then
213204643Srdivacky  echo "#include <$acx_cv_header_stdint>" >> tmp-stdint.h
214221345Sdimfi
215221345Sdim
216221345Sdimsed 's/^ *//' >> tmp-stdint.h <<EOF
217204643Srdivacky  /* glibc uses these symbols as guards to prevent redefinitions.  */
218204643Srdivacky  #ifdef __int8_t_defined
219204643Srdivacky  #define _INT8_T
220204643Srdivacky  #define _INT16_T
221204643Srdivacky  #define _INT32_T
222204643Srdivacky  #endif
223204643Srdivacky  #ifdef __uint32_t_defined
224218893Sdim  #define _UINT32_T
225204643Srdivacky  #endif
226204643Srdivacky
227204643SrdivackyEOF
228204643Srdivacky
229204643Srdivacky# ----------------- done header, emit basic int types -------------
230204962Srdivackyif test "$acx_cv_header_stdint" = stddef.h; then
231204962Srdivacky  sed 's/^ *//' >> tmp-stdint.h <<EOF
232204643Srdivacky
233204643Srdivacky    #ifndef _UINT8_T
234204643Srdivacky    #define _UINT8_T
235204643Srdivacky    #ifndef __uint8_t_defined
236218893Sdim    #define __uint8_t_defined
237204643Srdivacky    #ifndef uint8_t
238204643Srdivacky    typedef unsigned $acx_cv_type_int8_t uint8_t;
239204643Srdivacky    #endif
240204643Srdivacky    #endif
241204643Srdivacky    #endif
242204643Srdivacky
243204643Srdivacky    #ifndef _UINT16_T
244204643Srdivacky    #define _UINT16_T
245204643Srdivacky    #ifndef __uint16_t_defined
246204643Srdivacky    #define __uint16_t_defined
247204643Srdivacky    #ifndef uint16_t
248212904Sdim    typedef unsigned $acx_cv_type_int16_t uint16_t;
249204643Srdivacky    #endif
250204643Srdivacky    #endif
251204643Srdivacky    #endif
252204643Srdivacky
253218893Sdim    #ifndef _UINT32_T
254204643Srdivacky    #define _UINT32_T
255204643Srdivacky    #ifndef __uint32_t_defined
256204643Srdivacky    #define __uint32_t_defined
257204643Srdivacky    #ifndef uint32_t
258204643Srdivacky    typedef unsigned $acx_cv_type_int32_t uint32_t;
259204643Srdivacky    #endif
260204643Srdivacky    #endif
261204643Srdivacky    #endif
262204643Srdivacky
263204643Srdivacky    #ifndef _INT8_T
264204643Srdivacky    #define _INT8_T
265204643Srdivacky    #ifndef __int8_t_defined
266204643Srdivacky    #define __int8_t_defined
267212904Sdim    #ifndef int8_t
268204643Srdivacky    typedef $acx_cv_type_int8_t int8_t;
269204643Srdivacky    #endif
270204643Srdivacky    #endif
271204643Srdivacky    #endif
272204643Srdivacky
273204643Srdivacky    #ifndef _INT16_T
274218893Sdim    #define _INT16_T
275204643Srdivacky    #ifndef __int16_t_defined
276204643Srdivacky    #define __int16_t_defined
277204643Srdivacky    #ifndef int16_t
278212904Sdim    typedef $acx_cv_type_int16_t int16_t;
279204643Srdivacky    #endif
280204643Srdivacky    #endif
281204643Srdivacky    #endif
282204643Srdivacky
283204643Srdivacky    #ifndef _INT32_T
284204643Srdivacky    #define _INT32_T
285204643Srdivacky    #ifndef __int32_t_defined
286204643Srdivacky    #define __int32_t_defined
287204643Srdivacky    #ifndef int32_t
288204643Srdivacky    typedef $acx_cv_type_int32_t int32_t;
289221345Sdim    #endif
290221345Sdim    #endif
291221345Sdim    #endif
292221345SdimEOF
293221345Sdimelif test "$ac_cv_type_u_int32_t" = yes; then
294212904Sdim  sed 's/^ *//' >> tmp-stdint.h <<EOF
295204643Srdivacky
296204643Srdivacky    /* int8_t int16_t int32_t defined by inet code, we do the u_intXX types */
297221345Sdim    #ifndef _INT8_T
298221345Sdim    #define _INT8_T
299221345Sdim    #endif
300221345Sdim    #ifndef _INT16_T
301221345Sdim    #define _INT16_T
302221345Sdim    #endif
303221345Sdim    #ifndef _INT32_T
304221345Sdim    #define _INT32_T
305218893Sdim    #endif
306249423Sdim
307249423Sdim    #ifndef _UINT8_T
308249423Sdim    #define _UINT8_T
309249423Sdim    #ifndef __uint8_t_defined
310263508Sdim    #define __uint8_t_defined
311249423Sdim    #ifndef uint8_t
312249423Sdim    typedef u_int8_t uint8_t;
313249423Sdim    #endif
314249423Sdim    #endif
315249423Sdim    #endif
316204643Srdivacky
317212904Sdim    #ifndef _UINT16_T
318204643Srdivacky    #define _UINT16_T
319204643Srdivacky    #ifndef __uint16_t_defined
320234353Sdim    #define __uint16_t_defined
321234353Sdim    #ifndef uint16_t
322234353Sdim    typedef u_int16_t uint16_t;
323234353Sdim    #endif
324234353Sdim    #endif
325234353Sdim    #endif
326234353Sdim
327234353Sdim    #ifndef _UINT32_T
328234353Sdim    #define _UINT32_T
329234353Sdim    #ifndef __uint32_t_defined
330234353Sdim    #define __uint32_t_defined
331234353Sdim    #ifndef uint32_t
332234353Sdim    typedef u_int32_t uint32_t;
333234353Sdim    #endif
334234353Sdim    #endif
335234353Sdim    #endif
336207619SrdivackyEOF
337212904Sdimelse
338218893Sdim  sed 's/^ *//' >> tmp-stdint.h <<EOF
339218893Sdim
340218893Sdim    /* Some systems have guard macros to prevent redefinitions, define them.  */
341207619Srdivacky    #ifndef _INT8_T
342218893Sdim    #define _INT8_T
343207619Srdivacky    #endif
344218893Sdim    #ifndef _INT16_T
345207619Srdivacky    #define _INT16_T
346210299Sed    #endif
347210299Sed    #ifndef _INT32_T
348210299Sed    #define _INT32_T
349210299Sed    #endif
350207619Srdivacky    #ifndef _UINT8_T
351207619Srdivacky    #define _UINT8_T
352207619Srdivacky    #endif
353218893Sdim    #ifndef _UINT16_T
354207619Srdivacky    #define _UINT16_T
355207619Srdivacky    #endif
356207619Srdivacky    #ifndef _UINT32_T
357207619Srdivacky    #define _UINT32_T
358207619Srdivacky    #endif
359207619SrdivackyEOF
360212904Sdimfi
361218893Sdim
362218893Sdim# ------------- done basic int types, emit int64_t types ------------
363218893Sdimif test "$ac_cv_type_uint64_t" = yes; then
364207619Srdivacky  sed 's/^ *//' >> tmp-stdint.h <<EOF
365226633Sdim
366226633Sdim    /* system headers have good uint64_t and int64_t */
367226633Sdim    #ifndef _INT64_T
368226633Sdim    #define _INT64_T
369226633Sdim    #endif
370226633Sdim    #ifndef _UINT64_T
371207619Srdivacky    #define _UINT64_T
372207619Srdivacky    #endif
373207619SrdivackyEOF
374207619Srdivackyelif test "$ac_cv_type_u_int64_t" = yes; then
375207619Srdivacky  sed 's/^ *//' >> tmp-stdint.h <<EOF
376207619Srdivacky
377207619Srdivacky    /* system headers have an u_int64_t (and int64_t) */
378207619Srdivacky    #ifndef _INT64_T
379218893Sdim    #define _INT64_T
380207619Srdivacky    #endif
381212904Sdim    #ifndef _UINT64_T
382207619Srdivacky    #define _UINT64_T
383207619Srdivacky    #ifndef __uint64_t_defined
384239462Sdim    #define __uint64_t_defined
385234353Sdim    #ifndef uint64_t
386234353Sdim    typedef u_int64_t uint64_t;
387249423Sdim    #endif
388234353Sdim    #endif
389234353Sdim    #endif
390208600SrdivackyEOF
391208600Srdivackyelif test -n "$acx_cv_type_int64_t"; then
392208600Srdivacky  sed 's/^ *//' >> tmp-stdint.h <<EOF
393208600Srdivacky
394207619Srdivacky    /* architecture has a 64-bit type, $acx_cv_type_int64_t */
395218893Sdim    #ifndef _INT64_T
396207619Srdivacky    #define _INT64_T
397207619Srdivacky    #ifndef int64_t
398218893Sdim    typedef $acx_cv_type_int64_t int64_t;
399218893Sdim    #endif
400207619Srdivacky    #endif
401210299Sed    #ifndef _UINT64_T
402210299Sed    #define _UINT64_T
403210299Sed    #ifndef __uint64_t_defined
404210299Sed    #define __uint64_t_defined
405226633Sdim    #ifndef uint64_t
406207619Srdivacky    typedef unsigned $acx_cv_type_int64_t uint64_t;
407207619Srdivacky    #endif
408218893Sdim    #endif
409207619Srdivacky    #endif
410212904SdimEOF
411218893Sdimelse
412207619Srdivacky  sed 's/^ *//' >> tmp-stdint.h <<EOF
413207619Srdivacky
414207619Srdivacky    /* some common heuristics for int64_t, using compiler-specific tests */
415212904Sdim    #if defined __STDC_VERSION__ && (__STDC_VERSION__-0) >= 199901L
416193326Sed    #ifndef _INT64_T
417193326Sed    #define _INT64_T
418207619Srdivacky    #ifndef __int64_t_defined
419221345Sdim    #ifndef int64_t
420193326Sed    typedef long long int64_t;
421198092Srdivacky    #endif
422218893Sdim    #endif
423218893Sdim    #endif
424218893Sdim    #ifndef _UINT64_T
425218893Sdim    #define _UINT64_T
426218893Sdim    #ifndef uint64_t
427239462Sdim    typedef unsigned long long uint64_t;
428239462Sdim    #endif
429239462Sdim    #endif
430239462Sdim
431239462Sdim    #elif defined __GNUC__ && defined (__STDC__) && __STDC__-0
432239462Sdim    /* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and
433218893Sdim       does not implement __extension__.  But that compiler doesn't define
434218893Sdim       __GNUC_MINOR__.  */
435218893Sdim    # if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__)
436218893Sdim    # define __extension__
437239462Sdim    # endif
438239462Sdim
439239462Sdim    # ifndef _INT64_T
440239462Sdim    # define _INT64_T
441218893Sdim    # ifndef int64_t
442218893Sdim    __extension__ typedef long long int64_t;
443207619Srdivacky    # endif
444207619Srdivacky    # endif
445207619Srdivacky    # ifndef _UINT64_T
446212904Sdim    # define _UINT64_T
447212904Sdim    # ifndef uint64_t
448207619Srdivacky    __extension__ typedef unsigned long long uint64_t;
449207619Srdivacky    # endif
450218893Sdim    # endif
451207619Srdivacky
452207619Srdivacky    #elif !defined __STRICT_ANSI__
453193326Sed    # if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__
454207619Srdivacky
455194711Sed    #  ifndef _INT64_T
456198092Srdivacky    #  define _INT64_T
457218893Sdim    #  ifndef int64_t
458212904Sdim    typedef __int64 int64_t;
459193326Sed    #  endif
460193326Sed    #  endif
461218893Sdim    #  ifndef _UINT64_T
462218893Sdim    #  define _UINT64_T
463218893Sdim    #  ifndef uint64_t
464218893Sdim    typedef unsigned __int64 uint64_t;
465218893Sdim    #  endif
466218893Sdim    #  endif
467263508Sdim    # endif /* compiler */
468263508Sdim
469263508Sdim    #endif /* ANSI version */
470263508SdimEOF
471263508Sdimfi
472263508Sdim
473263508Sdim# ------------- done int64_t types, emit intptr types ------------
474263508Sdimif test "$ac_cv_type_uintptr_t" != yes; then
475218893Sdim  sed 's/^ *//' >> tmp-stdint.h <<EOF
476218893Sdim
477218893Sdim    /* Define intptr_t based on sizeof(void*) = $ac_cv_sizeof_void_p */
478218893Sdim    #ifndef __uintptr_t_defined
479218893Sdim    #ifndef uintptr_t
480218893Sdim    typedef u$acx_cv_type_intptr_t uintptr_t;
481218893Sdim    #endif
482218893Sdim    #endif
483218893Sdim    #ifndef __intptr_t_defined
484218893Sdim    #ifndef intptr_t
485218893Sdim    typedef $acx_cv_type_intptr_t  intptr_t;
486218893Sdim    #endif
487218893Sdim    #endif
488263508SdimEOF
489263508Sdimfi
490263508Sdim
491263508Sdim# ------------- done intptr types, emit int_least types ------------
492263508Sdimif test "$ac_cv_type_int_least32_t" != yes; then
493263508Sdim  sed 's/^ *//' >> tmp-stdint.h <<EOF
494263508Sdim
495263508Sdim    /* Define int_least types */
496218893Sdim    typedef int8_t     int_least8_t;
497263508Sdim    typedef int16_t    int_least16_t;
498218893Sdim    typedef int32_t    int_least32_t;
499218893Sdim    #ifdef _INT64_T
500218893Sdim    typedef int64_t    int_least64_t;
501218893Sdim    #endif
502218893Sdim
503218893Sdim    typedef uint8_t    uint_least8_t;
504218893Sdim    typedef uint16_t   uint_least16_t;
505218893Sdim    typedef uint32_t   uint_least32_t;
506218893Sdim    #ifdef _UINT64_T
507218893Sdim    typedef uint64_t   uint_least64_t;
508218893Sdim    #endif
509218893SdimEOF
510218893Sdimfi
511218893Sdim
512218893Sdim# ------------- done intptr types, emit int_fast types ------------
513218893Sdimif test "$ac_cv_type_int_fast32_t" != yes; then
514218893Sdim  dnl NOTE: The following code assumes that sizeof (int) > 1.
515218893Sdim  dnl Fix when strange machines are reported.
516218893Sdim  sed 's/^ *//' >> tmp-stdint.h <<EOF
517218893Sdim
518218893Sdim    /* Define int_fast types.  short is often slow */
519218893Sdim    typedef int8_t       int_fast8_t;
520218893Sdim    typedef int          int_fast16_t;
521218893Sdim    typedef int32_t      int_fast32_t;
522218893Sdim    #ifdef _INT64_T
523218893Sdim    typedef int64_t      int_fast64_t;
524218893Sdim    #endif
525218893Sdim
526218893Sdim    typedef uint8_t      uint_fast8_t;
527218893Sdim    typedef unsigned int uint_fast16_t;
528218893Sdim    typedef uint32_t     uint_fast32_t;
529218893Sdim    #ifdef _UINT64_T
530218893Sdim    typedef uint64_t     uint_fast64_t;
531218893Sdim    #endif
532218893SdimEOF
533218893Sdimfi
534218893Sdim
535218893Sdimif test "$ac_cv_type_uintmax_t" != yes; then
536218893Sdim  sed 's/^ *//' >> tmp-stdint.h <<EOF
537193326Sed
538212904Sdim    /* Define intmax based on what we found */
539193326Sed    #ifndef intmax_t
540193326Sed    #ifdef _INT64_T
541193326Sed    typedef int64_t       intmax_t;
542193326Sed    #else
543193326Sed    typedef long          intmax_t;
544193326Sed    #endif
545193326Sed    #endif
546193326Sed    #ifndef uintmax_t
547212904Sdim    #ifdef _UINT64_T
548193326Sed    typedef uint64_t      uintmax_t;
549193326Sed    #else
550193326Sed    typedef unsigned long uintmax_t;
551193326Sed    #endif
552193326Sed    #endif
553212904SdimEOF
554224145Sdimfi
555224145Sdim
556224145Sdimsed 's/^ *//' >> tmp-stdint.h <<EOF
557224145Sdim
558224145Sdim  #endif /* GCC_GENERATED_STDINT_H */
559224145SdimEOF
560224145Sdim
561224145Sdimif test -r ]_GCC_STDINT_H[ && cmp -s tmp-stdint.h ]_GCC_STDINT_H[; then
562224145Sdim  rm -f tmp-stdint.h
563224145Sdimelse
564224145Sdim  mv -f tmp-stdint.h ]_GCC_STDINT_H[
565224145Sdimfi
566224145Sdim
567224145Sdim], [
568224145SdimGCC="$GCC"
569224145SdimCC="$CC"
570224145Sdimacx_cv_header_stdint="$acx_cv_header_stdint"
571224145Sdimacx_cv_type_int8_t="$acx_cv_type_int8_t"
572224145Sdimacx_cv_type_int16_t="$acx_cv_type_int16_t"
573224145Sdimacx_cv_type_int32_t="$acx_cv_type_int32_t"
574224145Sdimacx_cv_type_int64_t="$acx_cv_type_int64_t"
575224145Sdimacx_cv_type_intptr_t="$acx_cv_type_intptr_t"
576224145Sdimac_cv_type_uintmax_t="$ac_cv_type_uintmax_t"
577224145Sdimac_cv_type_uintptr_t="$ac_cv_type_uintptr_t"
578224145Sdimac_cv_type_uint64_t="$ac_cv_type_uint64_t"
579224145Sdimac_cv_type_u_int64_t="$ac_cv_type_u_int64_t"
580224145Sdimac_cv_type_u_int32_t="$ac_cv_type_u_int32_t"
581224145Sdimac_cv_type_int_least32_t="$ac_cv_type_int_least32_t"
582224145Sdimac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t"
583224145Sdimac_cv_sizeof_void_p="$ac_cv_sizeof_void_p"
584224145Sdim])
585224145Sdim
586224145Sdim])
587224145Sdim