ref: 27e4b819de501afa8cdccd3f66527c9b5cfd990b
dir: /aclocal.m4/
AC_DEFUN([AC_COMPILE_CHECK_SIZEOF], [changequote(<<, >>)dnl dnl The name to #define. define(<<AC_TYPE_NAME>>, translit(sizeof_$1, [a-z *], [A-Z_P]))dnl dnl The cache variable name. define(<<AC_CV_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl changequote([, ])dnl AC_MSG_CHECKING(size of $1) AC_CACHE_VAL(AC_CV_NAME, [for ac_size in 4 8 1 2 16 $2 ; do # List sizes in rough order of prevalence. AC_TRY_COMPILE([#include "confdefs.h" #include <sys/types.h> $2 ], [switch (0) case 0: case (sizeof ($1) == $ac_size):;], AC_CV_NAME=$ac_size) if test x$AC_CV_NAME != x ; then break; fi done ]) if test x$AC_CV_NAME = x ; then AC_MSG_ERROR([cannot determine a size for $1]) fi AC_MSG_RESULT($AC_CV_NAME) AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [The number of bytes in type $1]) undefine([AC_TYPE_NAME])dnl undefine([AC_CV_NAME])dnl ]) AC_DEFUN(AC_CHECK_TYPEDEF_, [dnl ac_lib_var=`echo $1['_']$2 | sed 'y%./+-%__p_%'` AC_CACHE_VAL(ac_cv_lib_$ac_lib_var, [ eval "ac_cv_type_$ac_lib_var='not-found'" ac_cv_check_typedef_header=`echo ifelse([$2], , stddef.h, $2)` AC_TRY_COMPILE( [#include <$ac_cv_check_typedef_header>], [int x = sizeof($1); x = x;], eval "ac_cv_type_$ac_lib_var=yes" , eval "ac_cv_type_$ac_lib_var=no" ) if test `eval echo '$ac_cv_type_'$ac_lib_var` = "no" ; then ifelse([$4], , :, $4) else ifelse([$3], , :, $3) fi ])]) dnl AC_CHECK_TYPEDEF(TYPEDEF, HEADER [, ACTION-IF-FOUND, dnl [, ACTION-IF-NOT-FOUND ]]) AC_DEFUN(AC_CHECK_TYPEDEF, [dnl AC_MSG_CHECKING([for $1 in $2]) AC_CHECK_TYPEDEF_($1,$2,AC_MSG_RESULT(yes),AC_MSG_RESULT(no))dnl ]) AC_DEFUN([AC_NEED_STDINT_H], [AC_MSG_CHECKING([for stdint-types]) ac_cv_header_stdint="no-file" ac_cv_header_stdint_u="no-file" for i in $1 inttypes.h sys/inttypes.h sys/int_types.h stdint.h ; do AC_CHECK_TYPEDEF_(uint32_t, $i, [ac_cv_header_stdint=$i]) done for i in $1 sys/types.h inttypes.h sys/inttypes.h sys/int_types.h ; do AC_CHECK_TYPEDEF_(u_int32_t, $i, [ac_cv_header_stdint_u=$i]) done dnl debugging: __AC_MSG( !$ac_cv_header_stdint!$ac_cv_header_stdint_u! ...) ac_stdint_h=`echo ifelse($1, , stdint.h, $1)` if test "$ac_cv_header_stdint" != "no-file" ; then if test "$ac_cv_header_stdint" != "$ac_stdint_h" ; then AC_MSG_RESULT(found in $ac_cv_header_stdint) echo "#include <$ac_cv_header_stdint>" >$ac_stdint_h AC_MSG_RESULT(creating $ac_stdint_h - (just to include $ac_cv_header_stdint) ) else AC_MSG_RESULT(found in $ac_stdint_h) fi ac_cv_header_stdint_generated=false elif test "$ac_cv_header_stdint_u" != "no-file" ; then AC_MSG_RESULT(found u_types in $ac_cv_header_stdint_u) if test $ac_cv_header_stdint = "$ac_stdint_h" ; then AC_MSG_RESULT(creating $ac_stdint_h - includes $ac_cv_header_stdint, expect problems!) else AC_MSG_RESULT(creating $ac_stdint_h - (include inet-types in $ac_cv_header_stdint_u and re-typedef)) fi cat >$ac_stdint_h <<EOF #ifndef __AC_STDINT_H #define __AC_STDINT_H 1 #include <stddef.h> #include <$ac_cv_header_stdint_u> /* int8_t int16_t int32_t defined by inet code */ typedef u_int8_t uint8_t; typedef u_int16_t uint16_t; typedef u_int32_t uint32_t; /* it's a networkable system, but without any stdint.h */ /* hence it's an older 32-bit system... (a wild guess that seems to work) */ typedef u_int32_t uintptr_t; typedef int32_t intptr_t; EOF ac_cv_header_stdint_generated=true else AC_MSG_RESULT(not found, need to guess the types now... ) AC_COMPILE_CHECK_SIZEOF(long, 32) AC_COMPILE_CHECK_SIZEOF(void*, 32) AC_MSG_RESULT( creating $ac_stdint_h - using detected values for sizeof long and sizeof void* ) cat >$ac_stdint_h <<EOF #ifndef __AC_STDINT_H #define __AC_STDINT_H 1 /* ISO C 9X: 7.18 Integer types <stdint.h> */ #define __int8_t_defined typedef signed char int8_t; typedef unsigned char uint8_t; typedef signed short int16_t; typedef unsigned short uint16_t; EOF if test "$ac_cv_sizeof_long" = "64" ; then cat >>$ac_stdint_h <<EOF typedef signed int int32_t; typedef unsigned int uint32_t; typedef signed long int64_t; typedef unsigned long uint64_t; #define int64_t int64_t #define uint64_t uint64_t EOF else cat >>$ac_stdint_h <<EOF typedef signed long int32_t; typedef unsigned long uint32_t; EOF fi if test "$ac_cv_sizeof_long" != "$ac_cv_sizeof_voidp" ; then cat >>$ac_stdint_h <<EOF typedef signed int intptr_t; typedef unsigned int uintptr_t; EOF else cat >>$ac_stdint_h <<EOF typedef signed long intptr_t; typedef unsigned long uintptr_t; EOF ac_cv_header_stdint_generated=true fi fi if "$ac_cv_header_stdint_generated" ; then cat >>$ac_stdint_h <<EOF typedef int8_t int_least8_t; typedef int16_t int_least16_t; typedef int32_t int_least32_t; typedef uint8_t uint_least8_t; typedef uint16_t uint_least16_t; typedef uint32_t uint_least32_t; typedef int8_t int_fast8_t; typedef int32_t int_fast16_t; typedef int32_t int_fast32_t; typedef uint8_t uint_fast8_t; typedef uint32_t uint_fast16_t; typedef uint32_t uint_fast32_t; typedef long int intmax_t; typedef unsigned long uintmax_t; #endif EOF fi dnl ])