cmake_minimum_required(VERSION 3.22)
project(release_pkgconfig_consumer LANGUAGES C)

if(NOT IS_DIRECTORY "${RELEASE_DIR}")
  message(FATAL_ERROR "RELEASE_DIR must point to an extracted release")
endif()
file(REAL_PATH "${RELEASE_DIR}" RELEASE_DIR)
set(ENV{PKG_CONFIG_PATH} "")
set(ENV{PKG_CONFIG_LIBDIR} "${RELEASE_DIR}")
set(ENV{PKG_CONFIG_SYSROOT_DIR} "")
set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH FALSE)
set(PKG_CONFIG_ARGN --static)
# --static supplies dependencies; CMake must also prefer the archive over dylibs.
list(PREPEND CMAKE_FIND_LIBRARY_SUFFIXES .a)
find_package(PkgConfig REQUIRED)
pkg_check_modules(CURL REQUIRED IMPORTED_TARGET libcurl-impersonate)

if(NOT "${RELEASE_DIR}/libcurl-impersonate.a" IN_LIST CURL_LINK_LIBRARIES)
  message(FATAL_ERROR "pkg-config did not select the release's static archive")
endif()
foreach(_path IN LISTS CURL_INCLUDE_DIRS CURL_LIBRARY_DIRS)
  file(REAL_PATH "${_path}" _path)
  cmake_path(IS_PREFIX RELEASE_DIR "${_path}" NORMALIZE _in_release)
  if(NOT _in_release)
    message(FATAL_ERROR "pkg-config path escapes the release: ${_path}")
  endif()
endforeach()

add_executable(consumer main.c)
target_link_libraries(consumer PRIVATE PkgConfig::CURL)
enable_testing()
add_test(NAME release_pkgconfig COMMAND consumer)
