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