# Copyright (c) 2025 Dominic Masters # # This software is released under the MIT License. # https://opensource.org/licenses/MIT set(LIBZIP_ALLOW_FETCH ON CACHE BOOL "Allow fetching libzip if not found") set(LIBZIP_FETCH_GIT_REPO "https://github.com/nih-at/libzip.git" CACHE STRING "libzip Git repository") set(LIBZIP_FETCH_GIT_TAG "v1.11.1" CACHE STRING "libzip Git tag to fetch") set(LIBZIP_MIN_VERSION "" CACHE STRING "Required minimum libzip version (optional)") unset(LIBZIP_FOUND CACHE) unset(LIBZIP_TARGET CACHE) unset(LIBZIP_INCLUDE_DIRS CACHE) unset(LIBZIP_LIBRARIES CACHE) set(_find_args CONFIG QUIET) if(LIBZIP_MIN_VERSION) list(PREPEND _find_args ${LIBZIP_MIN_VERSION}) endif() find_package(libzip ${_find_args}) if(TARGET libzip::zip) set(LIBZIP_FOUND ON) set(LIBZIP_TARGET libzip::zip) elseif(TARGET zip) # some builds expose an un-namespaced "zip" add_library(libzip::zip ALIAS zip) set(LIBZIP_FOUND ON) set(LIBZIP_TARGET libzip::zip) endif() if(NOT LIBZIP_FOUND) find_package(PkgConfig QUIET) if(PkgConfig_FOUND) pkg_check_modules(LIBZIP_PC QUIET libzip) if(LIBZIP_PC_FOUND) # Create a consistent imported target matching libzip::zip add_library(libzip::zip INTERFACE IMPORTED) set_target_properties(libzip::zip PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LIBZIP_PC_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${LIBZIP_PC_LINK_LIBRARIES}" ) set(LIBZIP_FOUND ON) set(LIBZIP_TARGET libzip::zip) set(LIBZIP_INCLUDE_DIRS "${LIBZIP_PC_INCLUDE_DIRS}") set(LIBZIP_LIBRARIES "${LIBZIP_PC_LINK_LIBRARIES}") endif() endif() endif() # ---- 3) FetchContent as a last resort --------------------------------------- if(NOT LIBZIP_FOUND AND LIBZIP_ALLOW_FETCH) include(FetchContent) set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) set(LIBZIP_DO_INSTALL OFF CACHE BOOL "" FORCE) set(ENABLE_BZIP2 OFF CACHE BOOL "" FORCE) set(ENABLE_LZMA OFF CACHE BOOL "" FORCE) set(ENABLE_ZSTD OFF CACHE BOOL "" FORCE) FetchContent_Declare( libzip_fetch GIT_REPOSITORY "${LIBZIP_FETCH_GIT_REPO}" GIT_TAG "${LIBZIP_FETCH_GIT_TAG}" ) FetchContent_MakeAvailable(libzip_fetch) if(NOT TARGET libzip::zip) if(TARGET zip) add_library(libzip::zip ALIAS zip) endif() endif() if(TARGET libzip::zip) set(LIBZIP_FOUND ON) set(LIBZIP_TARGET libzip::zip) else() message(FATAL_ERROR "libzip fetch succeeded but target 'libzip::zip' (or 'zip') was not created.") endif() endif() # Final guard if(NOT LIBZIP_FOUND) message(FATAL_ERROR "libzip not found and fetching is disabled or failed. " "Set LIBZIP_ALLOW_FETCH=ON or install libzip development files.") endif()