CMakeLists.txt 20 KB

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