CMakeLists.txt 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585
  1. CMAKE_MINIMUM_REQUIRED(VERSION 2.0)
  2. PROJECT(LIBCURL C)
  3. INCLUDE_REGULAR_EXPRESSION("^.*$")
  4. # Setup package meta-data
  5. SET(PACKAGE "curl")
  6. SET(VERSION "7.12.1")
  7. SET(PACKAGE_TARNAME "curl")
  8. SET(PACKAGE_BUGREPORT " ")
  9. SET(PACKAGE_NAME "curl")
  10. SET(PACKAGE_VERSION "-")
  11. SET(PACKAGE_STRING "curl-")
  12. SET(PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/")
  13. SET(OPERATING_SYSTEM "${CMAKE_SYSTEM_NAME}")
  14. # We need ansi c-flags, especially on HP
  15. SET(CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
  16. SET(CMAKE_REQUIRED_FLAGS ${CMAKE_ANSI_CFLAGS})
  17. # If we are on AIX, do the _ALL_SOURCE magic
  18. IF(${CMAKE_SYSTEM_NAME} MATCHES AIX)
  19. SET(_ALL_SOURCE 1)
  20. ENDIF(${CMAKE_SYSTEM_NAME} MATCHES AIX)
  21. # Include all the necessary files for macros
  22. SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
  23. INCLUDE (CheckFunctionExists)
  24. INCLUDE (CheckIncludeFile)
  25. INCLUDE (CheckIncludeFiles)
  26. INCLUDE (CheckLibraryExists)
  27. INCLUDE (CheckSymbolExists)
  28. INCLUDE (CheckTypeSize)
  29. SET(libCurl_SRCS
  30. base64.c
  31. connect.c
  32. content_encoding.c
  33. cookie.c
  34. dict.c
  35. easy.c
  36. escape.c
  37. file.c
  38. formdata.c
  39. ftp.c
  40. getdate.c
  41. getenv.c
  42. getinfo.c
  43. hash.c
  44. hostares.c
  45. hostasyn.c
  46. hostip.c
  47. hostip4.c
  48. hostip6.c
  49. hostsyn.c
  50. hostthre.c
  51. http.c
  52. http_chunks.c
  53. http_digest.c
  54. http_negotiate.c
  55. http_ntlm.c
  56. if2ip.c
  57. inet_ntop.c
  58. inet_pton.c
  59. krb4.c
  60. llist.c
  61. md5.c
  62. memdebug.c
  63. mprintf.c
  64. multi.c
  65. netrc.c
  66. progress.c
  67. sendf.c
  68. share.c
  69. speedcheck.c
  70. ssluse.c
  71. strequal.c
  72. strerror.c
  73. telnet.c
  74. timeval.c
  75. transfer.c
  76. url.c
  77. version.c
  78. )
  79. SET(CURL_DISABLE_LDAP 1)
  80. IF(NOT CURL_DISABLE_LDAP)
  81. SET(libCurl_SRCS
  82. ${libCurl_SRCS}
  83. ldap.c
  84. )
  85. ENDIF(NOT CURL_DISABLE_LDAP)
  86. # if we have Kerberos 4, right now this is never on
  87. #OPTION(CURL_KRB4 "Use Kerberos 4" OFF)
  88. IF(CURL_KRB4)
  89. SET(libCurl_SRCS ${libCurl_SRCS}
  90. krb4.c
  91. security.c
  92. )
  93. ENDIF(CURL_KRB4)
  94. #OPTION(CURL_MALLOC_DEBUG "Debug mallocs in Curl" OFF)
  95. MARK_AS_ADVANCED(CURL_MALLOC_DEBUG)
  96. IF(CURL_MALLOC_DEBUG)
  97. SET(libCurl_SRCS ${libCurl_SRCS}
  98. memdebug.c
  99. )
  100. ENDIF(CURL_MALLOC_DEBUG)
  101. # On windows preload settings
  102. IF(WIN32)
  103. INCLUDE(${LIBCURL_SOURCE_DIR}/Platforms/WindowsCache.cmake)
  104. ENDIF(WIN32)
  105. # This macro checks if the symbol exists in the library and if it
  106. # does, it appends library to the list.
  107. SET(CURL_LIBS "")
  108. MACRO(CHECK_LIBRARY_EXISTS_CONCAT LIBRARY SYMBOL VARIABLE)
  109. CHECK_LIBRARY_EXISTS("${LIBRARY};${CURL_LIBS}" ${SYMBOL} ""
  110. ${VARIABLE})
  111. IF(${VARIABLE})
  112. SET(CURL_LIBS ${CURL_LIBS} ${LIBRARY})
  113. ENDIF(${VARIABLE})
  114. ENDMACRO(CHECK_LIBRARY_EXISTS_CONCAT)
  115. # Check for all needed libraries
  116. CHECK_LIBRARY_EXISTS_CONCAT("dl" dlopen HAVE_LIBDL)
  117. CHECK_LIBRARY_EXISTS_CONCAT("ucb" gethostname HAVE_LIBUCB)
  118. CHECK_LIBRARY_EXISTS_CONCAT("socket" connect HAVE_LIBSOCKET)
  119. CHECK_LIBRARY_EXISTS("c" gethostbyname "" NOT_NEED_LIBNSL)
  120. IF(NOT NOT_NEED_LIBNSL)
  121. CHECK_LIBRARY_EXISTS_CONCAT("nsl" gethostbyname HAVE_LIBNSL)
  122. ENDIF(NOT NOT_NEED_LIBNSL)
  123. CHECK_LIBRARY_EXISTS_CONCAT("ws2_32" getch HAVE_LIBWS2_32)
  124. CHECK_LIBRARY_EXISTS_CONCAT("winmm" getch HAVE_LIBWINMM)
  125. IF(NOT CURL_SPECIAL_LIBZ)
  126. CHECK_LIBRARY_EXISTS_CONCAT("z" inflateEnd HAVE_LIBZ)
  127. ENDIF(NOT CURL_SPECIAL_LIBZ)
  128. #OPTION(CMAKE_USE_OPENSSL "Use OpenSSL code. Experimental" OFF)
  129. MARK_AS_ADVANCED(CMAKE_USE_OPENSSL)
  130. IF(CMAKE_USE_OPENSSL)
  131. CHECK_LIBRARY_EXISTS_CONCAT("crypto" CRYPTO_lock HAVE_LIBCRYPTO)
  132. CHECK_LIBRARY_EXISTS_CONCAT("ssl" SSL_connect HAVE_LIBSSL)
  133. ENDIF(CMAKE_USE_OPENSSL)
  134. # Check for symbol dlopen (same as HAVE_LIBDL)
  135. CHECK_LIBRARY_EXISTS("${CURL_LIBS}" dlopen "" HAVE_DLOPEN)
  136. # For other tests to use the same libraries
  137. SET(CMAKE_REQUIRED_LIBRARIES ${CURL_LIBS})
  138. IF(CURL_SPECIAL_LIBZ)
  139. SET(CURL_LIBS ${CURL_LIBS} "${CURL_SPECIAL_LIBZ}")
  140. INCLUDE_DIRECTORIES(${CURL_SPECIAL_LIBZ_INCLUDES})
  141. SET(HAVE_LIBZ 0)
  142. SET(HAVE_ZLIB_H 0)
  143. ENDIF(CURL_SPECIAL_LIBZ)
  144. # If we have features.h, then do the _BSD_SOURCE magic
  145. CHECK_INCLUDE_FILE("features.h" HAVE_FEATURES_H)
  146. IF(HAVE_FEATURES_H)
  147. SET_SOURCE_FILES_PROPERTIES(
  148. cookie.c
  149. easy.c
  150. formdata.c
  151. getenv.c
  152. hash.c
  153. http.c
  154. if2ip.c
  155. mprintf.c
  156. multi.c
  157. sendf.c
  158. telnet.c
  159. transfer.c
  160. url.c
  161. COMPILE_FLAGS -D_BSD_SOURCE)
  162. ENDIF(HAVE_FEATURES_H)
  163. # Check if header file exists and add it to the list.
  164. MACRO(CHECK_INCLUDE_FILE_CONCAT FILE VARIABLE)
  165. CHECK_INCLUDE_FILES("${CURL_INCLUDES};${FILE}" ${VARIABLE})
  166. IF(${VARIABLE})
  167. SET(CURL_INCLUDES ${CURL_INCLUDES} ${FILE})
  168. ENDIF(${VARIABLE})
  169. ENDMACRO(CHECK_INCLUDE_FILE_CONCAT)
  170. # Check for header files
  171. CHECK_INCLUDE_FILE_CONCAT("stdio.h" HAVE_STDIO_H)
  172. CHECK_INCLUDE_FILE_CONCAT("stddef.h" HAVE_STDDEF_H)
  173. CHECK_INCLUDE_FILE_CONCAT("sys/types.h" HAVE_SYS_TYPES_H)
  174. CHECK_INCLUDE_FILE_CONCAT("inttypes.h" HAVE_INTTYPES_H)
  175. CHECK_INCLUDE_FILE_CONCAT("alloca.h" HAVE_ALLOCA_H)
  176. CHECK_INCLUDE_FILE_CONCAT("arpa/inet.h" HAVE_ARPA_INET_H)
  177. CHECK_INCLUDE_FILE_CONCAT("dlfcn.h" HAVE_DLFCN_H)
  178. CHECK_INCLUDE_FILE_CONCAT("fcntl.h" HAVE_FCNTL_H)
  179. CHECK_INCLUDE_FILE_CONCAT("malloc.h" HAVE_MALLOC_H)
  180. CHECK_INCLUDE_FILE_CONCAT("memory.h" HAVE_MEMORY_H)
  181. CHECK_INCLUDE_FILE_CONCAT("netdb.h" HAVE_NETDB_H)
  182. CHECK_INCLUDE_FILE_CONCAT("sys/poll.h" HAVE_SYS_POLL_H)
  183. CHECK_INCLUDE_FILE_CONCAT("assert.h" HAVE_ASSERT_H)
  184. CHECK_INCLUDE_FILE_CONCAT("limits.h" HAVE_LIMITS_H)
  185. IF(CMAKE_USE_OPENSSL)
  186. CHECK_INCLUDE_FILE_CONCAT("openssl/x509.h" HAVE_OPENSSL_X509_H)
  187. CHECK_INCLUDE_FILE_CONCAT("openssl/engine.h" HAVE_OPENSSL_ENGINE_H)
  188. CHECK_INCLUDE_FILE_CONCAT("openssl/rsa.h" HAVE_OPENSSL_RSA_H)
  189. CHECK_INCLUDE_FILE_CONCAT("openssl/crypto.h" HAVE_OPENSSL_CRYPTO_H)
  190. CHECK_INCLUDE_FILE_CONCAT("openssl/pem.h" HAVE_OPENSSL_PEM_H)
  191. CHECK_INCLUDE_FILE_CONCAT("openssl/ssl.h" HAVE_OPENSSL_SSL_H)
  192. CHECK_INCLUDE_FILE_CONCAT("openssl/err.h" HAVE_OPENSSL_ERR_H)
  193. CHECK_INCLUDE_FILE_CONCAT("openssl/rand.h" HAVE_OPENSSL_RAND_H)
  194. ENDIF(CMAKE_USE_OPENSSL)
  195. IF(NOT CURL_SPECIAL_LIBZ)
  196. CHECK_INCLUDE_FILE_CONCAT("zlib.h" HAVE_ZLIB_H)
  197. ENDIF(NOT CURL_SPECIAL_LIBZ)
  198. CHECK_INCLUDE_FILE_CONCAT("sys/socket.h" HAVE_SYS_SOCKET_H)
  199. CHECK_INCLUDE_FILE_CONCAT("netinet/in.h" HAVE_NETINET_IN_H)
  200. CHECK_INCLUDE_FILE_CONCAT("net/if.h" HAVE_NET_IF_H)
  201. CHECK_INCLUDE_FILE_CONCAT("netinet/if_ether.h"
  202. HAVE_NETINET_IF_ETHER_H)
  203. CHECK_INCLUDE_FILE_CONCAT("netinet/tcp.h"
  204. HAVE_NETINET_TCP_H)
  205. CHECK_INCLUDE_FILE_CONCAT("sys/select.h" HAVE_SYS_SELECT_H)
  206. CHECK_INCLUDE_FILE_CONCAT("utime.h" HAVE_UTIME_H)
  207. CHECK_INCLUDE_FILE_CONCAT("netinet/in.h" HAVE_NETINET_IN_H)
  208. CHECK_INCLUDE_FILE_CONCAT("pwd.h" HAVE_PWD_H)
  209. CHECK_INCLUDE_FILE_CONCAT("sgtty.h" HAVE_SGTTY_H)
  210. CHECK_INCLUDE_FILE_CONCAT("stdint.h" HAVE_STDINT_H)
  211. CHECK_INCLUDE_FILE_CONCAT("stdlib.h" HAVE_STDLIB_H)
  212. CHECK_INCLUDE_FILE_CONCAT("string.h" HAVE_STRING_H)
  213. CHECK_INCLUDE_FILE_CONCAT("strings.h" HAVE_STRINGS_H)
  214. CHECK_INCLUDE_FILE_CONCAT("sys/param.h" HAVE_SYS_PARAM_H)
  215. CHECK_INCLUDE_FILE_CONCAT("sys/stat.h" HAVE_SYS_STAT_H)
  216. CHECK_INCLUDE_FILE_CONCAT("sys/time.h" HAVE_SYS_TIME_H)
  217. CHECK_INCLUDE_FILE_CONCAT("termios.h" HAVE_TERMIOS_H)
  218. CHECK_INCLUDE_FILE_CONCAT("termio.h" HAVE_TERMIO_H)
  219. CHECK_INCLUDE_FILE_CONCAT("io.h" HAVE_IO_H)
  220. CHECK_INCLUDE_FILE_CONCAT("time.h" HAVE_TIME_H)
  221. CHECK_INCLUDE_FILE_CONCAT("unistd.h" HAVE_UNISTD_H)
  222. CHECK_INCLUDE_FILE_CONCAT("sys/utime.h" HAVE_SYS_UTIME_H)
  223. CHECK_INCLUDE_FILE_CONCAT("winsock.h" HAVE_WINSOCK_H)
  224. CHECK_INCLUDE_FILE_CONCAT("sockio.h" HAVE_SOCKIO_H)
  225. CHECK_INCLUDE_FILE_CONCAT("sys/sockio.h" HAVE_SYS_SOCKIO_H)
  226. CHECK_INCLUDE_FILE_CONCAT("x509.h" HAVE_X509_H)
  227. CHECK_INCLUDE_FILE_CONCAT("setjmp.h" HAVE_SETJMP_H)
  228. CHECK_INCLUDE_FILE_CONCAT("signal.h" HAVE_SIGNAL_H)
  229. CHECK_INCLUDE_FILE_CONCAT("sys/ioctl.h" HAVE_SYS_IOCTL_H)
  230. CHECK_INCLUDE_FILE_CONCAT("sys/utsname.h" HAVE_SYS_UTSNAME_H)
  231. CHECK_TYPE_SIZE(size_t SIZEOF_SIZE_T)
  232. CHECK_TYPE_SIZE(ssize_t SIZEOF_SSIZE_T)
  233. CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG)
  234. CHECK_TYPE_SIZE("long double" SIZEOF_LONG_DOUBLE)
  235. IF(NOT HAVE_SIZEOF_SSIZE_T)
  236. SET(ssize_t int)
  237. ENDIF(NOT HAVE_SIZEOF_SSIZE_T)
  238. IF(HAVE_SIZEOF_LONG_LONG)
  239. SET(HAVE_LONGLONG 1)
  240. ENDIF(HAVE_SIZEOF_LONG_LONG)
  241. FIND_FILE(RANDOM_FILE urandom /dev)
  242. MARK_AS_ADVANCED(RANDOM_FILE)
  243. # Check for some functions that are used
  244. CHECK_SYMBOL_EXISTS(socket "${CURL_INCLUDES}" HAVE_SOCKET)
  245. CHECK_SYMBOL_EXISTS(poll "${CURL_INCLUDES}" HAVE_POLL)
  246. CHECK_SYMBOL_EXISTS(select "${CURL_INCLUDES}" HAVE_SELECT)
  247. CHECK_SYMBOL_EXISTS(strdup "${CURL_INCLUDES}" HAVE_STRDUP)
  248. CHECK_SYMBOL_EXISTS(strstr "${CURL_INCLUDES}" HAVE_STRSTR)
  249. CHECK_SYMBOL_EXISTS(strtok_r "${CURL_INCLUDES}" HAVE_STRTOK_R)
  250. CHECK_SYMBOL_EXISTS(strftime "${CURL_INCLUDES}" HAVE_STRFTIME)
  251. CHECK_SYMBOL_EXISTS(uname "${CURL_INCLUDES}" HAVE_UNAME)
  252. CHECK_SYMBOL_EXISTS(strcasecmp "${CURL_INCLUDES}" HAVE_STRCASECMP)
  253. CHECK_SYMBOL_EXISTS(stricmp "${CURL_INCLUDES}" HAVE_STRICMP)
  254. CHECK_SYMBOL_EXISTS(strcmpi "${CURL_INCLUDES}" HAVE_STRCMPI)
  255. CHECK_SYMBOL_EXISTS(strncmpi "${CURL_INCLUDES}" HAVE_STRNCMPI)
  256. IF(NOT HAVE_STRNCMPI)
  257. SET(HAVE_STRCMPI)
  258. ENDIF(NOT HAVE_STRNCMPI)
  259. CHECK_SYMBOL_EXISTS(gethostbyaddr "${CURL_INCLUDES}" HAVE_GETHOSTBYADDR)
  260. CHECK_SYMBOL_EXISTS(gettimeofday "${CURL_INCLUDES}" HAVE_GETTIMEOFDAY)
  261. CHECK_SYMBOL_EXISTS(inet_addr "${CURL_INCLUDES}" HAVE_INET_ADDR)
  262. CHECK_SYMBOL_EXISTS(inet_pton "${CURL_INCLUDES}" HAVE_INET_PTON)
  263. CHECK_SYMBOL_EXISTS(inet_ntoa "${CURL_INCLUDES}" HAVE_INET_NTOA)
  264. CHECK_SYMBOL_EXISTS(inet_ntoa_r "${CURL_INCLUDES}" HAVE_INET_NTOA_R)
  265. CHECK_SYMBOL_EXISTS(tcsetattr "${CURL_INCLUDES}" HAVE_TCSETATTR)
  266. CHECK_SYMBOL_EXISTS(tcgetattr "${CURL_INCLUDES}" HAVE_TCGETATTR)
  267. CHECK_SYMBOL_EXISTS(perror "${CURL_INCLUDES}" HAVE_PERROR)
  268. CHECK_SYMBOL_EXISTS(closesocket "${CURL_INCLUDES}" HAVE_CLOSESOCKET)
  269. CHECK_SYMBOL_EXISTS(setvbuf "${CURL_INCLUDES}" HAVE_SETVBUF)
  270. CHECK_SYMBOL_EXISTS(sigsetjmp "${CURL_INCLUDES}" HAVE_SIGSETJMP)
  271. CHECK_SYMBOL_EXISTS(getpass_r "${CURL_INCLUDES}" HAVE_GETPASS_R)
  272. CHECK_SYMBOL_EXISTS(strlcat "${CURL_INCLUDES}" HAVE_STRLCAT)
  273. CHECK_SYMBOL_EXISTS(getpwuid "${CURL_INCLUDES}" HAVE_GETPWUID)
  274. CHECK_SYMBOL_EXISTS(geteuid "${CURL_INCLUDES}" HAVE_GETEUID)
  275. CHECK_SYMBOL_EXISTS(utime "${CURL_INCLUDES}" HAVE_UTIME)
  276. IF(CMAKE_USE_OPENSSL)
  277. CHECK_SYMBOL_EXISTS(RAND_status "${CURL_INCLUDES}" HAVE_RAND_STATUS)
  278. CHECK_SYMBOL_EXISTS(RAND_screen "${CURL_INCLUDES}" HAVE_RAND_SCREEN)
  279. CHECK_SYMBOL_EXISTS(RAND_egd "${CURL_INCLUDES}" HAVE_RAND_EGD)
  280. CHECK_SYMBOL_EXISTS(CRYPTO_cleanup_all_ex_data "${CURL_INCLUDES}"
  281. HAVE_CRYPTO_CLEANUP_ALL_EX_DATA)
  282. ENDIF(CMAKE_USE_OPENSSL)
  283. CHECK_SYMBOL_EXISTS(gmtime_r "${CURL_INCLUDES}" HAVE_GMTIME_R)
  284. CHECK_SYMBOL_EXISTS(localtime_r "${CURL_INCLUDES}" HAVE_LOCALTIME_R)
  285. CHECK_SYMBOL_EXISTS(gethostbyname "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME)
  286. CHECK_SYMBOL_EXISTS(gethostbyname_r "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME_R)
  287. CHECK_SYMBOL_EXISTS(gethostbyaddr_r "${CURL_INCLUDES}" HAVE_GETHOSTBYADDR_R)
  288. CHECK_SYMBOL_EXISTS(signal "${CURL_INCLUDES}" HAVE_SIGNAL_FUNC)
  289. CHECK_SYMBOL_EXISTS(SIGALRM "${CURL_INCLUDES}" HAVE_SIGNAL_MACRO)
  290. IF(HAVE_SIGNAL_FUNC AND HAVE_SIGNAL_MACRO)
  291. SET(HAVE_SIGNAL 1)
  292. ENDIF(HAVE_SIGNAL_FUNC AND HAVE_SIGNAL_MACRO)
  293. CHECK_SYMBOL_EXISTS(uname "${CURL_INCLUDES}" HAVE_UNAME)
  294. CHECK_SYMBOL_EXISTS(strtoll "${CURL_INCLUDES}" HAVE_STRTOLL)
  295. CHECK_SYMBOL_EXISTS(_strtoi64 "${CURL_INCLUDES}" HAVE__STRTOI64)
  296. CHECK_SYMBOL_EXISTS(strerror_r "${CURL_INCLUDES}" HAVE_STRERROR_R)
  297. CHECK_SYMBOL_EXISTS(siginterrupt "${CURL_INCLUDES}" HAVE_SIGINTERRUPT)
  298. CHECK_SYMBOL_EXISTS(perror "${CURL_INCLUDES}" HAVE_PERROR)
  299. # only build compat strtok if we need to
  300. IF (NOT HAVE_STRTOK_R)
  301. SET(libCurl_SRCS ${libCurl_SRCS}
  302. strtok.c
  303. )
  304. ENDIF (NOT HAVE_STRTOK_R)
  305. IF(NOT HAVE_STRTOLL AND NOT HAVE__STRTOI64)
  306. SET(libCurl_SRCS ${libCurl_SRCS}
  307. strtoofft.c
  308. )
  309. ENDIF(NOT HAVE_STRTOLL AND NOT HAVE__STRTOI64)
  310. # sigaction and sigsetjmp are special. Use special mechanism for
  311. # detecting those, but only if previous attempt failed.
  312. IF(HAVE_SIGNAL_H)
  313. CHECK_SYMBOL_EXISTS(sigaction "signal.h" HAVE_SIGACTION)
  314. ENDIF(HAVE_SIGNAL_H)
  315. IF(NOT HAVE_SIGSETJMP)
  316. IF(HAVE_SETJMP_H)
  317. CHECK_SYMBOL_EXISTS(sigsetjmp "setjmp.h" HAVE_MACRO_SIGSETJMP)
  318. IF(HAVE_MACRO_SIGSETJMP)
  319. SET(HAVE_SIGSETJMP 1)
  320. ENDIF(HAVE_MACRO_SIGSETJMP)
  321. ENDIF(HAVE_SETJMP_H)
  322. ENDIF(NOT HAVE_SIGSETJMP)
  323. # For other curl specific tests, use this macro.
  324. MACRO(CURL_INTERNAL_TEST CURL_TEST)
  325. IF("${CURL_TEST}" MATCHES "^${CURL_TEST}$")
  326. SET(MACRO_CHECK_FUNCTION_DEFINITIONS
  327. "-D${CURL_TEST} ${CMAKE_REQUIRED_FLAGS}")
  328. IF(CMAKE_REQUIRED_LIBRARIES)
  329. SET(CURL_TEST_ADD_LIBRARIES
  330. "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
  331. ENDIF(CMAKE_REQUIRED_LIBRARIES)
  332. MESSAGE(STATUS "Performing Curl Test ${CURL_TEST}")
  333. TRY_COMPILE(${CURL_TEST}
  334. ${CMAKE_BINARY_DIR}
  335. ${LIBCURL_SOURCE_DIR}/CMake/CurlTests.c
  336. CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
  337. "${CURL_TEST_ADD_LIBRARIES}"
  338. OUTPUT_VARIABLE OUTPUT)
  339. IF(${CURL_TEST})
  340. SET(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
  341. MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Success")
  342. ELSE(${CURL_TEST})
  343. MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
  344. SET(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
  345. FILE(APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
  346. "Performing Curl Test ${CURL_TEST} failed with the following output:\n"
  347. "${OUTPUT}\n")
  348. ENDIF(${CURL_TEST})
  349. ENDIF("${CURL_TEST}" MATCHES "^${CURL_TEST}$")
  350. ENDMACRO(CURL_INTERNAL_TEST)
  351. MACRO(CURL_INTERNAL_TEST_RUN CURL_TEST)
  352. IF("${CURL_TEST}_COMPILE" MATCHES "^${CURL_TEST}_COMPILE$")
  353. SET(MACRO_CHECK_FUNCTION_DEFINITIONS
  354. "-D${CURL_TEST} ${CMAKE_REQUIRED_FLAGS}")
  355. IF(CMAKE_REQUIRED_LIBRARIES)
  356. SET(CURL_TEST_ADD_LIBRARIES
  357. "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
  358. ENDIF(CMAKE_REQUIRED_LIBRARIES)
  359. MESSAGE(STATUS "Performing Curl Test ${CURL_TEST}")
  360. TRY_RUN(${CURL_TEST} ${CURL_TEST}_COMPILE
  361. ${CMAKE_BINARY_DIR}
  362. ${LIBCURL_SOURCE_DIR}/CMake/CurlTests.c
  363. CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
  364. "${CURL_TEST_ADD_LIBRARIES}"
  365. OUTPUT_VARIABLE OUTPUT)
  366. IF(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
  367. SET(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
  368. MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Success")
  369. ELSE(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
  370. MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
  371. SET(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
  372. FILE(APPEND "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log"
  373. "Performing Curl Test ${CURL_TEST} failed with the following output:\n"
  374. "${OUTPUT}")
  375. IF(${CURL_TEST}_COMPILE)
  376. FILE(APPEND "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log"
  377. "There was a running problem of this test\n")
  378. ENDIF(${CURL_TEST}_COMPILE)
  379. FILE(APPEND "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log"
  380. "\n\n")
  381. ENDIF(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
  382. ENDIF("${CURL_TEST}_COMPILE" MATCHES "^${CURL_TEST}_COMPILE$")
  383. ENDMACRO(CURL_INTERNAL_TEST_RUN)
  384. # Do curl specific tests
  385. #OPTION(CURL_HAVE_DISABLED_NONBLOCKING "Disable non-blocking socket detection" OFF)
  386. SET(CURL_NONBLOCKING_TESTS)
  387. IF(NOT CURL_HAVE_DISABLED_NONBLOCKING)
  388. SET(CURL_NONBLOCKING_TESTS
  389. HAVE_FIONBIO
  390. HAVE_IOCTLSOCKET
  391. HAVE_IOCTLSOCKET_CASE
  392. HAVE_O_NONBLOCK
  393. HAVE_SO_NONBLOCK
  394. )
  395. ENDIF(NOT CURL_HAVE_DISABLED_NONBLOCKING)
  396. FOREACH(CURL_TEST
  397. ${CURL_NONBLOCKING_TESTS}
  398. TIME_WITH_SYS_TIME
  399. HAVE_O_NONBLOCKHAVE_GETHOSTBYADDR_R_5
  400. HAVE_GETHOSTBYADDR_R_7
  401. HAVE_GETHOSTBYADDR_R_8
  402. HAVE_GETHOSTBYADDR_R_5_REENTRANT
  403. HAVE_GETHOSTBYADDR_R_7_REENTRANT
  404. HAVE_GETHOSTBYADDR_R_8_REENTRANT
  405. HAVE_GETHOSTBYNAME_R_3
  406. HAVE_GETHOSTBYNAME_R_5
  407. HAVE_GETHOSTBYNAME_R_6
  408. HAVE_GETHOSTBYNAME_R_3_REENTRANT
  409. HAVE_GETHOSTBYNAME_R_5_REENTRANT
  410. HAVE_GETHOSTBYNAME_R_6_REENTRANT
  411. HAVE_SOCKLEN_T
  412. HAVE_IN_ADDR_T
  413. STDC_HEADERS
  414. RETSIGTYPE_TEST
  415. HAVE_INET_NTOA_R_DECL
  416. HAVE_INET_NTOA_R_DECL_REENTRANT
  417. HAVE_GETADDRINFO
  418. HAVE_FILE_OFFSET_BITS
  419. )
  420. CURL_INTERNAL_TEST(${CURL_TEST})
  421. ENDFOREACH(CURL_TEST)
  422. IF(HAVE_FILE_OFFSET_BITS)
  423. SET(_FILE_OFFSET_BITS 64)
  424. ENDIF(HAVE_FILE_OFFSET_BITS)
  425. FOREACH(CURL_TEST
  426. HAVE_GLIBC_STRERROR_R
  427. HAVE_POSIX_STRERROR_R
  428. HAVE_LONG_LONG_CONSTANT
  429. )
  430. CURL_INTERNAL_TEST_RUN(${CURL_TEST})
  431. ENDFOREACH(CURL_TEST)
  432. # Check for reentrant
  433. FOREACH(CURL_TEST
  434. HAVE_GETHOSTBYADDR_R_5
  435. HAVE_GETHOSTBYADDR_R_7
  436. HAVE_GETHOSTBYADDR_R_8
  437. HAVE_GETHOSTBYNAME_R_3
  438. HAVE_GETHOSTBYNAME_R_5
  439. HAVE_GETHOSTBYNAME_R_6
  440. HAVE_INET_NTOA_R_DECL_REENTRANT)
  441. IF(NOT ${CURL_TEST})
  442. IF(${CURL_TEST}_REENTRANT)
  443. SET(NEED_REENTRANT 1)
  444. ENDIF(${CURL_TEST}_REENTRANT)
  445. ENDIF(NOT ${CURL_TEST})
  446. ENDFOREACH(CURL_TEST)
  447. IF(NEED_REENTRANT)
  448. FOREACH(CURL_TEST
  449. HAVE_GETHOSTBYADDR_R_5
  450. HAVE_GETHOSTBYADDR_R_7
  451. HAVE_GETHOSTBYADDR_R_8
  452. HAVE_GETHOSTBYNAME_R_3
  453. HAVE_GETHOSTBYNAME_R_5
  454. HAVE_GETHOSTBYNAME_R_6)
  455. SET(${CURL_TEST} 0)
  456. IF(${CURL_TEST}_REENTRANT)
  457. SET(${CURL_TEST} 1)
  458. ENDIF(${CURL_TEST}_REENTRANT)
  459. ENDFOREACH(CURL_TEST)
  460. ENDIF(NEED_REENTRANT)
  461. IF(HAVE_INET_NTOA_R_DECL_REENTRANT)
  462. SET(HAVE_INET_NTOA_R_DECL 1)
  463. SET(NEED_REENTRANT 1)
  464. ENDIF(HAVE_INET_NTOA_R_DECL_REENTRANT)
  465. # Some other minor tests
  466. IF(NOT HAVE_SOCKLEN_T)
  467. SET(socklen_t "int")
  468. ENDIF(NOT HAVE_SOCKLEN_T)
  469. IF(NOT HAVE_IN_ADDR_T)
  470. SET(in_addr_t "unsigned long")
  471. ENDIF(NOT HAVE_IN_ADDR_T)
  472. # Fix libz / zlib.h
  473. IF(NOT CURL_SPECIAL_LIBZ)
  474. IF(NOT HAVE_LIBZ)
  475. SET(HAVE_ZLIB_H 0)
  476. ENDIF(NOT HAVE_LIBZ)
  477. IF(NOT HAVE_ZLIB_H)
  478. SET(HAVE_LIBZ 0)
  479. ENDIF(NOT HAVE_ZLIB_H)
  480. ENDIF(NOT CURL_SPECIAL_LIBZ)
  481. IF(_FILE_OFFSET_BITS)
  482. SET(_FILE_OFFSET_BITS 64)
  483. ENDIF(_FILE_OFFSET_BITS)
  484. SET(CMAKE_REQUIRED_FLAGS "-D_FILE_OFFSET_BITS=64")
  485. SET(CMAKE_EXTRA_INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/curl/curl.h")
  486. CHECK_TYPE_SIZE("curl_off_t" SIZEOF_CURL_OFF_T)
  487. SET(CMAKE_EXTRA_INCLUDE_FILES)
  488. SET(CMAKE_REQUIRED_FLAGS)
  489. # Check for nonblocking
  490. SET(HAVE_DISABLED_NONBLOCKING 1)
  491. IF(HAVE_FIONBIO OR
  492. HAVE_IOCTLSOCKET OR
  493. HAVE_IOCTLSOCKET_CASE OR
  494. HAVE_O_NONBLOCK)
  495. SET(HAVE_DISABLED_NONBLOCKING)
  496. ENDIF(HAVE_FIONBIO OR
  497. HAVE_IOCTLSOCKET OR
  498. HAVE_IOCTLSOCKET_CASE OR
  499. HAVE_O_NONBLOCK)
  500. IF(RETSIGTYPE_TEST)
  501. SET(RETSIGTYPE void)
  502. ELSE(RETSIGTYPE_TEST)
  503. SET(RETSIGTYPE int)
  504. ENDIF(RETSIGTYPE_TEST)
  505. IF(CMAKE_COMPILER_IS_GNUCC AND APPLE)
  506. # The Mac version of GCC warns about use of long double. Disable it.
  507. GET_SOURCE_FILE_PROPERTY(MPRINTF_COMPILE_FLAGS mprintf.c COMPILE_FLAGS)
  508. IF(MPRINTF_COMPILE_FLAGS)
  509. SET(MPRINTF_COMPILE_FLAGS "${MPRINTF_COMPILE_FLAGS} -Wno-long-double")
  510. ELSE(MPRINTF_COMPILE_FLAGS)
  511. SET(MPRINTF_COMPILE_FLAGS "-Wno-long-double")
  512. ENDIF(MPRINTF_COMPILE_FLAGS)
  513. SET_SOURCE_FILES_PROPERTIES(mprintf.c PROPERTIES
  514. COMPILE_FLAGS ${MPRINTF_COMPILE_FLAGS})
  515. ENDIF(CMAKE_COMPILER_IS_GNUCC AND APPLE)
  516. # The rest of the build
  517. INCLUDE_DIRECTORIES(${LIBCURL_SOURCE_DIR})
  518. INCLUDE_DIRECTORIES(${LIBCURL_BINARY_DIR})
  519. ADD_DEFINITIONS(-DHAVE_CONFIG_H)
  520. CONFIGURE_FILE(${LIBCURL_SOURCE_DIR}/config.h.in
  521. ${LIBCURL_BINARY_DIR}/config.h)
  522. ADD_LIBRARY(cmcurl ${libCurl_SRCS})
  523. TARGET_LINK_LIBRARIES(cmcurl ${CURL_LIBS})
  524. OPTION(CURL_TESTING "Do libCurl testing" OFF)
  525. IF(CURL_TESTING)
  526. SUBDIRS(Testing)
  527. ENDIF(CURL_TESTING)
  528. ADD_EXECUTABLE(LIBCURL Testing/curltest.c)
  529. TARGET_LINK_LIBRARIES(LIBCURL cmcurl ${CMAKE_DL_LIBS})
  530. ADD_TEST(curl "${EXECUTABLE_OUTPUT_PATH}/LIBCURL")