Re: AC_SYS_LARGEFILE_REQUIRED vs. AC_SYS_YEAR2038_REQUIRED on MSVC

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

 



Paul Eggert wrote:
> > +[AC_REQUIRE([AC_CANONICAL_HOST])
> Is there some way we can do this without requiring AC_CANONICAL_HOST? 
> We're close to a release for Autoconf, and requiring this at the last 
> minute for AC_SYS_LARGEFILE is a bit of a stretch.
> 
> That is, instead of AS_CASE([$host_os], ...) can  we use 
> AC_PREPROC_IFELSE with the appropriate C preprocessor tests? Or perhaps 
> do the AC_REQUIRE only if gl_LARGEFILE is defined?

Yes. Here are adjusted patches. I moved the AC_REQUIRE([AC_CANONICAL_HOST])
into the part that is only expanded if gl_LARGEFILE is defined.

Inside gnulib, so many macros require AC_CANONICAL_HOST that it's a no-brainer.

Find attached also the testdirs which I used to test the patches:
  - hello-3: no gnulib, just AC_SYS_LARGEFILE_REQUIRED
  - hello-4: no gnulib, just AC_SYS_YEAR2038_REQUIRED
  - testdir3: a gnulib testdir for the modules largefile-required stat
  - testdir4: a gnulib testdir for the modules year2038-required stat

In hello-3/configure and hello-4/configure the word 'host_os' does not occur;
this proves that the AC_REQUIRE([AC_CANONICAL_HOST]) has no effect if gnulib
is not used.

The configure results are exactly the expected outcome from my previous mail.
Summary table:

             mingw64  mingw32  msvc64  msvc32

hello-3        OK       OK     "support not detected" -> fail
hello-4        OK       OK     "support not detected" -> fail
testdir3       OK       OK       OK      OK
testdir4       OK       OK       OK      OK

Details from the configure output:

hello-3/build-mingw32  option to enable large file support... -D_FILE_OFFSET_BITS=64
hello-3/build-mingw64  option to enable large file support... -D_FILE_OFFSET_BITS=64
hello-3/build-msvc32   option to enable large file support... support not detected
hello-3/build-msvc64   option to enable large file support... support not detected
hello-4/build-mingw32  option to enable large file support... -D_FILE_OFFSET_BITS=64
hello-4/build-mingw64  option to enable large file support... -D_FILE_OFFSET_BITS=64
hello-4/build-msvc32   option to enable large file support... support not detected
hello-4/build-msvc64   option to enable large file support... support not detected
testdir3/build-mingw32 option to enable large file support... -D_FILE_OFFSET_BITS=64
testdir3/build-mingw64 option to enable large file support... -D_FILE_OFFSET_BITS=64
testdir3/build-msvc32  option to enable large file support... supported through gnulib
testdir3/build-msvc64  option to enable large file support... supported through gnulib
testdir4/build-mingw32 option to enable large file support... -D_FILE_OFFSET_BITS=64
testdir4/build-mingw64 option to enable large file support... -D_FILE_OFFSET_BITS=64
testdir4/build-msvc32  option to enable large file support... supported through gnulib
testdir4/build-msvc64  option to enable large file support... supported through gnulib

hello-4/build-mingw32  option to enable timestamps after Jan 2038... -D__MINGW_USE_VC2005_COMPAT
hello-4/build-mingw64  option to enable timestamps after Jan 2038... none needed
testdir4/build-mingw32 option to enable timestamps after Jan 2038... -D__MINGW_USE_VC2005_COMPAT
testdir4/build-mingw64 option to enable timestamps after Jan 2038... none needed
testdir4/build-msvc32  option to enable timestamps after Jan 2038... none needed
testdir4/build-msvc64  option to enable timestamps after Jan 2038... none needed

Bruno

>From c0260017520a92e77579f4bee113901d7ae90db0 Mon Sep 17 00:00:00 2001
From: Bruno Haible <bruno@xxxxxxxxx>
Date: Sun, 16 Apr 2023 01:24:34 +0200
Subject: [PATCH] AC_SYS_YEAR2038_REQUIRED: Fix configure failure with MSVC.

* lib/autoconf/specific.m4 (_AC_SYS_LARGEFILE_PROBE): Distinguish the results
"support not detected" and "supported through gnulib". If the result is
"supported through gnulib", don't fail.
---
 lib/autoconf/specific.m4 | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/lib/autoconf/specific.m4 b/lib/autoconf/specific.m4
index 3bf1a0ed..f411695f 100644
--- a/lib/autoconf/specific.m4
+++ b/lib/autoconf/specific.m4
@@ -323,11 +323,24 @@ AC_DEFUN([_AC_SYS_LARGEFILE_PROBE],
     test $ac_opt_found = no || break
   done
   CC="$ac_save_CC"
+  dnl Gnulib implements large file support for native Windows, based on the
+  dnl variables WINDOWS_64_BIT_OFF_T, WINDOWS_64_BIT_ST_SIZE.
+  m4_ifdef([gl_LARGEFILE], [
+    AC_REQUIRE([AC_CANONICAL_HOST])
+    if test $ac_opt_found != yes; then
+      AS_CASE([$host_os],
+        [mingw*],
+          [ac_cv_sys_largefile_opts="supported through gnulib"
+           ac_opt_found=yes]
+      )
+    fi
+  ])
   test $ac_opt_found = yes || ac_cv_sys_largefile_opts="support not detected"])
 
 ac_have_largefile=yes
 AS_CASE([$ac_cv_sys_largefile_opts],
   ["none needed"], [],
+  ["supported through gnulib"], [],
   ["support not detected"],
     [ac_have_largefile=no
      AS_IF([test $ac_largefile_required,$ac_year2038_required != no,no],
-- 
2.34.1

>From 89a0589a2965360400e11688cf50e1f90415c47b Mon Sep 17 00:00:00 2001
From: Bruno Haible <bruno@xxxxxxxxx>
Date: Sun, 16 Apr 2023 01:22:19 +0200
Subject: [PATCH] year2038-required: Fix configure failure with MSVC.

* m4/largefile.m4 (_AC_SYS_LARGEFILE_PROBE): Distinguish the results
"support not detected" and "supported through gnulib". If the result is
"supported through gnulib", don't fail.
---
 ChangeLog       |  7 +++++++
 m4/largefile.m4 | 13 +++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index 581ca09a47..6dec50bd63 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2023-04-16  Bruno Haible  <bruno@xxxxxxxxx>
+
+	year2038-required: Fix configure failure with MSVC.
+	* m4/largefile.m4 (_AC_SYS_LARGEFILE_PROBE): Distinguish the results
+	"support not detected" and "supported through gnulib". If the result is
+	"supported through gnulib", don't fail.
+
 2023-04-16  Bruno Haible  <bruno@xxxxxxxxx>
 
 	posix_spawn_file_actions_addclose tests: Avoid test failure on Cygwin.
diff --git a/m4/largefile.m4 b/m4/largefile.m4
index f741d0df6e..46b019a670 100644
--- a/m4/largefile.m4
+++ b/m4/largefile.m4
@@ -266,11 +266,24 @@ AC_DEFUN([_AC_SYS_LARGEFILE_PROBE]
     test $ac_opt_found = no || break
   done
   CC="$ac_save_CC"
+  dnl Gnulib implements large file support for native Windows, based on the
+  dnl variables WINDOWS_64_BIT_OFF_T, WINDOWS_64_BIT_ST_SIZE.
+  m4_ifdef([gl_LARGEFILE], [
+    AC_REQUIRE([AC_CANONICAL_HOST])
+    if test $ac_opt_found != yes; then
+      AS_CASE([$host_os],
+        [mingw*],
+          [ac_cv_sys_largefile_opts="supported through gnulib"
+           ac_opt_found=yes]
+      )
+    fi
+  ])
   test $ac_opt_found = yes || ac_cv_sys_largefile_opts="support not detected"])
 
 ac_have_largefile=yes
 AS_CASE([$ac_cv_sys_largefile_opts],
   ["none needed"], [],
+  ["supported through gnulib"], [],
   ["support not detected"],
     [ac_have_largefile=no
      AS_IF([test $ac_largefile_required,$ac_year2038_required != no,no],
-- 
2.34.1

Attachment: testdirs.tar.xz
Description: application/xz-compressed-tar


[Index of Archives]     [GCC Help]     [Kernel Discussion]     [RPM Discussion]     [Red Hat Development]     [Yosemite News]     [Linux USB]     [Samba]

  Powered by Linux