Browse Source

BUG: Enable large files only if <cstdio> works

Some AIX/gcc version combinations the <cstdio> header breaks when large
file support is enabled.  See this GCC issue for details:

  http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20366

We work around the problem by enhancing the configuration check for
large file support to include <cstdio> when available.  This will cause
LFS to be disabled when the above problem occurs.
Brad King 16 years ago
parent
commit
cf1225b9af
2 changed files with 13 additions and 0 deletions
  1. 5 0
      Source/kwsys/CMakeLists.txt
  2. 8 0
      Source/kwsys/kwsysPlatformTestsCXX.cxx

+ 5 - 0
Source/kwsys/CMakeLists.txt

@@ -337,14 +337,19 @@ ENDIF(NOT CMAKE_COMPILER_IS_GNUCXX)
 
 #-----------------------------------------------------------------------------
 # Configure Large File Support.
+KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_CSTDIO
+  "Checking whether header cstdio is available" DIRECT)
 SET(KWSYS_LFS_AVAILABLE 0)
 IF(KWSYS_LFS_REQUESTED)
   # Large File Support is requested.
   SET(KWSYS_LFS_REQUESTED 1)
 
   # Check for large file support.
+  SET(KWSYS_PLATFORM_CXX_TEST_DEFINES
+    -DKWSYS_CXX_HAS_CSTDIO=${KWSYS_CXX_HAS_CSTDIO})
   KWSYS_PLATFORM_CXX_TEST_RUN(KWSYS_LFS_WORKS
     "Checking for Large File Support" DIRECT)
+  SET(KWSYS_PLATFORM_CXX_TEST_DEFINES)
 
   IF(KWSYS_LFS_WORKS)
     SET(KWSYS_LFS_AVAILABLE 1)

+ 8 - 0
Source/kwsys/kwsysPlatformTestsCXX.cxx

@@ -91,6 +91,11 @@ bool f(const kwsys_stl::string& s) { return s != ""; }
 int main() { return 0; }
 #endif
 
+#ifdef TEST_KWSYS_CXX_HAS_CSTDIO
+#include <cstdio>
+int main() { return 0; }
+#endif
+
 #ifdef TEST_KWSYS_CXX_HAS_CSTDDEF
 #include <cstddef>
 void f(size_t) {}
@@ -331,6 +336,9 @@ int main()
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <assert.h>
+#if KWSYS_CXX_HAS_CSTDIO
+# include <cstdio>
+#endif
 #include <stdio.h>
 
 int main(int, char **argv)