diff options
| author | past-due <30942300+past-due@users.noreply.github.com> | 2019-04-09 02:54:07 -0400 |
|---|---|---|
| committer | Phil Christensen <philc@microsoft.com> | 2019-04-08 23:54:07 -0700 |
| commit | c2790cd23e75ee4d65772b1ac8f0e5b0f4cf8c04 (patch) | |
| tree | edbb535a2f1b43da9aa877678cd8b5b834c32751 /ports/google-cloud-cpp/cmake-libcurl-find-config.patch | |
| parent | 6240fe128b4f17d6f70c66b446d758483e622b69 (diff) | |
| download | vcpkg-c2790cd23e75ee4d65772b1ac8f0e5b0f4cf8c04.tar.gz vcpkg-c2790cd23e75ee4d65772b1ac8f0e5b0f4cf8c04.zip | |
[google-cloud-cpp] Fix libcurl linkage (#5968)
* [google-cloud-cpp] Fix libcurl linkage
* [curl] Fix libcurl exported CMake target config (Windows)
Diffstat (limited to 'ports/google-cloud-cpp/cmake-libcurl-find-config.patch')
| -rw-r--r-- | ports/google-cloud-cpp/cmake-libcurl-find-config.patch | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/ports/google-cloud-cpp/cmake-libcurl-find-config.patch b/ports/google-cloud-cpp/cmake-libcurl-find-config.patch new file mode 100644 index 000000000..0c1d6dd6f --- /dev/null +++ b/ports/google-cloud-cpp/cmake-libcurl-find-config.patch @@ -0,0 +1,142 @@ +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") |
