cmake_minimum_required(VERSION 3.15)

project(
        EvalHyd
        LANGUAGES CXX
        VERSION 0.0.1
        DESCRIPTION "Utility to evaluate streamflow predictions"
)

# ------------------------------------------------------------------------------
# dependencies
# ------------------------------------------------------------------------------

find_package(xtensor REQUIRED)
message(STATUS "Found xtensor: ${xtensor_INCLUDE_DIRS}/xtensor")

# ------------------------------------------------------------------------------
# build
# ------------------------------------------------------------------------------

# define evalhyd library
add_library(
        evalhyd
        INTERFACE
)

add_library(EvalHyd::evalhyd ALIAS evalhyd)

set_target_properties(
        evalhyd
        PROPERTIES
                VISIBILITY_INLINES_HIDDEN ON
)

target_include_directories(
        evalhyd
        INTERFACE
                $<INSTALL_INTERFACE:include>
                $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)

target_link_libraries(
        evalhyd
        INTERFACE
                xtensor
)

target_compile_features(
        evalhyd
        INTERFACE
                cxx_std_14
)

# test suite
OPTION(EVALHYD_BUILD_TEST "configure and compile tests" ON)

if(EVALHYD_BUILD_TEST)
    add_subdirectory(tests)
endif()

# ------------------------------------------------------------------------------
# installation
# ------------------------------------------------------------------------------

include(GNUInstallDirs)
include(CMakePackageConfigHelpers)

# install library file (.a/.so)
install(
        TARGETS evalhyd
        EXPORT evalhyd-targets
)

# install headers
install(
        DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/evalhyd"
        DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
        FILES_MATCHING PATTERN "*.hpp"
)

# generate target file
export(
        EXPORT evalhyd-targets
        FILE "${CMAKE_CURRENT_BINARY_DIR}/EvalHydTargets.cmake"
)

# install target file
install(
        EXPORT evalhyd-targets
        FILE "EvalHydTargets.cmake"
        NAMESPACE EvalHyd::
        DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/EvalHyd
)

# generate config file
configure_package_config_file(
        EvalHydConfig.cmake.in
        "${CMAKE_CURRENT_BINARY_DIR}/EvalHydConfig.cmake"
        INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/EvalHyd
)

# install files
install(
        FILES
            "${CMAKE_CURRENT_BINARY_DIR}/EvalHydConfig.cmake"
        DESTINATION
            "${CMAKE_INSTALL_LIBDIR}/cmake/EvalHyd"
)