# OpenAPI model
AUX_SOURCE_DIRECTORY(gen/model MODEL_SOURCES)
ADD_LIBRARY(JFJochAPI STATIC ${MODEL_SOURCES})
TARGET_INCLUDE_DIRECTORIES(JFJochAPI PUBLIC gen/model)

# The module placement between the OpenAPI model and common/ - for the broker and the portable programs.
ADD_LIBRARY(JFJochAPIConvert STATIC ModulePlacementConvert.cpp ModulePlacementConvert.h)
TARGET_LINK_LIBRARIES(JFJochAPIConvert JFJochAPI JFJochCommon)

# The broker service pulls in the receiver/detector stack. A portable build (viewer or rugnux)
# needs JFJochAPI (the shared OpenAPI model, above) but none of this machinery.
IF (NOT JFJOCH_PORTABLE_ONLY)
    # Jungfraujoch Broker (abstract from HTTP service)
    ADD_LIBRARY(JFJochBroker STATIC
            JFJochStateMachine.cpp JFJochStateMachine.h
            JFJochServices.cpp JFJochServices.h
            JFJochBrokerParser.cpp JFJochBrokerParser.h
            OpenAPIConvert.h OpenAPIConvert.cpp
            BearerTokens.h BearerTokens.cpp)

    TARGET_LINK_LIBRARIES(JFJochBroker JFJochReceiver JFJochDetector JFJochCommon JFJochAPI JFJochAPIConvert JFJochPreview)

    ADD_EXECUTABLE(jfjoch_broker jfjoch_broker.cpp JFJochBrokerHttp.cpp JFJochBrokerHttp.h)

    TARGET_LINK_LIBRARIES(jfjoch_broker JFJochBroker httplib::httplib ${CMAKE_DL_LIBS})
    TARGET_INCLUDE_DIRECTORIES(jfjoch_broker PUBLIC gen/api)
    INSTALL(TARGETS jfjoch_broker RUNTIME COMPONENT jfjoch)
ENDIF()
