mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-12-21 15:47:55 +08:00
c2790cd23e
* [google-cloud-cpp] Fix libcurl linkage * [curl] Fix libcurl exported CMake target config (Windows)
143 lines
6.3 KiB
Diff
143 lines
6.3 KiB
Diff
diff --git a/cmake/IncludeCurl.cmake b/cmake/IncludeCurl.cmake
|
|
index 6ea7ca3e6..3c2db6b28 100644
|
|
--- a/cmake/IncludeCurl.cmake
|
|
+++ b/cmake/IncludeCurl.cmake
|
|
@@ -34,49 +34,57 @@ set_property(CACHE GOOGLE_CLOUD_CPP_CURL_PROVIDER
|
|
if ("${GOOGLE_CLOUD_CPP_CURL_PROVIDER}" STREQUAL "external")
|
|
include(external/curl)
|
|
elseif("${GOOGLE_CLOUD_CPP_CURL_PROVIDER}" STREQUAL "package")
|
|
- # Search for libcurl, in CMake 3.5 this does not define a target, but it
|
|
- # will in 3.12 (see https://cmake.org/cmake/help/git-
|
|
- # stage/module/FindCURL.html for details). Until then, define the target
|
|
- # ourselves if it is missing.
|
|
- find_package(CURL REQUIRED)
|
|
- if (NOT TARGET CURL::libcurl)
|
|
- add_library(CURL::libcurl UNKNOWN IMPORTED)
|
|
- set_property(TARGET CURL::libcurl
|
|
- APPEND
|
|
- PROPERTY INTERFACE_INCLUDE_DIRECTORIES
|
|
- "${CURL_INCLUDE_DIR}")
|
|
- set_property(TARGET CURL::libcurl
|
|
- APPEND
|
|
- PROPERTY IMPORTED_LOCATION "${CURL_LIBRARY}")
|
|
- endif ()
|
|
- # If the library is static, we need to explicitly link its dependencies.
|
|
- # However, we should not do so for shared libraries, because the version of
|
|
- # OpenSSL (for example) found by find_package() may be newer than the
|
|
- # version linked against libcurl.
|
|
- if ("${CURL_LIBRARY}" MATCHES "${CMAKE_STATIC_LIBRARY_SUFFIX}$")
|
|
- find_package(OpenSSL REQUIRED)
|
|
- find_package(ZLIB REQUIRED)
|
|
- set_property(TARGET CURL::libcurl
|
|
- APPEND
|
|
- PROPERTY INTERFACE_LINK_LIBRARIES
|
|
- OpenSSL::SSL
|
|
- OpenSSL::Crypto
|
|
- ZLIB::ZLIB)
|
|
- message(STATUS "CURL linkage will be static")
|
|
- if (WIN32)
|
|
+ # Search for libcurl, first using CONFIG mode, and retrying
|
|
+ # using MODULE mode if that fails
|
|
+ find_package(CURL CONFIG QUIET) # Deliberately quiet, so we can handle the result
|
|
+ if(CURL_FOUND)
|
|
+ message(STATUS "CURL library found via CONFIG mode")
|
|
+ else()
|
|
+ # CONFIG mode failed - fallback to MODULE mode
|
|
+ # In CMake 3.5 this does not define a target, but it
|
|
+ # will in 3.12 (see https://cmake.org/cmake/help/git-
|
|
+ # stage/module/FindCURL.html for details). Until then, define the target
|
|
+ # ourselves if it is missing.
|
|
+ find_package(CURL MODULE REQUIRED) # Use REQUIRED the second time to fail out
|
|
+ if (NOT TARGET CURL::libcurl)
|
|
+ add_library(CURL::libcurl UNKNOWN IMPORTED)
|
|
set_property(TARGET CURL::libcurl
|
|
APPEND
|
|
- PROPERTY INTERFACE_LINK_LIBRARIES
|
|
- crypt32
|
|
- wsock32
|
|
- ws2_32)
|
|
+ PROPERTY INTERFACE_INCLUDE_DIRECTORIES
|
|
+ "${CURL_INCLUDE_DIR}")
|
|
+ set_property(TARGET CURL::libcurl
|
|
+ APPEND
|
|
+ PROPERTY IMPORTED_LOCATION "${CURL_LIBRARY}")
|
|
endif ()
|
|
- if (APPLE)
|
|
+ # If the library is static, we need to explicitly link its dependencies.
|
|
+ # However, we should not do so for shared libraries, because the version of
|
|
+ # OpenSSL (for example) found by find_package() may be newer than the
|
|
+ # version linked against libcurl.
|
|
+ if ("${CURL_LIBRARY}" MATCHES "${CMAKE_STATIC_LIBRARY_SUFFIX}$")
|
|
+ find_package(OpenSSL REQUIRED)
|
|
+ find_package(ZLIB REQUIRED)
|
|
set_property(TARGET CURL::libcurl
|
|
APPEND
|
|
- PROPERTY INTERFACE_LINK_LIBRARIES ldap)
|
|
+ PROPERTY INTERFACE_LINK_LIBRARIES
|
|
+ OpenSSL::SSL
|
|
+ OpenSSL::Crypto
|
|
+ ZLIB::ZLIB)
|
|
+ message(STATUS "CURL linkage will be static")
|
|
+ if (WIN32)
|
|
+ set_property(TARGET CURL::libcurl
|
|
+ APPEND
|
|
+ PROPERTY INTERFACE_LINK_LIBRARIES
|
|
+ crypt32
|
|
+ wsock32
|
|
+ ws2_32)
|
|
+ endif ()
|
|
+ if (APPLE)
|
|
+ set_property(TARGET CURL::libcurl
|
|
+ APPEND
|
|
+ PROPERTY INTERFACE_LINK_LIBRARIES ldap)
|
|
+ endif ()
|
|
+ else()
|
|
+ message(STATUS "CURL linkage will be non-static")
|
|
endif ()
|
|
- else()
|
|
- message(STATUS "CURL linkage will be non-static")
|
|
endif ()
|
|
endif ()
|
|
diff --git a/google/cloud/storage/config.cmake.in b/google/cloud/storage/config.cmake.in
|
|
index a4d261815..640089e09 100644
|
|
--- a/google/cloud/storage/config.cmake.in
|
|
+++ b/google/cloud/storage/config.cmake.in
|
|
@@ -13,21 +13,25 @@
|
|
# limitations under the License.
|
|
|
|
include(CMakeFindDependencyMacro)
|
|
-find_dependency(CURL)
|
|
+# Search for libcurl, first using CONFIG mode, and retrying
|
|
+# using MODULE mode if that fails
|
|
+find_package(CURL CONFIG QUIET) # find_package so we can explicitly specify QUIET
|
|
+if(NOT CURL_FOUND)
|
|
+ find_dependency(CURL MODULE)
|
|
+ # Some versions of FindCURL do not define CURL::libcurl, so we define it ourselves.
|
|
+ if (NOT TARGET CURL::libcurl)
|
|
+ add_library(CURL::libcurl UNKNOWN IMPORTED)
|
|
+ set_property(TARGET CURL::libcurl
|
|
+ APPEND
|
|
+ PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CURL_INCLUDE_DIR}")
|
|
+ set_property(TARGET CURL::libcurl
|
|
+ APPEND
|
|
+ PROPERTY IMPORTED_LOCATION "${CURL_LIBRARY}")
|
|
+ endif ()
|
|
+endif()
|
|
find_dependency(Crc32c)
|
|
find_dependency(google_cloud_cpp_common)
|
|
find_dependency(OpenSSL)
|
|
find_dependency(ZLIB)
|
|
|
|
-# Some versions of FindCURL do not define CURL::libcurl, so we define it ourselves.
|
|
-if (NOT TARGET CURL::libcurl)
|
|
- add_library(CURL::libcurl UNKNOWN IMPORTED)
|
|
- set_property(TARGET CURL::libcurl
|
|
- APPEND
|
|
- PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CURL_INCLUDE_DIR}")
|
|
- set_property(TARGET CURL::libcurl
|
|
- APPEND
|
|
- PROPERTY IMPORTED_LOCATION "${CURL_LIBRARY}")
|
|
-endif ()
|
|
-
|
|
include("${CMAKE_CURRENT_LIST_DIR}/storage-targets.cmake")
|