ref: b07dcf3d9c00b6ac787455b9216df69e38805eb8
parent: aa1567af66cf6be96cc24add80a7bb5c55b9bbef
author: cbagwell <cbagwell>
date: Mon Dec 3 11:11:52 EST 2001
Updating aclocal with macro headers. Fix to compile_check_sizeof().
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,3 +1,54 @@
+dnl @synopsis AC_COMPILE_CHECK_SIZEOF(TYPE [, HEADERS [, EXTRA_SIZES...]])
+dnl
+dnl This macro checks for the size of TYPE using compile checks, not
+dnl run checks. You can supply extra HEADERS to look into. the check
+dnl will cycle through 1 2 4 8 16 and any EXTRA_SIZES the user
+dnl supplies. If a match is found, it will #define SIZEOF_`TYPE' to
+dnl that value. Otherwise it will emit a configure time error
+dnl indicating the size of the type could not be determined.
+dnl
+dnl The trick is that C will not allow duplicate case labels. While
+dnl this is valid C code:
+dnl
+dnl switch (0) case 0: case 1:;
+dnl
+dnl The following is not:
+dnl
+dnl switch (0) case 0: case 0:;
+dnl
+dnl Thus, the AC_TRY_COMPILE will fail if the currently tried size
+dnl does not match.
+dnl
+dnl Here is an example skeleton configure.in script, demonstrating the
+dnl macro's usage:
+dnl
+dnl AC_PROG_CC
+dnl AC_CHECK_HEADERS(stddef.h unistd.h)
+dnl AC_TYPE_SIZE_T
+dnl AC_CHECK_TYPE(ssize_t, int)
+dnl
+dnl headers='#ifdef HAVE_STDDEF_H
+dnl #include <stddef.h>
+dnl #endif
+dnl #ifdef HAVE_UNISTD_H
+dnl #include <unistd.h>
+dnl #endif
+dnl '
+dnl
+dnl AC_COMPILE_CHECK_SIZEOF(char)
+dnl AC_COMPILE_CHECK_SIZEOF(short)
+dnl AC_COMPILE_CHECK_SIZEOF(int)
+dnl AC_COMPILE_CHECK_SIZEOF(long)
+dnl AC_COMPILE_CHECK_SIZEOF(unsigned char *)
+dnl AC_COMPILE_CHECK_SIZEOF(void *)
+dnl AC_COMPILE_CHECK_SIZEOF(size_t, $headers)
+dnl AC_COMPILE_CHECK_SIZEOF(ssize_t, $headers)
+dnl AC_COMPILE_CHECK_SIZEOF(ptrdiff_t, $headers)
+dnl AC_COMPILE_CHECK_SIZEOF(off_t, $headers)
+dnl
+dnl @author Kaveh Ghazi <ghazi@caip.rutgers.edu>
+dnl @version $Id: aclocal.m4,v 1.2 2001/12/03 16:11:52 cbagwell Exp $
+dnl
AC_DEFUN([AC_COMPILE_CHECK_SIZEOF],
[changequote(<<, >>)dnl
dnl The name to #define.
@@ -10,7 +61,6 @@
[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
@@ -24,8 +74,20 @@
undefine([AC_CV_NAME])dnl
])
+dnl @synopsis AC_CHECK_TYPEDEF_(TYPEDEF, HEADER [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]])
+dnl
+dnl check if the given typedef-name is recognized as a type. The trick is
+dnl to use a sizeof(TYPEDEF) and see if the compiler is happy with that.
+dnl
+dnl this can be thought of as a mixture of AC_CHECK_TYPE(TYPEDEF,DEFAULT)
+dnl and AC_CHECK_LIB(LIBRARY,FUNCTION,ACTION-IF-FOUND,ACTION-IF-NOT-FOUND)
+dnl
+dnl a convenience macro AC_CHECK_TYPEDEF_ is provided that will not emit
+dnl any message to the user - it just executes one of the actions.
+dnl
+dnl @version $Id: aclocal.m4,v 1.2 2001/12/03 16:11:52 cbagwell Exp $
+dnl @author Guido Draheim <guidod@gmx.de>
-
AC_DEFUN(AC_CHECK_TYPEDEF_,
[dnl
ac_lib_var=`echo $1['_']$2 | sed 'y%./+-%__p_%'`
@@ -33,7 +95,7 @@
[ 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;],
+ [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
@@ -51,6 +113,40 @@
AC_CHECK_TYPEDEF_($1,$2,AC_MSG_RESULT(yes),AC_MSG_RESULT(no))dnl
])
+dnl @synopsis AC_NEED_STDINT_H [( HEADER-TO-GENERATE [, HEDERS-TO-CHECK])]
+dnl
+dnl the "ISO C9X: 7.18 Integer types <stdint.h>" section requires the
+dnl existence of an include file <stdint.h> that defines a set of
+dnl typedefs, especially uint8_t,int32_t,uintptr_t.
+dnl Many older installations will not provide this file, but some will
+dnl have the very same definitions in <inttypes.h>. In other enviroments
+dnl we can use the inet-types in <sys/types.h> which would define the
+dnl typedefs int8_t and u_int8_t respectivly.
+dnl
+dnl This macros will create a local "stdint.h" if it cannot find the
+dnl global <stdint.h> (or it will create the headerfile given as an argument).
+dnl In many cases that file will just have a singular "#include <inttypes.h>"
+dnl statement, while in other environments it will provide the set of basic
+dnl stdint's defined:
+dnl int8_t,uint8_t,int16_t,uint16_t,int32_t,uint32_t,intptr_t,uintptr_t
+dnl int_least32_t.. int_fast32_t.. intmax_t
+dnl which may or may not rely on the definitions of other files,
+dnl or using the AC_COMPILE_CHECK_SIZEOF macro to determine the actual
+dnl sizeof each type.
+dnl
+dnl if your header files require the stdint-types you will want to create an
+dnl installable file package-stdint.h that all your other installable header
+dnl may include. So if you have a library package named "mylib", just use
+dnl AC_NEED_STDINT(zziplib-stdint.h)
+dnl in configure.in and go to install that very header file in Makefile.am
+dnl along with the other headers (mylib.h) - and the mylib-specific headers
+dnl can simply use "#include <mylib-stdint.h>" to obtain the stdint-types.
+dnl
+dnl Remember, if the system already had a valid <stdint.h>, the generated
+dnl file will include it directly. No need for fuzzy HAVE_STDINT_H things...
+dnl
+dnl @version $Id: aclocal.m4,v 1.2 2001/12/03 16:11:52 cbagwell Exp $
+dnl @author Guido Draheim <guidod@gmx.de> STATUS: used on new platforms
AC_DEFUN([AC_NEED_STDINT_H],
[AC_MSG_CHECKING([for stdint-types])
@@ -126,7 +222,7 @@
EOF
else
- cat >>$ac_stdint_h <<EOF
+ cat >>$ac_stdint_h <<EOF
typedef signed long int32_t;
typedef unsigned long uint32_t;
@@ -150,7 +246,7 @@
fi
if "$ac_cv_header_stdint_generated" ; then
- cat >>$ac_stdint_h <<EOF
+ cat >>$ac_stdint_h <<EOF
typedef int8_t int_least8_t;
typedef int16_t int_least16_t;
@@ -172,5 +268,5 @@
typedef unsigned long uintmax_t;
#endif
EOF
- fi dnl
+ fi dnl
])