CMakeLists.txt 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594
  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" SIZEOF_LONG)
  235. CHECK_TYPE_SIZE("__int64" SIZEOF___INT64)
  236. CHECK_TYPE_SIZE("long double" SIZEOF_LONG_DOUBLE)
  237. IF(NOT HAVE_SIZEOF_SSIZE_T)
  238. IF(SIZEOF_LONG EQUAL SIZEOF_SIZE_T)
  239. SET(ssize_t long)
  240. ENDIF(SIZEOF_LONG EQUAL SIZEOF_SIZE_T)
  241. IF(NOT ssize_t AND SIZEOF___INT64 EQUAL SIZEOF_SIZE_T)
  242. SET(ssize_t __int64)
  243. ENDIF(NOT ssize_t AND SIZEOF___INT64 EQUAL SIZEOF_SIZE_T)
  244. ENDIF(NOT HAVE_SIZEOF_SSIZE_T)
  245. IF(HAVE_SIZEOF_LONG_LONG)
  246. SET(HAVE_LONGLONG 1)
  247. ENDIF(HAVE_SIZEOF_LONG_LONG)
  248. FIND_FILE(RANDOM_FILE urandom /dev)
  249. MARK_AS_ADVANCED(RANDOM_FILE)
  250. # Check for some functions that are used
  251. CHECK_SYMBOL_EXISTS(socket "${CURL_INCLUDES}" HAVE_SOCKET)
  252. CHECK_SYMBOL_EXISTS(poll "${CURL_INCLUDES}" HAVE_POLL)
  253. CHECK_SYMBOL_EXISTS(select "${CURL_INCLUDES}" HAVE_SELECT)
  254. CHECK_SYMBOL_EXISTS(strdup "${CURL_INCLUDES}" HAVE_STRDUP)
  255. CHECK_SYMBOL_EXISTS(strstr "${CURL_INCLUDES}" HAVE_STRSTR)
  256. CHECK_SYMBOL_EXISTS(strtok_r "${CURL_INCLUDES}" HAVE_STRTOK_R)
  257. CHECK_SYMBOL_EXISTS(strftime "${CURL_INCLUDES}" HAVE_STRFTIME)
  258. CHECK_SYMBOL_EXISTS(uname "${CURL_INCLUDES}" HAVE_UNAME)
  259. CHECK_SYMBOL_EXISTS(strcasecmp "${CURL_INCLUDES}" HAVE_STRCASECMP)
  260. CHECK_SYMBOL_EXISTS(stricmp "${CURL_INCLUDES}" HAVE_STRICMP)
  261. CHECK_SYMBOL_EXISTS(strcmpi "${CURL_INCLUDES}" HAVE_STRCMPI)
  262. CHECK_SYMBOL_EXISTS(strncmpi "${CURL_INCLUDES}" HAVE_STRNCMPI)
  263. IF(NOT HAVE_STRNCMPI)
  264. SET(HAVE_STRCMPI)
  265. ENDIF(NOT HAVE_STRNCMPI)
  266. CHECK_SYMBOL_EXISTS(gethostbyaddr "${CURL_INCLUDES}" HAVE_GETHOSTBYADDR)
  267. CHECK_SYMBOL_EXISTS(gettimeofday "${CURL_INCLUDES}" HAVE_GETTIMEOFDAY)
  268. CHECK_SYMBOL_EXISTS(inet_addr "${CURL_INCLUDES}" HAVE_INET_ADDR)
  269. CHECK_SYMBOL_EXISTS(inet_pton "${CURL_INCLUDES}" HAVE_INET_PTON)
  270. CHECK_SYMBOL_EXISTS(inet_ntoa "${CURL_INCLUDES}" HAVE_INET_NTOA)
  271. CHECK_SYMBOL_EXISTS(inet_ntoa_r "${CURL_INCLUDES}" HAVE_INET_NTOA_R)
  272. CHECK_SYMBOL_EXISTS(tcsetattr "${CURL_INCLUDES}" HAVE_TCSETATTR)
  273. CHECK_SYMBOL_EXISTS(tcgetattr "${CURL_INCLUDES}" HAVE_TCGETATTR)
  274. CHECK_SYMBOL_EXISTS(perror "${CURL_INCLUDES}" HAVE_PERROR)
  275. CHECK_SYMBOL_EXISTS(closesocket "${CURL_INCLUDES}" HAVE_CLOSESOCKET)
  276. CHECK_SYMBOL_EXISTS(setvbuf "${CURL_INCLUDES}" HAVE_SETVBUF)
  277. CHECK_SYMBOL_EXISTS(sigsetjmp "${CURL_INCLUDES}" HAVE_SIGSETJMP)
  278. CHECK_SYMBOL_EXISTS(getpass_r "${CURL_INCLUDES}" HAVE_GETPASS_R)
  279. CHECK_SYMBOL_EXISTS(strlcat "${CURL_INCLUDES}" HAVE_STRLCAT)
  280. CHECK_SYMBOL_EXISTS(getpwuid "${CURL_INCLUDES}" HAVE_GETPWUID)
  281. CHECK_SYMBOL_EXISTS(geteuid "${CURL_INCLUDES}" HAVE_GETEUID)
  282. CHECK_SYMBOL_EXISTS(utime "${CURL_INCLUDES}" HAVE_UTIME)
  283. IF(CMAKE_USE_OPENSSL)
  284. CHECK_SYMBOL_EXISTS(RAND_status "${CURL_INCLUDES}" HAVE_RAND_STATUS)
  285. CHECK_SYMBOL_EXISTS(RAND_screen "${CURL_INCLUDES}" HAVE_RAND_SCREEN)
  286. CHECK_SYMBOL_EXISTS(RAND_egd "${CURL_INCLUDES}" HAVE_RAND_EGD)
  287. CHECK_SYMBOL_EXISTS(CRYPTO_cleanup_all_ex_data "${CURL_INCLUDES}"
  288. HAVE_CRYPTO_CLEANUP_ALL_EX_DATA)
  289. ENDIF(CMAKE_USE_OPENSSL)
  290. CHECK_SYMBOL_EXISTS(gmtime_r "${CURL_INCLUDES}" HAVE_GMTIME_R)
  291. CHECK_SYMBOL_EXISTS(localtime_r "${CURL_INCLUDES}" HAVE_LOCALTIME_R)
  292. CHECK_SYMBOL_EXISTS(gethostbyname "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME)
  293. CHECK_SYMBOL_EXISTS(gethostbyname_r "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME_R)
  294. CHECK_SYMBOL_EXISTS(gethostbyaddr_r "${CURL_INCLUDES}" HAVE_GETHOSTBYADDR_R)
  295. CHECK_SYMBOL_EXISTS(signal "${CURL_INCLUDES}" HAVE_SIGNAL_FUNC)
  296. CHECK_SYMBOL_EXISTS(SIGALRM "${CURL_INCLUDES}" HAVE_SIGNAL_MACRO)
  297. IF(HAVE_SIGNAL_FUNC AND HAVE_SIGNAL_MACRO)
  298. SET(HAVE_SIGNAL 1)
  299. ENDIF(HAVE_SIGNAL_FUNC AND HAVE_SIGNAL_MACRO)
  300. CHECK_SYMBOL_EXISTS(uname "${CURL_INCLUDES}" HAVE_UNAME)
  301. CHECK_SYMBOL_EXISTS(strtoll "${CURL_INCLUDES}" HAVE_STRTOLL)
  302. CHECK_SYMBOL_EXISTS(_strtoi64 "${CURL_INCLUDES}" HAVE__STRTOI64)
  303. CHECK_SYMBOL_EXISTS(strerror_r "${CURL_INCLUDES}" HAVE_STRERROR_R)
  304. CHECK_SYMBOL_EXISTS(siginterrupt "${CURL_INCLUDES}" HAVE_SIGINTERRUPT)
  305. CHECK_SYMBOL_EXISTS(perror "${CURL_INCLUDES}" HAVE_PERROR)
  306. # only build compat strtok if we need to
  307. IF (NOT HAVE_STRTOK_R)
  308. SET(libCurl_SRCS ${libCurl_SRCS}
  309. strtok.c
  310. )
  311. ENDIF (NOT HAVE_STRTOK_R)
  312. IF(NOT HAVE_STRTOLL AND NOT HAVE__STRTOI64)
  313. SET(libCurl_SRCS ${libCurl_SRCS}
  314. strtoofft.c
  315. )
  316. ENDIF(NOT HAVE_STRTOLL AND NOT HAVE__STRTOI64)
  317. # sigaction and sigsetjmp are special. Use special mechanism for
  318. # detecting those, but only if previous attempt failed.
  319. IF(HAVE_SIGNAL_H)
  320. CHECK_SYMBOL_EXISTS(sigaction "signal.h" HAVE_SIGACTION)
  321. ENDIF(HAVE_SIGNAL_H)
  322. IF(NOT HAVE_SIGSETJMP)
  323. IF(HAVE_SETJMP_H)
  324. CHECK_SYMBOL_EXISTS(sigsetjmp "setjmp.h" HAVE_MACRO_SIGSETJMP)
  325. IF(HAVE_MACRO_SIGSETJMP)
  326. SET(HAVE_SIGSETJMP 1)
  327. ENDIF(HAVE_MACRO_SIGSETJMP)
  328. ENDIF(HAVE_SETJMP_H)
  329. ENDIF(NOT HAVE_SIGSETJMP)
  330. # For other curl specific tests, use this macro.
  331. MACRO(CURL_INTERNAL_TEST CURL_TEST)
  332. IF("${CURL_TEST}" MATCHES "^${CURL_TEST}$")
  333. SET(MACRO_CHECK_FUNCTION_DEFINITIONS
  334. "-D${CURL_TEST} ${CMAKE_REQUIRED_FLAGS}")
  335. IF(CMAKE_REQUIRED_LIBRARIES)
  336. SET(CURL_TEST_ADD_LIBRARIES
  337. "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
  338. ENDIF(CMAKE_REQUIRED_LIBRARIES)
  339. MESSAGE(STATUS "Performing Curl Test ${CURL_TEST}")
  340. TRY_COMPILE(${CURL_TEST}
  341. ${CMAKE_BINARY_DIR}
  342. ${LIBCURL_SOURCE_DIR}/CMake/CurlTests.c
  343. CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
  344. "${CURL_TEST_ADD_LIBRARIES}"
  345. OUTPUT_VARIABLE OUTPUT)
  346. IF(${CURL_TEST})
  347. SET(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
  348. MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Success")
  349. ELSE(${CURL_TEST})
  350. MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
  351. SET(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
  352. FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
  353. "Performing Curl Test ${CURL_TEST} failed with the following output:\n"
  354. "${OUTPUT}\n")
  355. ENDIF(${CURL_TEST})
  356. ENDIF("${CURL_TEST}" MATCHES "^${CURL_TEST}$")
  357. ENDMACRO(CURL_INTERNAL_TEST)
  358. MACRO(CURL_INTERNAL_TEST_RUN CURL_TEST)
  359. IF("${CURL_TEST}_COMPILE" MATCHES "^${CURL_TEST}_COMPILE$")
  360. SET(MACRO_CHECK_FUNCTION_DEFINITIONS
  361. "-D${CURL_TEST} ${CMAKE_REQUIRED_FLAGS}")
  362. IF(CMAKE_REQUIRED_LIBRARIES)
  363. SET(CURL_TEST_ADD_LIBRARIES
  364. "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
  365. ENDIF(CMAKE_REQUIRED_LIBRARIES)
  366. MESSAGE(STATUS "Performing Curl Test ${CURL_TEST}")
  367. TRY_RUN(${CURL_TEST} ${CURL_TEST}_COMPILE
  368. ${CMAKE_BINARY_DIR}
  369. ${LIBCURL_SOURCE_DIR}/CMake/CurlTests.c
  370. CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
  371. "${CURL_TEST_ADD_LIBRARIES}"
  372. OUTPUT_VARIABLE OUTPUT)
  373. IF(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
  374. SET(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
  375. MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Success")
  376. ELSE(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
  377. MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
  378. SET(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
  379. FILE(APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
  380. "Performing Curl Test ${CURL_TEST} failed with the following output:\n"
  381. "${OUTPUT}")
  382. IF(${CURL_TEST}_COMPILE)
  383. FILE(APPEND
  384. "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
  385. "There was a running problem of this test\n")
  386. ENDIF(${CURL_TEST}_COMPILE)
  387. FILE(APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
  388. "\n\n")
  389. ENDIF(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
  390. ENDIF("${CURL_TEST}_COMPILE" MATCHES "^${CURL_TEST}_COMPILE$")
  391. ENDMACRO(CURL_INTERNAL_TEST_RUN)
  392. # Do curl specific tests
  393. #OPTION(CURL_HAVE_DISABLED_NONBLOCKING "Disable non-blocking socket detection" OFF)
  394. SET(CURL_NONBLOCKING_TESTS)
  395. IF(NOT CURL_HAVE_DISABLED_NONBLOCKING)
  396. SET(CURL_NONBLOCKING_TESTS
  397. HAVE_FIONBIO
  398. HAVE_IOCTLSOCKET
  399. HAVE_IOCTLSOCKET_CASE
  400. HAVE_O_NONBLOCK
  401. HAVE_SO_NONBLOCK
  402. )
  403. ENDIF(NOT CURL_HAVE_DISABLED_NONBLOCKING)
  404. FOREACH(CURL_TEST
  405. ${CURL_NONBLOCKING_TESTS}
  406. TIME_WITH_SYS_TIME
  407. HAVE_O_NONBLOCKHAVE_GETHOSTBYADDR_R_5
  408. HAVE_GETHOSTBYADDR_R_7
  409. HAVE_GETHOSTBYADDR_R_8
  410. HAVE_GETHOSTBYADDR_R_5_REENTRANT
  411. HAVE_GETHOSTBYADDR_R_7_REENTRANT
  412. HAVE_GETHOSTBYADDR_R_8_REENTRANT
  413. HAVE_GETHOSTBYNAME_R_3
  414. HAVE_GETHOSTBYNAME_R_5
  415. HAVE_GETHOSTBYNAME_R_6
  416. HAVE_GETHOSTBYNAME_R_3_REENTRANT
  417. HAVE_GETHOSTBYNAME_R_5_REENTRANT
  418. HAVE_GETHOSTBYNAME_R_6_REENTRANT
  419. HAVE_SOCKLEN_T
  420. HAVE_IN_ADDR_T
  421. STDC_HEADERS
  422. RETSIGTYPE_TEST
  423. HAVE_INET_NTOA_R_DECL
  424. HAVE_INET_NTOA_R_DECL_REENTRANT
  425. HAVE_GETADDRINFO
  426. HAVE_FILE_OFFSET_BITS
  427. )
  428. CURL_INTERNAL_TEST(${CURL_TEST})
  429. ENDFOREACH(CURL_TEST)
  430. IF(HAVE_FILE_OFFSET_BITS)
  431. SET(_FILE_OFFSET_BITS 64)
  432. ENDIF(HAVE_FILE_OFFSET_BITS)
  433. FOREACH(CURL_TEST
  434. HAVE_GLIBC_STRERROR_R
  435. HAVE_POSIX_STRERROR_R
  436. HAVE_LONG_LONG_CONSTANT
  437. )
  438. CURL_INTERNAL_TEST_RUN(${CURL_TEST})
  439. ENDFOREACH(CURL_TEST)
  440. # Check for reentrant
  441. FOREACH(CURL_TEST
  442. HAVE_GETHOSTBYADDR_R_5
  443. HAVE_GETHOSTBYADDR_R_7
  444. HAVE_GETHOSTBYADDR_R_8
  445. HAVE_GETHOSTBYNAME_R_3
  446. HAVE_GETHOSTBYNAME_R_5
  447. HAVE_GETHOSTBYNAME_R_6
  448. HAVE_INET_NTOA_R_DECL_REENTRANT)
  449. IF(NOT ${CURL_TEST})
  450. IF(${CURL_TEST}_REENTRANT)
  451. SET(NEED_REENTRANT 1)
  452. ENDIF(${CURL_TEST}_REENTRANT)
  453. ENDIF(NOT ${CURL_TEST})
  454. ENDFOREACH(CURL_TEST)
  455. IF(NEED_REENTRANT)
  456. FOREACH(CURL_TEST
  457. HAVE_GETHOSTBYADDR_R_5
  458. HAVE_GETHOSTBYADDR_R_7
  459. HAVE_GETHOSTBYADDR_R_8
  460. HAVE_GETHOSTBYNAME_R_3
  461. HAVE_GETHOSTBYNAME_R_5
  462. HAVE_GETHOSTBYNAME_R_6)
  463. SET(${CURL_TEST} 0)
  464. IF(${CURL_TEST}_REENTRANT)
  465. SET(${CURL_TEST} 1)
  466. ENDIF(${CURL_TEST}_REENTRANT)
  467. ENDFOREACH(CURL_TEST)
  468. ENDIF(NEED_REENTRANT)
  469. IF(HAVE_INET_NTOA_R_DECL_REENTRANT)
  470. SET(HAVE_INET_NTOA_R_DECL 1)
  471. SET(NEED_REENTRANT 1)
  472. ENDIF(HAVE_INET_NTOA_R_DECL_REENTRANT)
  473. # Some other minor tests
  474. IF(NOT HAVE_SOCKLEN_T)
  475. SET(socklen_t "int")
  476. ENDIF(NOT HAVE_SOCKLEN_T)
  477. IF(NOT HAVE_IN_ADDR_T)
  478. SET(in_addr_t "unsigned long")
  479. ENDIF(NOT HAVE_IN_ADDR_T)
  480. # Fix libz / zlib.h
  481. IF(NOT CURL_SPECIAL_LIBZ)
  482. IF(NOT HAVE_LIBZ)
  483. SET(HAVE_ZLIB_H 0)
  484. ENDIF(NOT HAVE_LIBZ)
  485. IF(NOT HAVE_ZLIB_H)
  486. SET(HAVE_LIBZ 0)
  487. ENDIF(NOT HAVE_ZLIB_H)
  488. ENDIF(NOT CURL_SPECIAL_LIBZ)
  489. IF(_FILE_OFFSET_BITS)
  490. SET(_FILE_OFFSET_BITS 64)
  491. ENDIF(_FILE_OFFSET_BITS)
  492. SET(CMAKE_REQUIRED_FLAGS "-D_FILE_OFFSET_BITS=64")
  493. SET(CMAKE_EXTRA_INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/curl/curl.h")
  494. CHECK_TYPE_SIZE("curl_off_t" SIZEOF_CURL_OFF_T)
  495. SET(CMAKE_EXTRA_INCLUDE_FILES)
  496. SET(CMAKE_REQUIRED_FLAGS)
  497. # Check for nonblocking
  498. SET(HAVE_DISABLED_NONBLOCKING 1)
  499. IF(HAVE_FIONBIO OR
  500. HAVE_IOCTLSOCKET OR
  501. HAVE_IOCTLSOCKET_CASE OR
  502. HAVE_O_NONBLOCK)
  503. SET(HAVE_DISABLED_NONBLOCKING)
  504. ENDIF(HAVE_FIONBIO OR
  505. HAVE_IOCTLSOCKET OR
  506. HAVE_IOCTLSOCKET_CASE OR
  507. HAVE_O_NONBLOCK)
  508. IF(RETSIGTYPE_TEST)
  509. SET(RETSIGTYPE void)
  510. ELSE(RETSIGTYPE_TEST)
  511. SET(RETSIGTYPE int)
  512. ENDIF(RETSIGTYPE_TEST)
  513. IF(CMAKE_COMPILER_IS_GNUCC AND APPLE)
  514. # The Mac version of GCC warns about use of long double. Disable it.
  515. GET_SOURCE_FILE_PROPERTY(MPRINTF_COMPILE_FLAGS mprintf.c COMPILE_FLAGS)
  516. IF(MPRINTF_COMPILE_FLAGS)
  517. SET(MPRINTF_COMPILE_FLAGS "${MPRINTF_COMPILE_FLAGS} -Wno-long-double")
  518. ELSE(MPRINTF_COMPILE_FLAGS)
  519. SET(MPRINTF_COMPILE_FLAGS "-Wno-long-double")
  520. ENDIF(MPRINTF_COMPILE_FLAGS)
  521. SET_SOURCE_FILES_PROPERTIES(mprintf.c PROPERTIES
  522. COMPILE_FLAGS ${MPRINTF_COMPILE_FLAGS})
  523. ENDIF(CMAKE_COMPILER_IS_GNUCC AND APPLE)
  524. # The rest of the build
  525. INCLUDE_DIRECTORIES(${LIBCURL_SOURCE_DIR})
  526. INCLUDE_DIRECTORIES(${LIBCURL_BINARY_DIR})
  527. ADD_DEFINITIONS(-DHAVE_CONFIG_H)
  528. CONFIGURE_FILE(${LIBCURL_SOURCE_DIR}/config.h.in
  529. ${LIBCURL_BINARY_DIR}/config.h)
  530. ADD_LIBRARY(cmcurl ${libCurl_SRCS})
  531. TARGET_LINK_LIBRARIES(cmcurl ${CURL_LIBS})
  532. OPTION(CURL_TESTING "Do libCurl testing" OFF)
  533. IF(CURL_TESTING)
  534. SUBDIRS(Testing)
  535. ENDIF(CURL_TESTING)
  536. ADD_EXECUTABLE(LIBCURL Testing/curltest.c)
  537. TARGET_LINK_LIBRARIES(LIBCURL cmcurl ${CMAKE_DL_LIBS})
  538. ADD_TEST(curl "${EXECUTABLE_OUTPUT_PATH}/LIBCURL")