set(adminive_service_include_dir "${CMAKE_CURRENT_LIST_DIR}/include")
set(adminive_third_party_include_dir "${CMAKE_CURRENT_LIST_DIR}/third_party/include")
set(adminive_frontend_dist_dir "${CMAKE_CURRENT_LIST_DIR}/../../frontend_dist")
file(TO_CMAKE_PATH "${adminive_frontend_dist_dir}" adminive_frontend_dist_dir)
add_library(Adminive_Service INTERFACE)
set_target_properties(Adminive_Service PROPERTIES EXPORT_NAME Service)
add_library(Adminive::Service ALIAS Adminive_Service)
target_include_directories(Adminive_Service INTERFACE "$<BUILD_INTERFACE:${adminive_service_include_dir}>" "$<BUILD_INTERFACE:${adminive_third_party_include_dir}>" "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
target_link_libraries(Adminive_Service INTERFACE Adminive::Core)
add_library(Adminive_Nlohmann INTERFACE)
set_target_properties(Adminive_Nlohmann PROPERTIES EXPORT_NAME Nlohmann)
add_library(Adminive::Nlohmann ALIAS Adminive_Nlohmann)
target_link_libraries(Adminive_Nlohmann INTERFACE Adminive::Service)
add_library(Adminive_MagicEnum INTERFACE)
set_target_properties(Adminive_MagicEnum PROPERTIES EXPORT_NAME MagicEnum)
add_library(Adminive::MagicEnum ALIAS Adminive_MagicEnum)
target_link_libraries(Adminive_MagicEnum INTERFACE Adminive::Service)
add_library(Adminive_BoostPfr INTERFACE)
set_target_properties(Adminive_BoostPfr PROPERTIES EXPORT_NAME BoostPfr)
add_library(Adminive::BoostPfr ALIAS Adminive_BoostPfr)
target_link_libraries(Adminive_BoostPfr INTERFACE Adminive::Service "$<INSTALL_INTERFACE:Boost::headers>")
add_library(Adminive_Httplib INTERFACE)
set_target_properties(Adminive_Httplib PROPERTIES EXPORT_NAME Httplib)
add_library(Adminive::Httplib ALIAS Adminive_Httplib)
target_link_libraries(Adminive_Httplib INTERFACE Adminive::Service)
if(WIN32)
    target_compile_definitions(Adminive_Httplib INTERFACE WINVER=0x0A00 _WIN32_WINNT=0x0A00)
    target_link_libraries(Adminive_Httplib INTERFACE ws2_32)
endif()
add_library(Adminive_Drogon INTERFACE)
set_target_properties(Adminive_Drogon PROPERTIES EXPORT_NAME Drogon)
add_library(Adminive::Drogon ALIAS Adminive_Drogon)
target_link_libraries(Adminive_Drogon INTERFACE Adminive::Service "$<INSTALL_INTERFACE:Drogon::Drogon>")
if(TARGET Drogon::Drogon)
    target_link_libraries(Adminive_Drogon INTERFACE "$<BUILD_INTERFACE:Drogon::Drogon>")
elseif(TARGET drogon)
    target_link_libraries(Adminive_Drogon INTERFACE "$<BUILD_INTERFACE:drogon>")
endif()
add_library(Adminive_Default INTERFACE)
set_target_properties(Adminive_Default PROPERTIES EXPORT_NAME Default)
add_library(Adminive::Default ALIAS Adminive_Default)
target_link_libraries(Adminive_Default INTERFACE Adminive::Httplib Adminive::Nlohmann Adminive::MagicEnum)
add_library(Adminive_Example STATIC "${CMAKE_CURRENT_LIST_DIR}/src/example.cpp" "${CMAKE_CURRENT_LIST_DIR}/src/config_store.cpp" "${CMAKE_CURRENT_LIST_DIR}/src/device_tables.cpp" "${CMAKE_CURRENT_LIST_DIR}/src/server_app.cpp")
target_include_directories(Adminive_Example PUBLIC "${CMAKE_CURRENT_LIST_DIR}/src")
target_link_libraries(Adminive_Example PUBLIC Adminive::Default)
add_executable(Adminive_Server "${CMAKE_CURRENT_LIST_DIR}/src/main.cpp")
target_compile_definitions(Adminive_Server PRIVATE ADMINIVE_FRONTEND_DIST_DIR="${adminive_frontend_dist_dir}")
target_link_libraries(Adminive_Server PRIVATE Adminive_Example)
if(MSVC)
    target_compile_options(Adminive_Example PRIVATE /permissive-)
    target_compile_options(Adminive_Server PRIVATE /permissive-)
endif()
if(BUILD_TESTING)
    add_executable(Adminive_Test "${CMAKE_CURRENT_LIST_DIR}/tests/test.cpp")
    target_include_directories(Adminive_Test PRIVATE "${CMAKE_CURRENT_LIST_DIR}/src")
    target_link_libraries(Adminive_Test PRIVATE Adminive_Example)
    add_test(NAME Adminive_Test COMMAND Adminive_Test)
    add_executable(Adminive_Advanced_Adapter_Test "${CMAKE_CURRENT_LIST_DIR}/tests/advanced_adapter_test.cpp")
    target_link_libraries(Adminive_Advanced_Adapter_Test PRIVATE Adminive::Default Adminive::BoostPfr)
    add_test(NAME Adminive_Advanced_Adapter_Test COMMAND Adminive_Advanced_Adapter_Test)
    add_executable(Adminive_Safety_Test "${CMAKE_CURRENT_LIST_DIR}/tests/safety_test.cpp")
    target_link_libraries(Adminive_Safety_Test PRIVATE Adminive::Default)
    add_test(NAME Adminive_Safety_Test COMMAND Adminive_Safety_Test)
    add_executable(Adminive_Config_Store_Test "${CMAKE_CURRENT_LIST_DIR}/tests/config_store_test.cpp")
    target_include_directories(Adminive_Config_Store_Test PRIVATE "${CMAKE_CURRENT_LIST_DIR}/src")
    target_link_libraries(Adminive_Config_Store_Test PRIVATE Adminive_Example)
    add_test(NAME Adminive_Config_Store_Test COMMAND Adminive_Config_Store_Test)
    add_executable(Adminive_Managed_Test "${CMAKE_CURRENT_LIST_DIR}/tests/managed_test.cpp")
    target_link_libraries(Adminive_Managed_Test PRIVATE Adminive::Default)
    add_test(NAME Adminive_Managed_Test COMMAND Adminive_Managed_Test)
    add_executable(Adminive_Drogon_Adapter_Test "${CMAKE_CURRENT_LIST_DIR}/tests/drogon_adapter_test.cpp")
    target_include_directories(Adminive_Drogon_Adapter_Test BEFORE PRIVATE "${CMAKE_CURRENT_LIST_DIR}/tests/fake_drogon")
    target_link_libraries(Adminive_Drogon_Adapter_Test PRIVATE Adminive::Default)
    add_test(NAME Adminive_Drogon_Adapter_Test COMMAND Adminive_Drogon_Adapter_Test)
    if(MSVC)
        target_compile_options(Adminive_Test PRIVATE /permissive-)
        target_compile_options(Adminive_Advanced_Adapter_Test PRIVATE /permissive-)
        target_compile_options(Adminive_Drogon_Adapter_Test PRIVATE /permissive-)
        target_compile_options(Adminive_Safety_Test PRIVATE /permissive-)
        target_compile_options(Adminive_Config_Store_Test PRIVATE /permissive-)
        target_compile_options(Adminive_Managed_Test PRIVATE /permissive-)
    endif()
endif()
install(TARGETS Adminive_Service Adminive_Nlohmann Adminive_MagicEnum Adminive_BoostPfr Adminive_Httplib Adminive_Default EXPORT AdminiveServiceTargets)
install(TARGETS Adminive_Drogon EXPORT AdminiveDrogonTargets)
install(DIRECTORY "${adminive_service_include_dir}/" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
install(DIRECTORY "${adminive_third_party_include_dir}/" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
