Skip to content

Commit

Permalink
Merge pull request #25197 from fuzzard/cmake_cleanup1
Browse files Browse the repository at this point in the history
[Cmake][modules] Cleanup and utilisation of new function to link libraries
  • Loading branch information
fuzzard committed May 18, 2024
2 parents 94b12dd + c1bfdc2 commit c7cbad0
Show file tree
Hide file tree
Showing 45 changed files with 465 additions and 468 deletions.
7 changes: 4 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ endif()
set(outputFilterRegex "addons/xbmc.json")
find_addon_xml_in_files(${outputFilterRegex})

if(TARGET ALSA::ALSA AND TARGET PulseAudio::PulseAudio)
if(TARGET ${APP_NAME_LC}::Alsa AND TARGET PulseAudio::PulseAudio)
list(APPEND AUDIO_BACKENDS_LIST "alsa+pulseaudio")
endif()

Expand Down Expand Up @@ -324,7 +324,7 @@ list(APPEND install_data ${ADDON_INSTALL_DATA})
add_library(compileinfo OBJECT ${CORE_BUILD_DIR}/xbmc/CompileInfo.cpp)
set_target_properties(compileinfo PROPERTIES FOLDER "Build Utilities")
target_compile_options(compileinfo PRIVATE ${SYSTEM_DEFINES} ${ARCH_DEFINES})
add_dependencies(compileinfo fmt::fmt)
target_link_libraries(compileinfo PRIVATE ${APP_NAME_LC}::Fmt)

if(NOT MSVC)
target_compile_options(compileinfo PUBLIC ${CORE_COMPILE_OPTIONS})
Expand Down Expand Up @@ -409,6 +409,7 @@ core_add_optional_subdirs_from_filelist(${CMAKE_SOURCE_DIR}/cmake/treedata/optio
${CMAKE_SOURCE_DIR}/cmake/treedata/optional/${CORE_SYSTEM_NAME}/*.txt)

target_link_libraries(lib${APP_NAME_LC} PUBLIC ${core_DEPENDS} ${SYSTEM_LDFLAGS} ${DEPLIBS} ${CMAKE_DL_LIBS} ${GLOBAL_TARGET_DEPS})
core_target_link_libraries(lib${APP_NAME_LC})
set_target_properties(lib${APP_NAME_LC} PROPERTIES PROJECT_LABEL "xbmc")
source_group_by_folder(lib${APP_NAME_LC} RELATIVE ${CMAKE_SOURCE_DIR}/xbmc)
if(WIN32)
Expand All @@ -433,7 +434,7 @@ else()
endif()
add_dependencies(${APP_NAME_LC} ${APP_NAME_LC}-libraries)

whole_archive(_MAIN_LIBRARIES ${FSTRCMP_LIBRARY} ${core_DEPENDS})
whole_archive(_MAIN_LIBRARIES ${core_DEPENDS})
target_link_libraries(${APP_NAME_LC} ${_MAIN_LIBRARIES} lib${APP_NAME_LC} ${DEPLIBS})
unset(_MAIN_LIBRARIES)

Expand Down
57 changes: 36 additions & 21 deletions cmake/modules/FindASS.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -5,35 +5,52 @@
#
# This will define the following target:
#
# ASS::ASS - The ASS library
# ${APP_NAME_LC}::ASS - The ASS library
#

if(NOT TARGET ASS::ASS)
if(NOT TARGET ${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME})

find_package(PkgConfig)
# Do not use pkgconfig on windows
if(PKG_CONFIG_FOUND AND NOT WIN32)
if(PKG_CONFIG_FOUND AND NOT (WIN32 OR WINDOWS_STORE))
pkg_check_modules(PC_ASS libass QUIET IMPORTED_TARGET)

# INTERFACE_LINK_OPTIONS is incorrectly populated when cmake generation is executed
# when an existing build generation is already done. Just set this to blank
set_target_properties(PkgConfig::PC_ASS PROPERTIES INTERFACE_LINK_OPTIONS "")

# 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 PC_ASS_LINK_LIBRARIES 0 ASS_LIBRARY)
set(ASS_INCLUDE_DIR ${PC_ASS_INCLUDEDIR})
set(ASS_VERSION ${PC_ASS_VERSION})
elseif(WIN32)
elseif(WIN32 OR WINDOWS_STORE)
find_package(libass CONFIG QUIET REQUIRED
HINTS ${DEPENDS_PATH}/lib/cmake
${${CORE_PLATFORM_NAME_LC}_SEARCH_CONFIG})

# we only do this because we use find_package_handle_standard_args for config time output
# and it isnt capable of handling TARGETS, so we have to extract the info
get_target_property(_ASS_CONFIGURATIONS libass::libass IMPORTED_CONFIGURATIONS)
foreach(_ass_config IN LISTS _ASS_CONFIGURATIONS)
# Some non standard config (eg None on Debian)
# Just set to RELEASE var so select_library_configurations can continue to work its magic
string(TOUPPER ${_ass_config} _ass_config_UPPER)
if((NOT ${_ass_config_UPPER} STREQUAL "RELEASE") AND
(NOT ${_ass_config_UPPER} STREQUAL "DEBUG"))
get_target_property(ASS_LIBRARY_RELEASE libass::libass IMPORTED_LOCATION_${_ass_config_UPPER})
else()
get_target_property(ASS_LIBRARY_${_ass_config_UPPER} libass::libass IMPORTED_LOCATION_${_ass_config_UPPER})
endif()
endforeach()

get_target_property(ASS_INCLUDE_DIR libass::libass INTERFACE_INCLUDE_DIRECTORIES)
set(ASS_VERSION ${libass_VERSION})
endif()

find_path(ASS_INCLUDE_DIR NAMES ass/ass.h
HINTS ${DEPENDS_PATH}/include ${PC_ASS_INCLUDEDIR}
${${CORE_PLATFORM_LC}_SEARCH_CONFIG}
NO_CACHE)
find_library(ASS_LIBRARY NAMES ass libass
HINTS ${DEPENDS_PATH}/lib ${PC_ASS_LIBDIR}
${${CORE_PLATFORM_LC}_SEARCH_CONFIG}
NO_CACHE)
include(SelectLibraryConfigurations)
select_library_configurations(ASS)
unset(ASS_LIBRARIES)
endif()

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(ASS
Expand All @@ -42,16 +59,14 @@ if(NOT TARGET ASS::ASS)

if(ASS_FOUND)
if(TARGET PkgConfig::PC_ASS)
add_library(ASS::ASS ALIAS PkgConfig::PC_ASS)
add_library(${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME} ALIAS PkgConfig::PC_ASS)
elseif(TARGET libass::libass)
# Kodi custom libass target used for windows platforms
add_library(ASS::ASS ALIAS libass::libass)
else()
add_library(ASS::ASS UNKNOWN IMPORTED)
set_target_properties(ASS::ASS PROPERTIES
IMPORTED_LOCATION "${ASS_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${ASS_INCLUDE_DIR}")
add_library(${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME} ALIAS libass::libass)
endif()
else()
if(ASS_FIND_REQUIRED)
message(FATAL_ERROR "Ass libraries were not found.")
endif()
set_property(GLOBAL APPEND PROPERTY INTERNAL_DEPS_PROP ASS::ASS)
endif()
endif()
17 changes: 10 additions & 7 deletions cmake/modules/FindAcbAPI.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
#
# This will define the following target:
#
# ACBAPI::ACBAPI - The acbAPI library
# ${APP_NAME_LC}::AcbAPI - The acbAPI library

if(NOT TARGET ACBAPI::ACBAPI)
if(NOT TARGET ${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME})
find_package(PkgConfig)
if(PKG_CONFIG_FOUND)
pkg_check_modules(PC_ACBAPI libAcbAPI QUIET)
Expand All @@ -28,15 +28,18 @@ if(NOT TARGET ACBAPI::ACBAPI)
VERSION_VAR ACBAPI_VERSION)

if(ACBAPI_FOUND)
add_library(ACBAPI::ACBAPI UNKNOWN IMPORTED)
set_target_properties(ACBAPI::ACBAPI PROPERTIES
IMPORTED_LOCATION "${ACBAPI_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${ACBAPI_INCLUDE_DIR}")
set_property(GLOBAL APPEND PROPERTY INTERNAL_DEPS_PROP ACBAPI::ACBAPI)
add_library(${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME} UNKNOWN IMPORTED)
set_target_properties(${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME} PROPERTIES
IMPORTED_LOCATION "${ACBAPI_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${ACBAPI_INCLUDE_DIR}")

# creates an empty library to install on webOS 5+ devices
file(TOUCH dummy.c)
add_library(AcbAPI SHARED dummy.c)
set_target_properties(AcbAPI PROPERTIES VERSION 1.0.0 SOVERSION 1)
else()
if(AcbAPI_FIND_REQUIRED)
message(FATAL_ERROR "AcbAPI libraries were not found.")
endif()
endif()
endif()
13 changes: 6 additions & 7 deletions cmake/modules/FindAlsa.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
#
# This will define the following target:
#
# ALSA::ALSA - The Alsa library
# ${APP_NAME_LC}::Alsa - The Alsa library

if(NOT TARGET ALSA::ALSA)
if(NOT TARGET ${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME})
find_package(PkgConfig)

if(Alsa_FIND_VERSION)
Expand Down Expand Up @@ -41,10 +41,9 @@ if(NOT TARGET ALSA::ALSA)
set(AUDIO_BACKENDS_LIST ${AUDIO_BACKENDS_LIST} PARENT_SCOPE)

# We explicitly dont include ALSA_INCLUDE_DIR, as 'timer.h' is a dangerous file
add_library(ALSA::ALSA UNKNOWN IMPORTED)
set_target_properties(ALSA::ALSA PROPERTIES
IMPORTED_LOCATION "${ALSA_LIBRARY}"
INTERFACE_COMPILE_DEFINITIONS HAS_ALSA=1)
set_property(GLOBAL APPEND PROPERTY INTERNAL_DEPS_PROP ALSA::ALSA)
add_library(${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME} UNKNOWN IMPORTED)
set_target_properties(${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME} PROPERTIES
IMPORTED_LOCATION "${ALSA_LIBRARY}"
INTERFACE_COMPILE_DEFINITIONS HAS_ALSA)
endif()
endif()
44 changes: 20 additions & 24 deletions cmake/modules/FindAvahi.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,33 +3,29 @@
# ---------
# Finds the avahi library
#
# This will define the following target:
# This will define the following targets:
#
# Avahi::Avahi - The avahi client library
# Avahi::AvahiCommon - The avahi common library
# ${APP_NAME_LC}::Avahi - The avahi client library
# ${APP_NAME_LC}::AvahiCommon - The avahi common library

if(NOT TARGET Avahi::Avahi)
if(NOT TARGET ${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME})
find_package(PkgConfig)
if(PKG_CONFIG_FOUND)
pkg_check_modules(PC_AVAHI avahi-client QUIET)
endif()

find_path(AVAHI_CLIENT_INCLUDE_DIR NAMES avahi-client/client.h
HINTS ${DEPENDS_PATH}/include ${PC_AVAHI_INCLUDEDIR}
${${CORE_PLATFORM_LC}_SEARCH_CONFIG}
NO_CACHE)
${${CORE_PLATFORM_LC}_SEARCH_CONFIG})
find_path(AVAHI_COMMON_INCLUDE_DIR NAMES avahi-common/defs.h
HINTS ${DEPENDS_PATH}/include ${PC_AVAHI_INCLUDEDIR}
${${CORE_PLATFORM_LC}_SEARCH_CONFIG}
NO_CACHE)
${${CORE_PLATFORM_LC}_SEARCH_CONFIG})
find_library(AVAHI_CLIENT_LIBRARY NAMES avahi-client
HINTS ${DEPENDS_PATH}/lib ${PC_AVAHI_LIBDIR}
${${CORE_PLATFORM_LC}_SEARCH_CONFIG}
NO_CACHE)
${${CORE_PLATFORM_LC}_SEARCH_CONFIG})
find_library(AVAHI_COMMON_LIBRARY NAMES avahi-common
HINTS ${DEPENDS_PATH}/lib ${PC_AVAHI_LIBDIR}
${${CORE_PLATFORM_LC}_SEARCH_CONFIG}
NO_CACHE)
${${CORE_PLATFORM_LC}_SEARCH_CONFIG})

set(AVAHI_VERSION ${PC_AVAHI_VERSION})

Expand All @@ -40,17 +36,17 @@ if(NOT TARGET Avahi::Avahi)
VERSION_VAR AVAHI_VERSION)

if(AVAHI_FOUND)
add_library(Avahi::AvahiCommon UNKNOWN IMPORTED)
set_target_properties(Avahi::AvahiCommon PROPERTIES
IMPORTED_LOCATION "${AVAHI_COMMON_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${AVAHI_COMMON_INCLUDE_DIR}"
INTERFACE_COMPILE_DEFINITIONS "HAS_AVAHI=1;HAS_ZEROCONF=1")
add_library(Avahi::Avahi UNKNOWN IMPORTED)
set_target_properties(Avahi::Avahi PROPERTIES
IMPORTED_LOCATION "${AVAHI_CLIENT_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${AVAHI_CLIENT_INCLUDE_DIR}"
INTERFACE_COMPILE_DEFINITIONS "HAS_AVAHI=1;HAS_ZEROCONF=1"
INTERFACE_LINK_LIBRARIES Avahi::AvahiCommon)
set_property(GLOBAL APPEND PROPERTY INTERNAL_DEPS_PROP Avahi::Avahi)
add_library(${APP_NAME_LC}::AvahiCommon UNKNOWN IMPORTED)
set_target_properties(${APP_NAME_LC}::AvahiCommon PROPERTIES
IMPORTED_LOCATION "${AVAHI_COMMON_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${AVAHI_COMMON_INCLUDE_DIR}"
INTERFACE_COMPILE_DEFINITIONS "HAS_AVAHI;HAS_ZEROCONF")
add_library(${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME} UNKNOWN IMPORTED)
set_target_properties(${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME} PROPERTIES
IMPORTED_LOCATION "${AVAHI_CLIENT_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${AVAHI_CLIENT_INCLUDE_DIR}"
INTERFACE_COMPILE_DEFINITIONS "HAS_AVAHI;HAS_ZEROCONF"
INTERFACE_LINK_LIBRARIES Avahi::AvahiCommon)

endif()
endif()
21 changes: 9 additions & 12 deletions cmake/modules/FindBluetooth.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,18 @@
#
# This will define the following target:
#
# Bluetooth::Bluetooth - The Bluetooth library
# ${APP_NAME_LC}::Bluetooth - The Bluetooth library

if(NOT TARGET Bluetooth::Bluetooth)
if(NOT TARGET ${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME})
find_package(PkgConfig)
if(PKG_CONFIG_FOUND)
pkg_check_modules(PC_BLUETOOTH bluez bluetooth QUIET)
endif()

find_path(BLUETOOTH_INCLUDE_DIR NAMES bluetooth/bluetooth.h
HINTS ${PC_BLUETOOTH_INCLUDEDIR}
NO_CACHE)
HINTS ${PC_BLUETOOTH_INCLUDEDIR})
find_library(BLUETOOTH_LIBRARY NAMES bluetooth libbluetooth
HINTS ${PC_BLUETOOTH_LIBDIR}
NO_CACHE)
HINTS ${PC_BLUETOOTH_LIBDIR})

set(BLUETOOTH_VERSION ${PC_BLUETOOTH_VERSION})

Expand All @@ -28,11 +26,10 @@ if(NOT TARGET Bluetooth::Bluetooth)
VERSION_VAR BLUETOOTH_VERSION)

if(BLUETOOTH_FOUND)
add_library(Bluetooth::Bluetooth UNKNOWN IMPORTED)
set_target_properties(Bluetooth::Bluetooth PROPERTIES
IMPORTED_LOCATION "${BLUETOOTH_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${BLUETOOTH_INCLUDE_DIR}"
INTERFACE_COMPILE_DEFINITIONS HAVE_LIBBLUETOOTH=1)
set_property(GLOBAL APPEND PROPERTY INTERNAL_DEPS_PROP Bluetooth::Bluetooth)
add_library(${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME} UNKNOWN IMPORTED)
set_target_properties(${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME} PROPERTIES
IMPORTED_LOCATION "${BLUETOOTH_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${BLUETOOTH_INCLUDE_DIR}"
INTERFACE_COMPILE_DEFINITIONS HAVE_LIBBLUETOOTH)
endif()
endif()
21 changes: 9 additions & 12 deletions cmake/modules/FindCAP.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,18 @@
#
# This will define the following target:
#
# CAP::CAP - The LibCap library
# ${APP_NAME_LC}::CAP - The LibCap library

if(NOT TARGET CAP::CAP)
if(NOT TARGET ${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME})
find_package(PkgConfig)
if(PKG_CONFIG_FOUND)
pkg_check_modules(PC_CAP libcap QUIET)
endif()

find_path(CAP_INCLUDE_DIR NAMES sys/capability.h
HINTS ${PC_CAP_INCLUDEDIR}
NO_CACHE)
HINTS ${PC_CAP_INCLUDEDIR})
find_library(CAP_LIBRARY NAMES cap libcap
HINTS ${PC_CAP_LIBDIR}
NO_CACHE)
HINTS ${PC_CAP_LIBDIR})

set(CAP_VERSION ${PC_CAP_VERSION})

Expand All @@ -28,11 +26,10 @@ if(NOT TARGET CAP::CAP)
VERSION_VAR CAP_VERSION)

if(CAP_FOUND)
add_library(CAP::CAP UNKNOWN IMPORTED)
set_target_properties(CAP::CAP PROPERTIES
IMPORTED_LOCATION "${CAP_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${CAP_INCLUDE_DIR}"
INTERFACE_COMPILE_DEFINITIONS HAVE_LIBCAP=1)
set_property(GLOBAL APPEND PROPERTY INTERNAL_DEPS_PROP CAP::CAP)
add_library(${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME} UNKNOWN IMPORTED)
set_target_properties(${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME} PROPERTIES
IMPORTED_LOCATION "${CAP_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${CAP_INCLUDE_DIR}"
INTERFACE_COMPILE_DEFINITIONS HAVE_LIBCAP)
endif()
endif()
Loading

0 comments on commit c7cbad0

Please sign in to comment.