diff options
author | fuzzard <fuzzard@kodi.tv> | 2024-04-28 13:33:56 +1000 |
---|---|---|
committer | fuzzard <fuzzard@kodi.tv> | 2024-05-09 09:09:47 +1000 |
commit | bb8fef6b73949672deb89d6955907f6db849d0a2 (patch) | |
tree | 4c465f03619a49d2a68063dca841a4c0ded5b852 | |
parent | fffd282919581873a2be4f3ad13ea2462e5d79ab (diff) | |
download | xbmc-bb8fef6b73949672deb89d6955907f6db849d0a2.tar.xz |
[cmake][modules] FindCurl migrate to TARGET usage
-rw-r--r-- | cmake/modules/FindCurl.cmake | 103 |
1 files changed, 46 insertions, 57 deletions
diff --git a/cmake/modules/FindCurl.cmake b/cmake/modules/FindCurl.cmake index 3dc8bf0231..33df48c625 100644 --- a/cmake/modules/FindCurl.cmake +++ b/cmake/modules/FindCurl.cmake @@ -3,72 +3,61 @@ # -------- # Finds the Curl library # -# This will define the following variables:: -# -# CURL_FOUND - system has Curl -# CURL_INCLUDE_DIRS - the Curl include directory -# CURL_LIBRARIES - the Curl libraries -# CURL_DEFINITIONS - the Curl definitions -# -# and the following imported targets:: +# This will define the following target: # # Curl::Curl - The Curl library -find_package(PkgConfig) - -if(PKG_CONFIG_FOUND) - pkg_check_modules(PC_CURL libcurl QUIET) -endif() - -find_path(CURL_INCLUDE_DIR NAMES curl/curl.h - HINTS ${PC_CURL_INCLUDEDIR}) -find_library(CURL_LIBRARY NAMES curl libcurl libcurl_imp - HINTS ${PC_CURL_LIBDIR}) - -set(CURL_VERSION ${PC_CURL_VERSION}) - -set(CURL_LIB_TYPE SHARED) -set(CURL_LDFLAGS ${PC_CURL_LDFLAGS}) - -# check if curl is statically linked -if(${CURL_LIBRARY} MATCHES ".+\.a$" AND PC_CURL_STATIC_LDFLAGS) - set(CURL_LIB_TYPE STATIC) - set(CURL_LDFLAGS ${PC_CURL_STATIC_LDFLAGS}) - - pkg_check_modules(PC_NGHTTP2 libnghttp2 QUIET) - find_library(NGHTTP2_LIBRARY NAMES libnghttp2 nghttp2 - HINTS ${PC_NGHTTP2_LIBDIR}) - - pkg_check_modules(PC_BROTLIDEC libbrotlidec QUIET) - find_library(BROTLIDEC_LIBRARY NAMES brotlidec - HINTS ${PC_BROTLIDEC_LIBDIR}) +if(NOT TARGET Curl::Curl) + find_package(PkgConfig) + + # We only rely on pkgconfig for non windows platforms + if(PKG_CONFIG_FOUND AND NOT (WIN32 OR WINDOWS_STORE)) + pkg_check_modules(CURL libcurl QUIET) + + # First item is the full path of the library file found + # pkg_check_modules does not populate a variable of the found library explicitly + list(GET CURL_LINK_LIBRARIES 0 CURL_LIBRARY) + else() + + find_path(CURL_INCLUDEDIR NAMES curl/curl.h + HINTS ${DEPENDS_PATH}/include + ${${CORE_PLATFORM_LC}_SEARCH_CONFIG} + NO_CACHE) + find_library(CURL_LIBRARY NAMES curl libcurl libcurl_imp + HINTS ${DEPENDS_PATH}/lib + ${${CORE_PLATFORM_LC}_SEARCH_CONFIG} + NO_CACHE) + endif() - pkg_check_modules(PC_BROTLICOMMON libbrotlicommon QUIET) - find_library(BROTLICOMMON_LIBRARY NAMES brotlicommon - HINTS ${PC_BROTLICOMMON_LIBDIR}) - set(BROTLI_LIBRARIES ${BROTLIDEC_LIBRARY} ${BROTLICOMMON_LIBRARY}) + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(Curl + REQUIRED_VARS CURL_LIBRARY CURL_INCLUDEDIR + VERSION_VAR CURL_VERSION) -endif() + if(CURL_FOUND) + if(NOT TARGET Curl::Curl) + add_library(Curl::Curl UNKNOWN IMPORTED) + set_target_properties(Curl::Curl PROPERTIES + IMPORTED_LOCATION "${CURL_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${CURL_INCLUDEDIR}") -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Curl - REQUIRED_VARS CURL_LIBRARY CURL_INCLUDE_DIR - VERSION_VAR CURL_VERSION) + # Add link libraries for static lib usage + if(${CURL_LIBRARY} MATCHES ".+\.a$" AND CURL_LINK_LIBRARIES) + # Remove duplicates + list(REMOVE_DUPLICATES CURL_LINK_LIBRARIES) -if(CURL_FOUND) - set(CURL_INCLUDE_DIRS ${CURL_INCLUDE_DIR}) - set(CURL_LIBRARIES ${CURL_LIBRARY} ${NGHTTP2_LIBRARY} ${BROTLI_LIBRARIES}) + # Remove own library - eg libcurl.a + list(FILTER CURL_LINK_LIBRARIES EXCLUDE REGEX ".*curl.*\.a$") - if(NOT TARGET Curl::Curl) - add_library(Curl::Curl ${CURL_LIB_TYPE} IMPORTED) - set_target_properties(Curl::Curl PROPERTIES - IMPORTED_LOCATION "${CURL_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${CURL_INCLUDE_DIR}") - if(HAS_CURL_STATIC) set_target_properties(Curl::Curl PROPERTIES - INTERFACE_COMPILE_DEFINITIONS HAS_CURL_STATIC=1) + INTERFACE_LINK_LIBRARIES "${CURL_LINK_LIBRARIES}") + endif() + + set_property(GLOBAL APPEND PROPERTY INTERNAL_DEPS_PROP Curl::Curl) + endif() + else() + if(Curl_FIND_REQUIRED) + message(FATAL_ERROR "Curl libraries were not found.") endif() endif() endif() - -mark_as_advanced(CURL_INCLUDE_DIR CURL_LIBRARY CURL_LDFLAGS) |