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