aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfuzzard <fuzzard@kodi.tv>2023-09-05 16:06:43 +1000
committerfuzzard <fuzzard@kodi.tv>2023-09-06 09:05:29 +1000
commit5f9b9cfa26f274e381e92d73cfa33fb55582436e (patch)
tree7142ccaf956f00e1b1a3da4ba4b5176b7c43e9d5
parent84c4cae1ae55dddfada4c80e5054b0405e860b84 (diff)
[cmake] FindUdfread migrate to full TARGET usage
-rw-r--r--cmake/modules/FindUdfread.cmake111
-rw-r--r--xbmc/filesystem/CMakeLists.txt2
2 files changed, 74 insertions, 39 deletions
diff --git a/cmake/modules/FindUdfread.cmake b/cmake/modules/FindUdfread.cmake
index 35c1d9d5ba..5aadd91677 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 a88132b3bc..8d2336a347 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)