Subject: bug#9140: [PATCH 2/3] large-inode: New module

From: Paul Eggert <[email-masked]>
Date: Fri, 22 Jul 2011 15:10:56 -0700

On 07/22/11 10:45, Pádraig Brady wrote:
> If it works it would be better in AC_SYS_LARGEFILE (as well) I think.

OK, thanks, I pushed this into gnulib.  Assuming it works (and I don't
see why it'd hurt) I'll push it into autoconf.

>From a7df7c7d3f2f32d0cad31f65505cfee939d91f4a Mon Sep 17 00:00:00 2001
From: Paul Eggert <[email-masked]>
Date: Fri, 22 Jul 2011 15:06:36 -0700
Subject: [PATCH] largefile: new module, replacing large-inode
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Pádraig Brady suggested this in	<http://debbugs.gnu.org/9140#20>.
* MODULES.html.sh: Add largefile, remove large-inode.
* modules/largefile, m4/largefile.m4: New files.
* modules/large-inode, m4/large-inode.m4: Remove.
---
 ChangeLog           |    6 +++
 MODULES.html.sh     |    2 +-
 m4/large-inode.m4   |   24 ------------
 m4/largefile.m4     |  104 +++++++++++++++++++++++++++++++++++++++++++++++++++
 modules/large-inode |   22 -----------
 modules/largefile   |   22 +++++++++++
 6 files changed, 133 insertions(+), 47 deletions(-)
 delete mode 100644 m4/large-inode.m4
 create mode 100644 m4/largefile.m4
 delete mode 100644 modules/large-inode
 create mode 100644 modules/largefile

diff --git a/ChangeLog b/ChangeLog
index b652f25..c44292e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2011-07-22  Paul Eggert  <[email-masked]>
 
+	largefile: new module, replacing large-inode
+	Pádraig Brady suggested this in	<http://debbugs.gnu.org/9140#20>.
+	* MODULES.html.sh: Add largefile, remove large-inode.
+	* modules/largefile, m4/largefile.m4: New files.
+	* modules/large-inode, m4/large-inode.m4: Remove.
+
 	fsusage: port to MacOS X 10.7 with 4 TiB file systems
 	* m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Reject statvfs
 	implementations that use only 32 bits to count blocks.
diff --git a/MODULES.html.sh b/MODULES.html.sh
index 80befa9..6d84587 100755
--- a/MODULES.html.sh
+++ b/MODULES.html.sh
@@ -2608,6 +2608,7 @@ func_all_modules ()
   func_module filenamecat-lgpl
   func_module fts
   func_module isdir
+  func_module largefile
   func_module lchmod
   func_module lchown
   func_module mkancesdirs
@@ -2656,7 +2657,6 @@ func_all_modules ()
   func_module file-set
   func_module hash-triple
   func_module i-ring
-  func_module large-inode
   func_module same-inode
   func_end_table
 
diff --git a/m4/large-inode.m4 b/m4/large-inode.m4
deleted file mode 100644
index b41a391..0000000
--- a/m4/large-inode.m4
+++ /dev/null
@@ -1,24 +0,0 @@
-# Enable large inode numbers on systems normally without them. -*- Autoconf -*-
-
-# Copyright (C) 2011 Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# written by Paul Eggert
-
-AC_DEFUN([gl_SYS_LARGE_INODE],
-[
-  dnl Many systems enable large inodes if you enable large offsets.
-  AC_REQUIRE([AC_SYS_LARGEFILE])
-
-  dnl Some Mac OS X variants won't access large inode numbers by default.
-  dnl Defining _DARWIN_USE_64_BIT_INODE fixes this.  See
-  dnl <http://developer.apple.com/library/mac/releasenotes/Darwin/SymbolVariantsRelNotes>.
-  dnl
-  dnl The simplest thing is to define this symbol everywhere.
-  dnl That helps on the affected systems, and doesn't hurt anywhere.
-  AC_DEFINE([_DARWIN_USE_64_BIT_INODE], [1],
-    [Define if you want to use large inode numbers
-     when running on Mac OS X 10.5 or later.])
-])
diff --git a/m4/largefile.m4 b/m4/largefile.m4
new file mode 100644
index 0000000..6986244
--- /dev/null
+++ b/m4/largefile.m4
@@ -0,0 +1,104 @@
+# Enable large files on systems where this is not the default.
+
+# Copyright 1992-1996, 1998-2011 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# The following implementation works around a problem in autoconf <= 2.68;
+# AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5.
+m4_version_prereq([2.69], [] ,[
+
+# _AC_SYS_LARGEFILE_TEST_INCLUDES
+# -------------------------------
+m4_define([_AC_SYS_LARGEFILE_TEST_INCLUDES],
+[@%:@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,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+@%:@define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1]];[]dnl
+])
+
+
+# _AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE,
+#				CACHE-VAR,
+#				DESCRIPTION,
+#				PROLOGUE, [FUNCTION-BODY])
+# --------------------------------------------------------
+m4_define([_AC_SYS_LARGEFILE_MACRO_VALUE],
+[AC_CACHE_CHECK([for $1 value needed for large files], [$3],
+[while :; do
+  m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])(
+    [AC_LANG_PROGRAM([$5], [$6])],
+    [$3=no; break])
+  m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])(
+    [AC_LANG_PROGRAM([@%:@define $1 $2
+$5], [$6])],
+    [$3=$2; break])
+  $3=unknown
+  break
+done])
+case $$3 in #(
+  no | unknown) ;;
+  *) AC_DEFINE_UNQUOTED([$1], [$$3], [$4]);;
+esac
+rm -rf conftest*[]dnl
+])# _AC_SYS_LARGEFILE_MACRO_VALUE
+
+
+# AC_SYS_LARGEFILE
+# ----------------
+# By default, many hosts won't let programs access large files;
+# one must use special compiler options to get large-file access to work.
+# For more details about this brain damage please see:
+# http://www.unix-systems.org/version2/whatsnew/lfs20mar.html
+AC_DEFUN([AC_SYS_LARGEFILE],
+[AC_ARG_ENABLE(largefile,
+	       [  --disable-largefile     omit support for large files])
+if test "$enable_largefile" != no; then
+
+  AC_CACHE_CHECK([for special C compiler options needed for large files],
+    ac_cv_sys_largefile_CC,
+    [ac_cv_sys_largefile_CC=no
+     if test "$GCC" != yes; then
+       ac_save_CC=$CC
+       while :; do
+	 # IRIX 6.2 and later do not support large files by default,
+	 # so use the C compiler's -n32 option if that helps.
+	 AC_LANG_CONFTEST([AC_LANG_PROGRAM([_AC_SYS_LARGEFILE_TEST_INCLUDES])])
+	 AC_COMPILE_IFELSE([], [break])
+	 CC="$CC -n32"
+	 AC_COMPILE_IFELSE([], [ac_cv_sys_largefile_CC=' -n32'; break])
+	 break
+       done
+       CC=$ac_save_CC
+       rm -f conftest.$ac_ext
+    fi])
+  if test "$ac_cv_sys_largefile_CC" != no; then
+    CC=$CC$ac_cv_sys_largefile_CC
+  fi
+
+  _AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64,
+    ac_cv_sys_file_offset_bits,
+    [Number of bits in a file offset, on hosts where this is settable.],
+    [_AC_SYS_LARGEFILE_TEST_INCLUDES])
+  if test $ac_cv_sys_file_offset_bits = unknown; then
+    _AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1,
+      ac_cv_sys_large_files,
+      [Define for large files, on AIX-style hosts.],
+      [_AC_SYS_LARGEFILE_TEST_INCLUDES])
+  fi
+
+  AH_VERBATIM([_DARWIN_USE_64_BIT_INODE],
+[/* Enable large inode numbers on Mac OS X.  */
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif])
+fi
+])# AC_SYS_LARGEFILE
+
+])# m4_version_prereq 2.69
diff --git a/modules/large-inode b/modules/large-inode
deleted file mode 100644
index de067ac..0000000
--- a/modules/large-inode
+++ /dev/null
@@ -1,22 +0,0 @@
-Description:
-Use large inode numbers.
-
-Files:
-m4/large-inode.m4
-
-Depends-on:
-
-configure.ac-early:
-AC_REQUIRE([gl_SYS_LARGE_INODE])
-
-configure.ac:
-
-Makefile.am:
-
-Include:
-
-License:
-LGPLv2+
-
-Maintainer:
-all
diff --git a/modules/largefile b/modules/largefile
new file mode 100644
index 0000000..d4a2e4b
--- /dev/null
+++ b/modules/largefile
@@ -0,0 +1,22 @@
+Description:
+Use large files.
+
+Files:
+m4/largefile.m4
+
+Depends-on:
+
+configure.ac:
+AC_REQUIRE([AC_SYS_LARGEFILE])
+
+configure.ac:
+
+Makefile.am:
+
+Include:
+
+License:
+LGPLv2+
+
+Maintainer:
+all
-- 
1.7.4.4