CMakeLists.txt 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735
  1. CMAKE_MINIMUM_REQUIRED(VERSION 2.6.3 FATAL_ERROR)
  2. IF(POLICY CMP0025)
  3. CMAKE_POLICY(SET CMP0025 NEW)
  4. ENDIF()
  5. PROJECT(LIBCURL C)
  6. # Setup package meta-data
  7. SET(PACKAGE "curl")
  8. SET(VERSION "7.16.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. # amigaos.c - does not build on AmigaOS
  33. base64.c
  34. connect.c
  35. content_encoding.c
  36. cookie.c
  37. dict.c
  38. easy.c
  39. escape.c
  40. file.c
  41. formdata.c
  42. ftp.c
  43. getenv.c
  44. getinfo.c
  45. gtls.c
  46. hash.c
  47. hostares.c
  48. hostasyn.c
  49. hostip4.c
  50. hostip6.c
  51. hostip.c
  52. hostsyn.c
  53. hostthre.c
  54. http.c
  55. http_chunks.c
  56. http_digest.c
  57. http_negotiate.c
  58. http_ntlm.c
  59. if2ip.c
  60. inet_ntop.c
  61. inet_pton.c
  62. krb4.c
  63. ldap.c
  64. llist.c
  65. md5.c
  66. # memdebug.c -not used
  67. mprintf.c
  68. multi.c
  69. netrc.c
  70. # nwlib.c - Not used
  71. parsedate.c
  72. progress.c
  73. security.c
  74. select.c
  75. sendf.c
  76. share.c
  77. socks.c
  78. speedcheck.c
  79. splay.c
  80. ssh.c
  81. sslgen.c
  82. ssluse.c
  83. strdup.c
  84. strequal.c
  85. strerror.c
  86. # strtok.c - specify later
  87. # strtoofft.c - specify later
  88. telnet.c
  89. tftp.c
  90. timeval.c
  91. transfer.c
  92. url.c
  93. version.c
  94. )
  95. SET(CURL_DISABLE_LDAP 1)
  96. IF(NOT CURL_DISABLE_LDAP)
  97. SET(libCurl_SRCS
  98. ${libCurl_SRCS}
  99. ldap.c
  100. )
  101. ENDIF(NOT CURL_DISABLE_LDAP)
  102. # if we have Kerberos 4, right now this is never on
  103. #OPTION(CURL_KRB4 "Use Kerberos 4" OFF)
  104. IF(CURL_KRB4)
  105. SET(libCurl_SRCS ${libCurl_SRCS}
  106. krb4.c
  107. security.c
  108. )
  109. ENDIF(CURL_KRB4)
  110. #OPTION(CURL_MALLOC_DEBUG "Debug mallocs in Curl" OFF)
  111. MARK_AS_ADVANCED(CURL_MALLOC_DEBUG)
  112. IF(CURL_MALLOC_DEBUG)
  113. SET(libCurl_SRCS ${libCurl_SRCS}
  114. memdebug.c
  115. )
  116. ENDIF(CURL_MALLOC_DEBUG)
  117. # On windows preload settings
  118. IF(WIN32 AND NOT MINGW)
  119. INCLUDE(${LIBCURL_SOURCE_DIR}/Platforms/WindowsCache.cmake)
  120. ENDIF()
  121. # This macro checks if the symbol exists in the library and if it
  122. # does, it appends library to the list.
  123. SET(CURL_LIBS "")
  124. MACRO(CHECK_LIBRARY_EXISTS_CONCAT LIBRARY SYMBOL VARIABLE)
  125. CHECK_LIBRARY_EXISTS("${LIBRARY};${CURL_LIBS}" ${SYMBOL} ""
  126. ${VARIABLE})
  127. IF(${VARIABLE})
  128. SET(CURL_LIBS ${CURL_LIBS} ${LIBRARY})
  129. ENDIF(${VARIABLE})
  130. ENDMACRO(CHECK_LIBRARY_EXISTS_CONCAT)
  131. # Check for all needed libraries
  132. # use the cmake defined dl libs as dl is should not be used
  133. # on HPUX, but rather dld this avoids a warning
  134. SET(CURL_LIBS ${CURL_LIBS} ${CMAKE_DL_LIBS})
  135. #CHECK_LIBRARY_EXISTS_CONCAT("dl" dlopen HAVE_LIBDL)
  136. #CHECK_LIBRARY_EXISTS_CONCAT("ucb" gethostname HAVE_LIBUCB)
  137. CHECK_LIBRARY_EXISTS_CONCAT("socket" connect HAVE_LIBSOCKET)
  138. CHECK_LIBRARY_EXISTS("c" gethostbyname "" NOT_NEED_LIBNSL)
  139. # Yellowtab Zeta needs different libraries than BeOS 5.
  140. IF(BEOS)
  141. SET(NOT_NEED_LIBNSL 1)
  142. CHECK_LIBRARY_EXISTS_CONCAT("bind" gethostbyname HAVE_LIBBIND)
  143. CHECK_LIBRARY_EXISTS_CONCAT("bnetapi" closesocket HAVE_LIBBNETAPI)
  144. ENDIF(BEOS)
  145. CHECK_LIBRARY_EXISTS_CONCAT("network" recv HAVE_LIBNETWORK)
  146. IF(NOT NOT_NEED_LIBNSL)
  147. CHECK_LIBRARY_EXISTS_CONCAT("nsl" gethostbyname HAVE_LIBNSL)
  148. ENDIF(NOT NOT_NEED_LIBNSL)
  149. CHECK_LIBRARY_EXISTS_CONCAT("ws2_32" getch HAVE_LIBWS2_32)
  150. CHECK_LIBRARY_EXISTS_CONCAT("winmm" getch HAVE_LIBWINMM)
  151. IF(NOT CURL_SPECIAL_LIBZ)
  152. CHECK_LIBRARY_EXISTS_CONCAT("z" inflateEnd HAVE_LIBZ)
  153. ENDIF(NOT CURL_SPECIAL_LIBZ)
  154. # Include the local directories before any others so that we do not end up
  155. # including system curl's include directory first by mistake.
  156. INCLUDE_DIRECTORIES(${LIBCURL_SOURCE_DIR})
  157. INCLUDE_DIRECTORIES(${LIBCURL_BINARY_DIR})
  158. OPTION(CMAKE_USE_OPENSSL "Use OpenSSL code with curl." OFF)
  159. MARK_AS_ADVANCED(CMAKE_USE_OPENSSL)
  160. IF(CMAKE_USE_OPENSSL)
  161. SET(USE_SSLEAY TRUE)
  162. SET(USE_OPENSSL TRUE)
  163. FIND_PACKAGE(OpenSSL REQUIRED)
  164. INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR})
  165. SET(CURL_LIBS ${CURL_LIBS} ${OPENSSL_LIBRARIES})
  166. SET(CURL_CA_BUNDLE "" CACHE FILEPATH "Path to SSL CA Certificate Bundle")
  167. MARK_AS_ADVANCED(CURL_CA_BUNDLE)
  168. IF(CURL_CA_BUNDLE)
  169. ADD_DEFINITIONS(-DCURL_CA_BUNDLE="${CURL_CA_BUNDLE}")
  170. ENDIF(CURL_CA_BUNDLE)
  171. # for windows we want to install OPENSSL_LIBRARIES dlls
  172. # and also copy them into the build tree so that testing
  173. # can find them.
  174. IF(WIN32)
  175. FIND_FILE(CMAKE_EAY_DLL NAME libeay32.dll HINTS ${OPENSSL_INCLUDE_DIR}/..)
  176. FIND_FILE(CMAKE_SSL_DLL NAME ssleay32.dll HINTS ${OPENSSL_INCLUDE_DIR}/..)
  177. MARK_AS_ADVANCED(CMAKE_EAY_DLL CMAKE_SSL_DLL)
  178. IF(CMAKE_SSL_DLL AND CMAKE_EAY_DLL)
  179. SET(CMAKE_CURL_SSL_DLLS ${CMake_BIN_DIR}/${CMAKE_CFG_INTDIR}/libeay32.dll
  180. ${CMake_BIN_DIR}/${CMAKE_CFG_INTDIR}/ssleay32.dll)
  181. ADD_CUSTOM_COMMAND(OUTPUT
  182. ${CMake_BIN_DIR}/${CMAKE_CFG_INTDIR}/libeay32.dll
  183. DEPENDS ${CMAKE_EAY_DLL}
  184. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_EAY_DLL}
  185. ${CMake_BIN_DIR}/${CMAKE_CFG_INTDIR}/libeay32.dll)
  186. ADD_CUSTOM_COMMAND(OUTPUT
  187. ${CMake_BIN_DIR}/${CMAKE_CFG_INTDIR}/ssleay32.dll
  188. DEPENDS ${CMAKE_SSL_DLL}
  189. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SSL_DLL}
  190. ${CMake_BIN_DIR}/${CMAKE_CFG_INTDIR}/ssleay32.dll)
  191. INSTALL(PROGRAMS ${CMAKE_EAY_DLL} ${CMAKE_SSL_DLL} DESTINATION bin)
  192. ENDIF()
  193. ENDIF()
  194. ENDIF(CMAKE_USE_OPENSSL)
  195. # Check for idn
  196. CHECK_LIBRARY_EXISTS_CONCAT("idn" idna_to_ascii_lz HAVE_LIBIDN)
  197. # Check for symbol dlopen (same as HAVE_LIBDL)
  198. CHECK_LIBRARY_EXISTS("${CURL_LIBS}" dlopen "" HAVE_DLOPEN)
  199. # For other tests to use the same libraries
  200. SET(CMAKE_REQUIRED_LIBRARIES ${CURL_LIBS})
  201. IF(CURL_SPECIAL_LIBZ)
  202. SET(CURL_LIBS ${CURL_LIBS} "${CURL_SPECIAL_LIBZ}")
  203. INCLUDE_DIRECTORIES(${CURL_SPECIAL_LIBZ_INCLUDES})
  204. SET(HAVE_LIBZ 0)
  205. SET(HAVE_ZLIB_H 0)
  206. ENDIF(CURL_SPECIAL_LIBZ)
  207. # do we have process.h
  208. CHECK_INCLUDE_FILE("process.h" HAVE_PROCESS_H)
  209. # If we have features.h, then do the _BSD_SOURCE magic
  210. CHECK_INCLUDE_FILE("features.h" HAVE_FEATURES_H)
  211. IF(HAVE_FEATURES_H)
  212. SET_SOURCE_FILES_PROPERTIES(
  213. cookie.c
  214. easy.c
  215. formdata.c
  216. getenv.c
  217. hash.c
  218. http.c
  219. if2ip.c
  220. mprintf.c
  221. multi.c
  222. sendf.c
  223. telnet.c
  224. transfer.c
  225. url.c
  226. COMPILE_FLAGS -D_BSD_SOURCE)
  227. ENDIF(HAVE_FEATURES_H)
  228. # Check if header file exists and add it to the list.
  229. MACRO(CHECK_INCLUDE_FILE_CONCAT FILE VARIABLE)
  230. CHECK_INCLUDE_FILES("${CURL_INCLUDES};${FILE}" ${VARIABLE})
  231. IF(${VARIABLE})
  232. SET(CURL_INCLUDES ${CURL_INCLUDES} ${FILE})
  233. ENDIF(${VARIABLE})
  234. ENDMACRO(CHECK_INCLUDE_FILE_CONCAT)
  235. # Check for header files
  236. IF(UNIX)
  237. SET(HAVE_WINDOWS_H 0)
  238. SET(HAVE_WINSOCK_H 0)
  239. SET(HAVE_WS2TCPIP_H 0)
  240. SET(HAVE_WINSOCK2_H 0)
  241. ENDIF(UNIX)
  242. IF(NOT UNIX)
  243. CHECK_INCLUDE_FILE_CONCAT("ws2tcpip.h" HAVE_WS2TCPIP_H)
  244. CHECK_INCLUDE_FILE_CONCAT("winsock2.h" HAVE_WINSOCK2_H)
  245. ENDIF(NOT UNIX)
  246. CHECK_INCLUDE_FILE_CONCAT("stdio.h" HAVE_STDIO_H)
  247. IF(NOT UNIX)
  248. CHECK_INCLUDE_FILE_CONCAT("windows.h" HAVE_WINDOWS_H)
  249. CHECK_INCLUDE_FILE_CONCAT("winsock.h" HAVE_WINSOCK_H)
  250. ENDIF(NOT UNIX)
  251. CHECK_INCLUDE_FILE_CONCAT("stddef.h" HAVE_STDDEF_H)
  252. CHECK_INCLUDE_FILE_CONCAT("sys/types.h" HAVE_SYS_TYPES_H)
  253. CHECK_INCLUDE_FILE_CONCAT("inttypes.h" HAVE_INTTYPES_H)
  254. CHECK_INCLUDE_FILE_CONCAT("alloca.h" HAVE_ALLOCA_H)
  255. CHECK_INCLUDE_FILE_CONCAT("arpa/inet.h" HAVE_ARPA_INET_H)
  256. CHECK_INCLUDE_FILE_CONCAT("dlfcn.h" HAVE_DLFCN_H)
  257. CHECK_INCLUDE_FILE_CONCAT("fcntl.h" HAVE_FCNTL_H)
  258. CHECK_INCLUDE_FILE_CONCAT("malloc.h" HAVE_MALLOC_H)
  259. CHECK_INCLUDE_FILE_CONCAT("memory.h" HAVE_MEMORY_H)
  260. CHECK_INCLUDE_FILE_CONCAT("netdb.h" HAVE_NETDB_H)
  261. CHECK_INCLUDE_FILE_CONCAT("sys/poll.h" HAVE_SYS_POLL_H)
  262. CHECK_INCLUDE_FILE_CONCAT("assert.h" HAVE_ASSERT_H)
  263. CHECK_INCLUDE_FILE_CONCAT("limits.h" HAVE_LIMITS_H)
  264. IF(CMAKE_USE_OPENSSL)
  265. CHECK_INCLUDE_FILE_CONCAT("openssl/x509.h" HAVE_OPENSSL_X509_H)
  266. CHECK_INCLUDE_FILE_CONCAT("openssl/engine.h" HAVE_OPENSSL_ENGINE_H)
  267. CHECK_INCLUDE_FILE_CONCAT("openssl/rsa.h" HAVE_OPENSSL_RSA_H)
  268. CHECK_INCLUDE_FILE_CONCAT("openssl/crypto.h" HAVE_OPENSSL_CRYPTO_H)
  269. CHECK_INCLUDE_FILE_CONCAT("openssl/pem.h" HAVE_OPENSSL_PEM_H)
  270. CHECK_INCLUDE_FILE_CONCAT("openssl/ssl.h" HAVE_OPENSSL_SSL_H)
  271. CHECK_INCLUDE_FILE_CONCAT("openssl/err.h" HAVE_OPENSSL_ERR_H)
  272. CHECK_INCLUDE_FILE_CONCAT("openssl/rand.h" HAVE_OPENSSL_RAND_H)
  273. CHECK_INCLUDE_FILE_CONCAT("openssl/pkcs12.h" HAVE_OPENSSL_PKCS12_H)
  274. ENDIF(CMAKE_USE_OPENSSL)
  275. IF(NOT CURL_SPECIAL_LIBZ)
  276. CHECK_INCLUDE_FILE_CONCAT("zlib.h" HAVE_ZLIB_H)
  277. ENDIF(NOT CURL_SPECIAL_LIBZ)
  278. CHECK_INCLUDE_FILE_CONCAT("sys/socket.h" HAVE_SYS_SOCKET_H)
  279. CHECK_INCLUDE_FILE_CONCAT("netinet/in.h" HAVE_NETINET_IN_H)
  280. CHECK_INCLUDE_FILE_CONCAT("net/if.h" HAVE_NET_IF_H)
  281. CHECK_INCLUDE_FILE_CONCAT("netinet/if_ether.h"
  282. HAVE_NETINET_IF_ETHER_H)
  283. CHECK_INCLUDE_FILE_CONCAT("netinet/tcp.h"
  284. HAVE_NETINET_TCP_H)
  285. CHECK_INCLUDE_FILE_CONCAT("sys/select.h" HAVE_SYS_SELECT_H)
  286. CHECK_INCLUDE_FILE_CONCAT("utime.h" HAVE_UTIME_H)
  287. CHECK_INCLUDE_FILE_CONCAT("netinet/in.h" HAVE_NETINET_IN_H)
  288. CHECK_INCLUDE_FILE_CONCAT("pwd.h" HAVE_PWD_H)
  289. CHECK_INCLUDE_FILE_CONCAT("sgtty.h" HAVE_SGTTY_H)
  290. CHECK_INCLUDE_FILE_CONCAT("stdint.h" HAVE_STDINT_H)
  291. CHECK_INCLUDE_FILE_CONCAT("stdlib.h" HAVE_STDLIB_H)
  292. CHECK_INCLUDE_FILE_CONCAT("string.h" HAVE_STRING_H)
  293. CHECK_INCLUDE_FILE_CONCAT("strings.h" HAVE_STRINGS_H)
  294. CHECK_INCLUDE_FILE_CONCAT("sys/param.h" HAVE_SYS_PARAM_H)
  295. CHECK_INCLUDE_FILE_CONCAT("sys/stat.h" HAVE_SYS_STAT_H)
  296. CHECK_INCLUDE_FILE_CONCAT("sys/time.h" HAVE_SYS_TIME_H)
  297. CHECK_INCLUDE_FILE_CONCAT("sys/resource.h" HAVE_SYS_RESOURCE_H)
  298. CHECK_INCLUDE_FILE_CONCAT("termios.h" HAVE_TERMIOS_H)
  299. CHECK_INCLUDE_FILE_CONCAT("termio.h" HAVE_TERMIO_H)
  300. CHECK_INCLUDE_FILE_CONCAT("io.h" HAVE_IO_H)
  301. CHECK_INCLUDE_FILE_CONCAT("time.h" HAVE_TIME_H)
  302. CHECK_INCLUDE_FILE_CONCAT("unistd.h" HAVE_UNISTD_H)
  303. CHECK_INCLUDE_FILE_CONCAT("sys/utime.h" HAVE_SYS_UTIME_H)
  304. CHECK_INCLUDE_FILE_CONCAT("sockio.h" HAVE_SOCKIO_H)
  305. CHECK_INCLUDE_FILE_CONCAT("sys/sockio.h" HAVE_SYS_SOCKIO_H)
  306. CHECK_INCLUDE_FILE_CONCAT("x509.h" HAVE_X509_H)
  307. CHECK_INCLUDE_FILE_CONCAT("locale.h" HAVE_LOCALE_H)
  308. CHECK_INCLUDE_FILE_CONCAT("setjmp.h" HAVE_SETJMP_H)
  309. CHECK_INCLUDE_FILE_CONCAT("signal.h" HAVE_SIGNAL_H)
  310. CHECK_INCLUDE_FILE_CONCAT("sys/ioctl.h" HAVE_SYS_IOCTL_H)
  311. CHECK_INCLUDE_FILE_CONCAT("sys/utsname.h" HAVE_SYS_UTSNAME_H)
  312. CHECK_INCLUDE_FILE_CONCAT("idn-free.h" HAVE_IDN_FREE_H)
  313. CHECK_INCLUDE_FILE_CONCAT("idna.h" HAVE_IDNA_H)
  314. CHECK_INCLUDE_FILE_CONCAT("tld.h" HAVE_TLD_H)
  315. CHECK_INCLUDE_FILE_CONCAT("arpa/tftp.h" HAVE_ARPA_TFTP_H)
  316. CHECK_INCLUDE_FILE_CONCAT("errno.h" HAVE_ERRNO_H)
  317. CHECK_INCLUDE_FILE_CONCAT("libgen.h" HAVE_LIBGEN_H)
  318. CHECK_INCLUDE_FILE_CONCAT("sys/filio.h" HAVE_SYS_FILIO_H)
  319. CHECK_TYPE_SIZE(size_t SIZEOF_SIZE_T)
  320. CHECK_TYPE_SIZE(ssize_t SIZEOF_SSIZE_T)
  321. CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG)
  322. CHECK_TYPE_SIZE("long" SIZEOF_LONG)
  323. CHECK_TYPE_SIZE("__int64" SIZEOF___INT64)
  324. CHECK_TYPE_SIZE("time_t" SIZEOF_TIME_T)
  325. IF(HAVE_SIZEOF_LONG_LONG)
  326. SET(HAVE_LONGLONG 1)
  327. SET(HAVE_LL 1)
  328. ENDIF(HAVE_SIZEOF_LONG_LONG)
  329. FIND_FILE(RANDOM_FILE urandom /dev)
  330. MARK_AS_ADVANCED(RANDOM_FILE)
  331. #strtoll \
  332. #socket \
  333. #select \
  334. #strdup \
  335. #strstr \
  336. #strtok_r \
  337. #uname \
  338. #strcasecmp \
  339. #stricmp \
  340. #strcmpi \
  341. #gethostbyaddr \
  342. #gettimeofday \
  343. #inet_addr \
  344. #inet_ntoa \
  345. #inet_pton \
  346. #perror \
  347. #closesocket \
  348. #siginterrupt \
  349. #sigaction \
  350. #signal \
  351. #getpass_r \
  352. #getpwuid \
  353. #geteuid \
  354. #dlopen \
  355. #utime \
  356. #sigsetjmp \
  357. #basename \
  358. #setlocale \
  359. #ftruncate \
  360. #pipe \
  361. #poll \
  362. #getprotobyname \
  363. #getrlimit \
  364. #setrlimit \
  365. #fork
  366. # Check for some functions that are used
  367. CHECK_SYMBOL_EXISTS(basename "${CURL_INCLUDES}" HAVE_BASENAME)
  368. CHECK_SYMBOL_EXISTS(socket "${CURL_INCLUDES}" HAVE_SOCKET)
  369. CHECK_SYMBOL_EXISTS(poll "${CURL_INCLUDES}" HAVE_POLL)
  370. CHECK_SYMBOL_EXISTS(select "${CURL_INCLUDES}" HAVE_SELECT)
  371. CHECK_SYMBOL_EXISTS(strdup "${CURL_INCLUDES}" HAVE_STRDUP)
  372. CHECK_SYMBOL_EXISTS(strstr "${CURL_INCLUDES}" HAVE_STRSTR)
  373. CHECK_SYMBOL_EXISTS(strtok_r "${CURL_INCLUDES}" HAVE_STRTOK_R)
  374. CHECK_SYMBOL_EXISTS(strftime "${CURL_INCLUDES}" HAVE_STRFTIME)
  375. CHECK_SYMBOL_EXISTS(uname "${CURL_INCLUDES}" HAVE_UNAME)
  376. CHECK_SYMBOL_EXISTS(strcasecmp "${CURL_INCLUDES}" HAVE_STRCASECMP)
  377. CHECK_SYMBOL_EXISTS(stricmp "${CURL_INCLUDES}" HAVE_STRICMP)
  378. CHECK_SYMBOL_EXISTS(strcmpi "${CURL_INCLUDES}" HAVE_STRCMPI)
  379. CHECK_SYMBOL_EXISTS(strncmpi "${CURL_INCLUDES}" HAVE_STRNCMPI)
  380. CHECK_SYMBOL_EXISTS(basename "${CURL_INCLUDES}" HAVE_BASENAME)
  381. IF(NOT HAVE_STRNCMPI)
  382. SET(HAVE_STRCMPI)
  383. ENDIF(NOT HAVE_STRNCMPI)
  384. CHECK_SYMBOL_EXISTS(gethostbyaddr "${CURL_INCLUDES}" HAVE_GETHOSTBYADDR)
  385. CHECK_SYMBOL_EXISTS(gettimeofday "${CURL_INCLUDES}" HAVE_GETTIMEOFDAY)
  386. CHECK_SYMBOL_EXISTS(inet_addr "${CURL_INCLUDES}" HAVE_INET_ADDR)
  387. # windows only has this for vista, but will link with it and say
  388. # that it has it at link time! So, force it off
  389. IF(WIN32)
  390. SET(HAVE_INET_PTON 0 CACHE "" INTERNAL )
  391. ENDIF(WIN32)
  392. CHECK_SYMBOL_EXISTS(inet_pton "${CURL_INCLUDES}" HAVE_INET_PTON)
  393. CHECK_SYMBOL_EXISTS(inet_ntoa "${CURL_INCLUDES}" HAVE_INET_NTOA)
  394. CHECK_SYMBOL_EXISTS(inet_ntoa_r "${CURL_INCLUDES}" HAVE_INET_NTOA_R)
  395. CHECK_SYMBOL_EXISTS(tcsetattr "${CURL_INCLUDES}" HAVE_TCSETATTR)
  396. CHECK_SYMBOL_EXISTS(tcgetattr "${CURL_INCLUDES}" HAVE_TCGETATTR)
  397. CHECK_SYMBOL_EXISTS(perror "${CURL_INCLUDES}" HAVE_PERROR)
  398. CHECK_SYMBOL_EXISTS(closesocket "${CURL_INCLUDES}" HAVE_CLOSESOCKET)
  399. CHECK_SYMBOL_EXISTS(setvbuf "${CURL_INCLUDES}" HAVE_SETVBUF)
  400. CHECK_SYMBOL_EXISTS(sigsetjmp "${CURL_INCLUDES}" HAVE_SIGSETJMP)
  401. CHECK_SYMBOL_EXISTS(getpass_r "${CURL_INCLUDES}" HAVE_GETPASS_R)
  402. CHECK_SYMBOL_EXISTS(getpwuid "${CURL_INCLUDES}" HAVE_GETPWUID)
  403. CHECK_SYMBOL_EXISTS(geteuid "${CURL_INCLUDES}" HAVE_GETEUID)
  404. CHECK_SYMBOL_EXISTS(utime "${CURL_INCLUDES}" HAVE_UTIME)
  405. IF(CMAKE_USE_OPENSSL)
  406. CHECK_SYMBOL_EXISTS(RAND_status "${CURL_INCLUDES}" HAVE_RAND_STATUS)
  407. CHECK_SYMBOL_EXISTS(RAND_screen "${CURL_INCLUDES}" HAVE_RAND_SCREEN)
  408. CHECK_SYMBOL_EXISTS(RAND_egd "${CURL_INCLUDES}" HAVE_RAND_EGD)
  409. CHECK_SYMBOL_EXISTS(CRYPTO_cleanup_all_ex_data "${CURL_INCLUDES}"
  410. HAVE_CRYPTO_CLEANUP_ALL_EX_DATA)
  411. ENDIF(CMAKE_USE_OPENSSL)
  412. CHECK_SYMBOL_EXISTS(gmtime_r "${CURL_INCLUDES}" HAVE_GMTIME_R)
  413. CHECK_SYMBOL_EXISTS(localtime_r "${CURL_INCLUDES}" HAVE_LOCALTIME_R)
  414. CHECK_SYMBOL_EXISTS(gethostbyname "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME)
  415. CHECK_SYMBOL_EXISTS(gethostbyname_r "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME_R)
  416. CHECK_SYMBOL_EXISTS(gethostbyaddr_r "${CURL_INCLUDES}" HAVE_GETHOSTBYADDR_R)
  417. CHECK_SYMBOL_EXISTS(signal "${CURL_INCLUDES}" HAVE_SIGNAL_FUNC)
  418. CHECK_SYMBOL_EXISTS(SIGALRM "${CURL_INCLUDES}" HAVE_SIGNAL_MACRO)
  419. IF(HAVE_SIGNAL_FUNC AND HAVE_SIGNAL_MACRO)
  420. SET(HAVE_SIGNAL 1)
  421. ENDIF(HAVE_SIGNAL_FUNC AND HAVE_SIGNAL_MACRO)
  422. CHECK_SYMBOL_EXISTS(uname "${CURL_INCLUDES}" HAVE_UNAME)
  423. CHECK_SYMBOL_EXISTS(strtoll "${CURL_INCLUDES}" HAVE_STRTOLL)
  424. CHECK_SYMBOL_EXISTS(_strtoi64 "${CURL_INCLUDES}" HAVE__STRTOI64)
  425. CHECK_SYMBOL_EXISTS(strerror_r "${CURL_INCLUDES}" HAVE_STRERROR_R)
  426. CHECK_SYMBOL_EXISTS(siginterrupt "${CURL_INCLUDES}" HAVE_SIGINTERRUPT)
  427. CHECK_SYMBOL_EXISTS(perror "${CURL_INCLUDES}" HAVE_PERROR)
  428. CHECK_SYMBOL_EXISTS(fork "${CURL_INCLUDES}" HAVE_FORK)
  429. CHECK_SYMBOL_EXISTS(pipe "${CURL_INCLUDES}" HAVE_PIPE)
  430. CHECK_SYMBOL_EXISTS(ftruncate "${CURL_INCLUDES}" HAVE_FTRUNCATE)
  431. CHECK_SYMBOL_EXISTS(getprotobyname "${CURL_INCLUDES}" HAVE_GETPROTOBYNAME)
  432. CHECK_SYMBOL_EXISTS(getrlimit "${CURL_INCLUDES}" HAVE_GETRLIMIT)
  433. CHECK_SYMBOL_EXISTS(idn_free "${CURL_INCLUDES}" HAVE_IDN_FREE)
  434. CHECK_SYMBOL_EXISTS(idna_strerror "${CURL_INCLUDES}" HAVE_IDNA_STRERROR)
  435. CHECK_SYMBOL_EXISTS(tld_strerror "${CURL_INCLUDES}" HAVE_TLD_STRERROR)
  436. CHECK_SYMBOL_EXISTS(setlocale "${CURL_INCLUDES}" HAVE_SETLOCALE)
  437. CHECK_SYMBOL_EXISTS(setrlimit "${CURL_INCLUDES}" HAVE_SETRLIMIT)
  438. # only build compat strtok if we need to
  439. IF (NOT HAVE_STRTOK_R)
  440. SET(libCurl_SRCS ${libCurl_SRCS}
  441. strtok.c
  442. )
  443. ENDIF (NOT HAVE_STRTOK_R)
  444. # only build compat strtoofft if we need to
  445. IF(NOT HAVE_STRTOLL AND NOT HAVE__STRTOI64)
  446. SET(libCurl_SRCS ${libCurl_SRCS}
  447. strtoofft.c
  448. )
  449. ENDIF(NOT HAVE_STRTOLL AND NOT HAVE__STRTOI64)
  450. # sigaction and sigsetjmp are special. Use special mechanism for
  451. # detecting those, but only if previous attempt failed.
  452. IF(HAVE_SIGNAL_H)
  453. CHECK_SYMBOL_EXISTS(sigaction "signal.h" HAVE_SIGACTION)
  454. ENDIF(HAVE_SIGNAL_H)
  455. IF(NOT HAVE_SIGSETJMP)
  456. IF(HAVE_SETJMP_H)
  457. CHECK_SYMBOL_EXISTS(sigsetjmp "setjmp.h" HAVE_MACRO_SIGSETJMP)
  458. IF(HAVE_MACRO_SIGSETJMP)
  459. SET(HAVE_SIGSETJMP 1)
  460. ENDIF(HAVE_MACRO_SIGSETJMP)
  461. ENDIF(HAVE_SETJMP_H)
  462. ENDIF(NOT HAVE_SIGSETJMP)
  463. # For other curl specific tests, use this macro.
  464. MACRO(CURL_INTERNAL_TEST CURL_TEST)
  465. IF(NOT DEFINED ${CURL_TEST})
  466. SET(MACRO_CHECK_FUNCTION_DEFINITIONS
  467. "-D${CURL_TEST} ${CMAKE_REQUIRED_FLAGS}")
  468. IF(CMAKE_REQUIRED_LIBRARIES)
  469. SET(CURL_TEST_ADD_LIBRARIES
  470. "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
  471. ENDIF(CMAKE_REQUIRED_LIBRARIES)
  472. MESSAGE(STATUS "Performing Curl Test ${CURL_TEST}")
  473. TRY_COMPILE(${CURL_TEST}
  474. ${CMAKE_BINARY_DIR}
  475. ${LIBCURL_SOURCE_DIR}/CMake/CurlTests.c
  476. CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
  477. "${CURL_TEST_ADD_LIBRARIES}"
  478. OUTPUT_VARIABLE OUTPUT)
  479. IF(${CURL_TEST})
  480. SET(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
  481. MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Success")
  482. FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
  483. "Performing Curl Test ${CURL_TEST} passed with the following output:\n"
  484. "${OUTPUT}\n")
  485. ELSE(${CURL_TEST})
  486. MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
  487. SET(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
  488. FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
  489. "Performing Curl Test ${CURL_TEST} failed with the following output:\n"
  490. "${OUTPUT}\n")
  491. ENDIF(${CURL_TEST})
  492. ENDIF()
  493. ENDMACRO(CURL_INTERNAL_TEST)
  494. # Do curl specific tests
  495. #OPTION(CURL_HAVE_DISABLED_NONBLOCKING "Disable non-blocking socket detection" OFF)
  496. SET(CURL_NONBLOCKING_TESTS)
  497. IF(NOT CURL_HAVE_DISABLED_NONBLOCKING)
  498. SET(CURL_NONBLOCKING_TESTS
  499. HAVE_FIONBIO
  500. HAVE_IOCTLSOCKET
  501. HAVE_IOCTLSOCKET_CASE
  502. HAVE_O_NONBLOCK
  503. HAVE_SO_NONBLOCK
  504. )
  505. ENDIF(NOT CURL_HAVE_DISABLED_NONBLOCKING)
  506. FOREACH(CURL_TEST
  507. ${CURL_NONBLOCKING_TESTS}
  508. TIME_WITH_SYS_TIME
  509. HAVE_O_NONBLOCKHAVE_GETHOSTBYADDR_R_5
  510. HAVE_GETHOSTBYADDR_R_7
  511. HAVE_GETHOSTBYADDR_R_8
  512. HAVE_GETHOSTBYADDR_R_5_REENTRANT
  513. HAVE_GETHOSTBYADDR_R_7_REENTRANT
  514. HAVE_GETHOSTBYADDR_R_8_REENTRANT
  515. HAVE_GETHOSTBYNAME_R_3
  516. HAVE_GETHOSTBYNAME_R_5
  517. HAVE_GETHOSTBYNAME_R_6
  518. HAVE_GETHOSTBYNAME_R_3_REENTRANT
  519. HAVE_GETHOSTBYNAME_R_5_REENTRANT
  520. HAVE_GETHOSTBYNAME_R_6_REENTRANT
  521. HAVE_SOCKLEN_T
  522. HAVE_IN_ADDR_T
  523. STDC_HEADERS
  524. RETSIGTYPE_TEST
  525. HAVE_INET_NTOA_R_DECL
  526. HAVE_INET_NTOA_R_DECL_REENTRANT
  527. HAVE_GETADDRINFO
  528. HAVE_FILE_OFFSET_BITS
  529. )
  530. CURL_INTERNAL_TEST(${CURL_TEST})
  531. ENDFOREACH(CURL_TEST)
  532. IF(HAVE_FILE_OFFSET_BITS)
  533. SET(_FILE_OFFSET_BITS 64)
  534. ENDIF(HAVE_FILE_OFFSET_BITS)
  535. # Check for reentrant
  536. FOREACH(CURL_TEST
  537. HAVE_GETHOSTBYADDR_R_5
  538. HAVE_GETHOSTBYADDR_R_7
  539. HAVE_GETHOSTBYADDR_R_8
  540. HAVE_GETHOSTBYNAME_R_3
  541. HAVE_GETHOSTBYNAME_R_5
  542. HAVE_GETHOSTBYNAME_R_6
  543. HAVE_INET_NTOA_R_DECL_REENTRANT)
  544. IF(NOT ${CURL_TEST})
  545. IF(${CURL_TEST}_REENTRANT)
  546. SET(NEED_REENTRANT 1)
  547. ENDIF(${CURL_TEST}_REENTRANT)
  548. ENDIF(NOT ${CURL_TEST})
  549. ENDFOREACH(CURL_TEST)
  550. IF(NEED_REENTRANT)
  551. FOREACH(CURL_TEST
  552. HAVE_GETHOSTBYADDR_R_5
  553. HAVE_GETHOSTBYADDR_R_7
  554. HAVE_GETHOSTBYADDR_R_8
  555. HAVE_GETHOSTBYNAME_R_3
  556. HAVE_GETHOSTBYNAME_R_5
  557. HAVE_GETHOSTBYNAME_R_6)
  558. SET(${CURL_TEST} 0)
  559. IF(${CURL_TEST}_REENTRANT)
  560. SET(${CURL_TEST} 1)
  561. ENDIF(${CURL_TEST}_REENTRANT)
  562. ENDFOREACH(CURL_TEST)
  563. ENDIF(NEED_REENTRANT)
  564. IF(HAVE_INET_NTOA_R_DECL_REENTRANT)
  565. SET(HAVE_INET_NTOA_R_DECL 1)
  566. SET(NEED_REENTRANT 1)
  567. ENDIF(HAVE_INET_NTOA_R_DECL_REENTRANT)
  568. # Some other minor tests
  569. IF(NOT HAVE_SOCKLEN_T)
  570. SET(socklen_t "int")
  571. ENDIF(NOT HAVE_SOCKLEN_T)
  572. IF(NOT HAVE_IN_ADDR_T)
  573. SET(in_addr_t "unsigned long")
  574. ENDIF(NOT HAVE_IN_ADDR_T)
  575. # Fix libz / zlib.h
  576. IF(NOT CURL_SPECIAL_LIBZ)
  577. IF(NOT HAVE_LIBZ)
  578. SET(HAVE_ZLIB_H 0)
  579. ENDIF(NOT HAVE_LIBZ)
  580. IF(NOT HAVE_ZLIB_H)
  581. SET(HAVE_LIBZ 0)
  582. ENDIF(NOT HAVE_ZLIB_H)
  583. ENDIF(NOT CURL_SPECIAL_LIBZ)
  584. IF(_FILE_OFFSET_BITS)
  585. SET(_FILE_OFFSET_BITS 64)
  586. ENDIF(_FILE_OFFSET_BITS)
  587. SET(CMAKE_REQUIRED_FLAGS "-D_FILE_OFFSET_BITS=64")
  588. SET(CMAKE_EXTRA_INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/curl/curl.h")
  589. CHECK_TYPE_SIZE("curl_off_t" SIZEOF_CURL_OFF_T)
  590. SET(CMAKE_EXTRA_INCLUDE_FILES)
  591. SET(CMAKE_REQUIRED_FLAGS)
  592. # Check for nonblocking
  593. SET(HAVE_DISABLED_NONBLOCKING 1)
  594. IF(HAVE_FIONBIO OR
  595. HAVE_IOCTLSOCKET OR
  596. HAVE_IOCTLSOCKET_CASE OR
  597. HAVE_O_NONBLOCK)
  598. SET(HAVE_DISABLED_NONBLOCKING)
  599. ENDIF(HAVE_FIONBIO OR
  600. HAVE_IOCTLSOCKET OR
  601. HAVE_IOCTLSOCKET_CASE OR
  602. HAVE_O_NONBLOCK)
  603. IF(RETSIGTYPE_TEST)
  604. SET(RETSIGTYPE void)
  605. ELSE(RETSIGTYPE_TEST)
  606. SET(RETSIGTYPE int)
  607. ENDIF(RETSIGTYPE_TEST)
  608. IF(CMAKE_COMPILER_IS_GNUCC AND APPLE)
  609. INCLUDE(CheckCCompilerFlag)
  610. CHECK_C_COMPILER_FLAG(-Wno-long-double HAVE_C_FLAG_Wno_long_double)
  611. IF(HAVE_C_FLAG_Wno_long_double)
  612. # The Mac version of GCC warns about use of long double. Disable it.
  613. GET_SOURCE_FILE_PROPERTY(MPRINTF_COMPILE_FLAGS mprintf.c COMPILE_FLAGS)
  614. IF(MPRINTF_COMPILE_FLAGS)
  615. SET(MPRINTF_COMPILE_FLAGS "${MPRINTF_COMPILE_FLAGS} -Wno-long-double")
  616. ELSE(MPRINTF_COMPILE_FLAGS)
  617. SET(MPRINTF_COMPILE_FLAGS "-Wno-long-double")
  618. ENDIF(MPRINTF_COMPILE_FLAGS)
  619. SET_SOURCE_FILES_PROPERTIES(mprintf.c PROPERTIES
  620. COMPILE_FLAGS ${MPRINTF_COMPILE_FLAGS})
  621. ENDIF(HAVE_C_FLAG_Wno_long_double)
  622. ENDIF(CMAKE_COMPILER_IS_GNUCC AND APPLE)
  623. INCLUDE(CMake/OtherTests.cmake)
  624. # The rest of the build
  625. OPTION(CMAKE_BUILD_CURL_SHARED "Should curl be built shared" TRUE)
  626. IF(CMAKE_BUILD_CURL_SHARED)
  627. SET(LIBRARY_TYPE SHARED)
  628. ADD_DEFINITIONS(-DHAVE_CONFIG_H)
  629. ELSE(CMAKE_BUILD_CURL_SHARED)
  630. ADD_DEFINITIONS(-DHAVE_CONFIG_H
  631. -DCURL_STATICLIB)
  632. ENDIF(CMAKE_BUILD_CURL_SHARED)
  633. SET(CURL_STATICLIB)
  634. # Support CheckTypeSize module from CMake 2.8.0 and lower.
  635. FOREACH(var
  636. SIZEOF_CURL_OFF_T
  637. SIZEOF_LONG
  638. SIZEOF_LONG_LONG
  639. SIZEOF___INT64
  640. SIZEOF_SIZE_T
  641. SIZEOF_SSIZE_T
  642. SIZEOF_TIME_T
  643. )
  644. IF(NOT ${var}_CODE)
  645. MESSAGE("creating ${var}_CODE")
  646. IF(${var})
  647. SET(${var}_CODE "#define ${var} ${${var}}")
  648. ELSE()
  649. SET(${var}_CODE "/* #undef ${var} */")
  650. ENDIF()
  651. ENDIF()
  652. ENDFOREACH()
  653. CONFIGURE_FILE(${LIBCURL_SOURCE_DIR}/config.h.in
  654. ${LIBCURL_BINARY_DIR}/config.h)
  655. ADD_LIBRARY(cmcurl ${LIBRARY_TYPE} ${libCurl_SRCS} ${CMAKE_CURL_SSL_DLLS})
  656. TARGET_LINK_LIBRARIES(cmcurl ${CURL_LIBS})
  657. IF(CMAKE_BUILD_CURL_SHARED)
  658. SET_TARGET_PROPERTIES(cmcurl PROPERTIES DEFINE_SYMBOL BUILDING_LIBCURL
  659. RUNTIME_OUTPUT_DIRECTORY ${CMake_BIN_DIR})
  660. INSTALL(TARGETS cmcurl RUNTIME DESTINATION bin)
  661. ENDIF(CMAKE_BUILD_CURL_SHARED)
  662. OPTION(CURL_TESTING "Do libCurl testing" OFF)
  663. IF(CURL_TESTING)
  664. SUBDIRS(Testing)
  665. ENDIF(CURL_TESTING)
  666. ADD_EXECUTABLE(LIBCURL Testing/curltest.c)
  667. TARGET_LINK_LIBRARIES(LIBCURL cmcurl ${CMAKE_DL_LIBS})
  668. IF(CMAKE_CURL_TEST_URL)
  669. ADD_TEST(curl LIBCURL ${CMAKE_CURL_TEST_URL})
  670. ENDIF(CMAKE_CURL_TEST_URL)
  671. INSTALL(FILES COPYING DESTINATION ${CMAKE_DOC_DIR}/cmcurl)