CMakeLists.txt 19.5 KB
Newer Older
Andy Cedilnik's avatar
Andy Cedilnik committed
1
CMAKE_MINIMUM_REQUIRED(VERSION 2.0)
Andy Cedilnik's avatar
Andy Cedilnik committed
2
3
PROJECT(LIBCURL C)

4
5
INCLUDE_REGULAR_EXPRESSION("^.*\\.h$")

6
# Setup package meta-data
Andy Cedilnik's avatar
Andy Cedilnik committed
7
SET(PACKAGE "curl")
Andy Cedilnik's avatar
Andy Cedilnik committed
8
9
SET(VERSION "7.12.1")
SET(PACKAGE_TARNAME "curl")
10
SET(PACKAGE_BUGREPORT " ")
Andy Cedilnik's avatar
Andy Cedilnik committed
11
12
13
14
15
SET(PACKAGE_NAME "curl")
SET(PACKAGE_VERSION "-")
SET(PACKAGE_STRING "curl-")
SET(PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/")
SET(OPERATING_SYSTEM "${CMAKE_SYSTEM_NAME}")
Andy Cedilnik's avatar
Andy Cedilnik committed
16

17
# We need ansi c-flags, especially on HP
Andy Cedilnik's avatar
Andy Cedilnik committed
18
19
20
SET(CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
SET(CMAKE_REQUIRED_FLAGS ${CMAKE_ANSI_CFLAGS})

21
# If we are on AIX, do the _ALL_SOURCE magic
Bill Hoffman's avatar
Bill Hoffman committed
22
23
24
IF(${CMAKE_SYSTEM_NAME} MATCHES AIX)
  SET(_ALL_SOURCE 1)
ENDIF(${CMAKE_SYSTEM_NAME} MATCHES AIX)
25
26

# Include all the necessary files for macros
Andy Cedilnik's avatar
Andy Cedilnik committed
27
28
29
30
31
32
33
SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
INCLUDE (CheckFunctionExists)
INCLUDE (CheckIncludeFile)
INCLUDE (CheckIncludeFiles)
INCLUDE (CheckLibraryExists)
INCLUDE (CheckSymbolExists)
INCLUDE (CheckTypeSize)
Andy Cedilnik's avatar
Andy Cedilnik committed
34
35

SET(libCurl_SRCS
36
  base64.c
Andy Cedilnik's avatar
Andy Cedilnik committed
37
38
  connect.c
  content_encoding.c
39
40
  cookie.c
  dict.c
Andy Cedilnik's avatar
Andy Cedilnik committed
41
42
43
44
45
  easy.c
  escape.c
  file.c
  formdata.c
  ftp.c
46
47
48
  getdate.c
  getenv.c
  getinfo.c
Andy Cedilnik's avatar
Andy Cedilnik committed
49
50
51
52
53
54
55
56
57
  hash.c
  hostares.c
  hostasyn.c
  hostip.c
  hostip4.c
  hostip6.c
  hostsyn.c
  hostthre.c
  http.c
58
  http_chunks.c
Andy Cedilnik's avatar
Andy Cedilnik committed
59
60
61
62
63
64
65
  http_digest.c
  http_negotiate.c
  http_ntlm.c
  if2ip.c
  inet_ntop.c
  inet_pton.c
  krb4.c
66
  llist.c
Andy Cedilnik's avatar
Andy Cedilnik committed
67
68
69
  md5.c
  memdebug.c
  mprintf.c
70
  multi.c
Andy Cedilnik's avatar
Andy Cedilnik committed
71
72
73
74
75
76
77
78
79
80
81
82
83
  netrc.c
  progress.c
  sendf.c
  share.c
  speedcheck.c
  ssluse.c
  strequal.c
  strerror.c
  telnet.c
  timeval.c
  transfer.c
  url.c
  version.c
84
  )
Andy Cedilnik's avatar
Andy Cedilnik committed
85

Andy Cedilnik's avatar
Andy Cedilnik committed
86
87
88
89
90
91
92
93
SET(CURL_DISABLE_LDAP 1)
IF(NOT CURL_DISABLE_LDAP)
  SET(libCurl_SRCS
    ${libCurl_SRCS}
    ldap.c
    )
ENDIF(NOT CURL_DISABLE_LDAP)

Ken Martin's avatar
Ken Martin committed
94
# if we have Kerberos 4, right now this is never on
Andy Cedilnik's avatar
Andy Cedilnik committed
95
96
#OPTION(CURL_KRB4 "Use Kerberos 4" OFF)
IF(CURL_KRB4)
Ken Martin's avatar
Ken Martin committed
97
98
99
100
  SET(libCurl_SRCS ${libCurl_SRCS}
    krb4.c
    security.c
    )
Andy Cedilnik's avatar
Andy Cedilnik committed
101
ENDIF(CURL_KRB4)
Ken Martin's avatar
Ken Martin committed
102

Andy Cedilnik's avatar
Andy Cedilnik committed
103
#OPTION(CURL_MALLOC_DEBUG "Debug mallocs in Curl" OFF)
104
105
106
107
MARK_AS_ADVANCED(CURL_MALLOC_DEBUG)
IF(CURL_MALLOC_DEBUG)
  SET(libCurl_SRCS ${libCurl_SRCS}
    memdebug.c
108
    )
109
110
ENDIF(CURL_MALLOC_DEBUG)

111
# On windows preload settings
112
113
114
IF(WIN32)
  INCLUDE(${LIBCURL_SOURCE_DIR}/Platforms/WindowsCache.cmake)
ENDIF(WIN32)
Andy Cedilnik's avatar
Andy Cedilnik committed
115

116
117
# This macro checks if the symbol exists in the library and if it
# does, it appends library to the list.
Andy Cedilnik's avatar
Andy Cedilnik committed
118
SET(CURL_LIBS "")
119
120
MACRO(CHECK_LIBRARY_EXISTS_CONCAT LIBRARY SYMBOL VARIABLE)
  CHECK_LIBRARY_EXISTS("${LIBRARY};${CURL_LIBS}" ${SYMBOL} "" 
121
    ${VARIABLE})
122
123
124
125
126
127
  IF(${VARIABLE})
    SET(CURL_LIBS ${CURL_LIBS} ${LIBRARY})
  ENDIF(${VARIABLE})
ENDMACRO(CHECK_LIBRARY_EXISTS_CONCAT)

# Check for all needed libraries
128
CHECK_LIBRARY_EXISTS_CONCAT("dl"     dlopen       HAVE_LIBDL)
129
130
CHECK_LIBRARY_EXISTS_CONCAT("ucb"    gethostname  HAVE_LIBUCB)
CHECK_LIBRARY_EXISTS_CONCAT("socket" connect      HAVE_LIBSOCKET)
131
CHECK_LIBRARY_EXISTS("c" gethostbyname "" NOT_NEED_LIBNSL)
132
133

IF(NOT NOT_NEED_LIBNSL)
134
  CHECK_LIBRARY_EXISTS_CONCAT("nsl"    gethostbyname  HAVE_LIBNSL)
135
136
ENDIF(NOT NOT_NEED_LIBNSL)

137
138
CHECK_LIBRARY_EXISTS_CONCAT("ws2_32" getch        HAVE_LIBWS2_32)
CHECK_LIBRARY_EXISTS_CONCAT("winmm"  getch        HAVE_LIBWINMM)
139
140
141
IF(NOT CURL_SPECIAL_LIBZ)
  CHECK_LIBRARY_EXISTS_CONCAT("z"      inflateEnd   HAVE_LIBZ)
ENDIF(NOT CURL_SPECIAL_LIBZ)
142

Andy Cedilnik's avatar
Andy Cedilnik committed
143
144
#OPTION(CMAKE_USE_OPENSSL "Use OpenSSL code. Experimental" OFF)
MARK_AS_ADVANCED(CMAKE_USE_OPENSSL)
145
IF(CMAKE_USE_OPENSSL)
Andy Cedilnik's avatar
Andy Cedilnik committed
146
  CHECK_LIBRARY_EXISTS_CONCAT("crypto" CRYPTO_lock  HAVE_LIBCRYPTO)
147
148
  CHECK_LIBRARY_EXISTS_CONCAT("ssl"    SSL_connect  HAVE_LIBSSL)
ENDIF(CMAKE_USE_OPENSSL)
149
150

# Check for symbol dlopen (same as HAVE_LIBDL)
151
CHECK_LIBRARY_EXISTS("${CURL_LIBS}" dlopen "" HAVE_DLOPEN)
Andy Cedilnik's avatar
Andy Cedilnik committed
152

153
# For other tests to use the same libraries
Andy Cedilnik's avatar
Andy Cedilnik committed
154
SET(CMAKE_REQUIRED_LIBRARIES ${CURL_LIBS})
155

Andy Cedilnik's avatar
Andy Cedilnik committed
156
157
158
159
160
161
162
163
IF(CURL_SPECIAL_LIBZ)
  SET(CURL_LIBS ${CURL_LIBS} "${CURL_SPECIAL_LIBZ}")
  INCLUDE_DIRECTORIES(${CURL_SPECIAL_LIBZ_INCLUDES})
  SET(HAVE_LIBZ 0)
  SET(HAVE_ZLIB_H 0)
ENDIF(CURL_SPECIAL_LIBZ)


164
# If we have features.h, then do the _BSD_SOURCE magic
165
CHECK_INCLUDE_FILE("features.h"       HAVE_FEATURES_H)
Andy Cedilnik's avatar
Andy Cedilnik committed
166
IF(HAVE_FEATURES_H)
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
  SET_SOURCE_FILES_PROPERTIES(
    cookie.c
    easy.c
    formdata.c
    getenv.c
    hash.c
    http.c
    if2ip.c 
    mprintf.c
    multi.c
    sendf.c
    telnet.c
    transfer.c
    url.c
    COMPILE_FLAGS -D_BSD_SOURCE)
Andy Cedilnik's avatar
Andy Cedilnik committed
182
183
ENDIF(HAVE_FEATURES_H)

184
185
186
187
188
189
190
191
192
# Check if header file exists and add it to the list.
MACRO(CHECK_INCLUDE_FILE_CONCAT FILE VARIABLE)
  CHECK_INCLUDE_FILES("${CURL_INCLUDES};${FILE}" ${VARIABLE})
  IF(${VARIABLE})
    SET(CURL_INCLUDES ${CURL_INCLUDES} ${FILE})
  ENDIF(${VARIABLE})
ENDMACRO(CHECK_INCLUDE_FILE_CONCAT)

# Check for header files
Andy Cedilnik's avatar
Andy Cedilnik committed
193
194
CHECK_INCLUDE_FILE_CONCAT("stdio.h"          HAVE_STDIO_H)
CHECK_INCLUDE_FILE_CONCAT("stddef.h"         HAVE_STDDEF_H)
195
196
197
198
199
200
201
202
203
204
CHECK_INCLUDE_FILE_CONCAT("sys/types.h"      HAVE_SYS_TYPES_H)
CHECK_INCLUDE_FILE_CONCAT("inttypes.h"       HAVE_INTTYPES_H)
CHECK_INCLUDE_FILE_CONCAT("alloca.h"         HAVE_ALLOCA_H)
CHECK_INCLUDE_FILE_CONCAT("arpa/inet.h"      HAVE_ARPA_INET_H)
CHECK_INCLUDE_FILE_CONCAT("dlfcn.h"          HAVE_DLFCN_H)
CHECK_INCLUDE_FILE_CONCAT("fcntl.h"          HAVE_FCNTL_H)
CHECK_INCLUDE_FILE_CONCAT("malloc.h"         HAVE_MALLOC_H)
CHECK_INCLUDE_FILE_CONCAT("memory.h"         HAVE_MEMORY_H)
CHECK_INCLUDE_FILE_CONCAT("netdb.h"          HAVE_NETDB_H)
CHECK_INCLUDE_FILE_CONCAT("sys/poll.h"       HAVE_SYS_POLL_H)
Andy Cedilnik's avatar
Andy Cedilnik committed
205
206
CHECK_INCLUDE_FILE_CONCAT("assert.h"         HAVE_ASSERT_H)
CHECK_INCLUDE_FILE_CONCAT("limits.h"         HAVE_LIMITS_H)
207
208
209
210
211
212
213
214
215

IF(CMAKE_USE_OPENSSL)
  CHECK_INCLUDE_FILE_CONCAT("openssl/x509.h"   HAVE_OPENSSL_X509_H)
  CHECK_INCLUDE_FILE_CONCAT("openssl/engine.h" HAVE_OPENSSL_ENGINE_H)
  CHECK_INCLUDE_FILE_CONCAT("openssl/rsa.h"    HAVE_OPENSSL_RSA_H)
  CHECK_INCLUDE_FILE_CONCAT("openssl/crypto.h" HAVE_OPENSSL_CRYPTO_H)
  CHECK_INCLUDE_FILE_CONCAT("openssl/pem.h"    HAVE_OPENSSL_PEM_H)
  CHECK_INCLUDE_FILE_CONCAT("openssl/ssl.h"    HAVE_OPENSSL_SSL_H)
  CHECK_INCLUDE_FILE_CONCAT("openssl/err.h"    HAVE_OPENSSL_ERR_H)
Andy Cedilnik's avatar
Andy Cedilnik committed
216
  CHECK_INCLUDE_FILE_CONCAT("openssl/rand.h"   HAVE_OPENSSL_RAND_H)
217
218
ENDIF(CMAKE_USE_OPENSSL)

219
220
221
IF(NOT CURL_SPECIAL_LIBZ)
  CHECK_INCLUDE_FILE_CONCAT("zlib.h"           HAVE_ZLIB_H)
ENDIF(NOT CURL_SPECIAL_LIBZ)
222
223
224
225
CHECK_INCLUDE_FILE_CONCAT("sys/socket.h"     HAVE_SYS_SOCKET_H)
CHECK_INCLUDE_FILE_CONCAT("netinet/in.h"     HAVE_NETINET_IN_H)
CHECK_INCLUDE_FILE_CONCAT("net/if.h"         HAVE_NET_IF_H)
CHECK_INCLUDE_FILE_CONCAT("netinet/if_ether.h" 
226
  HAVE_NETINET_IF_ETHER_H)
Andy Cedilnik's avatar
Andy Cedilnik committed
227
228
CHECK_INCLUDE_FILE_CONCAT("netinet/tcp.h" 
  HAVE_NETINET_TCP_H)
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
CHECK_INCLUDE_FILE_CONCAT("sys/select.h"    HAVE_SYS_SELECT_H)
CHECK_INCLUDE_FILE_CONCAT("utime.h"         HAVE_UTIME_H)
CHECK_INCLUDE_FILE_CONCAT("netinet/in.h"    HAVE_NETINET_IN_H)
CHECK_INCLUDE_FILE_CONCAT("pwd.h"           HAVE_PWD_H)
CHECK_INCLUDE_FILE_CONCAT("sgtty.h"         HAVE_SGTTY_H)
CHECK_INCLUDE_FILE_CONCAT("stdint.h"        HAVE_STDINT_H)
CHECK_INCLUDE_FILE_CONCAT("stdlib.h"        HAVE_STDLIB_H)
CHECK_INCLUDE_FILE_CONCAT("string.h"        HAVE_STRING_H)
CHECK_INCLUDE_FILE_CONCAT("strings.h"       HAVE_STRINGS_H)
CHECK_INCLUDE_FILE_CONCAT("sys/param.h"     HAVE_SYS_PARAM_H)
CHECK_INCLUDE_FILE_CONCAT("sys/stat.h"      HAVE_SYS_STAT_H)
CHECK_INCLUDE_FILE_CONCAT("sys/time.h"      HAVE_SYS_TIME_H)
CHECK_INCLUDE_FILE_CONCAT("termios.h"       HAVE_TERMIOS_H)
CHECK_INCLUDE_FILE_CONCAT("termio.h"        HAVE_TERMIO_H)
CHECK_INCLUDE_FILE_CONCAT("io.h"            HAVE_IO_H)
CHECK_INCLUDE_FILE_CONCAT("time.h"          HAVE_TIME_H)
CHECK_INCLUDE_FILE_CONCAT("unistd.h"        HAVE_UNISTD_H)
CHECK_INCLUDE_FILE_CONCAT("sys/utime.h"     HAVE_SYS_UTIME_H)
CHECK_INCLUDE_FILE_CONCAT("winsock.h"       HAVE_WINSOCK_H)
CHECK_INCLUDE_FILE_CONCAT("sockio.h"        HAVE_SOCKIO_H)
CHECK_INCLUDE_FILE_CONCAT("sys/sockio.h"    HAVE_SYS_SOCKIO_H)
CHECK_INCLUDE_FILE_CONCAT("x509.h"          HAVE_X509_H)
CHECK_INCLUDE_FILE_CONCAT("setjmp.h"        HAVE_SETJMP_H)
CHECK_INCLUDE_FILE_CONCAT("signal.h"        HAVE_SIGNAL_H)
Andy Cedilnik's avatar
Andy Cedilnik committed
253
254
CHECK_INCLUDE_FILE_CONCAT("sys/ioctl.h"     HAVE_SYS_IOCTL_H)
CHECK_INCLUDE_FILE_CONCAT("sys/utsname.h"   HAVE_SYS_UTSNAME_H)
255

Andy Cedilnik's avatar
Andy Cedilnik committed
256
CHECK_TYPE_SIZE(size_t  SIZEOF_SIZE_T)
Andy Cedilnik's avatar
Andy Cedilnik committed
257
CHECK_TYPE_SIZE(ssize_t  SIZEOF_SSIZE_T)
Andy Cedilnik's avatar
Andy Cedilnik committed
258
CHECK_TYPE_SIZE("long long"  SIZEOF_LONG_LONG)
Andy Cedilnik's avatar
Andy Cedilnik committed
259
260
261
262
CHECK_TYPE_SIZE("long double"  SIZEOF_LONG_DOUBLE)
IF(NOT HAVE_SIZEOF_SSIZE_T)
  SET(ssize_t int)
ENDIF(NOT HAVE_SIZEOF_SSIZE_T)
Andy Cedilnik's avatar
Andy Cedilnik committed
263
264
265
IF(HAVE_SIZEOF_LONG_LONG)
  SET(HAVE_LONGLONG 1)
ENDIF(HAVE_SIZEOF_LONG_LONG)
Andy Cedilnik's avatar
Andy Cedilnik committed
266
267

FIND_FILE(RANDOM_FILE urandom /dev)
Ken Martin's avatar
Ken Martin committed
268
MARK_AS_ADVANCED(RANDOM_FILE)
Andy Cedilnik's avatar
Andy Cedilnik committed
269

270
# Check for some functions that are used
271
272
273
274
275
276
277
278
279
280
281
CHECK_SYMBOL_EXISTS(socket        "${CURL_INCLUDES}" HAVE_SOCKET)
CHECK_SYMBOL_EXISTS(poll          "${CURL_INCLUDES}" HAVE_POLL)
CHECK_SYMBOL_EXISTS(select        "${CURL_INCLUDES}" HAVE_SELECT)
CHECK_SYMBOL_EXISTS(strdup        "${CURL_INCLUDES}" HAVE_STRDUP)
CHECK_SYMBOL_EXISTS(strstr        "${CURL_INCLUDES}" HAVE_STRSTR)
CHECK_SYMBOL_EXISTS(strtok_r      "${CURL_INCLUDES}" HAVE_STRTOK_R)
CHECK_SYMBOL_EXISTS(strftime      "${CURL_INCLUDES}" HAVE_STRFTIME)
CHECK_SYMBOL_EXISTS(uname         "${CURL_INCLUDES}" HAVE_UNAME)
CHECK_SYMBOL_EXISTS(strcasecmp    "${CURL_INCLUDES}" HAVE_STRCASECMP)
CHECK_SYMBOL_EXISTS(stricmp       "${CURL_INCLUDES}" HAVE_STRICMP)
CHECK_SYMBOL_EXISTS(strcmpi       "${CURL_INCLUDES}" HAVE_STRCMPI)
Andy Cedilnik's avatar
Andy Cedilnik committed
282
283
284
285
CHECK_SYMBOL_EXISTS(strncmpi      "${CURL_INCLUDES}" HAVE_STRNCMPI)
IF(NOT HAVE_STRNCMPI)
  SET(HAVE_STRCMPI)
ENDIF(NOT HAVE_STRNCMPI)
286
287
288
CHECK_SYMBOL_EXISTS(gethostbyaddr "${CURL_INCLUDES}" HAVE_GETHOSTBYADDR)
CHECK_SYMBOL_EXISTS(gettimeofday  "${CURL_INCLUDES}" HAVE_GETTIMEOFDAY)
CHECK_SYMBOL_EXISTS(inet_addr     "${CURL_INCLUDES}" HAVE_INET_ADDR)
Andy Cedilnik's avatar
Andy Cedilnik committed
289
CHECK_SYMBOL_EXISTS(inet_pton     "${CURL_INCLUDES}" HAVE_INET_PTON)
290
291
292
293
294
295
296
297
298
299
300
301
302
CHECK_SYMBOL_EXISTS(inet_ntoa     "${CURL_INCLUDES}" HAVE_INET_NTOA)
CHECK_SYMBOL_EXISTS(inet_ntoa_r   "${CURL_INCLUDES}" HAVE_INET_NTOA_R)
CHECK_SYMBOL_EXISTS(tcsetattr     "${CURL_INCLUDES}" HAVE_TCSETATTR)
CHECK_SYMBOL_EXISTS(tcgetattr     "${CURL_INCLUDES}" HAVE_TCGETATTR)
CHECK_SYMBOL_EXISTS(perror        "${CURL_INCLUDES}" HAVE_PERROR)
CHECK_SYMBOL_EXISTS(closesocket   "${CURL_INCLUDES}" HAVE_CLOSESOCKET)
CHECK_SYMBOL_EXISTS(setvbuf       "${CURL_INCLUDES}" HAVE_SETVBUF)
CHECK_SYMBOL_EXISTS(sigsetjmp     "${CURL_INCLUDES}" HAVE_SIGSETJMP)
CHECK_SYMBOL_EXISTS(getpass_r     "${CURL_INCLUDES}" HAVE_GETPASS_R)
CHECK_SYMBOL_EXISTS(strlcat       "${CURL_INCLUDES}" HAVE_STRLCAT)
CHECK_SYMBOL_EXISTS(getpwuid      "${CURL_INCLUDES}" HAVE_GETPWUID)
CHECK_SYMBOL_EXISTS(geteuid       "${CURL_INCLUDES}" HAVE_GETEUID)
CHECK_SYMBOL_EXISTS(utime         "${CURL_INCLUDES}" HAVE_UTIME)
Andy Cedilnik's avatar
Andy Cedilnik committed
303
304
305
306
307
308
309
IF(CMAKE_USE_OPENSSL)
  CHECK_SYMBOL_EXISTS(RAND_status   "${CURL_INCLUDES}" HAVE_RAND_STATUS)
  CHECK_SYMBOL_EXISTS(RAND_screen   "${CURL_INCLUDES}" HAVE_RAND_SCREEN)
  CHECK_SYMBOL_EXISTS(RAND_egd      "${CURL_INCLUDES}" HAVE_RAND_EGD)
  CHECK_SYMBOL_EXISTS(CRYPTO_cleanup_all_ex_data "${CURL_INCLUDES}" 
    HAVE_CRYPTO_CLEANUP_ALL_EX_DATA)
ENDIF(CMAKE_USE_OPENSSL)
310
311
CHECK_SYMBOL_EXISTS(gmtime_r      "${CURL_INCLUDES}" HAVE_GMTIME_R)
CHECK_SYMBOL_EXISTS(localtime_r   "${CURL_INCLUDES}" HAVE_LOCALTIME_R)
312

Andy Cedilnik's avatar
Andy Cedilnik committed
313
314
315
CHECK_SYMBOL_EXISTS(gethostbyname   "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME)
CHECK_SYMBOL_EXISTS(gethostbyname_r "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME_R)
CHECK_SYMBOL_EXISTS(gethostbyaddr_r "${CURL_INCLUDES}" HAVE_GETHOSTBYADDR_R)
316

317
318
319
320
321
CHECK_SYMBOL_EXISTS(signal        "${CURL_INCLUDES}" HAVE_SIGNAL_FUNC)
CHECK_SYMBOL_EXISTS(SIGALRM       "${CURL_INCLUDES}" HAVE_SIGNAL_MACRO)
IF(HAVE_SIGNAL_FUNC AND HAVE_SIGNAL_MACRO)
  SET(HAVE_SIGNAL 1)
ENDIF(HAVE_SIGNAL_FUNC AND HAVE_SIGNAL_MACRO)
Andy Cedilnik's avatar
Andy Cedilnik committed
322
323
CHECK_SYMBOL_EXISTS(uname         "${CURL_INCLUDES}" HAVE_UNAME)
CHECK_SYMBOL_EXISTS(strtoll       "${CURL_INCLUDES}" HAVE_STRTOLL)
324
CHECK_SYMBOL_EXISTS(_strtoi64     "${CURL_INCLUDES}" HAVE__STRTOI64)
Andy Cedilnik's avatar
Andy Cedilnik committed
325
326
327
CHECK_SYMBOL_EXISTS(strerror_r    "${CURL_INCLUDES}" HAVE_STRERROR_R)
CHECK_SYMBOL_EXISTS(siginterrupt  "${CURL_INCLUDES}" HAVE_SIGINTERRUPT)
CHECK_SYMBOL_EXISTS(perror        "${CURL_INCLUDES}" HAVE_PERROR)
328

Ken Martin's avatar
Ken Martin committed
329
330
331
332
333
334
# only build compat strtok if we need to
IF (NOT HAVE_STRTOK_R)
  SET(libCurl_SRCS ${libCurl_SRCS}
    strtok.c
    )
ENDIF (NOT HAVE_STRTOK_R)
335
336
337
338
339
IF(NOT HAVE_STRTOLL AND NOT HAVE__STRTOI64)
  SET(libCurl_SRCS ${libCurl_SRCS}
    strtoofft.c
    )
ENDIF(NOT HAVE_STRTOLL AND NOT HAVE__STRTOI64)
Andy Cedilnik's avatar
Andy Cedilnik committed
340

341
342
343
# sigaction and sigsetjmp are special. Use special mechanism for
# detecting those, but only if previous attempt failed.
IF(HAVE_SIGNAL_H)
344
  CHECK_SYMBOL_EXISTS(sigaction "signal.h" HAVE_SIGACTION)
345
ENDIF(HAVE_SIGNAL_H)
346

Andy Cedilnik's avatar
Andy Cedilnik committed
347
348
349
350
351
352
353
354
355
IF(NOT HAVE_SIGSETJMP)
  IF(HAVE_SETJMP_H)
    CHECK_SYMBOL_EXISTS(sigsetjmp "setjmp.h" HAVE_MACRO_SIGSETJMP)
    IF(HAVE_MACRO_SIGSETJMP)
      SET(HAVE_SIGSETJMP 1)
    ENDIF(HAVE_MACRO_SIGSETJMP)
  ENDIF(HAVE_SETJMP_H)
ENDIF(NOT HAVE_SIGSETJMP)

356
# For other curl specific tests, use this macro.
Andy Cedilnik's avatar
Andy Cedilnik committed
357
358
359
MACRO(CURL_INTERNAL_TEST CURL_TEST)
  IF("${CURL_TEST}" MATCHES "^${CURL_TEST}$")
    SET(MACRO_CHECK_FUNCTION_DEFINITIONS 
360
      "-D${CURL_TEST} ${CMAKE_REQUIRED_FLAGS}")
Andy Cedilnik's avatar
Andy Cedilnik committed
361
362
    IF(CMAKE_REQUIRED_LIBRARIES)
      SET(CURL_TEST_ADD_LIBRARIES
363
        "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
Andy Cedilnik's avatar
Andy Cedilnik committed
364
365
366
367
    ENDIF(CMAKE_REQUIRED_LIBRARIES)

    MESSAGE(STATUS "Performing Curl Test ${CURL_TEST}")
    TRY_COMPILE(${CURL_TEST}
368
369
370
371
372
      ${CMAKE_BINARY_DIR}
      ${LIBCURL_SOURCE_DIR}/CMake/CurlTests.c
      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
      "${CURL_TEST_ADD_LIBRARIES}"
      OUTPUT_VARIABLE OUTPUT)
Andy Cedilnik's avatar
Andy Cedilnik committed
373
374
375
376
377
378
    IF(${CURL_TEST})
      SET(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
      MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Success")
    ELSE(${CURL_TEST})
      MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
      SET(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
379
      FILE(APPEND ${CMAKE_BINARY_DIR}/CMakeError.log 
Andy Cedilnik's avatar
Andy Cedilnik committed
380
        "Performing Curl Test ${CURL_TEST} failed with the following output:\n"
381
        "${OUTPUT}\n")
Andy Cedilnik's avatar
Andy Cedilnik committed
382
383
384
    ENDIF(${CURL_TEST})
  ENDIF("${CURL_TEST}" MATCHES "^${CURL_TEST}$")
ENDMACRO(CURL_INTERNAL_TEST) 
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
MACRO(CURL_INTERNAL_TEST_RUN CURL_TEST)
  IF("${CURL_TEST}_COMPILE" MATCHES "^${CURL_TEST}_COMPILE$")
    SET(MACRO_CHECK_FUNCTION_DEFINITIONS 
      "-D${CURL_TEST} ${CMAKE_REQUIRED_FLAGS}")
    IF(CMAKE_REQUIRED_LIBRARIES)
      SET(CURL_TEST_ADD_LIBRARIES
        "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
    ENDIF(CMAKE_REQUIRED_LIBRARIES)

    MESSAGE(STATUS "Performing Curl Test ${CURL_TEST}")
    TRY_RUN(${CURL_TEST} ${CURL_TEST}_COMPILE
      ${CMAKE_BINARY_DIR}
      ${LIBCURL_SOURCE_DIR}/CMake/CurlTests.c
      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
      "${CURL_TEST_ADD_LIBRARIES}"
      OUTPUT_VARIABLE OUTPUT)
    IF(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
      SET(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
      MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Success")
    ELSE(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
      MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
      SET(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
      FILE(APPEND "${CMAKE_BINARY_DIR}/CMakeError.log"
        "Performing Curl Test ${CURL_TEST} failed with the following output:\n"
        "${OUTPUT}")
      IF(${CURL_TEST}_COMPILE)
        FILE(APPEND "${CMAKE_BINARY_DIR}/CMakeError.log" 
          "There was a running problem of this test\n")
      ENDIF(${CURL_TEST}_COMPILE)
      FILE(APPEND "${CMAKE_BINARY_DIR}/CMakeError.log" 
        "\n\n")
    ENDIF(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
  ENDIF("${CURL_TEST}_COMPILE" MATCHES "^${CURL_TEST}_COMPILE$")
ENDMACRO(CURL_INTERNAL_TEST_RUN) 
Andy Cedilnik's avatar
Andy Cedilnik committed
419

420
# Do curl specific tests
421
422
423
424
425
#OPTION(CURL_HAVE_DISABLED_NONBLOCKING "Disable non-blocking socket detection" OFF)
SET(CURL_NONBLOCKING_TESTS)
IF(NOT CURL_HAVE_DISABLED_NONBLOCKING)
  SET(CURL_NONBLOCKING_TESTS
    HAVE_FIONBIO
Andy Cedilnik's avatar
Andy Cedilnik committed
426
427
    HAVE_IOCTLSOCKET
    HAVE_IOCTLSOCKET_CASE
428
    HAVE_O_NONBLOCK
429
    HAVE_SO_NONBLOCK
430
431
432
433
434
    )
ENDIF(NOT CURL_HAVE_DISABLED_NONBLOCKING)
FOREACH(CURL_TEST 
    ${CURL_NONBLOCKING_TESTS}
    TIME_WITH_SYS_TIME
Andy Cedilnik's avatar
Andy Cedilnik committed
435
    HAVE_O_NONBLOCKHAVE_GETHOSTBYADDR_R_5
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
    HAVE_GETHOSTBYADDR_R_7
    HAVE_GETHOSTBYADDR_R_8
    HAVE_GETHOSTBYADDR_R_5_REENTRANT
    HAVE_GETHOSTBYADDR_R_7_REENTRANT
    HAVE_GETHOSTBYADDR_R_8_REENTRANT
    HAVE_GETHOSTBYNAME_R_3
    HAVE_GETHOSTBYNAME_R_5
    HAVE_GETHOSTBYNAME_R_6
    HAVE_GETHOSTBYNAME_R_3_REENTRANT
    HAVE_GETHOSTBYNAME_R_5_REENTRANT
    HAVE_GETHOSTBYNAME_R_6_REENTRANT
    HAVE_SOCKLEN_T
    HAVE_IN_ADDR_T
    STDC_HEADERS
    RETSIGTYPE_TEST
    HAVE_INET_NTOA_R_DECL
    HAVE_INET_NTOA_R_DECL_REENTRANT
    HAVE_GETADDRINFO
Will Schroeder's avatar
Will Schroeder committed
454
    HAVE_FILE_OFFSET_BITS
455
    )
Andy Cedilnik's avatar
Andy Cedilnik committed
456
457
  CURL_INTERNAL_TEST(${CURL_TEST})
ENDFOREACH(CURL_TEST)
Will Schroeder's avatar
Will Schroeder committed
458
459
460
IF(HAVE_FILE_OFFSET_BITS)
  SET(_FILE_OFFSET_BITS 64)
ENDIF(HAVE_FILE_OFFSET_BITS)
Andy Cedilnik's avatar
Andy Cedilnik committed
461

462
463
464
FOREACH(CURL_TEST 
    HAVE_GLIBC_STRERROR_R
    HAVE_POSIX_STRERROR_R
465
    HAVE_LONG_LONG_CONSTANT
466
467
468
469
    )
  CURL_INTERNAL_TEST_RUN(${CURL_TEST})
ENDFOREACH(CURL_TEST)

470
# Check for reentrant
Andy Cedilnik's avatar
Andy Cedilnik committed
471
FOREACH(CURL_TEST
472
473
474
475
476
477
478
    HAVE_GETHOSTBYADDR_R_5
    HAVE_GETHOSTBYADDR_R_7
    HAVE_GETHOSTBYADDR_R_8
    HAVE_GETHOSTBYNAME_R_3
    HAVE_GETHOSTBYNAME_R_5
    HAVE_GETHOSTBYNAME_R_6
    HAVE_INET_NTOA_R_DECL_REENTRANT)
Andy Cedilnik's avatar
Andy Cedilnik committed
479
480
481
482
483
484
485
486
487
  IF(NOT ${CURL_TEST})
    IF(${CURL_TEST}_REENTRANT)
      SET(NEED_REENTRANT 1)
    ENDIF(${CURL_TEST}_REENTRANT)
  ENDIF(NOT ${CURL_TEST})
ENDFOREACH(CURL_TEST)

IF(NEED_REENTRANT)
  FOREACH(CURL_TEST
488
489
490
491
492
493
      HAVE_GETHOSTBYADDR_R_5
      HAVE_GETHOSTBYADDR_R_7
      HAVE_GETHOSTBYADDR_R_8
      HAVE_GETHOSTBYNAME_R_3
      HAVE_GETHOSTBYNAME_R_5
      HAVE_GETHOSTBYNAME_R_6)
Andy Cedilnik's avatar
Andy Cedilnik committed
494
495
496
497
    SET(${CURL_TEST} 0)
    IF(${CURL_TEST}_REENTRANT)
      SET(${CURL_TEST} 1)
    ENDIF(${CURL_TEST}_REENTRANT)
Andy Cedilnik's avatar
Andy Cedilnik committed
498
499
500
501
502
503
504
505
  ENDFOREACH(CURL_TEST)
ENDIF(NEED_REENTRANT)

IF(HAVE_INET_NTOA_R_DECL_REENTRANT)
  SET(HAVE_INET_NTOA_R_DECL 1)
  SET(NEED_REENTRANT 1)
ENDIF(HAVE_INET_NTOA_R_DECL_REENTRANT)

506
507
# Some other minor tests

Andy Cedilnik's avatar
Andy Cedilnik committed
508
509
510
511
512
513
514
515
IF(NOT HAVE_SOCKLEN_T)
  SET(socklen_t "int")
ENDIF(NOT HAVE_SOCKLEN_T)

IF(NOT HAVE_IN_ADDR_T)
  SET(in_addr_t "unsigned long")
ENDIF(NOT HAVE_IN_ADDR_T)

516
517
# Fix libz / zlib.h

518
519
520
521
IF(NOT CURL_SPECIAL_LIBZ)
  IF(NOT HAVE_LIBZ)
    SET(HAVE_ZLIB_H 0)
  ENDIF(NOT HAVE_LIBZ)
Bill Hoffman's avatar
Bill Hoffman committed
522

523
524
525
526
  IF(NOT HAVE_ZLIB_H)
    SET(HAVE_LIBZ 0)
  ENDIF(NOT HAVE_ZLIB_H)
ENDIF(NOT CURL_SPECIAL_LIBZ)
Bill Hoffman's avatar
Bill Hoffman committed
527

Andy Cedilnik's avatar
Andy Cedilnik committed
528
529
530
531
532
533
534
535
IF(_FILE_OFFSET_BITS)
  SET(_FILE_OFFSET_BITS 64)
ENDIF(_FILE_OFFSET_BITS)
SET(CMAKE_REQUIRED_FLAGS "-D_FILE_OFFSET_BITS=64")
SET(CMAKE_EXTRA_INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/curl/curl.h")
CHECK_TYPE_SIZE("curl_off_t" SIZEOF_CURL_OFF_T)
SET(CMAKE_EXTRA_INCLUDE_FILES)
SET(CMAKE_REQUIRED_FLAGS)
536

Andy Cedilnik's avatar
Andy Cedilnik committed
537
538

# Check for nonblocking
539
540
541
542
543
544
545
546
547
548
SET(HAVE_DISABLED_NONBLOCKING 1)
IF(HAVE_FIONBIO OR 
    HAVE_IOCTLSOCKET OR
    HAVE_IOCTLSOCKET_CASE OR
    HAVE_O_NONBLOCK)
  SET(HAVE_DISABLED_NONBLOCKING)
ENDIF(HAVE_FIONBIO OR 
  HAVE_IOCTLSOCKET OR
  HAVE_IOCTLSOCKET_CASE OR
  HAVE_O_NONBLOCK)
Andy Cedilnik's avatar
Andy Cedilnik committed
549

Andy Cedilnik's avatar
Andy Cedilnik committed
550
551
552
553
554
555
IF(RETSIGTYPE_TEST)
  SET(RETSIGTYPE void)
ELSE(RETSIGTYPE_TEST)
  SET(RETSIGTYPE int)
ENDIF(RETSIGTYPE_TEST)

556
557
558
IF(CMAKE_COMPILER_IS_GNUCC AND APPLE)
  # The Mac version of GCC warns about use of long double.  Disable it.
  GET_SOURCE_FILE_PROPERTY(MPRINTF_COMPILE_FLAGS mprintf.c COMPILE_FLAGS)
559
560
561
562
563
  IF(MPRINTF_COMPILE_FLAGS)
    SET(MPRINTF_COMPILE_FLAGS "${MPRINTF_COMPILE_FLAGS} -Wno-long-double")
  ELSE(MPRINTF_COMPILE_FLAGS)
    SET(MPRINTF_COMPILE_FLAGS "-Wno-long-double")
  ENDIF(MPRINTF_COMPILE_FLAGS)
564
  SET_SOURCE_FILES_PROPERTIES(mprintf.c PROPERTIES
565
    COMPILE_FLAGS ${MPRINTF_COMPILE_FLAGS})
566
567
ENDIF(CMAKE_COMPILER_IS_GNUCC AND APPLE)

568
569
# The rest of the build

Andy Cedilnik's avatar
Andy Cedilnik committed
570
571
572
573
INCLUDE_DIRECTORIES(${LIBCURL_SOURCE_DIR})
INCLUDE_DIRECTORIES(${LIBCURL_BINARY_DIR})
ADD_DEFINITIONS(-DHAVE_CONFIG_H)
CONFIGURE_FILE(${LIBCURL_SOURCE_DIR}/config.h.in
574
  ${LIBCURL_BINARY_DIR}/config.h)
Andy Cedilnik's avatar
Andy Cedilnik committed
575

576
ADD_LIBRARY(Curl ${libCurl_SRCS})
Andy Cedilnik's avatar
Andy Cedilnik committed
577
578
TARGET_LINK_LIBRARIES(Curl ${CURL_LIBS})

579
OPTION(CURL_TESTING "Do libCurl testing" OFF)
Andy Cedilnik's avatar
Andy Cedilnik committed
580
581
582
583
IF(CURL_TESTING)
  SUBDIRS(Testing)
ENDIF(CURL_TESTING)

Andy Cedilnik's avatar
Andy Cedilnik committed
584
585
ADD_EXECUTABLE(LIBCURL Testing/curltest.c)
TARGET_LINK_LIBRARIES(LIBCURL Curl)
Andy Cedilnik's avatar
Andy Cedilnik committed
586
ADD_TEST(curl "${EXECUTABLE_OUTPUT_PATH}/LIBCURL")