# -------------------------------------------------------------------------------------- #
# package initialization
#
@PACKAGE_INIT@

cmake_minimum_required(VERSION 3.8...3.27)

# -------------------------------------------------------------------------------------- #
# basic paths
#
set_and_check(PTL_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
set_and_check(PTL_LIB_DIR "@PACKAGE_LIB_INSTALL_DIR@")

# -------------------------------------------------------------------------------------- #
# available components
#
set(PTL_shared_FOUND @BUILD_SHARED_LIBS@)
set(PTL_static_FOUND @BUILD_STATIC_LIBS@)
set(PTL_TBB_FOUND @PTL_USE_TBB@)

# Early check so later setup doesn't need to check REQUIRED status
check_required_components(PTL)

# -------------------------------------------------------------------------------------- #
# refind needed dependencies/targets
#
include(CMakeFindDependencyMacro)

if(NOT Threads_FOUND)
    set(CMAKE_THREAD_PREFER_PTHREAD @CMAKE_THREAD_PREFER_PTHREAD@)
    set(THREADS_PREFER_PTHREAD_FLAG @THREADS_PREFER_PTHREAD_FLAG@)
    find_dependency(Threads REQUIRED)
endif()

if(NOT TBB_FOUND AND PTL_TBB_FOUND)
    list(INSERT CMAKE_MODULE_PATH 0 "@PACKAGE_CMAKE_MODULE_INSTALL_DIR@")
    find_dependency(TBB @TBB_VERSION@ REQUIRED)
    list(REMOVE_AT CMAKE_MODULE_PATH 0)
endif()

# -------------------------------------------------------------------------------------- #
# Include our targets file(s)
#
include("${CMAKE_CURRENT_LIST_DIR}/PTLTargets.cmake")

# Set the default component based on what's available
if(PTL_shared_FOUND)
    set(_ptl_preferred_link "shared")
else()
    set(_ptl_preferred_link "static")
endif()

# Override if user has specified "static" alone as a component. Earlier check handles case
# that components are REQUIRED. Only change preferred link only changed if available to
# cover OPTIONAL case
if(("static" IN_LIST PTL_FIND_COMPONENTS) AND NOT ("shared" IN_LIST PTL_FIND_COMPONENTS))
    if(PTL_static_FOUND)
        set(_ptl_preferred_link "static")
    endif()
endif()

# -------------------------------------------------------------------------------------- #
# Set old style variables for include/linking
#
set(PTL_INCLUDE_DIRS ${PTL_INCLUDE_DIR})
set(PTL_LIBRARIES PTL::ptl-${_ptl_preferred_link})

# -------------------------------------------------------------------------------------- #
# Create "transparent" link target that interfaces to shared/static on basis of
# availability or requested linking option
#
if(NOT TARGET PTL::ptl)
    add_library(PTL::ptl INTERFACE IMPORTED)
    target_link_libraries(PTL::ptl INTERFACE ${PTL_LIBRARIES})
    # Needed to distinguish DLL/Lib, but symbol never used in code. Should also be a
    # public symbol of ptl-static
    if(WIN32)
        target_compile_definitions(PTL::ptl INTERFACE _PTL_ARCHIVE)
    endif()
endif()
