| From 103514e40da5f20aebf83a3446452ccebe5172bb Mon Sep 17 00:00:00 2001 |
| From: Paul Eggert <eggert@cs.ucla.edu> |
| Date: Mon, 19 Jun 2023 14:04:29 -0700 |
| Subject: [PATCH 25/29] Fix AC_SYS_LARGEFILE on GNU/Linux alpha, s390x |
| |
| Problem reported by Matoro <https://bugs.gnu.org/64123>. |
| * lib/autoconf/specific.m4 (_AC_SYS_LARGEFILE_TEST_CODE): |
| New overridable macro FTYPE, to test types other than off_t. |
| (_AC_SYS_LARGEFILE_TEST_CODE): Test ino_t for |
| -D_FILE_OFFSETBITS=64 too, if no flags are needed for off_t. |
| Needed for GNU/Linux on alpha and s390x. |
| |
| Upstream-Status: Backport |
| Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| --- |
| lib/autoconf/specific.m4 | 21 +++++++++++++++------ |
| 1 file changed, 15 insertions(+), 6 deletions(-) |
| |
| diff --git a/lib/autoconf/specific.m4 b/lib/autoconf/specific.m4 |
| index 91f20bf0d..9d5974548 100644 |
| --- a/lib/autoconf/specific.m4 |
| +++ b/lib/autoconf/specific.m4 |
| @@ -238,13 +238,16 @@ AS_IF([test "$enable_year2038,$ac_have_year2038" = yes,no], |
| # C code used to probe for large file support. |
| m4_define([_AC_SYS_LARGEFILE_TEST_CODE], |
| [@%:@include <sys/types.h> |
| - /* Check that off_t can represent 2**63 - 1 correctly. |
| - We can't simply define LARGE_OFF_T to be 9223372036854775807, |
| +@%:@ifndef FTYPE |
| +@%:@ define FTYPE off_t |
| +@%:@endif |
| + /* Check that FTYPE can represent 2**63 - 1 correctly. |
| + We can't simply define LARGE_FTYPE to be 9223372036854775807, |
| since some C++ compilers masquerading as C compilers |
| incorrectly reject 9223372036854775807. */ |
| -@%:@define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) |
| - int off_t_is_large[[(LARGE_OFF_T % 2147483629 == 721 |
| - && LARGE_OFF_T % 2147483647 == 1) |
| +@%:@define LARGE_FTYPE (((FTYPE) 1 << 31 << 31) - 1 + ((FTYPE) 1 << 31 << 31)) |
| + int FTYPE_is_large[[(LARGE_FTYPE % 2147483629 == 721 |
| + && LARGE_FTYPE % 2147483647 == 1) |
| ? 1 : -1]];[]dnl |
| ]) |
| # Defined by Autoconf 2.71 and circa 2022 Gnulib unwisely depended on it. |
| @@ -284,7 +287,13 @@ AC_DEFUN([_AC_SYS_LARGEFILE_PROBE], |
| AS_IF([test x"$ac_opt" != x"none needed"], |
| [CC="$ac_save_CC $ac_opt"]) |
| AC_COMPILE_IFELSE([AC_LANG_PROGRAM([_AC_SYS_LARGEFILE_TEST_CODE])], |
| - [ac_cv_sys_largefile_opts="$ac_opt" |
| + [AS_IF([test x"$ac_opt" = x"none needed"], |
| + [# GNU/Linux s390x and alpha need _FILE_OFFSET_BITS=64 for wide ino_t. |
| + CC="$CC -DFTYPE=ino_t" |
| + AC_COMPILE_IFELSE([], [], |
| + [CC="$CC -D_FILE_OFFSET_BITS=64" |
| + AC_COMPILE_IFELSE([], [ac_opt='-D_FILE_OFFSET_BITS=64'])])]) |
| + ac_cv_sys_largefile_opts=$ac_opt |
| ac_opt_found=yes]) |
| test $ac_opt_found = no || break |
| done |
| -- |
| 2.41.0 |
| |