1*30b9430bSXin Li## Checks for large file support ## 2*30b9430bSXin Liinclude(CheckIncludeFile) 3*30b9430bSXin Liinclude(CheckSymbolExists) 4*30b9430bSXin Liinclude(CheckTypeSize) 5*30b9430bSXin Li 6*30b9430bSXin Limacro(check_lfs _isenable) 7*30b9430bSXin Li set(LFS_OFF_T "") 8*30b9430bSXin Li set(LFS_FOPEN "") 9*30b9430bSXin Li set(LFS_FSEEK "") 10*30b9430bSXin Li set(LFS_FTELL "") 11*30b9430bSXin Li set(LFS_PRID "") 12*30b9430bSXin Li 13*30b9430bSXin Li if(${_isenable}) 14*30b9430bSXin Li set(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}") 15*30b9430bSXin Li set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} 16*30b9430bSXin Li -D_LARGEFILE_SOURCE -D_LARGE_FILES -D_FILE_OFFSET_BITS=64 17*30b9430bSXin Li -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS) 18*30b9430bSXin Li 19*30b9430bSXin Li check_include_file("sys/types.h" HAVE_SYS_TYPES_H) 20*30b9430bSXin Li check_include_file("inttypes.h" HAVE_INTTYPES_H) 21*30b9430bSXin Li check_include_file("stddef.h" HAVE_STDDEF_H) 22*30b9430bSXin Li check_include_file("stdint.h" HAVE_STDINT_H) 23*30b9430bSXin Li 24*30b9430bSXin Li # LFS type1: 8 <= sizeof(off_t), fseeko, ftello 25*30b9430bSXin Li check_type_size("off_t" SIZEOF_OFF_T) 26*30b9430bSXin Li if(SIZEOF_OFF_T GREATER 7) 27*30b9430bSXin Li check_symbol_exists("fseeko" "stdio.h" HAVE_FSEEKO) 28*30b9430bSXin Li check_symbol_exists("ftello" "stdio.h" HAVE_FTELLO) 29*30b9430bSXin Li if(HAVE_FSEEKO AND HAVE_FTELLO) 30*30b9430bSXin Li set(LFS_OFF_T "off_t") 31*30b9430bSXin Li set(LFS_FOPEN "fopen") 32*30b9430bSXin Li set(LFS_FSEEK "fseeko") 33*30b9430bSXin Li set(LFS_FTELL "ftello") 34*30b9430bSXin Li check_symbol_exists("PRIdMAX" "inttypes.h" HAVE_PRIDMAX) 35*30b9430bSXin Li if(HAVE_PRIDMAX) 36*30b9430bSXin Li set(LFS_PRID "PRIdMAX") 37*30b9430bSXin Li else(HAVE_PRIDMAX) 38*30b9430bSXin Li check_type_size("long" SIZEOF_LONG) 39*30b9430bSXin Li check_type_size("int" SIZEOF_INT) 40*30b9430bSXin Li if(SIZEOF_OFF_T GREATER SIZEOF_LONG) 41*30b9430bSXin Li set(LFS_PRID "\"lld\"") 42*30b9430bSXin Li elseif(SIZEOF_LONG GREATER SIZEOF_INT) 43*30b9430bSXin Li set(LFS_PRID "\"ld\"") 44*30b9430bSXin Li else(SIZEOF_OFF_T GREATER SIZEOF_LONG) 45*30b9430bSXin Li set(LFS_PRID "\"d\"") 46*30b9430bSXin Li endif(SIZEOF_OFF_T GREATER SIZEOF_LONG) 47*30b9430bSXin Li endif(HAVE_PRIDMAX) 48*30b9430bSXin Li endif(HAVE_FSEEKO AND HAVE_FTELLO) 49*30b9430bSXin Li endif(SIZEOF_OFF_T GREATER 7) 50*30b9430bSXin Li 51*30b9430bSXin Li # LFS type2: 8 <= sizeof(off64_t), fopen64, fseeko64, ftello64 52*30b9430bSXin Li if(NOT LFS_OFF_T) 53*30b9430bSXin Li check_type_size("off64_t" SIZEOF_OFF64_T) 54*30b9430bSXin Li if(SIZEOF_OFF64_T GREATER 7) 55*30b9430bSXin Li check_symbol_exists("fopen64" "stdio.h" HAVE_FOPEN64) 56*30b9430bSXin Li check_symbol_exists("fseeko64" "stdio.h" HAVE_FSEEKO64) 57*30b9430bSXin Li check_symbol_exists("ftello64" "stdio.h" HAVE_FTELLO64) 58*30b9430bSXin Li if(HAVE_FOPEN64 AND HAVE_FSEEKO64 AND HAVE_FTELLO64) 59*30b9430bSXin Li set(LFS_OFF_T "off64_t") 60*30b9430bSXin Li set(LFS_FOPEN "fopen64") 61*30b9430bSXin Li set(LFS_FSEEK "fseeko64") 62*30b9430bSXin Li set(LFS_FTELL "ftello64") 63*30b9430bSXin Li check_symbol_exists("PRIdMAX" "inttypes.h" HAVE_PRIDMAX) 64*30b9430bSXin Li if(HAVE_PRIDMAX) 65*30b9430bSXin Li set(LFS_PRID "PRIdMAX") 66*30b9430bSXin Li else(HAVE_PRIDMAX) 67*30b9430bSXin Li check_type_size("long" SIZEOF_LONG) 68*30b9430bSXin Li check_type_size("int" SIZEOF_INT) 69*30b9430bSXin Li if(SIZEOF_OFF64_T GREATER SIZEOF_LONG) 70*30b9430bSXin Li set(LFS_PRID "\"lld\"") 71*30b9430bSXin Li elseif(SIZEOF_LONG GREATER SIZEOF_INT) 72*30b9430bSXin Li set(LFS_PRID "\"ld\"") 73*30b9430bSXin Li else(SIZEOF_OFF64_T GREATER SIZEOF_LONG) 74*30b9430bSXin Li set(LFS_PRID "\"d\"") 75*30b9430bSXin Li endif(SIZEOF_OFF64_T GREATER SIZEOF_LONG) 76*30b9430bSXin Li endif(HAVE_PRIDMAX) 77*30b9430bSXin Li endif(HAVE_FOPEN64 AND HAVE_FSEEKO64 AND HAVE_FTELLO64) 78*30b9430bSXin Li endif(SIZEOF_OFF64_T GREATER 7) 79*30b9430bSXin Li endif(NOT LFS_OFF_T) 80*30b9430bSXin Li 81*30b9430bSXin Li # LFS type3: 8 <= sizeof(__int64), _fseeki64, _ftelli64 82*30b9430bSXin Li if(NOT LFS_OFF_T) 83*30b9430bSXin Li check_type_size("__int64" SIZEOF___INT64) 84*30b9430bSXin Li if(SIZEOF___INT64 GREATER 7) 85*30b9430bSXin Li check_symbol_exists("_fseeki64" "stdio.h" HAVE__FSEEKI64) 86*30b9430bSXin Li check_symbol_exists("_ftelli64" "stdio.h" HAVE__FTELLI64) 87*30b9430bSXin Li if(HAVE__FSEEKI64 AND HAVE__FTELLI64) 88*30b9430bSXin Li set(LFS_OFF_T "__int64") 89*30b9430bSXin Li set(LFS_FOPEN "fopen") 90*30b9430bSXin Li set(LFS_FSEEK "_fseeki64") 91*30b9430bSXin Li set(LFS_FTELL "_ftelli64") 92*30b9430bSXin Li set(LFS_PRID "\"I64d\"") 93*30b9430bSXin Li endif(HAVE__FSEEKI64 AND HAVE__FTELLI64) 94*30b9430bSXin Li endif(SIZEOF___INT64 GREATER 7) 95*30b9430bSXin Li endif(NOT LFS_OFF_T) 96*30b9430bSXin Li 97*30b9430bSXin Li set(CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}") 98*30b9430bSXin Li endif(${_isenable}) 99*30b9430bSXin Li 100*30b9430bSXin Li if(NOT LFS_OFF_T) 101*30b9430bSXin Li ## not found 102*30b9430bSXin Li set(LFS_OFF_T "long") 103*30b9430bSXin Li set(LFS_FOPEN "fopen") 104*30b9430bSXin Li set(LFS_FSEEK "fseek") 105*30b9430bSXin Li set(LFS_FTELL "ftell") 106*30b9430bSXin Li set(LFS_PRID "\"ld\"") 107*30b9430bSXin Li endif(NOT LFS_OFF_T) 108*30b9430bSXin Li 109*30b9430bSXin Liendmacro(check_lfs) 110