# ---------------------------------------------------------------------------

# Preamble
cmake_minimum_required (VERSION 3.10)

# Updating instructions
#
# - Update version history in README.md
# - Adjust version below
# - Commit and push to gitlab
# - Add tag with version exactly like below
#
project(reta
        VERSION 0.1.0
        DESCRIPTION realtime_automation
        LANGUAGES CXX
    )

if (NOT CMAKE_BUILD_TYPE)
    SET(CMAKE_BUILD_TYPE "Release")
endif ()

# ---------------------------------------------------------------------------

option(BUILD_SHARED_LIBS "Build using shared libraries" ON)

include(GNUInstallDirs)
include(GenerateExportHeader)
include(CMakePackageConfigHelpers)
include(CMakeDependentOption)
include(CTest)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")

find_package(pdserv REQUIRED)

# ---------------------------------------------------------------------------

# Enable explicit symbol export
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)

option(USE_SYMBOL_VERSIONING "Use ELF symbol versioning" OFF)
cmake_dependent_option(
    CHECK_SYMBOL_VERSIONING
    "Verify symbol versioning after build"
    ON
    "USE_SYMBOL_VERSIONING"
    OFF
)

if (USE_SYMBOL_VERSIONING)
    find_package(PythonInterp 3 REQUIRED)
endif ()

# ---------------------------------------------------------------------------

add_subdirectory(src)

# ---------------------------------------------------------------------------

# Auto-generate files:
# Header file for version information
configure_file(
        src/config.h.in
        ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/config.h @ONLY)

# Symbol visiblility control
generate_export_header(${PROJECT_NAME}
    NO_EXPORT_MACRO_NAME RETA_LOCAL
    EXPORT_FILE_NAME
    ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}_export.h)

# Cmake target export stuff
configure_package_config_file(Config.cmake.in
        "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
    INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
)

write_basic_package_version_file(
        "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
    COMPATIBILITY SameMajorVersion
)

# Pkg-config file
configure_file(
        ${PROJECT_NAME}.pc.in
        ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc @ONLY)

# ---------------------------------------------------------------------------

# Doxygen documentation
option(BUILD_RETA_DOCS "Generate documentation" OFF)
if (BUILD_RETA_DOCS)
    add_subdirectory(doc)
endif ()


# Include tests (if needed)
if (BUILD_RETA_TESTING)
    add_subdirectory(unittest)
endif ()

# ---------------------------------------------------------------------------
