# Builds cppmodel-tool. Works in two ways:
#  - inside the CppModel source tree (added by the top-level CMakeLists.txt), and
#  - standalone against an installed SDK, where this folder lives in <sdk>/share/cppmodel/tools:
#      cmake -S <sdk>/share/cppmodel/tools -B build/cppmodel-tool
#      cmake --build build/cppmodel-tool
#    Pass -DCPPMODEL_ROOT=<sdk> if the folder was copied elsewhere.
cmake_minimum_required(VERSION 3.18)

project(CppModelTool CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(cppmodel-tool cppmodel-tool.cpp)

find_package(ZLIB QUIET)

if (TARGET CppModelBase)
    # In-tree build: CppModelBase carries its OpenSSL/ixwebsocket link requirements.
    target_link_libraries(cppmodel-tool PRIVATE CppModelBase)
else()
    set(CPPMODEL_ROOT "${CMAKE_CURRENT_LIST_DIR}/../../.." CACHE PATH "Root of the installed CppModel SDK")
    get_filename_component(CPPMODEL_ROOT "${CPPMODEL_ROOT}" ABSOLUTE)

    find_library(CPPMODEL_BASE_LIB CppModelBase PATHS "${CPPMODEL_ROOT}/lib" NO_DEFAULT_PATH REQUIRED)
    find_library(CPPMODEL_IXWEBSOCKET_LIB ixwebsocket PATHS "${CPPMODEL_ROOT}/lib" NO_DEFAULT_PATH REQUIRED)

    if (MSVC)
        set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
        set(OPENSSL_USE_STATIC_LIBS TRUE)
        set(OPENSSL_MSVC_STATIC_RT TRUE)
    endif()
    find_package(OpenSSL REQUIRED)
    find_package(Threads REQUIRED)

    target_include_directories(cppmodel-tool PRIVATE "${CPPMODEL_ROOT}/include/cppmodel" "${CPPMODEL_ROOT}/include")
    target_link_libraries(cppmodel-tool PRIVATE
        ${CPPMODEL_BASE_LIB} ${CPPMODEL_IXWEBSOCKET_LIB}
        OpenSSL::SSL OpenSSL::Crypto Threads::Threads)
    if (WIN32)
        target_link_libraries(cppmodel-tool PRIVATE crypt32 ws2_32)
    endif()
endif()

if (ZLIB_FOUND)
    target_link_libraries(cppmodel-tool PRIVATE ZLIB::ZLIB)
endif()
