Configure.cmake 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. ################################################################################
  2. #
  3. # configure
  4. #
  5. ################################################################################
  6. ########################################
  7. # FUNCTION check_includes
  8. ########################################
  9. function(check_includes files)
  10. foreach(F ${${files}})
  11. set(name ${F})
  12. string(REPLACE "." "_" name ${name})
  13. string(REPLACE "/" "_" name ${name})
  14. string(TOUPPER ${name} name)
  15. check_include_files(${F} HAVE_${name})
  16. #message("/* Define to 1 if you have the <${F}> header file. */")
  17. #message("#cmakedefine HAVE_${name} 1")
  18. #message("")
  19. endforeach()
  20. endfunction(check_includes)
  21. ########################################
  22. # FUNCTION check_functions
  23. ########################################
  24. function(check_functions functions)
  25. foreach(F ${${functions}})
  26. set(name ${F})
  27. string(TOUPPER ${name} name)
  28. check_function_exists(${F} HAVE_${name})
  29. #message("/* Define to 1 if you have the `${F}' function. */")
  30. #message("#cmakedefine HAVE_${name} 1")
  31. #message("")
  32. endforeach()
  33. endfunction(check_functions)
  34. ########################################
  35. # FUNCTION check_type_alignment
  36. ########################################
  37. function(check_type_alignment type var)
  38. if (NOT DEFINED ${var})
  39. check_c_source_runs("main(){struct s{char a;${type} b;};exit((int)&((struct s*)0)->b);}" ${var})
  40. #message(STATUS "Performing Test ${var} - It's still OK.")
  41. message(STATUS "Performing Test ${var} - Success")
  42. set(${var} ${${var}_EXITCODE} CACHE STRING "${type} alignment" FORCE)
  43. endif()
  44. endfunction(check_type_alignment)
  45. ########################################
  46. # FUNCTION check_symbol
  47. ########################################
  48. function(check_symbol symbol var)
  49. if (NOT ${var}_SYMBOL)
  50. foreach(f ${ARGN})
  51. if (NOT ${var})
  52. unset(${var} CACHE)
  53. message(STATUS "Looking for ${symbol} - ${f}")
  54. check_symbol_exists(${symbol} ${f} ${var})
  55. endif()
  56. endforeach()
  57. endif()
  58. set(${var}_SYMBOL 1 CACHE INTERNAL "Do not check this symbol again")
  59. endfunction(check_symbol)
  60. ########################################
  61. include(CheckCSourceCompiles)
  62. include(CheckCSourceRuns)
  63. include(CheckCXXSourceCompiles)
  64. include(CheckCXXSourceRuns)
  65. include(CheckFunctionExists)
  66. include(CheckIncludeFiles)
  67. include(CheckLibraryExists)
  68. include(CheckPrototypeDefinition)
  69. include(CheckStructHasMember)
  70. include(CheckSymbolExists)
  71. include(CheckTypeSize)
  72. include(TestBigEndian)
  73. if (ANDROID)
  74. set(LINUX 1)
  75. endif()
  76. if (IOS)
  77. set(CMAKE_SYSTEM_PROCESSOR "armv7")
  78. add_definitions(-D__arm__)
  79. endif()
  80. if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
  81. set(CLANG 1)
  82. endif()
  83. set(ENABLE_BINRELOC 1)
  84. string(TOUPPER ${CMAKE_SYSTEM_NAME} CMAKE_SYSTEM_NAME_UPPER)
  85. set(${CMAKE_SYSTEM_NAME_UPPER} 1)
  86. string(TOUPPER ${CMAKE_SYSTEM_PROCESSOR} CMAKE_SYSTEM_PROCESSOR_UPPER)
  87. string(FIND ${CMAKE_SYSTEM_PROCESSOR} "arm" ARM)
  88. if (NOT ${ARM} EQUAL -1)
  89. set(ARM 1)
  90. else()
  91. set(ARM)
  92. endif()
  93. if (${CMAKE_SYSTEM_PROCESSOR_UPPER} STREQUAL "X86_64" OR
  94. ${CMAKE_SYSTEM_PROCESSOR_UPPER} STREQUAL "AMD64")
  95. set(AMD64 1)
  96. set(I386 1)
  97. endif()
  98. set(${CMAKE_SYSTEM_PROCESSOR_UPPER} 1)
  99. set(SHRLIB_EXT ${CMAKE_SHARED_LIBRARY_SUFFIX})
  100. string(REPLACE "." "" SHRLIB_EXT ${SHRLIB_EXT})
  101. set(CASE_SENSITIVITY "true")
  102. set(SUPPORT_RAW_DEVICES 1)
  103. set(include_files_list
  104. aio.h
  105. assert.h
  106. atomic.h
  107. atomic_ops.h
  108. crypt.h
  109. ctype.h
  110. dirent.h
  111. dlfcn.h
  112. editline.h
  113. errno.h
  114. fcntl.h
  115. float.h
  116. grp.h
  117. iconv.h
  118. io.h
  119. inttypes.h
  120. langinfo.h
  121. libio.h
  122. linux/falloc.h
  123. limits.h
  124. locale.h
  125. math.h
  126. memory.h
  127. mntent.h
  128. mnttab.h
  129. ndir.h
  130. netconfig.h
  131. netinet/in.h
  132. poll.h
  133. pthread.h
  134. pwd.h
  135. rpc/rpc.h
  136. rpc/xdr.h
  137. semaphore.h
  138. setjmp.h
  139. signal.h
  140. socket.h
  141. stdarg.h
  142. stdint.h
  143. stdlib.h
  144. string.h
  145. strings.h
  146. sys/dir.h
  147. sys/file.h
  148. sys/ioctl.h
  149. sys/ipc.h
  150. sys/mntent.h
  151. sys/mnttab.h
  152. sys/mount.h
  153. sys/ndir.h
  154. sys/param.h
  155. sys/resource.h
  156. sys/sem.h
  157. sys/select.h
  158. sys/siginfo.h
  159. sys/signal.h
  160. sys/socket.h
  161. sys/sockio.h
  162. sys/stat.h
  163. sys/syscall.h
  164. sys/time.h
  165. sys/timeb.h
  166. sys/types.h
  167. sys/uio.h
  168. sys/wait.h
  169. termio.h
  170. termios.h
  171. unistd.h
  172. varargs.h
  173. vfork.h
  174. winsock2.h
  175. zlib.h
  176. )
  177. check_includes(include_files_list)
  178. #if test "$EDITLINE_FLG" = "Y"; then
  179. # AC_HEADER_DIRENT
  180. # AC_DEFINE(HAVE_EDITLINE_H, 1, [Define this if editline is in use])
  181. #fi
  182. set(functions_list
  183. accept4
  184. AO_compare_and_swap_full
  185. clock_gettime
  186. ctime_r
  187. dirname
  188. fallocate
  189. fchmod
  190. fsync
  191. flock
  192. fork
  193. getpagesize
  194. getcwd getwd
  195. gettimeofday
  196. gmtime_r
  197. initgroups
  198. localtime_r
  199. mkstemp
  200. mmap
  201. nanosleep
  202. poll
  203. posix_fadvise
  204. pread pwrite
  205. pthread_cancel
  206. pthread_keycreate pthread_key_create
  207. pthread_mutexattr_setprotocol
  208. pthread_mutexattr_setrobust_np
  209. pthread_mutex_consistent_np
  210. pthread_rwlockattr_setkind_np
  211. qsort_r
  212. setitimer
  213. semtimedop
  214. setpgid
  215. setpgrp
  216. setmntent getmntent
  217. setrlimit getrlimit
  218. sigaction
  219. sigset
  220. snprintf vsnprintf
  221. strcasecmp stricmp
  222. strncasecmp strnicmp
  223. strdup
  224. strerror_r
  225. swab _swab
  226. tcgetattr
  227. time times
  228. vfork
  229. )
  230. check_functions(functions_list)
  231. if (APPLE)
  232. set(HAVE_QSORT_R 0 CACHE STRING "Disabled on OS X" FORCE)
  233. endif()
  234. check_cxx_source_compiles("#include <unistd.h>\nmain(){fdatasync(0);}" HAVE_FDATASYNC)
  235. check_library_exists(dl dladdr "${CMAKE_LIBRARY_PREFIX}" HAVE_DLADDR)
  236. check_library_exists(m fegetenv "${CMAKE_LIBRARY_PREFIX}" HAVE_FEGETENV)
  237. check_library_exists(m llrint "${CMAKE_LIBRARY_PREFIX}" HAVE_LLRINT)
  238. check_library_exists(pthread sem_init "${CMAKE_LIBRARY_PREFIX}" HAVE_SEM_INIT)
  239. check_library_exists(pthread sem_timedwait "${CMAKE_LIBRARY_PREFIX}" HAVE_SEM_TIMEDWAIT)
  240. check_type_size(caddr_t HAVE_CADDR_T)
  241. check_c_source_compiles("#include <sys/sem.h>\nmain(){union semun s;return 0;}" HAVE_SEMUN)
  242. set(CMAKE_EXTRA_INCLUDE_FILES sys/socket.h sys/types.h)
  243. check_type_size(socklen_t HAVE_SOCKLEN_T)
  244. set(CMAKE_EXTRA_INCLUDE_FILES)
  245. check_type_size(long SIZEOF_LONG)
  246. check_type_size(size_t SIZEOF_SIZE_T)
  247. check_type_size("void *" SIZEOF_VOID_P)
  248. check_type_size(gid_t HAVE_GID_T)
  249. check_type_size(off_t HAVE_OFF_T)
  250. check_type_size(pid_t HAVE_PID_T)
  251. check_type_size(size_t HAVE_SIZE_T)
  252. check_type_size(uid_t HAVE_UID_T)
  253. if (${HAVE_OFF_T} AND ${HAVE_OFF_T} EQUAL 8)
  254. set(_FILE_OFFSET_BITS 64)
  255. endif()
  256. test_big_endian(WORDS_BIGENDIAN)
  257. check_symbol_exists(INFINITY math.h HAVE_INFINITY)
  258. check_symbol_exists(va_copy stdarg.h HAVE_VA_COPY)
  259. check_symbol(SOCK_CLOEXEC HAVE_DECL_SOCK_CLOEXEC socket.h sys/socket.h)
  260. set(CMAKE_EXTRA_INCLUDE_FILES Windows.h)
  261. check_type_size("char[MAX_PATH]" MAXPATHLEN)
  262. set(CMAKE_EXTRA_INCLUDE_FILES)
  263. set(TIMEZONE_TYPE "struct timezone")
  264. if (APPLE OR MINGW)
  265. set(TIMEZONE_TYPE "void")
  266. endif()
  267. check_prototype_definition(
  268. gettimeofday
  269. "int gettimeofday(struct timeval *tv, ${TIMEZONE_TYPE} *tz)"
  270. 0
  271. "sys/time.h"
  272. GETTIMEOFDAY_RETURNS_TIMEZONE
  273. )
  274. check_prototype_definition(
  275. getmntent
  276. "int getmntent(FILE *file, struct mnttab *mptr)"
  277. 0
  278. mntent.h
  279. GETMNTENT_TAKES_TWO_ARGUMENTS
  280. )
  281. check_struct_has_member("struct dirent" d_type dirent.h HAVE_STRUCT_DIRENT_D_TYPE)
  282. check_c_source_compiles("#include <unistd.h>\nmain(){getpgrp();}" GETPGRP_VOID)
  283. check_c_source_compiles("#include <unistd.h>\nmain(){setpgrp();}" SETPGRP_VOID)
  284. check_c_source_compiles("__thread int a = 42;main(){a = a + 1;}" HAVE___THREAD)
  285. check_c_source_compiles("#include <sys/time.h>\n#include <time.h>\nmain(){}" TIME_WITH_SYS_TIME)
  286. set(CMAKE_REQUIRED_LIBRARIES pthread)
  287. check_c_source_compiles("#include <semaphore.h>\nmain(){sem_t s;sem_init(&s,0,0);}" WORKING_SEM_INIT)
  288. set(CMAKE_REQUIRED_LIBRARIES)
  289. if (EXISTS "/proc/self/exe")
  290. set(HAVE__PROC_SELF_EXE 1)
  291. endif()
  292. ########################################
  293. if (NOT CMAKE_CROSSCOMPILING)
  294. check_type_alignment(long FB_ALIGNMENT)
  295. check_type_alignment(double FB_DOUBLE_ALIGN)
  296. else() # CMAKE_CROSSCOMPILING
  297. set(FB_ALIGNMENT 8)
  298. set(FB_DOUBLE_ALIGN 8)
  299. if (ANDROID)
  300. set(HAVE__PROC_SELF_EXE 1)
  301. endif()
  302. endif()
  303. ########################################
  304. if (WIN32)
  305. set(ENABLE_BINRELOC 0)
  306. set(SUPPORT_RAW_DEVICES 0)
  307. set(WIN_NT 1)
  308. set(CASE_SENSITIVITY "false")
  309. endif(WIN32)
  310. if (APPLE)
  311. set(ENABLE_BINRELOC 0)
  312. set(CASE_SENSITIVITY "false")
  313. endif()
  314. ################################################################################