xref: /aosp_15_r20/external/libdivsufsort/CMakeModules/CheckLFS.cmake (revision 30b9430b2d8672faf9045aa522d63599a84e8e49)
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