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