################################################################################
# Copyright (C) 2018-2024 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH  #
#                                                                              #
#              This software is distributed under the terms of the             #
#              GNU Lesser General Public Licence (LGPL) version 3,             #
#                  copied verbatim in the file "LICENSE"                       #
################################################################################


# Project ######################################################################
cmake_minimum_required(VERSION 3.15...3.30 FATAL_ERROR)

list(PREPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
include(GitHelper)
get_git_version()

project(FairMQ VERSION ${PROJECT_VERSION} LANGUAGES CXX)
include(FairMQProjectSettings)
################################################################################


# Build options ################################################################
include(FairMQBuildOption)

fairmq_build_option(BUILD_FAIRMQ        "Build FairMQ library and devices."
                                         DEFAULT ON)
fairmq_build_option(BUILD_TESTING       "Build tests."
                                         DEFAULT OFF REQUIRES "BUILD_FAIRMQ")
fairmq_build_option(BUILD_EXAMPLES      "Build FairMQ examples."
                                         DEFAULT ON  REQUIRES "BUILD_FAIRMQ")
fairmq_build_option(BUILD_TIDY_TOOL     "Build the fairmq-tidy tool."
                                         DEFAULT OFF)
fairmq_build_option(BUILD_DOCS          "Build FairMQ documentation."
                                         DEFAULT OFF)
fairmq_build_option(USE_EXTERNAL_GTEST  "Do not use bundled GTest. Not recommended."
                                         DEFAULT OFF)
fairmq_build_option(FAIRMQ_DEBUG_MODE   "Compile in debug mode (may decrease performance)."
                                         DEFAULT OFF)
################################################################################


# Dependencies #################################################################
include(CTest)
include(FairMQDependencies)
################################################################################


# Targets ######################################################################
if(BUILD_FAIRMQ)
  add_subdirectory(fairmq)
endif()

if(BUILD_TESTING)
  add_subdirectory(test)
endif()

if(BUILD_EXAMPLES)
  add_subdirectory(examples)
endif()

if(BUILD_DOCS)
  set(DOXYGEN_OUTPUT_DIRECTORY doxygen)
  set(DOXYGEN_PROJECT_NUMBER ${PROJECT_GIT_VERSION})
  set(DOXYGEN_PROJECT_BRIEF "C++ Message Queuing Library and Framework")
  set(DOXYGEN_USE_MDFILE_AS_MAINPAGE README.md)
  set(DOXYGEN_HTML_FOOTER docs/footer.html)
  doxygen_add_docs(doxygen README.md fairmq)
  add_custom_target(docs ALL DEPENDS doxygen)
endif()

if(BUILD_TIDY_TOOL)
  add_subdirectory(fairmq/tidy)
endif()
################################################################################


# Package components ###########################################################
if(BUILD_FAIRMQ)
  list(APPEND PROJECT_PACKAGE_COMPONENTS fairmq)
endif()
if(BUILD_TESTING)
  list(APPEND PROJECT_PACKAGE_COMPONENTS tests)
endif()
if(BUILD_EXAMPLES)
  list(APPEND PROJECT_PACKAGE_COMPONENTS examples)
endif()
if(BUILD_DOCS)
  list(APPEND PROJECT_PACKAGE_COMPONENTS docs)
endif()
if(BUILD_TIDY_TOOL)
  list(APPEND PROJECT_PACKAGE_COMPONENTS tidy_tool)
endif()
################################################################################


# Installation #################################################################
if(BUILD_FAIRMQ)
  install(FILES cmake/FindZeroMQ.cmake
    DESTINATION ${PROJECT_INSTALL_CMAKEMODDIR}
  )
endif()
if(BUILD_DOCS)
  install(DIRECTORY ${CMAKE_BINARY_DIR}/doxygen/html
    DESTINATION ${PROJECT_INSTALL_DATADIR}/docs
  )
endif()
if(BUILD_TIDY_TOOL)
  install(FILES cmake/FairMQTidy.cmake
    DESTINATION ${PROJECT_INSTALL_CMAKEMODDIR}
  )
endif()

include(FairMQPackage)
install_cmake_package()
################################################################################


# Summary ######################################################################
include(FairMQSummary)

message(STATUS "${BWhite}${PROJECT_NAME}${CR} ${PROJECT_GIT_VERSION} from ${PROJECT_DATE}")
fair_summary_global_cxx_flags_standard()
fair_summary_build_types()
fair_summary_package_dependencies()
fairmq_summary_components()
fairmq_summary_static_analysis()
fairmq_summary_install_prefix()
fairmq_summary_debug_mode()
fairmq_summary_compile_definitions()
message(STATUS "  ")
################################################################################
