cmake_minimum_required(VERSION 3.25)
project(nodehammer_package_components LANGUAGES CXX)

# Installed shared SDKs must never discover dependency development packages.
set(CMAKE_DISABLE_FIND_PACKAGE_ROOT TRUE)
set(CMAKE_DISABLE_FIND_PACKAGE_DD4hep TRUE)
set(CMAKE_DISABLE_FIND_PACKAGE_zstd TRUE)
if(CASE STREQUAL "default")
    find_package(nodehammer CONFIG REQUIRED)
    set(expect_ingest TRUE)
    set(expect_shared ${HAS_SHARED})
elseif(CASE STREQUAL "ingest")
    find_package(nodehammer CONFIG REQUIRED COMPONENTS Ingest)
    set(expect_ingest TRUE)
elseif(CASE STREQUAL "shared")
    find_package(nodehammer CONFIG REQUIRED COMPONENTS Shared)
    set(expect_shared TRUE)
elseif(CASE STREQUAL "optional")
    find_package(nodehammer CONFIG REQUIRED COMPONENTS Ingest OPTIONAL_COMPONENTS Shared)
    set(expect_ingest TRUE)
    set(expect_shared ${HAS_SHARED})
elseif(CASE STREQUAL "repeat")
    find_package(nodehammer CONFIG REQUIRED COMPONENTS Ingest)
    find_package(nodehammer CONFIG REQUIRED COMPONENTS Shared)
    find_package(nodehammer CONFIG REQUIRED)
    set(expect_ingest TRUE)
    set(expect_shared TRUE)
elseif(CASE STREQUAL "unknown")
    find_package(nodehammer CONFIG REQUIRED COMPONENTS Unknown)
else()
    message(FATAL_ERROR "Unknown test case: ${CASE}")
endif()

foreach(component ingest shared)
    if(expect_${component})
        if(NOT TARGET nodehammer::${component})
            message(FATAL_ERROR "Missing target nodehammer::${component}")
        endif()
    elseif(TARGET nodehammer::${component})
        message(FATAL_ERROR "Unrequested target nodehammer::${component} was loaded")
    endif()
endforeach()
if(expect_shared AND NOT TARGET nodehammer::nodehammer)
    message(FATAL_ERROR "The old shared target spelling must remain usable")
endif()
if(TARGET nodehammer_lib OR TARGET nodehammer::static)
    message(FATAL_ERROR "The internal full static library must not be exported")
endif()
