Skip to content

Commit

Permalink
[cmake][modules] FindLibZip cleanup and use core_target_link_libraries
Browse files Browse the repository at this point in the history
  • Loading branch information
fuzzard committed May 12, 2024
1 parent a751eb8 commit 7522065
Showing 1 changed file with 38 additions and 32 deletions.
70 changes: 38 additions & 32 deletions cmake/modules/FindLibZip.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,21 @@
# -----------
# Finds the LibZip library
#
# This will define the following variables::
# The following imported target will be created:
#
# LIBZIP_FOUND - system has LibZip
# LIBZIP_INCLUDE_DIRS - the LibZip include directory
# LIBZIP_LIBRARIES - the LibZip libraries
#
# and the following imported targets:
#
# libzip::zip - The LibZip library
# kodi::LibZip - The LibZip library

include(cmake/scripts/common/ModuleHelpers.cmake)

set(MODULE_LC libzip)
SETUP_BUILD_VARS()

# Check for existing lib
find_package(LIBZIP CONFIG QUIET
find_package(libzip CONFIG QUIET
HINTS ${DEPENDS_PATH}/lib
${${CORE_PLATFORM_NAME_LC}_SEARCH_CONFIG})

if(NOT LIBZIP_FOUND OR LIBZIP_VERSION VERSION_LESS ${${MODULE}_VER})
if(NOT LIBZIP_FOUND OR libzip_VERSION VERSION_LESS ${${MODULE}_VER})
# Check for dependencies
find_package(GnuTLS MODULE REQUIRED)

Expand All @@ -41,13 +35,27 @@ if(NOT LIBZIP_FOUND OR LIBZIP_VERSION VERSION_LESS ${${MODULE}_VER})

BUILD_DEP_TARGET()
else()
find_path(LIBZIP_INCLUDE_DIR NAMES zip.h
HINTS ${DEPENDS_PATH}/include
${${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(_ZIP_CONFIGURATIONS libzip::zip IMPORTED_CONFIGURATIONS)
foreach(_zip_config IN LISTS _ZIP_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 ${_zip_config} _zip_config_UPPER)
if((NOT ${_zip_config_UPPER} STREQUAL "RELEASE") AND
(NOT ${_zip_config_UPPER} STREQUAL "DEBUG"))
get_target_property(ZIP_LIBRARY_RELEASE libzip::zip IMPORTED_LOCATION_${_zip_config_UPPER})
else()
get_target_property(ZIP_LIBRARY_${_zip_config_UPPER} libzip::zip IMPORTED_LOCATION_${_zip_config_UPPER})
endif()
endforeach()

get_target_property(ZIP_INCLUDE_DIR libzip::zip INTERFACE_INCLUDE_DIRECTORIES)
set(LIBZIP_VERSION ${libzip_VERSION})

find_library(LIBZIP_LIBRARY NAMES zip
HINTS ${DEPENDS_PATH}/lib
${${CORE_PLATFORM_NAME_LC}_SEARCH_CONFIG})
include(SelectLibraryConfigurations)
select_library_configurations(LIBZIP)
unset(LIBZIP_LIBRARIES)
endif()

include(FindPackageHandleStandardArgs)
Expand All @@ -56,31 +64,29 @@ find_package_handle_standard_args(LibZip
VERSION_VAR LIBZIP_VERSION)

if(LIBZIP_FOUND)
set(LIBZIP_LIBRARIES ${LIBZIP_LIBRARY})
set(LIBZIP_INCLUDE_DIRS ${LIBZIP_INCLUDE_DIR})
# cmake target and not building internal
if(TARGET libzip::zip AND NOT TARGET libzip)

if(NOT TARGET libzip::zip)
add_library(libzip::zip UNKNOWN IMPORTED)
add_library(${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME} ALIAS libzip::zip)

set_target_properties(libzip::zip PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${LIBZIP_INCLUDE_DIR}"
IMPORTED_LOCATION "${LIBZIP_LIBRARY}")

if(TARGET libzip)
add_dependencies(libzip::zip libzip)
endif()
else()
# ToDo: When we correctly import dependencies cmake targets for the following
# BZip2::BZip2, LibLZMA::LibLZMA, GnuTLS::GnuTLS, Nettle::Nettle,ZLIB::ZLIB
# For now, we just override
set_target_properties(libzip::zip PROPERTIES
INTERFACE_LINK_LIBRARIES "")
else()
add_library(${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME} UNKNOWN IMPORTED)

set_target_properties(${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${LIBZIP_INCLUDE_DIR}"
IMPORTED_LOCATION "${LIBZIP_LIBRARY}")

if(TARGET libzip)
add_dependencies(${APP_NAME_LC}::${CMAKE_FIND_PACKAGE_NAME} libzip)
endif()
endif()
set_property(GLOBAL APPEND PROPERTY INTERNAL_DEPS_PROP libzip::zip)
else()
if(LIBZIP_FIND_REQUIRED)
if(LibZip_FIND_REQUIRED)
message(FATAL_ERROR "LibZip not found.")
endif()
endif()

mark_as_advanced(LIBZIP_INCLUDE_DIR LIBZIP_LIBRARY)

0 comments on commit 7522065

Please sign in to comment.