From c910e682cce5a282e2eeb4acbace112a369a7f02 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Fri, 7 Jul 2006 14:21:57 +0000 Subject: [PATCH] 2006-07-07 Paolo Bonzini * doc/autoconf.texi (Generic compiler characteristics): Document AC_COMPUTE_INT. Fix wrong statements on Default Includes for AC_CHECK_SIZEOF and AC_CHECK_ALIGNOF. * lib/autoconf/general.m4 (AC_COMPUTE_INT): New. (_AC_COMPUTE_INT): Add obsoletion warnings. * lib/autoconf/types.m4 (AC_CHECK_SIZEOF, AC_CHECK_ALIGNOF): Use AC_COMPUTE_INT. * NEWS: Document change. --- ChangeLog | 13 +++++++++++ NEWS | 5 +++++ doc/autoconf.texi | 27 +++++++++++++++++----- lib/autoconf/general.m4 | 29 ++++++++++++++++++++++-- lib/autoconf/types.m4 | 50 ++++++++++++++++++++--------------------- tests/mktests.sh | 1 + 6 files changed, 93 insertions(+), 32 deletions(-) diff --git a/ChangeLog b/ChangeLog index 96acb228..8bcb81de 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2006-07-07 Paolo Bonzini + + * doc/autoconf.texi (Generic compiler characteristics): + Document AC_COMPUTE_INT. Fix wrong statements on Default + Includes for AC_CHECK_SIZEOF and AC_CHECK_ALIGNOF. + + * lib/autoconf/general.m4 (AC_COMPUTE_INT): New. + (_AC_COMPUTE_INT): Add obsoletion warnings. + * lib/autoconf/types.m4 (AC_CHECK_SIZEOF, AC_CHECK_ALIGNOF): Use + AC_COMPUTE_INT. + + * NEWS: Document change. + 2006-07-05 Paul Eggert * doc/autoconf.texi (Volatile Objects): New section. diff --git a/NEWS b/NEWS index 047bb031..c9ea69e5 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,10 @@ * Major changes in Autoconf 2.60a +** The functionality of the undocumented _AC_COMPUTE_INT is now provided + by a public and documented macro, AC_COMPUTE_INT. The parameters to the + two macros are different, so autoupdate will not change the old private name + to the new one. _AC_COMPUTE_INT may be removed in a future release. + ** AC_TYPE_LONG_LONG_INT and AC_TYPE_UNSIGNED_LONG_LONG_INT now require that long long types be at least 64 bits wide, as C99 and tradition requires. Formerly, they accepted implementations of any width. diff --git a/doc/autoconf.texi b/doc/autoconf.texi index 8b9e5093..5c06d5bc 100644 --- a/doc/autoconf.texi +++ b/doc/autoconf.texi @@ -6167,8 +6167,7 @@ Autoconf works around this problem by casting @code{sizeof (int)} to Define @code{SIZEOF_@var{type}} (@pxref{Standard Symbols}) to be the size in bytes of @var{type}. If @samp{type} is unknown, it gets a size of 0. If no @var{includes} are specified, the default includes are used -(@pxref{Default Includes}). If you provide @var{include}, be sure to -include @file{stdio.h} which is required for this macro to run. +(@pxref{Default Includes}). This macro now works even when cross-compiling. The @var{unused} argument was used when cross-compiling. @@ -6188,9 +6187,27 @@ defines @code{SIZEOF_INT_P} to be 8 on DEC Alpha AXP systems. Define @code{ALIGNOF_@var{type}} (@pxref{Standard Symbols}) to be the alignment in bytes of @var{type}. If @samp{type} is unknown, it gets a size of 0. If no @var{includes} are specified, the default includes are used -(@pxref{Default Includes}). If you provide @var{include}, be sure to -include @file{stddef.h} and @file{stdio.h} which are required for this -macro to work correctly. +(@pxref{Default Includes}). +@end defmac + +@defmac AC_COMPUTE_INT (@var{message}, @var{cache-id}, @var{expression}, @dvar{includes, default-includes}, @ovar{if-fails}) +@acindex{COMPUTE_INT} +Compute the value of the integer @var{expression} in @var{cache-id}. The +value should fit in an initializer in a C variable of type @code{signed +long}. To support cross compilation (in which case, the macro only works on +hosts that use twos-complement arithmetic), it should be possible to evaluate +the expression at compile-time. If no @var{includes} are specified, the default +includes are used (@pxref{Default Includes}). + +The macro also takes care of checking if the result is already in the +cache, and of reporting the test on the standard output +with @code{AC_MSG_CHECKING} (which prints @var{message}) and +@code{AC_MSG_RESULT}. + +If the value cannot be determined correctly, the code in @var{if-fails} +is executed. The @var{if-fails} commands @emph{must have no side effects} +except for possibly setting the variable @var{cache-id}. +@xref{Caching Results}, for more information. @end defmac @defmac AC_LANG_WERROR diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4 index 0ef455c2..869848d6 100644 --- a/lib/autoconf/general.m4 +++ b/lib/autoconf/general.m4 @@ -2716,9 +2716,14 @@ m4_define([_AC_COMPUTE_INT_RUN], [$2=`cat conftest.val`], [$4])]) -# _AC_COMPUTE_INT(EXPRESSION, VARIABLE, PROLOGUE, IF-FAILS) +# _AC_COMPUTE_INT(EXPRESSION, VARIABLE, PROLOGUE, [IF-FAILS]) # --------------------------------------------------------- -m4_define([_AC_COMPUTE_INT], +# FIXME: this private interface was used by several packages. +# Give them time to transition to AC_COMPUTE_INT (which is cleaner) +# and then delete this one. Or if they do not transition, +# it may make sense to limit the code duplication and use +# _AC_COMPUTE_INT from within the public macro. +AC_DEFUN([_AC_COMPUTE_INT], [AC_LANG_COMPILER_REQUIRE()dnl if test "$cross_compiling" = yes; then _AC_COMPUTE_INT_COMPILE([$1], [$2], [$3], [$4]) @@ -2726,4 +2731,24 @@ else _AC_COMPUTE_INT_RUN([$1], [$2], [$3], [$4]) fi rm -f conftest.val[]dnl +AC_DIAGNOSE([obsolete], +[The macro `_AC_COMPUTE_INT' is obsolete and will be deleted in a +future version or Autoconf. Hence, it is suggested that you use +instead the public AC_COMPUTE_INT macro. Note that the arguments are +slightly different between the two.])dnl ])# _AC_COMPUTE_INT + +# AC_COMPUTE_INT(MESSAGE, CACHE-ID, EXPRESSION, [PROLOGUE = DEFAULT-INCLUDES], +# [IF-FAILS]) +# --------------------------------------------------------- +AC_DEFUN([AC_COMPUTE_INT], +[AC_LANG_COMPILER_REQUIRE()dnl +AC_CACHE_CHECK([$1], [$2], +[if test "$cross_compiling" = yes; then + _AC_COMPUTE_INT_COMPILE([$3], [$2], [AC_INCLUDES_DEFAULT([$4])], [$5]) +else + _AC_COMPUTE_INT_RUN([$3], [$2], [AC_INCLUDES_DEFAULT([$4])], [$5]) +fi +rm -f conftest.val[]dnl +]) +])# AC_COMPUTE_INT diff --git a/lib/autoconf/types.m4 b/lib/autoconf/types.m4 index 560efa89..1c45101e 100644 --- a/lib/autoconf/types.m4 +++ b/lib/autoconf/types.m4 @@ -680,20 +680,20 @@ AC_DEFUN([AC_CHECK_SIZEOF], [AS_LITERAL_IF([$1], [], [AC_FATAL([$0: requires literal arguments])])dnl AC_CHECK_TYPE([$1], [], [], [$3]) -AC_CACHE_CHECK([size of $1], AS_TR_SH([ac_cv_sizeof_$1]), -[if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then - # The cast to long int works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - _AC_COMPUTE_INT([(long int) (sizeof (ac__type_sizeof_))], - [AS_TR_SH([ac_cv_sizeof_$1])], - [AC_INCLUDES_DEFAULT([$3]) - typedef $1 ac__type_sizeof_;], - [AC_MSG_FAILURE([cannot compute sizeof ($1)], 77)]) -else - AS_TR_SH([ac_cv_sizeof_$1])=0 -fi])dnl +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +AC_COMPUTE_INT([size of $1], [AS_TR_SH([ac_cv_sizeof_$1])], + [(long int) (sizeof (ac__type_sizeof_))], + [AC_INCLUDES_DEFAULT([$3]) + typedef $1 ac__type_sizeof_;], + [if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then + AC_MSG_FAILURE([cannot compute sizeof ($1)], 77) + else + AS_TR_SH([ac_cv_sizeof_$1])=0 + fi]) + AC_DEFINE_UNQUOTED(AS_TR_CPP(sizeof_$1), $AS_TR_SH([ac_cv_sizeof_$1]), [The size of `$1', as computed by sizeof.]) ])# AC_CHECK_SIZEOF @@ -705,21 +705,21 @@ AC_DEFUN([AC_CHECK_ALIGNOF], [AS_LITERAL_IF([$1], [], [AC_FATAL([$0: requires literal arguments])])dnl AC_CHECK_TYPE([$1], [], [], [$2]) -AC_CACHE_CHECK([alignment of $1], AS_TR_SH([ac_cv_alignof_$1]), -[if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then - # The cast to long int works around a bug in the HP C Compiler, - # see AC_CHECK_SIZEOF for more information. - _AC_COMPUTE_INT([(long int) offsetof (ac__type_alignof_, y)], - [AS_TR_SH([ac_cv_alignof_$1])], - [AC_INCLUDES_DEFAULT([$2]) +# The cast to long int works around a bug in the HP C Compiler, +# see AC_CHECK_SIZEOF for more information. +AC_COMPUTE_INT([alignment of $1], [AS_TR_SH([ac_cv_alignof_$1])], + [(long int) offsetof (ac__type_alignof_, y)], + [AC_INCLUDES_DEFAULT([$2]) #ifndef offsetof # define offsetof(type, member) ((char *) &((type *) 0)->member - (char *) 0) #endif typedef struct { char x; $1 y; } ac__type_alignof_;], - [AC_MSG_FAILURE([cannot compute alignment of ($1)], 77)]) -else - AS_TR_SH([ac_cv_alignof_$1])=0 -fi])dnl + [if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then + AC_MSG_FAILURE([cannot compute alignment of $1], 77) + else + AS_TR_SH([ac_cv_alignof_$1])=0 + fi]) + AC_DEFINE_UNQUOTED(AS_TR_CPP(alignof_$1), $AS_TR_SH([ac_cv_alignof_$1]), [The normal alignment of `$1', in bytes.]) ])# AC_CHECK_ALIGNOF diff --git a/tests/mktests.sh b/tests/mktests.sh index db3316f6..ac2e1e5a 100755 --- a/tests/mktests.sh +++ b/tests/mktests.sh @@ -86,6 +86,7 @@ ac_exclude_list=' # Need an argument. /^AC_(CANONICALIZE|PREFIX_PROGRAM|PREREQ)$/ {next} /^AC_(SEARCH_LIBS|REPLACE_FUNCS)$/ {next} + /^AC_COMPUTE_INT$/ {next} # Performed in the semantics tests. /^AC_CHECK_(ALIGNOF|DECL|FILE|FUNC|HEADER|LIB|MEMBER|PROG|SIZEOF|(TARGET_)?TOOL|TYPE)S?$/ {next}