Skip to content

Commit

Permalink
[cmake] FindUdfread migrate to full TARGET usage
Browse files Browse the repository at this point in the history
  • Loading branch information
fuzzard committed Sep 5, 2023
1 parent 84c4cae commit 5f9b9cf
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 39 deletions.
111 changes: 73 additions & 38 deletions cmake/modules/FindUdfread.cmake
Expand Up @@ -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()
2 changes: 1 addition & 1 deletion xbmc/filesystem/CMakeLists.txt
Expand Up @@ -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)
Expand Down

0 comments on commit 5f9b9cf

Please sign in to comment.