bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

use autoconf caching in size_max.m4


From: Bruno Haible
Subject: use autoconf caching in size_max.m4
Date: Fri, 20 Oct 2006 15:54:07 +0200
User-agent: KMail/1.9.1

This is a small optim, when gl_SIZE_MAX is used several times by the same
configure file.

2006-10-19  Bruno Haible  <address@hidden>

        * m4/size_max.m4 (gl_SIZE_MAX): Cache the result.

*** gnulib-20061019/m4/size_max.m4      2006-06-16 15:14:36.000000000 +0200
--- gnulib-20061019-modified/m4/size_max.m4     2006-10-20 02:19:12.000000000 
+0200
***************
*** 1,4 ****
! # size_max.m4 serial 4
  dnl Copyright (C) 2003, 2005-2006 Free Software Foundation, Inc.
  dnl This file is free software; the Free Software Foundation
  dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # size_max.m4 serial 5
  dnl Copyright (C) 2003, 2005-2006 Free Software Foundation, Inc.
  dnl This file is free software; the Free Software Foundation
  dnl gives unlimited permission to copy and/or distribute it,
***************
*** 11,18 ****
    AC_CHECK_HEADERS(stdint.h)
    dnl First test whether the system already has SIZE_MAX.
    AC_MSG_CHECKING([for SIZE_MAX])
!   result=
!   AC_EGREP_CPP([Found it], [
  #include <limits.h>
  #if HAVE_STDINT_H
  #include <stdint.h>
--- 11,19 ----
    AC_CHECK_HEADERS(stdint.h)
    dnl First test whether the system already has SIZE_MAX.
    AC_MSG_CHECKING([for SIZE_MAX])
!   AC_CACHE_VAL([gl_cv_size_max], [
!     gl_cv_size_max=
!     AC_EGREP_CPP([Found it], [
  #include <limits.h>
  #if HAVE_STDINT_H
  #include <stdint.h>
***************
*** 20,60 ****
  #ifdef SIZE_MAX
  Found it
  #endif
! ], result=yes)
!   if test -z "$result"; then
!     dnl Define it ourselves. Here we assume that the type 'size_t' is not 
wider
!     dnl than the type 'unsigned long'. Try hard to find a definition that can
!     dnl be used in a preprocessor #if, i.e. doesn't contain a cast.
!     _AC_COMPUTE_INT([sizeof (size_t) * CHAR_BIT - 1], size_t_bits_minus_1,
!       [#include <stddef.h>
  #include <limits.h>], size_t_bits_minus_1=)
!     _AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint,
!       [#include <stddef.h>], fits_in_uint=)
!     if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then
!       if test $fits_in_uint = 1; then
!         dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
!         dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned 
long'.
!         AC_TRY_COMPILE([#include <stddef.h>
!           extern size_t foo;
!           extern unsigned long foo;
!           ], [], fits_in_uint=0)
!       fi
!       dnl We cannot use 'expr' to simplify this expression, because 'expr'
!       dnl works only with 'long' integers in the host environment, while we
!       dnl might be cross-compiling from a 32-bit platform to a 64-bit 
platform.
!       if test $fits_in_uint = 1; then
!         result="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
        else
!         result="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)"
        fi
-     else
-       dnl Shouldn't happen, but who knows...
-       result='((size_t)~(size_t)0)'
      fi
!   fi
!   AC_MSG_RESULT([$result])
!   if test "$result" != yes; then
!     AC_DEFINE_UNQUOTED([SIZE_MAX], [$result],
        [Define as the maximum value of type 'size_t', if the system doesn't 
define it.])
    fi
  ])
--- 21,62 ----
  #ifdef SIZE_MAX
  Found it
  #endif
! ], gl_cv_size_max=yes)
!     if test -z "$gl_cv_size_max"; then
!       dnl Define it ourselves. Here we assume that the type 'size_t' is not 
wider
!       dnl than the type 'unsigned long'. Try hard to find a definition that 
can
!       dnl be used in a preprocessor #if, i.e. doesn't contain a cast.
!       _AC_COMPUTE_INT([sizeof (size_t) * CHAR_BIT - 1], size_t_bits_minus_1,
!         [#include <stddef.h>
  #include <limits.h>], size_t_bits_minus_1=)
!       _AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], 
fits_in_uint,
!         [#include <stddef.h>], fits_in_uint=)
!       if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then
!         if test $fits_in_uint = 1; then
!           dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
!           dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned 
long'.
!           AC_TRY_COMPILE([#include <stddef.h>
!             extern size_t foo;
!             extern unsigned long foo;
!             ], [], fits_in_uint=0)
!         fi
!         dnl We cannot use 'expr' to simplify this expression, because 'expr'
!         dnl works only with 'long' integers in the host environment, while we
!         dnl might be cross-compiling from a 32-bit platform to a 64-bit 
platform.
!         if test $fits_in_uint = 1; then
!           gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
!         else
!           gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)"
!         fi
        else
!         dnl Shouldn't happen, but who knows...
!         gl_cv_size_max='((size_t)~(size_t)0)'
        fi
      fi
!   ])
!   AC_MSG_RESULT([$gl_cv_size_max])
!   if test "$gl_cv_size_max" != yes; then
!     AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max],
        [Define as the maximum value of type 'size_t', if the system doesn't 
define it.])
    fi
  ])




reply via email to

[Prev in Thread] Current Thread [Next in Thread]