[trunk] make large file support variables persistent in CMake to allow reconfiguration
authorJulien Malik <julien.malik@paraiso.me>
Wed, 30 Nov 2011 19:43:48 +0000 (19:43 +0000)
committerJulien Malik <julien.malik@paraiso.me>
Wed, 30 Nov 2011 19:43:48 +0000 (19:43 +0000)
CMake/TestLargeFiles.c.cmake.in
CMake/TestLargeFiles.cmake
opj_config.h.cmake.in

index a6bc499653bca5ff0c05764f4d9e8be7b6bf8939..18f754ca1ed186ded8cb485ffabe8e6e9f6ef6e5 100644 (file)
@@ -1,5 +1,4 @@
 #cmakedefine _LARGEFILE_SOURCE
-#cmakedefine _LARGEFILE64_SOURCE
 #cmakedefine _LARGE_FILES
 #cmakedefine _FILE_OFFSET_BITS @_FILE_OFFSET_BITS@
 
index 96159d6981e3df49ff1ffed651812c25ed24a6ec..d6fd9a647727719bbe57f4ed1a59d995a6926d22 100644 (file)
@@ -3,17 +3,21 @@
 #  OPJ_TEST_LARGE_FILES(VARIABLE)
 #
 #  VARIABLE will be set to true if off_t is 64 bits, and fseeko/ftello present.
-#  This macro will also set defines necessary enable large file support, for instance
+#  This macro will also defines the necessary variable enable large file support, for instance
 #  _LARGE_FILES
 #  _LARGEFILE_SOURCE
 #  _FILE_OFFSET_BITS 64  
 #  HAVE_FSEEKO
 #
-#  However, it is YOUR job to make sure these defines are set in a CMakedefine so they
+#  However, it is YOUR job to make sure these defines are set in a #cmakedefine so they
 #  end up in a config.h file that is included in your source if necessary!
+#
+#  Adapted from Gromacs project (http://www.gromacs.org/)
+#  by Julien Malik
+#  
 
 MACRO(OPJ_TEST_LARGE_FILES VARIABLE)
-    IF(NOT DEFINED ${VARIABLE})
+    IF("${VARIABLE}" MATCHES "^${VARIABLE}$")
 
         # On most platforms it is probably overkill to first test the flags for 64-bit off_t,
         # and then separately fseeko. However, in the future we might have 128-bit filesystems
@@ -22,13 +26,13 @@ MACRO(OPJ_TEST_LARGE_FILES VARIABLE)
         MESSAGE(STATUS "Checking for 64-bit off_t")
 
         # First check without any special flags
-        TRY_COMPILE(FILE64_OK "${PROJECT_BINARY_DIR}"    
+        TRY_COMPILE(FILE64_OK "${PROJECT_BINARY_DIR}"
                     "${PROJECT_SOURCE_DIR}/CMake/TestFileOffsetBits.c")
         if(FILE64_OK)
-          MESSAGE(STATUS "Checking for 64-bit off_t - present")                        
-       endif(FILE64_OK)
+          MESSAGE(STATUS "Checking for 64-bit off_t - present")
+               endif(FILE64_OK)
 
-        if(NOT FILE64_OK)      
+        if(NOT FILE64_OK)
             # Test with _FILE_OFFSET_BITS=64
             TRY_COMPILE(FILE64_OK "${PROJECT_BINARY_DIR}"
                         "${PROJECT_SOURCE_DIR}/CMake/TestFileOffsetBits.c"
@@ -37,7 +41,7 @@ MACRO(OPJ_TEST_LARGE_FILES VARIABLE)
                 MESSAGE(STATUS "Checking for 64-bit off_t - present with _FILE_OFFSET_BITS=64")
                 set(_FILE_OFFSET_BITS 64)
             endif(FILE64_OK)
-        endif(NOT FILE64_OK)    
+        endif(NOT FILE64_OK)
 
         if(NOT FILE64_OK)
             # Test with _LARGE_FILES
@@ -57,63 +61,73 @@ MACRO(OPJ_TEST_LARGE_FILES VARIABLE)
                         COMPILE_DEFINITIONS "-D_LARGEFILE_SOURCE" )
             if(FILE64_OK)
                 MESSAGE(STATUS "Checking for 64-bit off_t - present with _LARGEFILE_SOURCE")
-                              set(_LARGEFILE_SOURCE 1)
+                set(_LARGEFILE_SOURCE 1)
             endif(FILE64_OK)
         endif(NOT FILE64_OK)
 
-        if(NOT FILE64_OK)
-            # now check for Windows stuff
-            TRY_COMPILE(FILE64_OK "${PROJECT_BINARY_DIR}"
-                        "${PROJECT_SOURCE_DIR}/CMake/TestWindowsFSeek.c")
-            if(FILE64_OK)
-                MESSAGE(STATUS "Checking for 64-bit off_t - present with _fseeki64")
-                set(HAVE__FSEEKI64 1)
-            endif(FILE64_OK)
-        endif(NOT FILE64_OK)
+
+        #if(NOT FILE64_OK)
+        #    # now check for Windows stuff
+        #    TRY_COMPILE(FILE64_OK "${PROJECT_BINARY_DIR}"
+        #                "${PROJECT_SOURCE_DIR}/CMake/TestWindowsFSeek.c")
+        #    if(FILE64_OK)
+        #        MESSAGE(STATUS "Checking for 64-bit off_t - present with _fseeki64")
+        #        set(HAVE__FSEEKI64 1)
+        #    endif(FILE64_OK)
+        #endif(NOT FILE64_OK)
 
         if(NOT FILE64_OK)
             MESSAGE(STATUS "Checking for 64-bit off_t - not present")
-        else(NOT FILE64_OK)
+        endif(NOT FILE64_OK)
+        
+        SET(_FILE_OFFSET_BITS ${_FILE_OFFSET_BITS} CACHE INTERNAL "Result of test for needed _FILE_OFFSET_BITS=64")
+        SET(_LARGE_FILES      ${_LARGE_FILES}      CACHE INTERNAL "Result of test for needed _LARGE_FILES")
+        SET(_LARGEFILE_SOURCE ${_LARGEFILE_SOURCE} CACHE INTERNAL "Result of test for needed _LARGEFILE_SOURCE")
 
-            # Set the flags we might have determined to be required above
-            configure_file("${PROJECT_SOURCE_DIR}/CMake/TestLargeFiles.c.cmake.in" 
-                           "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/TestLargeFiles.c")
+        # Set the flags we might have determined to be required above
+        CONFIGURE_FILE("${PROJECT_SOURCE_DIR}/CMake/TestLargeFiles.c.cmake.in" 
+                       "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/TestLargeFiles.c")
 
-            MESSAGE(STATUS "Checking for fseeko/ftello")            
+        MESSAGE(STATUS "Checking for fseeko/ftello")
+        
            # Test if ftello/fseeko are available
-           TRY_COMPILE(FSEEKO_COMPILE_OK "${PROJECT_BINARY_DIR}"
-                        "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/TestLargeFiles.c")
-           if(FSEEKO_COMPILE_OK)
-                MESSAGE(STATUS "Checking for fseeko/ftello - present")
-            endif(FSEEKO_COMPILE_OK)
-
-            if(NOT FSEEKO_COMPILE_OK)
-                # glibc 2.2 neds _LARGEFILE_SOURCE for fseeko (but not 64-bit off_t...)
-                TRY_COMPILE(FSEEKO_COMPILE_OK "${PROJECT_BINARY_DIR}"
+           TRY_COMPILE(FSEEKO_COMPILE_OK
+                       "${PROJECT_BINARY_DIR}"
+                    "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/TestLargeFiles.c")
+           
+           IF(FSEEKO_COMPILE_OK)
+            MESSAGE(STATUS "Checking for fseeko/ftello - present")
+        ENDIF(FSEEKO_COMPILE_OK)
+
+        IF(NOT FSEEKO_COMPILE_OK)
+                # glibc 2.2 needs _LARGEFILE_SOURCE for fseeko (but not for 64-bit off_t...)
+                TRY_COMPILE(FSEEKO_COMPILE_OK
+                            "${PROJECT_BINARY_DIR}"
                             "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/TestLargeFiles.c"
                             COMPILE_DEFINITIONS "-D_LARGEFILE_SOURCE" )
-                if(FSEEKO_COMPILE_OK)
+                
+                IF(FSEEKO_COMPILE_OK)
                     MESSAGE(STATUS "Checking for fseeko/ftello - present with _LARGEFILE_SOURCE")
-                    set(_LARGEFILE_SOURCE 1)
-                endif(FSEEKO_COMPILE_OK)
-            endif(NOT FSEEKO_COMPILE_OK)
-
-        endif(NOT FILE64_OK)
+                    SET(_LARGEFILE_SOURCE ${_LARGEFILE_SOURCE} CACHE INTERNAL "Result of test for needed _LARGEFILE_SOURCE")
+                ENDIF(FSEEKO_COMPILE_OK)
+        ENDIF(NOT FSEEKO_COMPILE_OK)
 
            if(FSEEKO_COMPILE_OK)
-                SET(${VARIABLE} 1 CACHE INTERNAL "Result of test for large file support" FORCE)
-                set(HAVE_FSEEKO 1)
+                SET(HAVE_FSEEKO ON CACHE INTERNAL "Result of test for fseeko/ftello")
         else(FSEEKO_COMPILE_OK)
-                       if (HAVE__FSEEKI64)
-                               SET(${VARIABLE} 1 CACHE INTERNAL "Result of test for large file support" FORCE)
-                               SET(HAVE__FSEEKI64 1 CACHE INTERNAL "Windows 64-bit fseek" FORCE)
-                       else (HAVE__FSEEKI64)
                 MESSAGE(STATUS "Checking for fseeko/ftello - not found")
-                SET(${VARIABLE} 0 CACHE INTERNAL "Result of test for large file support" FORCE)
-                       endif (HAVE__FSEEKI64)
+                SET(HAVE_FSEEKO OFF CACHE INTERNAL "Result of test for fseeko/ftello")
         endif(FSEEKO_COMPILE_OK)
 
-    ENDIF(NOT DEFINED ${VARIABLE})
+           if(FILE64_OK AND FSEEKO_COMPILE_OK)
+                MESSAGE(STATUS "Large File support - found")
+                SET(${VARIABLE} ON CACHE INTERNAL "Result of test for large file support")
+        else(FILE64_OK AND FSEEKO_COMPILE_OK)
+                MESSAGE(STATUS "Large File support - not found")
+                SET(${VARIABLE} OFF CACHE INTERNAL "Result of test for large file support")
+        endif(FILE64_OK AND FSEEKO_COMPILE_OK)
+
+    ENDIF("${VARIABLE}" MATCHES "^${VARIABLE}$")
 ENDMACRO(OPJ_TEST_LARGE_FILES VARIABLE)
 
 
index 7bfe9141aee9a8523a2113248ca03ce9e3b810a9..9cb485f107217ef18961adcdc410c7f850e17478 100644 (file)
 #cmakedefine HAVE_TIFF_H
 
 #cmakedefine _LARGEFILE_SOURCE
-#cmakedefine _LARGEFILE64_SOURCE
 #cmakedefine _LARGE_FILES
 #cmakedefine _FILE_OFFSET_BITS @_FILE_OFFSET_BITS@
 #cmakedefine HAVE_FSEEKO
-#cmakedefine HAVE__FSEEKI64
 
 
 #cmakedefine HAVE_LIBLCMS1