find_package(PkgConfig REQUIRED)

add_library(deps INTERFACE)
add_library(proto_deps INTERFACE)

# helper function for finding one of a list of packages
function(do_pkg_search_module name)
    pkg_search_module(${name} ${ARGN})

    set(module_name "${${name}_MODULE_NAME}")
    set(module_version "${${name}_VERSION}")
    message(STATUS "  Found ${module_name}, version ${module_version}")
endfunction()

# required dependencies
find_library(MATH_LIBRARY m REQUIRED)
pkg_check_modules(WaylandClient REQUIRED IMPORTED_TARGET "wayland-client")
pkg_check_modules(WaylandEGL REQUIRED IMPORTED_TARGET "wayland-egl")
pkg_check_modules(EGL REQUIRED IMPORTED_TARGET "egl")
pkg_check_modules(GLESv2 REQUIRED IMPORTED_TARGET "glesv2")

if ("${FORCE_WAYLAND_SCANNER_PATH}" STREQUAL "")
    pkg_check_modules(WaylandScanner REQUIRED "wayland-scanner")
    pkg_get_variable(WAYLAND_SCANNER "wayland-scanner" "wayland_scanner")
    set(WAYLAND_SCANNER "${WAYLAND_SCANNER}" PARENT_SCOPE)
else()
    set(WAYLAND_SCANNER "${FORCE_WAYLAND_SCANNER_PATH}" PARENT_SCOPE)
endif()

# man dependencies
if (${INSTALL_DOCUMENTATION})
    pkg_check_modules(SCDOC REQUIRED "scdoc")
else()
    pkg_check_modules(SCDOC "scdoc")
endif()
pkg_get_variable(SCDOC "scdoc" "scdoc")
set(SCDOC "${SCDOC}" PARENT_SCOPE)

# link dependencies
target_link_libraries(deps INTERFACE
    ${MATH_LIBRARY}
    PkgConfig::WaylandClient PkgConfig::WaylandEGL PkgConfig::EGL PkgConfig::GLESv2
)
target_link_libraries(proto_deps INTERFACE
    PkgConfig::WaylandClient
)

# check for epoll support in libc
include(CheckSymbolExists)
check_symbol_exists("epoll_wait" "sys/epoll.h" has-epoll)
if(NOT has-epoll)
    # use epoll-shim to provide epoll
    pkg_check_modules(EPoll REQUIRED IMPORTED_TARGET "epoll-shim")
    target_link_libraries(deps INTERFACE PkgConfig::EPoll)
endif()

if(${WITH_LIBDECOR})
    pkg_check_modules(LibDecor REQUIRED IMPORTED_TARGET "libdecor-0")
    target_link_libraries(deps INTERFACE PkgConfig::LibDecor)
    target_compile_definitions(deps INTERFACE WITH_LIBDECOR)
endif()

if(${WITH_GBM})
    pkg_check_modules(GBM REQUIRED IMPORTED_TARGET "gbm")
    pkg_check_modules(LibDRM REQUIRED IMPORTED_TARGET "libdrm")
    target_link_libraries(deps INTERFACE PkgConfig::GBM PkgConfig::LibDRM)
    target_compile_definitions(deps INTERFACE WITH_GBM WITH_LIBDRM)
endif()
