[PATCH] fix off_t/rlim_t size checks when cross-compiling
Edgar E. Iglesias
edgar.iglesias at gmail.com
Sun Sep 12 08:17:27 UTC 2010
On Sun, Sep 12, 2010 at 04:01:47AM -0400, Mike Frysinger wrote:
> The current off_t/rlim_t size checks (wrt size of long long) use AC_RUN
> which obviously doesn't work when cross-compiling. While we don't hit any
> configure errors, the fall back code is pretty dumb (which is to say there
> isn't any). Considering the code in question though, we can use some fun
> compiler tricks with sizeof and array lengths to turn it into a pure build
> test and avoid the RUN issue completely.
>
> * acinclude.m4 (AC_OFF_T_IS_LONG_LONG, AC_RLIM_T_IS_LONG_LONG): Convert
> from AC_RUN_IFELSE to AC_COMPILE_IFELSE.
>
> Signed-off-by: Mike Frysinger <vapier at gentoo.org>
> ---
> note: all the systems i tested seem to return "no" for both of these, so
> i couldnt find any which test otherwise to double check my work. but
> it looks sane enough :P.
>
> acinclude.m4 | 28 ++++++++--------------------
> 1 files changed, 8 insertions(+), 20 deletions(-)
>
> diff --git a/acinclude.m4 b/acinclude.m4
> index 708f8cc..5e61d15 100644
> --- a/acinclude.m4
> +++ b/acinclude.m4
> @@ -232,16 +232,10 @@ dnl ### A macro to determine if off_t is a long long
> AC_DEFUN([AC_OFF_T_IS_LONG_LONG],
> [AC_MSG_CHECKING(for long long off_t)
> AC_CACHE_VAL(ac_cv_have_long_long_off_t,
> -[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <sys/types.h>
> -main () {
> - if (sizeof (off_t) == sizeof (long long) &&
> - sizeof (off_t) > sizeof (long))
> - return 0;
> - return 1;
> -}
> -]])],[ac_cv_have_long_long_off_t=yes],[ac_cv_have_long_long_off_t=no],[# Should try to guess here
> -ac_cv_have_long_long_off_t=no
> -])])
> +[AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <sys/types.h>
> +char a[(sizeof (off_t) == sizeof (long long) &&
> + sizeof (off_t) > sizeof (long)) - 1];
> +]])],[ac_cv_have_long_long_off_t=yes],[ac_cv_have_long_long_off_t=no])])
Hah, that was very nice :)
Cheers,
Edgar
More information about the Strace-devel
mailing list