set(HEADERS
    NuDockServerBase.h
    SampleHandlerNuDockBase.h
    NuDockFactory.h
)

add_library(MaCh3NuDock SHARED
    NuDockServerBase.cpp
    SampleHandlerNuDockBase.cpp
    NuDockFactory.cpp
)

set_target_properties(MaCh3NuDock PROPERTIES
    PUBLIC_HEADER "${HEADERS}"
    EXPORT_NAME MaCh3NuDock)


CPMAddPackage(
    NAME NuDock
    GITHUB_REPOSITORY "NuDock/nudock"
    GIT_TAG "0eef1a49df06b3a714ed2a9fc1cbed6f3151144d"
    GIT_SHALLOW NO
    GIT_SUBMODULES_RECURSE ON
)

if(TARGET NuDock::nudock)
    set(NUDOCK_TARGET NuDock::nudock)
elseif(TARGET nudock)
    # Create an alias if the namespaced target doesn't exist
    add_library(NuDock::nudock ALIAS nudock)
    set(NUDOCK_TARGET NuDock::nudock)
else()
    cmessage(FATAL_ERROR "MaCh3 Expected dependency target: NuDock::nudock or nudock")
endif()

target_link_libraries(MaCh3NuDock PUBLIC Fitters ${NUDOCK_TARGET})

target_include_directories(MaCh3NuDock PUBLIC
  $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/../>
  $<BUILD_INTERFACE:${NuDock_SOURCE_DIR}>
  $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/_deps/cpp-httplib-src>
  $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/_deps/nudock-src/externals/cpp-httplib>
  $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/_deps/nudock-src/externals/json-schema-validator/src>
  $<INSTALL_INTERFACE:include>)

install(TARGETS MaCh3NuDock
        EXPORT MaCh3-targets
        LIBRARY DESTINATION lib/
        PUBLIC_HEADER DESTINATION include/MaCh3NuDock)

add_library(MaCh3::MaCh3NuDock ALIAS MaCh3NuDock)
