From 5f9b9cfa26f274e381e92d73cfa33fb55582436e Mon Sep 17 00:00:00 2001 From: fuzzard Date: Tue, 5 Sep 2023 16:06:43 +1000 Subject: [PATCH] [cmake] FindUdfread migrate to full TARGET usage --- cmake/modules/FindUdfread.cmake | 111 +++++++++++++++++++++----------- xbmc/filesystem/CMakeLists.txt | 2 +- 2 files changed, 74 insertions(+), 39 deletions(-) diff --git a/cmake/modules/FindUdfread.cmake b/cmake/modules/FindUdfread.cmake index 35c1d9d5ba590..5aadd9167708b 100644 --- a/cmake/modules/FindUdfread.cmake +++ b/cmake/modules/FindUdfread.cmake @@ -3,55 +3,90 @@ # -------- # Finds the udfread library # -# This will define the following variables:: +# This will define the following target: # -# UDFREAD_FOUND - system has udfread -# UDFREAD_INCLUDE_DIRS - the udfread include directory -# UDFREAD_LIBRARIES - the udfread libraries -# UDFREAD_DEFINITIONS - the udfread definitions +# udfread::udfread - The libudfread library -if(ENABLE_INTERNAL_UDFREAD) - include(cmake/scripts/common/ModuleHelpers.cmake) +if(NOT TARGET udfread::udfread) + if(WIN32 OR WINDOWS_STORE) + include(FindPackageMessage) - set(MODULE_LC udfread) + find_package(libudfread CONFIG) - SETUP_BUILD_VARS() + if(libudfread_FOUND) + # Specifically tailored to kodi windows cmake config - Debug and RelWithDebInfo available + get_target_property(UDFREAD_LIBRARY_RELEASE libudfread::libudfread IMPORTED_LOCATION_RELWITHDEBINFO) + get_target_property(UDFREAD_LIBRARY_DEBUG libudfread::libudfread IMPORTED_LOCATION_DEBUG) + get_target_property(UDFREAD_INCLUDE_DIR libudfread::libudfread INTERFACE_INCLUDE_DIRECTORIES) - set(UDFREAD_VERSION ${${MODULE}_VER}) + include(SelectLibraryConfigurations) + select_library_configurations(UDFREAD) - set(CONFIGURE_COMMAND autoreconf -vif && - ./configure - --enable-static - --disable-shared - --prefix=${DEPENDS_PATH}) - set(BUILD_IN_SOURCE 1) + find_package_handle_standard_args(Udfread + REQUIRED_VARS UDFREAD_LIBRARY UDFREAD_INCLUDE_DIR + VERSION_VAR UDFREAD_VERSION) + endif() + else() + find_package(PkgConfig) + pkg_check_modules(udfread libudfread IMPORTED_TARGET GLOBAL QUIET) - BUILD_DEP_TARGET() + include(cmake/scripts/common/ModuleHelpers.cmake) - set_property(GLOBAL APPEND PROPERTY INTERNAL_DEPS_PROP udfread) -else() - if(PKG_CONFIG_FOUND) - pkg_search_module(PC_UDFREAD QUIET libudfread>=1.0.0 udfread>=1.0.0) - endif() + set(MODULE_LC udfread) + SETUP_BUILD_VARS() - find_path(UDFREAD_INCLUDE_DIR NAMES udfread/udfread.h - PATHS ${PC_UDFREAD_INCLUDEDIR}) + # Check for existing UDFREAD. If version >= UDFREAD-VERSION file version, dont build + # A corner case, but if a linux/freebsd user WANTS to build internal udfread, build anyway + if(NOT udfread_FOUND OR + (udfread_VERSION VERSION_LESS ${${MODULE}_VER} AND ENABLE_INTERNAL_UDFREAD) OR + ((CORE_SYSTEM_NAME STREQUAL linux OR CORE_SYSTEM_NAME STREQUAL freebsd) AND ENABLE_INTERNAL_UDFREAD)) - find_library(UDFREAD_LIBRARY NAMES udfread libudfread - PATHS ${PC_UDFREAD_LIBDIR}) + set(UDFREAD_VERSION ${${MODULE}_VER}) + set(BUILD_NAME udfread_build) - set(UDFREAD_VERSION ${PC_UDFREAD_VERSION}) -endif() + set(CONFIGURE_COMMAND autoreconf -vif && + ./configure + --enable-static + --disable-shared + --prefix=${DEPENDS_PATH}) + set(BUILD_IN_SOURCE 1) -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Udfread - REQUIRED_VARS UDFREAD_LIBRARY UDFREAD_INCLUDE_DIR - VERSION_VAR UDFREAD_VERSION) + BUILD_DEP_TARGET() + elseif(udfread_FOUND) + get_target_property(UDFREAD_LIBRARY PkgConfig::udfread INTERFACE_LINK_LIBRARIES) + get_target_property(UDFREAD_INCLUDE_DIR PkgConfig::udfread INTERFACE_INCLUDE_DIRECTORIES) + set(UDFREAD_VERSION ${udfread_VERSION}) + endif() -if(UDFREAD_FOUND) - set(UDFREAD_LIBRARIES ${UDFREAD_LIBRARY}) - set(UDFREAD_INCLUDE_DIRS ${UDFREAD_INCLUDE_DIR}) - set(UDFREAD_DEFINITIONS -DHAS_UDFREAD=1) -endif() + if(udfread_FOUND OR TARGET udfread_build) + set(UDFREAD_FOUND ${udfread_FOUND}) + include(FindPackageMessage) + find_package_message(udfread "Found udfread: ${UDFREAD_LIBRARY} (version: \"${UDFREAD_VERSION}\")" "[${UDFREAD_LIBRARY}][${UDFREAD_INCLUDE_DIR}]") + endif() + + endif() -mark_as_advanced(UDFREAD_INCLUDE_DIR UDFREAD_LIBRARY) + # pkgconfig populate target that is sufficient version + if(TARGET PkgConfig::udfread AND NOT TARGET udfread_build) + add_library(udfread::udfread ALIAS PkgConfig::udfread) + set_target_properties(PkgConfig::udfread PROPERTIES + INTERFACE_COMPILE_DEFINITIONS HAS_UDFREAD=1) + # windows cmake config populated target + elseif(TARGET libudfread::libudfread) + add_library(udfread::udfread ALIAS libudfread::libudfread) + set_target_properties(libudfread::libudfread PROPERTIES + INTERFACE_COMPILE_DEFINITIONS HAS_UDFREAD=1) + # otherwise we are building + elseif(TARGET udfread_build) + add_library(udfread::udfread UNKNOWN IMPORTED) + set_target_properties(udfread::udfread PROPERTIES + IMPORTED_LOCATION "${UDFREAD_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${UDFREAD_INCLUDE_DIR}" + INTERFACE_COMPILE_DEFINITIONS HAS_UDFREAD=1) + add_dependencies(udfread::udfread udfread_build) + endif() + + if(TARGET udfread::udfread) + set_property(GLOBAL APPEND PROPERTY INTERNAL_DEPS_PROP udfread::udfread) + endif() +endif() diff --git a/xbmc/filesystem/CMakeLists.txt b/xbmc/filesystem/CMakeLists.txt index a88132b3bc95a..8d2336a347156 100644 --- a/xbmc/filesystem/CMakeLists.txt +++ b/xbmc/filesystem/CMakeLists.txt @@ -131,7 +131,7 @@ if(ISO9660PP_FOUND) ISO9660File.h) endif() -if(UDFREAD_FOUND) +if(TARGET udfread::udfread) list(APPEND SOURCES UDFBlockInput.cpp UDFDirectory.cpp UDFFile.cpp)