Переглянути джерело

ENH: allow for shared build of libcurl and fix build with openssl option (ssl tested on linux and windows

Bill Hoffman 16 роки тому
батько
коміт
5783d5aab1
2 змінених файлів з 39 додано та 7 видалено
  1. 4 1
      CMakeLists.txt
  2. 35 6
      Utilities/cmcurl/CMakeLists.txt

+ 4 - 1
CMakeLists.txt

@@ -266,7 +266,10 @@ MACRO (CMAKE_BUILD_UTILITIES)
     SET(CURL_SPECIAL_ZLIB_H ${CMAKE_ZLIB_HEADER})
     SET(CURL_SPECIAL_LIBZ_INCLUDES ${CMAKE_ZLIB_INCLUDES})
     SET(CURL_SPECIAL_LIBZ ${CMAKE_ZLIB_LIBRARIES})
-    ADD_DEFINITIONS(-DCURL_STATICLIB)
+    OPTION(CMAKE_BUILD_CURL_SHARED "Should curl be built shared" FALSE)
+    IF(NOT CMAKE_BUILD_CURL_SHARED)
+      ADD_DEFINITIONS(-DCURL_STATICLIB)
+    ENDIF(NOT CMAKE_BUILD_CURL_SHARED)
     SET(CMAKE_CURL_INCLUDES)
     SET(CMAKE_CURL_LIBRARIES cmcurl)
     IF(CMAKE_USE_NEW_CURL)

+ 35 - 6
Utilities/cmcurl/CMakeLists.txt

@@ -180,11 +180,22 @@ IF(NOT CURL_SPECIAL_LIBZ)
   CHECK_LIBRARY_EXISTS_CONCAT("z"      inflateEnd   HAVE_LIBZ)
 ENDIF(NOT CURL_SPECIAL_LIBZ)
 
-OPTION(CMAKE_USE_OPENSSL "Use OpenSSL code. Experimental" ON)
+OPTION(CMAKE_USE_OPENSSL "Use OpenSSL code." OFF)
 MARK_AS_ADVANCED(CMAKE_USE_OPENSSL)
 IF(CMAKE_USE_OPENSSL)
-  CHECK_LIBRARY_EXISTS_CONCAT("crypto" CRYPTO_lock  HAVE_LIBCRYPTO)
-  CHECK_LIBRARY_EXISTS_CONCAT("ssl"    SSL_connect  HAVE_LIBSSL)
+  SET(USE_SSLEAY TRUE)
+  SET(USE_OPENSSL TRUE)
+  IF(WIN32)
+    FIND_PATH(SSLINCLUDE openssl/crypto.h 
+      PATHS c:/hoffman/Tools/openssl_w32vc6-0.9.8g/inc32)
+    INCLUDE_DIRECTORIES(${SSLINCLUDE})
+    FIND_LIBRARY(LIBEAY NAMES libeay32)
+    FIND_LIBRARY(SSLEAY NAMES ssleay32)
+    SET(CURL_LIBS  ${CURL_LIBS} ${LIBEAY} ${SSLEAY} )
+  ELSE(WIN32)
+    CHECK_LIBRARY_EXISTS_CONCAT("crypto" CRYPTO_lock  HAVE_LIBCRYPTO)
+    CHECK_LIBRARY_EXISTS_CONCAT("ssl"    SSL_connect  HAVE_LIBSSL)
+  ENDIF(WIN32)
 ENDIF(CMAKE_USE_OPENSSL)
 
 # Check for idn
@@ -396,6 +407,11 @@ ENDIF(NOT HAVE_STRNCMPI)
 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)
+# windows only has this for vista, but will link with it and say
+# that it has it at link time!  So, force it off
+IF(WIN32)
+  SET(HAVE_INET_PTON 0 CACHE "" INTERNAL )
+ENDIF(WIN32)
 CHECK_SYMBOL_EXISTS(inet_pton     "${CURL_INCLUDES}" HAVE_INET_PTON)
 CHECK_SYMBOL_EXISTS(inet_ntoa     "${CURL_INCLUDES}" HAVE_INET_NTOA)
 CHECK_SYMBOL_EXISTS(inet_ntoa_r   "${CURL_INCLUDES}" HAVE_INET_NTOA_R)
@@ -701,13 +717,26 @@ INCLUDE(CMake/OtherTests.cmake)
 
 INCLUDE_DIRECTORIES(${LIBCURL_SOURCE_DIR})
 INCLUDE_DIRECTORIES(${LIBCURL_BINARY_DIR})
-ADD_DEFINITIONS(-DHAVE_CONFIG_H
-  -DCURL_STATICLIB)
+OPTION(CMAKE_BUILD_CURL_SHARED "Should curl be built shared" TRUE)
+IF(CMAKE_BUILD_CURL_SHARED)
+  SET(LIBRARY_TYPE SHARED)
+  ADD_DEFINITIONS(-DHAVE_CONFIG_H)
+ELSE(CMAKE_BUILD_CURL_SHARED)
+   ADD_DEFINITIONS(-DHAVE_CONFIG_H
+    -DCURL_STATICLIB)
+ENDIF(CMAKE_BUILD_CURL_SHARED)
+SET(CURL_STATICLIB)
 CONFIGURE_FILE(${LIBCURL_SOURCE_DIR}/config.h.in
   ${LIBCURL_BINARY_DIR}/config.h)
 
-ADD_LIBRARY(cmcurl ${libCurl_SRCS})
+
+ADD_LIBRARY(cmcurl ${LIBRARY_TYPE} ${libCurl_SRCS})
 TARGET_LINK_LIBRARIES(cmcurl ${CURL_LIBS})
+IF(CMAKE_BUILD_CURL_SHARED)
+  SET_TARGET_PROPERTIES(cmcurl PROPERTIES DEFINE_SYMBOL BUILDING_LIBCURL
+    RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
+  INSTALL_TARGETS(/bin cmcurl)
+ENDIF(CMAKE_BUILD_CURL_SHARED)
 
 OPTION(CURL_TESTING "Do libCurl testing" OFF)
 IF(CURL_TESTING)