From 399a6890f5726b83f25fb3b0758dbb79770a1c91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Fri, 4 Oct 2002 10:22:02 +0000 Subject: [PATCH] Disable LFS if Solaris/gcc bug is detected. Fixes #618095. --- configure | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++- configure.in | 21 ++++++++++++++++++ 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 181c98342ea..ffdc0a2ec94 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 1.349 . +# From configure.in Revision: 1.350 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.53. # @@ -4423,6 +4423,64 @@ _ACEOF fi +# Enabling LFS on Solaris (2.6 to 9) with gcc 2.95 triggers a bug in +# the system headers: If _XOPEN_SOURCE and _LARGEFILE_SOURCE are +# defined, but the compiler does not support pragma redefine_extname, +# and _LARGEFILE64_SOURCE is not defined, the headers refer to 64-bit +# structures (such as rlimit64) without declaring them. As a +# work-around, disable LFS on such configurations + +use_lfs=yes +echo "$as_me:$LINENO: checking Solaris LFS bug" >&5 +echo $ECHO_N "checking Solaris LFS bug... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" + +#define _LARGEFILE_SOURCE 1 +#define _FILE_OFFSET_BITS 64 +#include + +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +struct rlimit foo; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + sol_lfs_bug=no +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +sol_lfs_bug=yes +fi +rm -f conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $sol_lfs_bug" >&5 +echo "${ECHO_T}$sol_lfs_bug" >&6 +if test "$sol_lfs_bug" = "yes"; then + use_lfs=no +fi + +if test "$use_lfs" = "yes"; then # Two defines needed to enable largefile support on various platforms # These may affect some typedefs @@ -4435,6 +4493,7 @@ cat >>confdefs.h <<\_ACEOF #define _FILE_OFFSET_BITS 64 _ACEOF +fi # Add some code to confdefs.h so that the test for off_t works on SCO cat >> confdefs.h <<\EOF diff --git a/configure.in b/configure.in index fef6e22f921..aef3c067e9d 100644 --- a/configure.in +++ b/configure.in @@ -654,12 +654,33 @@ if test "$ac_cv_has_makedev" = "yes"; then AC_DEFINE(HAVE_MAKEDEV, 1, [Define this if you have the makedev macro.]) fi +# Enabling LFS on Solaris (2.6 to 9) with gcc 2.95 triggers a bug in +# the system headers: If _XOPEN_SOURCE and _LARGEFILE_SOURCE are +# defined, but the compiler does not support pragma redefine_extname, +# and _LARGEFILE64_SOURCE is not defined, the headers refer to 64-bit +# structures (such as rlimit64) without declaring them. As a +# work-around, disable LFS on such configurations + +use_lfs=yes +AC_MSG_CHECKING(Solaris LFS bug) +AC_TRY_COMPILE([ +#define _LARGEFILE_SOURCE 1 +#define _FILE_OFFSET_BITS 64 +#include +],struct rlimit foo;,sol_lfs_bug=no,sol_lfs_bug=yes) +AC_MSG_RESULT($sol_lfs_bug) +if test "$sol_lfs_bug" = "yes"; then + use_lfs=no +fi + +if test "$use_lfs" = "yes"; then # Two defines needed to enable largefile support on various platforms # These may affect some typedefs AC_DEFINE(_LARGEFILE_SOURCE, 1, [This must be defined on some systems to enable large file support.]) AC_DEFINE(_FILE_OFFSET_BITS, 64, [This must be set to 64 on some systems to enable large file support.]) +fi # Add some code to confdefs.h so that the test for off_t works on SCO cat >> confdefs.h <<\EOF