CMakeLists.txt 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. CMAKE_MINIMUM_REQUIRED(VERSION 1.5)
  2. PROJECT(LIBCURL C)
  3. SET(PACKAGE "curl")
  4. SET(VERSION "7.10.2")
  5. SET(PACKAGE_TARNAME " ")
  6. SET(OPERATING_SYSTEM ${CMAKE_SYSTEM_NAME})
  7. SET(CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
  8. SET(CMAKE_REQUIRED_FLAGS ${CMAKE_ANSI_CFLAGS})
  9. INCLUDE (${CMAKE_ROOT}/Modules/CheckLibraryExists.cmake)
  10. INCLUDE (${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake)
  11. INCLUDE (${CMAKE_ROOT}/Modules/CheckTypeSize.cmake)
  12. INCLUDE (${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake)
  13. INCLUDE (${CMAKE_ROOT}/Modules/CheckIncludeFiles.cmake)
  14. SET(libCurl_SRCS
  15. file.c
  16. timeval.c
  17. base64.c
  18. hostip.c
  19. progress.c
  20. formdata.c
  21. cookie.c
  22. http.c
  23. sendf.c
  24. ftp.c
  25. url.c
  26. dict.c
  27. if2ip.c
  28. speedcheck.c
  29. getdate.c
  30. ldap.c
  31. ssluse.c
  32. version.c
  33. getenv.c
  34. escape.c
  35. mprintf.c
  36. telnet.c
  37. getpass.c
  38. netrc.c
  39. getinfo.c
  40. transfer.c
  41. strequal.c
  42. easy.c
  43. security.c
  44. krb4.c
  45. memdebug.c
  46. http_chunks.c
  47. strtok.c
  48. connect.c
  49. llist.c
  50. hash.c
  51. multi.c
  52. content_encoding.c
  53. )
  54. IF(WIN32)
  55. INCLUDE(${LIBCURL_SOURCE_DIR}/Platforms/WindowsCache.cmake)
  56. ENDIF(WIN32)
  57. SET(CURL_LIBS "")
  58. CHECK_LIBRARY_EXISTS("nsl;${CURL_LIBS}" gethostname "" HAVE_LIBNSL)
  59. IF(HAVE_LIBNSL)
  60. SET(CURL_LIBS ${CURL_LIBS} nsl)
  61. ENDIF(HAVE_LIBNSL)
  62. CHECK_LIBRARY_EXISTS("dl;${CURL_LIBS}" dlopen "" HAVE_LIBDL)
  63. IF(HAVE_LIBDL)
  64. SET(HAVE_DLOPEN 1)
  65. SET(CURL_LIBS ${CURL_LIBS} dl)
  66. ENDIF(HAVE_LIBDL)
  67. CHECK_LIBRARY_EXISTS("ucb;${CURL_LIBS}" gethostname "" HAVE_LIBUCB)
  68. IF(HAVE_LIBUCB)
  69. SET(CURL_LIBS ${CURL_LIBS} ucb)
  70. ENDIF(HAVE_LIBUCB)
  71. CHECK_LIBRARY_EXISTS("socket;${CURL_LIBS}" connect "" HAVE_LIBSOCKET)
  72. IF(HAVE_LIBSOCKET)
  73. SET(CURL_LIBS ${CURL_LIBS} socket)
  74. ENDIF(HAVE_LIBSOCKET)
  75. CHECK_LIBRARY_EXISTS("ws2_32;${CURL_LIBS}" printf "" HAVE_LIBWS2_32)
  76. IF(HAVE_LIBWS2_32)
  77. SET(CURL_LIBS ${CURL_LIBS} ws2_32)
  78. ENDIF(HAVE_LIBWS2_32)
  79. CHECK_LIBRARY_EXISTS("winmm;${CURL_LIBS}" printf "" HAVE_LIBWINMM)
  80. IF(HAVE_LIBWINMM)
  81. SET(CURL_LIBS ${CURL_LIBS} winmm)
  82. ENDIF(HAVE_LIBWINMM)
  83. CHECK_LIBRARY_EXISTS("z;${CURL_LIBS}" inflateEnd "" HAVE_LIBZ)
  84. IF(HAVE_LIBZ)
  85. SET(CURL_LIBS ${CURL_LIBS} z)
  86. ENDIF(HAVE_LIBZ)
  87. SET(CMAKE_REQUIRED_LIBRARIES ${CURL_LIBS})
  88. CHECK_INCLUDE_FILE("sys/types.h" HAVE_SYS_TYPES_H)
  89. CHECK_INCLUDE_FILE("inttypes.h" HAVE_INTTYPES_H)
  90. CHECK_INCLUDE_FILE("alloca.h" HAVE_ALLOCA_H)
  91. CHECK_INCLUDE_FILE("arpa/inet.h" HAVE_ARPA_INET_H)
  92. CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLFCN_H)
  93. CHECK_INCLUDE_FILE("fcntl.h" HAVE_FCNTL_H)
  94. CHECK_INCLUDE_FILE("malloc.h" HAVE_MALLOC_H)
  95. CHECK_INCLUDE_FILE("memory.h" HAVE_MEMORY_H)
  96. CHECK_INCLUDE_FILE("netdb.h" HAVE_NETDB_H)
  97. CHECK_INCLUDE_FILE("zlib.h" HAVE_ZLIB_H)
  98. CHECK_INCLUDE_FILE("sys/poll.h" HAVE_SYS_POLL_H)
  99. CHECK_INCLUDE_FILE("netinet/in.h" HAVE_NETINET_IN_H)
  100. CHECK_INCLUDE_FILE("sys/socket.h" HAVE_SYS_SOCKET_H)
  101. IF(HAVE_SYS_TYPES_H)
  102. SET(TEST_NETWORK_INCLUDES ${TEST_NETWORK_INCLUDES} "sys/types.h")
  103. ENDIF(HAVE_SYS_TYPES_H)
  104. IF(HAVE_SYS_SOCKET_H)
  105. SET(TEST_NETWORK_INCLUDES ${TEST_NETWORK_INCLUDES} "sys/socket.h")
  106. ENDIF(HAVE_SYS_SOCKET_H)
  107. CHECK_INCLUDE_FILES("${TEST_NETWORK_INCLUDES};net/if.h" HAVE_NET_IF_H)
  108. IF(HAVE_NET_IF_H)
  109. SET(TEST_NETWORK_INCLUDES ${TEST_NETWORK_INCLUDES} "net/if.h")
  110. ENDIF(HAVE_NET_IF_H)
  111. IF(HAVE_NETINET_IN_H)
  112. SET(TEST_NETWORK_INCLUDES ${TEST_NETWORK_INCLUDES} "netinet/in.h")
  113. ENDIF(HAVE_NETINET_IN_H)
  114. CHECK_INCLUDE_FILES("${TEST_NETWORK_INCLUDES};netinet/if_ether.h" HAVE_NETINET_IF_ETHER_H)
  115. CHECK_INCLUDE_FILE("netinet/in.h" HAVE_NETINET_IN_H)
  116. CHECK_INCLUDE_FILE("pwd.h" HAVE_PWD_H)
  117. CHECK_INCLUDE_FILE("sgtty.h" HAVE_SGTTY_H)
  118. CHECK_INCLUDE_FILE("stdint.h" HAVE_STDINT_H)
  119. CHECK_INCLUDE_FILE("stdlib.h" HAVE_STDLIB_H)
  120. CHECK_INCLUDE_FILE("string.h" HAVE_STRING_H)
  121. CHECK_INCLUDE_FILE("strings.h" HAVE_STRINGS_H)
  122. CHECK_INCLUDE_FILE("sys/param.h" HAVE_SYS_PARAM_H)
  123. CHECK_INCLUDE_FILE("sys/select.h" HAVE_SYS_SELECT_H)
  124. CHECK_INCLUDE_FILE("sys/stat.h" HAVE_SYS_STAT_H)
  125. CHECK_INCLUDE_FILE("sys/time.h" HAVE_SYS_TIME_H)
  126. CHECK_INCLUDE_FILE("termios.h" HAVE_TERMIOS_H)
  127. CHECK_INCLUDE_FILE("termio.h" HAVE_TERMIO_H)
  128. CHECK_INCLUDE_FILE("io.h" HAVE_IO_H)
  129. CHECK_INCLUDE_FILE("time.h" HAVE_TIME_H)
  130. CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
  131. CHECK_INCLUDE_FILE("utime.h" HAVE_UTIME_H)
  132. CHECK_INCLUDE_FILE("sys/utime.h" HAVE_SYS_UTIME_H)
  133. CHECK_INCLUDE_FILE("winsock.h" HAVE_WINSOCK_H)
  134. CHECK_INCLUDE_FILE("sockio.h" HAVE_SOCKIO_H)
  135. CHECK_INCLUDE_FILE("sys/sockio.h" HAVE_SYS_SOCKIO_H)
  136. CHECK_INCLUDE_FILE("x509.h" HAVE_X509_H)
  137. CHECK_INCLUDE_FILE("setjmp.h" HAVE_SETJMP_H)
  138. CHECK_TYPE_SIZE(ssize_t SIZEOF_SSIZE_T)
  139. CHECK_TYPE_SIZE("long double" SIZEOF_LONG_DOUBLE)
  140. IF(NOT HAVE_SIZEOF_SSIZE_T)
  141. SET(ssize_t int)
  142. ENDIF(NOT HAVE_SIZEOF_SSIZE_T)
  143. FIND_FILE(RANDOM_FILE urandom /dev)
  144. CHECK_FUNCTION_EXISTS(_doprnt HAVE_DOPRNT)
  145. CHECK_FUNCTION_EXISTS(vprintf HAVE_VPRINTF)
  146. CHECK_FUNCTION_EXISTS(socket HAVE_SOCKET)
  147. CHECK_FUNCTION_EXISTS(poll HAVE_POLL)
  148. CHECK_FUNCTION_EXISTS(select HAVE_SELECT)
  149. CHECK_FUNCTION_EXISTS(strdup HAVE_STRDUP)
  150. CHECK_FUNCTION_EXISTS(strstr HAVE_STRSTR)
  151. CHECK_FUNCTION_EXISTS(strtok_r HAVE_STRTOK_R)
  152. CHECK_FUNCTION_EXISTS(strftime HAVE_STRFTIME)
  153. CHECK_FUNCTION_EXISTS(uname HAVE_UNAME)
  154. CHECK_FUNCTION_EXISTS(strcasecmp HAVE_STRCASECMP)
  155. CHECK_FUNCTION_EXISTS(stricmp HAVE_STRICMP)
  156. CHECK_FUNCTION_EXISTS(strcmpi HAVE_STRCMPI)
  157. CHECK_FUNCTION_EXISTS(gethostname HAVE_GETHOSTNAME)
  158. CHECK_FUNCTION_EXISTS(gethostbyaddr HAVE_GETHOSTBYADDR)
  159. CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
  160. CHECK_FUNCTION_EXISTS(inet_addr HAVE_INET_ADDR)
  161. CHECK_FUNCTION_EXISTS(inet_ntoa HAVE_INET_NTOA)
  162. CHECK_FUNCTION_EXISTS(inet_ntoa_r HAVE_INET_NTOA_R)
  163. CHECK_FUNCTION_EXISTS(tcsetattr HAVE_TCSETATTR)
  164. CHECK_FUNCTION_EXISTS(tcgetattr HAVE_TCGETATTR)
  165. CHECK_FUNCTION_EXISTS(perror HAVE_PERROR)
  166. CHECK_FUNCTION_EXISTS(closesocket HAVE_CLOSESOCKET)
  167. CHECK_FUNCTION_EXISTS(setvbuf HAVE_SETVBUF)
  168. CHECK_FUNCTION_EXISTS(sigaction HAVE_SIGACTION)
  169. CHECK_FUNCTION_EXISTS(signal HAVE_SIGNAL)
  170. CHECK_FUNCTION_EXISTS(sigsetjmp HAVE_SIGSETJMP)
  171. CHECK_FUNCTION_EXISTS(__sigsetjmp HAVE___SIGSETJMP)
  172. IF(HAVE___SIGSETJMP)
  173. SET(HAVE_SIGSETJMP 1)
  174. ENDIF(HAVE___SIGSETJMP)
  175. CHECK_FUNCTION_EXISTS(getpass_r HAVE_GETPASS_R)
  176. CHECK_FUNCTION_EXISTS(strlcat HAVE_STRLCAT)
  177. CHECK_FUNCTION_EXISTS(getpwuid HAVE_GETPWUID)
  178. CHECK_FUNCTION_EXISTS(geteuid HAVE_GETEUID)
  179. CHECK_FUNCTION_EXISTS(utime HAVE_UTIME)
  180. CHECK_FUNCTION_EXISTS(RAND_status HAVE_RAND_STATUS)
  181. CHECK_FUNCTION_EXISTS(RAND_screen HAVE_RAND_SCREEN)
  182. CHECK_FUNCTION_EXISTS(RAND_egd HAVE_RAND_EGD)
  183. CHECK_FUNCTION_EXISTS(gethostbyname HAVE_GETHOSTBYNAME_R)
  184. CHECK_FUNCTION_EXISTS(gethostbyaddr HAVE_GETHOSTBYADDR_R)
  185. CHECK_FUNCTION_EXISTS(gmtime HAVE_GMTIME_R)
  186. CHECK_FUNCTION_EXISTS(localtime HAVE_LOCALTIME_R)
  187. MACRO(CURL_INTERNAL_TEST CURL_TEST)
  188. IF("${CURL_TEST}" MATCHES "^${CURL_TEST}$")
  189. SET(MACRO_CHECK_FUNCTION_DEFINITIONS
  190. "-D${CURL_TEST} ${CMAKE_REQUIRED_FLAGS}")
  191. IF(CMAKE_REQUIRED_LIBRARIES)
  192. SET(CURL_TEST_ADD_LIBRARIES
  193. "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
  194. ENDIF(CMAKE_REQUIRED_LIBRARIES)
  195. MESSAGE(STATUS "Performing Curl Test ${CURL_TEST}")
  196. TRY_COMPILE(${CURL_TEST}
  197. ${CMAKE_BINARY_DIR}
  198. ${LIBCURL_SOURCE_DIR}/CMake/CurlTests.c
  199. CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
  200. "${CURL_TEST_ADD_LIBRARIES}"
  201. OUTPUT_VARIABLE OUTPUT)
  202. IF(${CURL_TEST})
  203. SET(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
  204. MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Success")
  205. ELSE(${CURL_TEST})
  206. MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
  207. SET(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
  208. WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeError.log
  209. "Performing Curl Test ${CURL_TEST} failed with the following output:\n"
  210. "${OUTPUT}\n" APPEND)
  211. ENDIF(${CURL_TEST})
  212. ENDIF("${CURL_TEST}" MATCHES "^${CURL_TEST}$")
  213. ENDMACRO(CURL_INTERNAL_TEST)
  214. FOREACH(CURL_TEST
  215. TIME_WITH_SYS_TIME
  216. HAVE_O_NONBLOCK
  217. HAVE_GETHOSTBYADDR_R_5
  218. HAVE_GETHOSTBYADDR_R_7
  219. HAVE_GETHOSTBYADDR_R_8
  220. HAVE_GETHOSTBYADDR_R_5_REENTRANT
  221. HAVE_GETHOSTBYADDR_R_7_REENTRANT
  222. HAVE_GETHOSTBYADDR_R_8_REENTRANT
  223. HAVE_GETHOSTBYNAME_R_3
  224. HAVE_GETHOSTBYNAME_R_5
  225. HAVE_GETHOSTBYNAME_R_6
  226. HAVE_GETHOSTBYNAME_R_3_REENTRANT
  227. HAVE_GETHOSTBYNAME_R_5_REENTRANT
  228. HAVE_GETHOSTBYNAME_R_6_REENTRANT
  229. HAVE_SOCKLEN_T
  230. HAVE_IN_ADDR_T
  231. STDC_HEADERS
  232. RETSIGTYPE_TEST
  233. HAVE_INET_NTOA_R_DECL
  234. HAVE_INET_NTOA_R_DECL_REENTRANT
  235. )
  236. CURL_INTERNAL_TEST(${CURL_TEST})
  237. ENDFOREACH(CURL_TEST)
  238. FOREACH(CURL_TEST
  239. HAVE_GETHOSTBYADDR_R_5
  240. HAVE_GETHOSTBYADDR_R_7
  241. HAVE_GETHOSTBYADDR_R_8
  242. HAVE_GETHOSTBYNAME_R_3
  243. HAVE_GETHOSTBYNAME_R_5
  244. HAVE_GETHOSTBYNAME_R_6
  245. HAVE_INET_NTOA_R_DECL_REENTRANT)
  246. IF(NOT ${CURL_TEST})
  247. IF(${CURL_TEST}_REENTRANT)
  248. SET(NEED_REENTRANT 1)
  249. ENDIF(${CURL_TEST}_REENTRANT)
  250. ENDIF(NOT ${CURL_TEST})
  251. ENDFOREACH(CURL_TEST)
  252. IF(NEED_REENTRANT)
  253. FOREACH(CURL_TEST
  254. HAVE_GETHOSTBYADDR_R_5
  255. HAVE_GETHOSTBYADDR_R_7
  256. HAVE_GETHOSTBYADDR_R_8
  257. HAVE_GETHOSTBYNAME_R_3
  258. HAVE_GETHOSTBYNAME_R_5
  259. HAVE_GETHOSTBYNAME_R_6)
  260. SET(${CURL_TEST} 0)
  261. IF(${CURL_TEST}_REENTRANT)
  262. SET(${CURL_TEST} 1)
  263. ENDIF(${CURL_TEST}_REENTRANT)
  264. ENDFOREACH(CURL_TEST)
  265. ENDIF(NEED_REENTRANT)
  266. IF(HAVE_INET_NTOA_R_DECL_REENTRANT)
  267. SET(HAVE_INET_NTOA_R_DECL 1)
  268. SET(NEED_REENTRANT 1)
  269. ENDIF(HAVE_INET_NTOA_R_DECL_REENTRANT)
  270. IF(NOT HAVE_SOCKLEN_T)
  271. SET(socklen_t "int")
  272. ENDIF(NOT HAVE_SOCKLEN_T)
  273. IF(NOT HAVE_IN_ADDR_T)
  274. SET(in_addr_t "unsigned long")
  275. ENDIF(NOT HAVE_IN_ADDR_T)
  276. IF(RETSIGTYPE_TEST)
  277. SET(RETSIGTYPE void)
  278. ELSE(RETSIGTYPE_TEST)
  279. SET(RETSIGTYPE int)
  280. ENDIF(RETSIGTYPE_TEST)
  281. INCLUDE_DIRECTORIES(${LIBCURL_SOURCE_DIR})
  282. INCLUDE_DIRECTORIES(${LIBCURL_BINARY_DIR})
  283. ADD_DEFINITIONS(-DHAVE_CONFIG_H)
  284. CONFIGURE_FILE(${LIBCURL_SOURCE_DIR}/config.h.in
  285. ${LIBCURL_BINARY_DIR}/config.h)
  286. ADD_LIBRARY(Curl STATIC ${libCurl_SRCS})
  287. TARGET_LINK_LIBRARIES(Curl ${CURL_LIBS})
  288. OPTION(CURL_TESTING "Do libCurl testing" ON)
  289. IF(CURL_TESTING)
  290. SUBDIRS(Testing)
  291. ENDIF(CURL_TESTING)