aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfuzzard <fuzzard@kodi.tv>2024-04-28 13:33:56 +1000
committerfuzzard <fuzzard@kodi.tv>2024-05-09 09:09:47 +1000
commitbb8fef6b73949672deb89d6955907f6db849d0a2 (patch)
tree4c465f03619a49d2a68063dca841a4c0ded5b852
parentfffd282919581873a2be4f3ad13ea2462e5d79ab (diff)
downloadxbmc-bb8fef6b73949672deb89d6955907f6db849d0a2.tar.xz
[cmake][modules] FindCurl migrate to TARGET usage
-rw-r--r--cmake/modules/FindCurl.cmake103
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)