xref: /netbsd-src/external/gpl3/binutils.old/dist/config/stdint.m4 (revision 16dce51364ebe8aeafbae46bc5aa167b8115bc45)
1*16dce513SchristosAC_DEFUN([GCC_STDINT_TYPES],
2*16dce513Schristos[AC_REQUIRE([AC_TYPE_INT8_T])
3*16dce513SchristosAC_REQUIRE([AC_TYPE_INT16_T])
4*16dce513SchristosAC_REQUIRE([AC_TYPE_INT32_T])
5*16dce513SchristosAC_REQUIRE([AC_TYPE_INT64_T])
6*16dce513SchristosAC_REQUIRE([AC_TYPE_INTMAX_T])
7*16dce513SchristosAC_REQUIRE([AC_TYPE_INTPTR_T])
8*16dce513SchristosAC_REQUIRE([AC_TYPE_UINT8_T])
9*16dce513SchristosAC_REQUIRE([AC_TYPE_UINT16_T])
10*16dce513SchristosAC_REQUIRE([AC_TYPE_UINT32_T])
11*16dce513SchristosAC_REQUIRE([AC_TYPE_UINT64_T])
12*16dce513SchristosAC_REQUIRE([AC_TYPE_UINTMAX_T])
13*16dce513SchristosAC_REQUIRE([AC_TYPE_UINTPTR_T])])
14*16dce513Schristos
15*16dce513Schristosdnl @synopsis GCC_HEADER_STDINT [( HEADER-TO-GENERATE [, HEADERS-TO-CHECK])]
16*16dce513Schristosdnl
17*16dce513Schristosdnl the "ISO C9X: 7.18 Integer types <stdint.h>" section requires the
18*16dce513Schristosdnl existence of an include file <stdint.h> that defines a set of
19*16dce513Schristosdnl typedefs, especially uint8_t,int32_t,uintptr_t.
20*16dce513Schristosdnl Many older installations will not provide this file, but some will
21*16dce513Schristosdnl have the very same definitions in <inttypes.h>. In other environments
22*16dce513Schristosdnl we can use the inet-types in <sys/types.h> which would define the
23*16dce513Schristosdnl typedefs int8_t and u_int8_t respectivly.
24*16dce513Schristosdnl
25*16dce513Schristosdnl This macros will create a local "_stdint.h" or the headerfile given as
26*16dce513Schristosdnl an argument. In many cases that file will pick the definition from a
27*16dce513Schristosdnl "#include <stdint.h>" or "#include <inttypes.h>" statement, while
28*16dce513Schristosdnl in other environments it will provide the set of basic 'stdint's defined:
29*16dce513Schristosdnl int8_t,uint8_t,int16_t,uint16_t,int32_t,uint32_t,intptr_t,uintptr_t
30*16dce513Schristosdnl int_least32_t.. int_fast32_t.. intmax_t
31*16dce513Schristosdnl which may or may not rely on the definitions of other files.
32*16dce513Schristosdnl
33*16dce513Schristosdnl Sometimes the stdint.h or inttypes.h headers conflict with sys/types.h,
34*16dce513Schristosdnl so we test the headers together with sys/types.h and always include it
35*16dce513Schristosdnl into the generated header (to match the tests with the generated file).
36*16dce513Schristosdnl Hopefully this is not a big annoyance.
37*16dce513Schristosdnl
38*16dce513Schristosdnl If your installed header files require the stdint-types you will want to
39*16dce513Schristosdnl create an installable file mylib-int.h that all your other installable
40*16dce513Schristosdnl header may include. So, for a library package named "mylib", just use
41*16dce513Schristosdnl      GCC_HEADER_STDINT(mylib-int.h)
42*16dce513Schristosdnl in configure.ac and install that header file in Makefile.am along with
43*16dce513Schristosdnl the other headers (mylib.h).  The mylib-specific headers can simply
44*16dce513Schristosdnl use "#include <mylib-int.h>" to obtain the stdint-types.
45*16dce513Schristosdnl
46*16dce513Schristosdnl Remember, if the system already had a valid <stdint.h>, the generated
47*16dce513Schristosdnl file will include it directly. No need for fuzzy HAVE_STDINT_H things...
48*16dce513Schristosdnl
49*16dce513Schristosdnl @author  Guido Draheim <guidod@gmx.de>, Paolo Bonzini <bonzini@gnu.org>
50*16dce513Schristos
51*16dce513SchristosAC_DEFUN([GCC_HEADER_STDINT],
52*16dce513Schristos[m4_define(_GCC_STDINT_H, m4_ifval($1, $1, _stdint.h))
53*16dce513Schristos
54*16dce513Schristosinttype_headers=`echo inttypes.h sys/inttypes.h $2 | sed -e 's/,/ /g'`
55*16dce513Schristos
56*16dce513Schristosacx_cv_header_stdint=stddef.h
57*16dce513Schristosacx_cv_header_stdint_kind="(already complete)"
58*16dce513Schristosfor i in stdint.h $inttype_headers; do
59*16dce513Schristos  unset ac_cv_type_uintptr_t
60*16dce513Schristos  unset ac_cv_type_uintmax_t
61*16dce513Schristos  unset ac_cv_type_int_least32_t
62*16dce513Schristos  unset ac_cv_type_int_fast32_t
63*16dce513Schristos  unset ac_cv_type_uint64_t
64*16dce513Schristos  _AS_ECHO_N([looking for a compliant stdint.h in $i, ])
65*16dce513Schristos  AC_CHECK_TYPE(uintmax_t,[acx_cv_header_stdint=$i],continue,[#include <sys/types.h>
66*16dce513Schristos#include <$i>])
67*16dce513Schristos  AC_CHECK_TYPE(uintptr_t,,[acx_cv_header_stdint_kind="(mostly complete)"], [#include <sys/types.h>
68*16dce513Schristos#include <$i>])
69*16dce513Schristos  AC_CHECK_TYPE(int_least32_t,,[acx_cv_header_stdint_kind="(mostly complete)"], [#include <sys/types.h>
70*16dce513Schristos#include <$i>])
71*16dce513Schristos  AC_CHECK_TYPE(int_fast32_t,,[acx_cv_header_stdint_kind="(mostly complete)"], [#include <sys/types.h>
72*16dce513Schristos#include <$i>])
73*16dce513Schristos  AC_CHECK_TYPE(uint64_t,,[acx_cv_header_stdint_kind="(lacks uint64_t)"], [#include <sys/types.h>
74*16dce513Schristos#include <$i>])
75*16dce513Schristos  break
76*16dce513Schristosdone
77*16dce513Schristosif test "$acx_cv_header_stdint" = stddef.h; then
78*16dce513Schristos  acx_cv_header_stdint_kind="(lacks uintmax_t)"
79*16dce513Schristos  for i in stdint.h $inttype_headers; do
80*16dce513Schristos    unset ac_cv_type_uintptr_t
81*16dce513Schristos    unset ac_cv_type_uint32_t
82*16dce513Schristos    unset ac_cv_type_uint64_t
83*16dce513Schristos    _AS_ECHO_N([looking for an incomplete stdint.h in $i, ])
84*16dce513Schristos    AC_CHECK_TYPE(uint32_t,[acx_cv_header_stdint=$i],continue,[#include <sys/types.h>
85*16dce513Schristos#include <$i>])
86*16dce513Schristos    AC_CHECK_TYPE(uint64_t,,,[#include <sys/types.h>
87*16dce513Schristos#include <$i>])
88*16dce513Schristos    AC_CHECK_TYPE(uintptr_t,,,[#include <sys/types.h>
89*16dce513Schristos#include <$i>])
90*16dce513Schristos    break
91*16dce513Schristos  done
92*16dce513Schristosfi
93*16dce513Schristosif test "$acx_cv_header_stdint" = stddef.h; then
94*16dce513Schristos  acx_cv_header_stdint_kind="(u_intXX_t style)"
95*16dce513Schristos  for i in sys/types.h $inttype_headers; do
96*16dce513Schristos    unset ac_cv_type_u_int32_t
97*16dce513Schristos    unset ac_cv_type_u_int64_t
98*16dce513Schristos    _AS_ECHO_N([looking for u_intXX_t types in $i, ])
99*16dce513Schristos    AC_CHECK_TYPE(u_int32_t,[acx_cv_header_stdint=$i],continue,[#include <sys/types.h>
100*16dce513Schristos#include <$i>])
101*16dce513Schristos    AC_CHECK_TYPE(u_int64_t,,,[#include <sys/types.h>
102*16dce513Schristos#include <$i>])
103*16dce513Schristos    break
104*16dce513Schristos  done
105*16dce513Schristosfi
106*16dce513Schristosif test "$acx_cv_header_stdint" = stddef.h; then
107*16dce513Schristos  acx_cv_header_stdint_kind="(using manual detection)"
108*16dce513Schristosfi
109*16dce513Schristos
110*16dce513Schristostest -z "$ac_cv_type_uintptr_t" && ac_cv_type_uintptr_t=no
111*16dce513Schristostest -z "$ac_cv_type_uint64_t" && ac_cv_type_uint64_t=no
112*16dce513Schristostest -z "$ac_cv_type_u_int64_t" && ac_cv_type_u_int64_t=no
113*16dce513Schristostest -z "$ac_cv_type_int_least32_t" && ac_cv_type_int_least32_t=no
114*16dce513Schristostest -z "$ac_cv_type_int_fast32_t" && ac_cv_type_int_fast32_t=no
115*16dce513Schristos
116*16dce513Schristos# ----------------- Summarize what we found so far
117*16dce513Schristos
118*16dce513SchristosAC_MSG_CHECKING([what to include in _GCC_STDINT_H])
119*16dce513Schristos
120*16dce513Schristoscase `AS_BASENAME(_GCC_STDINT_H)` in
121*16dce513Schristos  stdint.h) AC_MSG_WARN([are you sure you want it there?]) ;;
122*16dce513Schristos  inttypes.h) AC_MSG_WARN([are you sure you want it there?]) ;;
123*16dce513Schristos  *) ;;
124*16dce513Schristosesac
125*16dce513Schristos
126*16dce513SchristosAC_MSG_RESULT($acx_cv_header_stdint $acx_cv_header_stdint_kind)
127*16dce513Schristos
128*16dce513Schristos# ----------------- done included file, check C basic types --------
129*16dce513Schristos
130*16dce513Schristos# Lacking an uintptr_t?  Test size of void *
131*16dce513Schristoscase "$acx_cv_header_stdint:$ac_cv_type_uintptr_t" in
132*16dce513Schristos  stddef.h:* | *:no) AC_CHECK_SIZEOF(void *) ;;
133*16dce513Schristosesac
134*16dce513Schristos
135*16dce513Schristos# Lacking an uint64_t?  Test size of long
136*16dce513Schristoscase "$acx_cv_header_stdint:$ac_cv_type_uint64_t:$ac_cv_type_u_int64_t" in
137*16dce513Schristos  stddef.h:*:* | *:no:no) AC_CHECK_SIZEOF(long) ;;
138*16dce513Schristosesac
139*16dce513Schristos
140*16dce513Schristosif test $acx_cv_header_stdint = stddef.h; then
141*16dce513Schristos  # Lacking a good header?  Test size of everything and deduce all types.
142*16dce513Schristos  AC_CHECK_SIZEOF(int)
143*16dce513Schristos  AC_CHECK_SIZEOF(short)
144*16dce513Schristos  AC_CHECK_SIZEOF(char)
145*16dce513Schristos
146*16dce513Schristos  AC_MSG_CHECKING(for type equivalent to int8_t)
147*16dce513Schristos  case "$ac_cv_sizeof_char" in
148*16dce513Schristos    1) acx_cv_type_int8_t=char ;;
149*16dce513Schristos    *) AC_MSG_ERROR([no 8-bit type, please report a bug])
150*16dce513Schristos  esac
151*16dce513Schristos  AC_MSG_RESULT($acx_cv_type_int8_t)
152*16dce513Schristos
153*16dce513Schristos  AC_MSG_CHECKING(for type equivalent to int16_t)
154*16dce513Schristos  case "$ac_cv_sizeof_int:$ac_cv_sizeof_short" in
155*16dce513Schristos    2:*) acx_cv_type_int16_t=int ;;
156*16dce513Schristos    *:2) acx_cv_type_int16_t=short ;;
157*16dce513Schristos    *) AC_MSG_ERROR([no 16-bit type, please report a bug])
158*16dce513Schristos  esac
159*16dce513Schristos  AC_MSG_RESULT($acx_cv_type_int16_t)
160*16dce513Schristos
161*16dce513Schristos  AC_MSG_CHECKING(for type equivalent to int32_t)
162*16dce513Schristos  case "$ac_cv_sizeof_int:$ac_cv_sizeof_long" in
163*16dce513Schristos    4:*) acx_cv_type_int32_t=int ;;
164*16dce513Schristos    *:4) acx_cv_type_int32_t=long ;;
165*16dce513Schristos    *) AC_MSG_ERROR([no 32-bit type, please report a bug])
166*16dce513Schristos  esac
167*16dce513Schristos  AC_MSG_RESULT($acx_cv_type_int32_t)
168*16dce513Schristosfi
169*16dce513Schristos
170*16dce513Schristos# These tests are here to make the output prettier
171*16dce513Schristos
172*16dce513Schristosif test "$ac_cv_type_uint64_t" != yes && test "$ac_cv_type_u_int64_t" != yes; then
173*16dce513Schristos  case "$ac_cv_sizeof_long" in
174*16dce513Schristos    8) acx_cv_type_int64_t=long ;;
175*16dce513Schristos  esac
176*16dce513Schristos  AC_MSG_CHECKING(for type equivalent to int64_t)
177*16dce513Schristos  AC_MSG_RESULT(${acx_cv_type_int64_t-'using preprocessor symbols'})
178*16dce513Schristosfi
179*16dce513Schristos
180*16dce513Schristos# Now we can use the above types
181*16dce513Schristos
182*16dce513Schristosif test "$ac_cv_type_uintptr_t" != yes; then
183*16dce513Schristos  AC_MSG_CHECKING(for type equivalent to intptr_t)
184*16dce513Schristos  case $ac_cv_sizeof_void_p in
185*16dce513Schristos    2) acx_cv_type_intptr_t=int16_t ;;
186*16dce513Schristos    4) acx_cv_type_intptr_t=int32_t ;;
187*16dce513Schristos    8) acx_cv_type_intptr_t=int64_t ;;
188*16dce513Schristos    *) AC_MSG_ERROR([no equivalent for intptr_t, please report a bug])
189*16dce513Schristos  esac
190*16dce513Schristos  AC_MSG_RESULT($acx_cv_type_intptr_t)
191*16dce513Schristosfi
192*16dce513Schristos
193*16dce513Schristos# ----------------- done all checks, emit header -------------
194*16dce513SchristosAC_CONFIG_COMMANDS(_GCC_STDINT_H, [
195*16dce513Schristosif test "$GCC" = yes; then
196*16dce513Schristos  echo "/* generated for " `$CC --version | sed 1q` "*/" > tmp-stdint.h
197*16dce513Schristoselse
198*16dce513Schristos  echo "/* generated for $CC */" > tmp-stdint.h
199*16dce513Schristosfi
200*16dce513Schristos
201*16dce513Schristossed 's/^ *//' >> tmp-stdint.h <<EOF
202*16dce513Schristos
203*16dce513Schristos  #ifndef GCC_GENERATED_STDINT_H
204*16dce513Schristos  #define GCC_GENERATED_STDINT_H 1
205*16dce513Schristos
206*16dce513Schristos  #include <sys/types.h>
207*16dce513SchristosEOF
208*16dce513Schristos
209*16dce513Schristosif test "$acx_cv_header_stdint" != stdint.h; then
210*16dce513Schristos  echo "#include <stddef.h>" >> tmp-stdint.h
211*16dce513Schristosfi
212*16dce513Schristosif test "$acx_cv_header_stdint" != stddef.h; then
213*16dce513Schristos  echo "#include <$acx_cv_header_stdint>" >> tmp-stdint.h
214*16dce513Schristosfi
215*16dce513Schristos
216*16dce513Schristossed 's/^ *//' >> tmp-stdint.h <<EOF
217*16dce513Schristos  /* glibc uses these symbols as guards to prevent redefinitions.  */
218*16dce513Schristos  #ifdef __int8_t_defined
219*16dce513Schristos  #define _INT8_T
220*16dce513Schristos  #define _INT16_T
221*16dce513Schristos  #define _INT32_T
222*16dce513Schristos  #endif
223*16dce513Schristos  #ifdef __uint32_t_defined
224*16dce513Schristos  #define _UINT32_T
225*16dce513Schristos  #endif
226*16dce513Schristos
227*16dce513SchristosEOF
228*16dce513Schristos
229*16dce513Schristos# ----------------- done header, emit basic int types -------------
230*16dce513Schristosif test "$acx_cv_header_stdint" = stddef.h; then
231*16dce513Schristos  sed 's/^ *//' >> tmp-stdint.h <<EOF
232*16dce513Schristos
233*16dce513Schristos    #ifndef _UINT8_T
234*16dce513Schristos    #define _UINT8_T
235*16dce513Schristos    #ifndef __uint8_t_defined
236*16dce513Schristos    #define __uint8_t_defined
237*16dce513Schristos    #ifndef uint8_t
238*16dce513Schristos    typedef unsigned $acx_cv_type_int8_t uint8_t;
239*16dce513Schristos    #endif
240*16dce513Schristos    #endif
241*16dce513Schristos    #endif
242*16dce513Schristos
243*16dce513Schristos    #ifndef _UINT16_T
244*16dce513Schristos    #define _UINT16_T
245*16dce513Schristos    #ifndef __uint16_t_defined
246*16dce513Schristos    #define __uint16_t_defined
247*16dce513Schristos    #ifndef uint16_t
248*16dce513Schristos    typedef unsigned $acx_cv_type_int16_t uint16_t;
249*16dce513Schristos    #endif
250*16dce513Schristos    #endif
251*16dce513Schristos    #endif
252*16dce513Schristos
253*16dce513Schristos    #ifndef _UINT32_T
254*16dce513Schristos    #define _UINT32_T
255*16dce513Schristos    #ifndef __uint32_t_defined
256*16dce513Schristos    #define __uint32_t_defined
257*16dce513Schristos    #ifndef uint32_t
258*16dce513Schristos    typedef unsigned $acx_cv_type_int32_t uint32_t;
259*16dce513Schristos    #endif
260*16dce513Schristos    #endif
261*16dce513Schristos    #endif
262*16dce513Schristos
263*16dce513Schristos    #ifndef _INT8_T
264*16dce513Schristos    #define _INT8_T
265*16dce513Schristos    #ifndef __int8_t_defined
266*16dce513Schristos    #define __int8_t_defined
267*16dce513Schristos    #ifndef int8_t
268*16dce513Schristos    typedef $acx_cv_type_int8_t int8_t;
269*16dce513Schristos    #endif
270*16dce513Schristos    #endif
271*16dce513Schristos    #endif
272*16dce513Schristos
273*16dce513Schristos    #ifndef _INT16_T
274*16dce513Schristos    #define _INT16_T
275*16dce513Schristos    #ifndef __int16_t_defined
276*16dce513Schristos    #define __int16_t_defined
277*16dce513Schristos    #ifndef int16_t
278*16dce513Schristos    typedef $acx_cv_type_int16_t int16_t;
279*16dce513Schristos    #endif
280*16dce513Schristos    #endif
281*16dce513Schristos    #endif
282*16dce513Schristos
283*16dce513Schristos    #ifndef _INT32_T
284*16dce513Schristos    #define _INT32_T
285*16dce513Schristos    #ifndef __int32_t_defined
286*16dce513Schristos    #define __int32_t_defined
287*16dce513Schristos    #ifndef int32_t
288*16dce513Schristos    typedef $acx_cv_type_int32_t int32_t;
289*16dce513Schristos    #endif
290*16dce513Schristos    #endif
291*16dce513Schristos    #endif
292*16dce513SchristosEOF
293*16dce513Schristoselif test "$ac_cv_type_u_int32_t" = yes; then
294*16dce513Schristos  sed 's/^ *//' >> tmp-stdint.h <<EOF
295*16dce513Schristos
296*16dce513Schristos    /* int8_t int16_t int32_t defined by inet code, we do the u_intXX types */
297*16dce513Schristos    #ifndef _INT8_T
298*16dce513Schristos    #define _INT8_T
299*16dce513Schristos    #endif
300*16dce513Schristos    #ifndef _INT16_T
301*16dce513Schristos    #define _INT16_T
302*16dce513Schristos    #endif
303*16dce513Schristos    #ifndef _INT32_T
304*16dce513Schristos    #define _INT32_T
305*16dce513Schristos    #endif
306*16dce513Schristos
307*16dce513Schristos    #ifndef _UINT8_T
308*16dce513Schristos    #define _UINT8_T
309*16dce513Schristos    #ifndef __uint8_t_defined
310*16dce513Schristos    #define __uint8_t_defined
311*16dce513Schristos    #ifndef uint8_t
312*16dce513Schristos    typedef u_int8_t uint8_t;
313*16dce513Schristos    #endif
314*16dce513Schristos    #endif
315*16dce513Schristos    #endif
316*16dce513Schristos
317*16dce513Schristos    #ifndef _UINT16_T
318*16dce513Schristos    #define _UINT16_T
319*16dce513Schristos    #ifndef __uint16_t_defined
320*16dce513Schristos    #define __uint16_t_defined
321*16dce513Schristos    #ifndef uint16_t
322*16dce513Schristos    typedef u_int16_t uint16_t;
323*16dce513Schristos    #endif
324*16dce513Schristos    #endif
325*16dce513Schristos    #endif
326*16dce513Schristos
327*16dce513Schristos    #ifndef _UINT32_T
328*16dce513Schristos    #define _UINT32_T
329*16dce513Schristos    #ifndef __uint32_t_defined
330*16dce513Schristos    #define __uint32_t_defined
331*16dce513Schristos    #ifndef uint32_t
332*16dce513Schristos    typedef u_int32_t uint32_t;
333*16dce513Schristos    #endif
334*16dce513Schristos    #endif
335*16dce513Schristos    #endif
336*16dce513SchristosEOF
337*16dce513Schristoselse
338*16dce513Schristos  sed 's/^ *//' >> tmp-stdint.h <<EOF
339*16dce513Schristos
340*16dce513Schristos    /* Some systems have guard macros to prevent redefinitions, define them.  */
341*16dce513Schristos    #ifndef _INT8_T
342*16dce513Schristos    #define _INT8_T
343*16dce513Schristos    #endif
344*16dce513Schristos    #ifndef _INT16_T
345*16dce513Schristos    #define _INT16_T
346*16dce513Schristos    #endif
347*16dce513Schristos    #ifndef _INT32_T
348*16dce513Schristos    #define _INT32_T
349*16dce513Schristos    #endif
350*16dce513Schristos    #ifndef _UINT8_T
351*16dce513Schristos    #define _UINT8_T
352*16dce513Schristos    #endif
353*16dce513Schristos    #ifndef _UINT16_T
354*16dce513Schristos    #define _UINT16_T
355*16dce513Schristos    #endif
356*16dce513Schristos    #ifndef _UINT32_T
357*16dce513Schristos    #define _UINT32_T
358*16dce513Schristos    #endif
359*16dce513SchristosEOF
360*16dce513Schristosfi
361*16dce513Schristos
362*16dce513Schristos# ------------- done basic int types, emit int64_t types ------------
363*16dce513Schristosif test "$ac_cv_type_uint64_t" = yes; then
364*16dce513Schristos  sed 's/^ *//' >> tmp-stdint.h <<EOF
365*16dce513Schristos
366*16dce513Schristos    /* system headers have good uint64_t and int64_t */
367*16dce513Schristos    #ifndef _INT64_T
368*16dce513Schristos    #define _INT64_T
369*16dce513Schristos    #endif
370*16dce513Schristos    #ifndef _UINT64_T
371*16dce513Schristos    #define _UINT64_T
372*16dce513Schristos    #endif
373*16dce513SchristosEOF
374*16dce513Schristoselif test "$ac_cv_type_u_int64_t" = yes; then
375*16dce513Schristos  sed 's/^ *//' >> tmp-stdint.h <<EOF
376*16dce513Schristos
377*16dce513Schristos    /* system headers have an u_int64_t (and int64_t) */
378*16dce513Schristos    #ifndef _INT64_T
379*16dce513Schristos    #define _INT64_T
380*16dce513Schristos    #endif
381*16dce513Schristos    #ifndef _UINT64_T
382*16dce513Schristos    #define _UINT64_T
383*16dce513Schristos    #ifndef __uint64_t_defined
384*16dce513Schristos    #define __uint64_t_defined
385*16dce513Schristos    #ifndef uint64_t
386*16dce513Schristos    typedef u_int64_t uint64_t;
387*16dce513Schristos    #endif
388*16dce513Schristos    #endif
389*16dce513Schristos    #endif
390*16dce513SchristosEOF
391*16dce513Schristoselif test -n "$acx_cv_type_int64_t"; then
392*16dce513Schristos  sed 's/^ *//' >> tmp-stdint.h <<EOF
393*16dce513Schristos
394*16dce513Schristos    /* architecture has a 64-bit type, $acx_cv_type_int64_t */
395*16dce513Schristos    #ifndef _INT64_T
396*16dce513Schristos    #define _INT64_T
397*16dce513Schristos    #ifndef int64_t
398*16dce513Schristos    typedef $acx_cv_type_int64_t int64_t;
399*16dce513Schristos    #endif
400*16dce513Schristos    #endif
401*16dce513Schristos    #ifndef _UINT64_T
402*16dce513Schristos    #define _UINT64_T
403*16dce513Schristos    #ifndef __uint64_t_defined
404*16dce513Schristos    #define __uint64_t_defined
405*16dce513Schristos    #ifndef uint64_t
406*16dce513Schristos    typedef unsigned $acx_cv_type_int64_t uint64_t;
407*16dce513Schristos    #endif
408*16dce513Schristos    #endif
409*16dce513Schristos    #endif
410*16dce513SchristosEOF
411*16dce513Schristoselse
412*16dce513Schristos  sed 's/^ *//' >> tmp-stdint.h <<EOF
413*16dce513Schristos
414*16dce513Schristos    /* some common heuristics for int64_t, using compiler-specific tests */
415*16dce513Schristos    #if defined __STDC_VERSION__ && (__STDC_VERSION__-0) >= 199901L
416*16dce513Schristos    #ifndef _INT64_T
417*16dce513Schristos    #define _INT64_T
418*16dce513Schristos    #ifndef __int64_t_defined
419*16dce513Schristos    #ifndef int64_t
420*16dce513Schristos    typedef long long int64_t;
421*16dce513Schristos    #endif
422*16dce513Schristos    #endif
423*16dce513Schristos    #endif
424*16dce513Schristos    #ifndef _UINT64_T
425*16dce513Schristos    #define _UINT64_T
426*16dce513Schristos    #ifndef uint64_t
427*16dce513Schristos    typedef unsigned long long uint64_t;
428*16dce513Schristos    #endif
429*16dce513Schristos    #endif
430*16dce513Schristos
431*16dce513Schristos    #elif defined __GNUC__ && defined (__STDC__) && __STDC__-0
432*16dce513Schristos    /* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and
433*16dce513Schristos       does not implement __extension__.  But that compiler doesn't define
434*16dce513Schristos       __GNUC_MINOR__.  */
435*16dce513Schristos    # if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__)
436*16dce513Schristos    # define __extension__
437*16dce513Schristos    # endif
438*16dce513Schristos
439*16dce513Schristos    # ifndef _INT64_T
440*16dce513Schristos    # define _INT64_T
441*16dce513Schristos    # ifndef int64_t
442*16dce513Schristos    __extension__ typedef long long int64_t;
443*16dce513Schristos    # endif
444*16dce513Schristos    # endif
445*16dce513Schristos    # ifndef _UINT64_T
446*16dce513Schristos    # define _UINT64_T
447*16dce513Schristos    # ifndef uint64_t
448*16dce513Schristos    __extension__ typedef unsigned long long uint64_t;
449*16dce513Schristos    # endif
450*16dce513Schristos    # endif
451*16dce513Schristos
452*16dce513Schristos    #elif !defined __STRICT_ANSI__
453*16dce513Schristos    # if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__
454*16dce513Schristos
455*16dce513Schristos    #  ifndef _INT64_T
456*16dce513Schristos    #  define _INT64_T
457*16dce513Schristos    #  ifndef int64_t
458*16dce513Schristos    typedef __int64 int64_t;
459*16dce513Schristos    #  endif
460*16dce513Schristos    #  endif
461*16dce513Schristos    #  ifndef _UINT64_T
462*16dce513Schristos    #  define _UINT64_T
463*16dce513Schristos    #  ifndef uint64_t
464*16dce513Schristos    typedef unsigned __int64 uint64_t;
465*16dce513Schristos    #  endif
466*16dce513Schristos    #  endif
467*16dce513Schristos    # endif /* compiler */
468*16dce513Schristos
469*16dce513Schristos    #endif /* ANSI version */
470*16dce513SchristosEOF
471*16dce513Schristosfi
472*16dce513Schristos
473*16dce513Schristos# ------------- done int64_t types, emit intptr types ------------
474*16dce513Schristosif test "$ac_cv_type_uintptr_t" != yes; then
475*16dce513Schristos  sed 's/^ *//' >> tmp-stdint.h <<EOF
476*16dce513Schristos
477*16dce513Schristos    /* Define intptr_t based on sizeof(void*) = $ac_cv_sizeof_void_p */
478*16dce513Schristos    #ifndef __uintptr_t_defined
479*16dce513Schristos    #ifndef uintptr_t
480*16dce513Schristos    typedef u$acx_cv_type_intptr_t uintptr_t;
481*16dce513Schristos    #endif
482*16dce513Schristos    #endif
483*16dce513Schristos    #ifndef __intptr_t_defined
484*16dce513Schristos    #ifndef intptr_t
485*16dce513Schristos    typedef $acx_cv_type_intptr_t  intptr_t;
486*16dce513Schristos    #endif
487*16dce513Schristos    #endif
488*16dce513SchristosEOF
489*16dce513Schristosfi
490*16dce513Schristos
491*16dce513Schristos# ------------- done intptr types, emit int_least types ------------
492*16dce513Schristosif test "$ac_cv_type_int_least32_t" != yes; then
493*16dce513Schristos  sed 's/^ *//' >> tmp-stdint.h <<EOF
494*16dce513Schristos
495*16dce513Schristos    /* Define int_least types */
496*16dce513Schristos    typedef int8_t     int_least8_t;
497*16dce513Schristos    typedef int16_t    int_least16_t;
498*16dce513Schristos    typedef int32_t    int_least32_t;
499*16dce513Schristos    #ifdef _INT64_T
500*16dce513Schristos    typedef int64_t    int_least64_t;
501*16dce513Schristos    #endif
502*16dce513Schristos
503*16dce513Schristos    typedef uint8_t    uint_least8_t;
504*16dce513Schristos    typedef uint16_t   uint_least16_t;
505*16dce513Schristos    typedef uint32_t   uint_least32_t;
506*16dce513Schristos    #ifdef _UINT64_T
507*16dce513Schristos    typedef uint64_t   uint_least64_t;
508*16dce513Schristos    #endif
509*16dce513SchristosEOF
510*16dce513Schristosfi
511*16dce513Schristos
512*16dce513Schristos# ------------- done intptr types, emit int_fast types ------------
513*16dce513Schristosif test "$ac_cv_type_int_fast32_t" != yes; then
514*16dce513Schristos  dnl NOTE: The following code assumes that sizeof (int) > 1.
515*16dce513Schristos  dnl Fix when strange machines are reported.
516*16dce513Schristos  sed 's/^ *//' >> tmp-stdint.h <<EOF
517*16dce513Schristos
518*16dce513Schristos    /* Define int_fast types.  short is often slow */
519*16dce513Schristos    typedef int8_t       int_fast8_t;
520*16dce513Schristos    typedef int          int_fast16_t;
521*16dce513Schristos    typedef int32_t      int_fast32_t;
522*16dce513Schristos    #ifdef _INT64_T
523*16dce513Schristos    typedef int64_t      int_fast64_t;
524*16dce513Schristos    #endif
525*16dce513Schristos
526*16dce513Schristos    typedef uint8_t      uint_fast8_t;
527*16dce513Schristos    typedef unsigned int uint_fast16_t;
528*16dce513Schristos    typedef uint32_t     uint_fast32_t;
529*16dce513Schristos    #ifdef _UINT64_T
530*16dce513Schristos    typedef uint64_t     uint_fast64_t;
531*16dce513Schristos    #endif
532*16dce513SchristosEOF
533*16dce513Schristosfi
534*16dce513Schristos
535*16dce513Schristosif test "$ac_cv_type_uintmax_t" != yes; then
536*16dce513Schristos  sed 's/^ *//' >> tmp-stdint.h <<EOF
537*16dce513Schristos
538*16dce513Schristos    /* Define intmax based on what we found */
539*16dce513Schristos    #ifndef intmax_t
540*16dce513Schristos    #ifdef _INT64_T
541*16dce513Schristos    typedef int64_t       intmax_t;
542*16dce513Schristos    #else
543*16dce513Schristos    typedef long          intmax_t;
544*16dce513Schristos    #endif
545*16dce513Schristos    #endif
546*16dce513Schristos    #ifndef uintmax_t
547*16dce513Schristos    #ifdef _UINT64_T
548*16dce513Schristos    typedef uint64_t      uintmax_t;
549*16dce513Schristos    #else
550*16dce513Schristos    typedef unsigned long uintmax_t;
551*16dce513Schristos    #endif
552*16dce513Schristos    #endif
553*16dce513SchristosEOF
554*16dce513Schristosfi
555*16dce513Schristos
556*16dce513Schristossed 's/^ *//' >> tmp-stdint.h <<EOF
557*16dce513Schristos
558*16dce513Schristos  #endif /* GCC_GENERATED_STDINT_H */
559*16dce513SchristosEOF
560*16dce513Schristos
561*16dce513Schristosif test -r ]_GCC_STDINT_H[ && cmp -s tmp-stdint.h ]_GCC_STDINT_H[; then
562*16dce513Schristos  rm -f tmp-stdint.h
563*16dce513Schristoselse
564*16dce513Schristos  mv -f tmp-stdint.h ]_GCC_STDINT_H[
565*16dce513Schristosfi
566*16dce513Schristos
567*16dce513Schristos], [
568*16dce513SchristosGCC="$GCC"
569*16dce513SchristosCC="$CC"
570*16dce513Schristosacx_cv_header_stdint="$acx_cv_header_stdint"
571*16dce513Schristosacx_cv_type_int8_t="$acx_cv_type_int8_t"
572*16dce513Schristosacx_cv_type_int16_t="$acx_cv_type_int16_t"
573*16dce513Schristosacx_cv_type_int32_t="$acx_cv_type_int32_t"
574*16dce513Schristosacx_cv_type_int64_t="$acx_cv_type_int64_t"
575*16dce513Schristosacx_cv_type_intptr_t="$acx_cv_type_intptr_t"
576*16dce513Schristosac_cv_type_uintmax_t="$ac_cv_type_uintmax_t"
577*16dce513Schristosac_cv_type_uintptr_t="$ac_cv_type_uintptr_t"
578*16dce513Schristosac_cv_type_uint64_t="$ac_cv_type_uint64_t"
579*16dce513Schristosac_cv_type_u_int64_t="$ac_cv_type_u_int64_t"
580*16dce513Schristosac_cv_type_u_int32_t="$ac_cv_type_u_int32_t"
581*16dce513Schristosac_cv_type_int_least32_t="$ac_cv_type_int_least32_t"
582*16dce513Schristosac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t"
583*16dce513Schristosac_cv_sizeof_void_p="$ac_cv_sizeof_void_p"
584*16dce513Schristos])
585*16dce513Schristos
586*16dce513Schristos])
587