123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- include (CheckIncludeFile)
- include (CheckTypeSize)
- include (CMakePushCheckState)
- macro (TEST_LARGE_FILES VARIABLE)
- if (NOT DEFINED ${VARIABLE})
- cmake_push_check_state()
- message (STATUS "")
- message (STATUS "")
- message (STATUS "Checking large files support...")
- if (WIN32)
- set (${VARIABLE} 1 CACHE INTERNAL "Result of tests for large file support" FORCE)
- message (STATUS "")
- message (STATUS "Result of checking large files support: supported with WinAPI")
- else ()
- message (STATUS "")
- check_include_file(sys/types.h HAVE_SYS_TYPES_H)
- check_include_file(stdint.h HAVE_STDINT_H)
- check_include_file(stddef.h HAVE_STDDEF_H)
- message (STATUS "")
- message (STATUS "Checking size of off_t without any definitions:")
- check_type_size (off_t SIZEOF_OFF_T)
- message (STATUS "Checking of off_t without any definitions: ${SIZEOF_OFF_T}")
- if (SIZEOF_OFF_T EQUAL 8)
- set (LARGE_FILES_DEFINITIONS "" CACHE INTERNAL "64-bit off_t required definitions")
- set (FILE64 TRUE)
- else ()
- unset (HAVE_SIZEOF_OFF_T CACHE)
- unset (SIZEOF_OFF_T CACHE)
- unset (SIZEOF_OFF_T_CODE CACHE)
- cmake_pop_check_state()
- set (FILE64 FALSE)
- endif ()
- if (NOT FILE64)
- set (CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} /D_FILE_OFFSET_BITS=64)
- message (STATUS "")
- message (STATUS "Checking size of off_t with _FILE_OFFSET_BITS=64:")
- check_type_size (off_t SIZEOF_OFF_T)
- message (STATUS "Checking size of off_t with _FILE_OFFSET_BITS=64: ${SIZEOF_OFF_T}")
- if (SIZEOF_OFF_T EQUAL 8)
- set (_FILE_OFFSET_BITS 64 CACHE INTERNAL "")
- set (_FILE_OFFSET_BITS_CODE "#define _FILE_OFFSET_BITS 64" CACHE INTERNAL "")
- set (LARGE_FILES_DEFINITIONS ${LARGE_FILES_DEFINITIONS} "/D_FILE_OFFSET_BITS=64" CACHE INTERNAL "64-bit off_t required definitions")
- set (FILE64 TRUE)
- else ()
- set (_FILE_OFFSET_BITS_CODE "" CACHE INTERNAL "")
- unset (HAVE_SIZEOF_OFF_T CACHE)
- unset (SIZEOF_OFF_T CACHE)
- unset (SIZEOF_OFF_T_CODE CACHE)
- cmake_pop_check_state()
- set (FILE64 FALSE)
- endif ()
- endif ()
- if (NOT FILE64)
- set (CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} /D_LARGE_FILES)
- message (STATUS "")
- message (STATUS "Checking size of off_t with _LARGE_FILES:")
- check_type_size (off_t SIZEOF_OFF_T)
- message (STATUS "Checking size of off_t with _LARGE_FILES: ${SIZEOF_OFF_T}")
- if (SIZEOF_OFF_T EQUAL 8)
- set (_LARGE_FILES 1 CACHE INTERNAL "")
- set (LARGE_FILES_DEFINITIONS ${LARGE_FILES_DEFINITIONS} "/D_LARGE_FILES" CACHE INTERNAL "64-bit off_t required definitions")
- set (FILE64 TRUE)
- else ()
- unset (HAVE_SIZEOF_OFF_T CACHE)
- unset (SIZEOF_OFF_T CACHE)
- unset (SIZEOF_OFF_T_CODE CACHE)
- cmake_pop_check_state()
- set (FILE64 FALSE)
- endif ()
- endif ()
- if (NOT FILE64)
- set (CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} /D_LARGEFILE_SOURCE)
- unset (HAVE_SIZEOF_OFF_T CACHE)
- unset (SIZEOF_OFF_T CACHE)
- unset (SIZEOF_OFF_T_CODE CACHE)
- message (STATUS "")
- message (STATUS "Checking size of off_t with _LARGEFILE_SOURCE:")
- check_type_size (off_t SIZEOF_OFF_T)
- message (STATUS "Checking size of off_t with _LARGEFILE_SOURCE: ${SIZEOF_OFF_T}")
- if (SIZEOF_OFF_T EQUAL 8)
- set (_LARGEFILE_SOURCE 1 CACHE INTERNAL "")
- set (LARGE_FILES_DEFINITIONS ${LARGE_FILES_DEFINITIONS} "/D_LARGEFILE_SOURCE" CACHE INTERNAL "64-bit off_t required definitions")
- set (FILE64 TRUE)
- else ()
- cmake_pop_check_state()
- set (FILE64 FALSE)
- endif ()
- endif ()
- message (STATUS "")
- if (FILE64)
- set (${VARIABLE} 1 CACHE INTERNAL "Result of tests for large file support" FORCE)
- if (NOT SIZEOF_OFF_T_REQURED_DEFINITIONS)
- message (STATUS "Result of checking large files support: supported")
- else ()
- message (STATUS "Result of checking large files support: supported with ${LARGE_FILES_DEFINITIONS}")
- message (STATUS "Add LARGE_FILES_DEFINITIONS to your compiler definitions or configure with _FILE_OFFSET_BITS,")
- message (STATUS "_FILE_OFFSET_BITS_CODE, _LARGE_FILES and _LARGEFILE_SOURCE variables.")
- endif ()
- else ()
- message ("Result of checking large files support: not supported")
- set (${VARIABLE} 0 CACHE INTERNAL "Result of test for large file support" FORCE)
- endif ()
- message ("")
- message ("")
- endif ()
- endif (NOT DEFINED ${VARIABLE})
- endmacro (TEST_LARGE_FILES VARIABLE)
|