cmake_minimum_required(VERSION 3.20)
project(libmonet VERSION 0.1.0 LANGUAGES CXX)

# Header only: nothing to build, nothing to link, only the include directory.
add_library(monet INTERFACE)
add_library(monet::monet ALIAS monet)
target_include_directories(monet INTERFACE
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:include>)
target_compile_features(monet INTERFACE cxx_std_20)

option(MONET_BUILD_TESTS "Build the tests" ${PROJECT_IS_TOP_LEVEL})
if(MONET_BUILD_TESTS)
    enable_testing()
    add_executable(monet_tests tests/test_monet.cpp)
    target_link_libraries(monet_tests PRIVATE monet)
    target_compile_options(monet_tests PRIVATE -Wall -Wextra -Wshadow)
    add_test(NAME monet COMMAND monet_tests)
endif()

if(PROJECT_IS_TOP_LEVEL)
    install(DIRECTORY include/ DESTINATION include)
    install(TARGETS monet EXPORT monetTargets)
    install(EXPORT monetTargets NAMESPACE monet:: DESTINATION lib/cmake/monet)
    file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/monetConfig.cmake
         "include(\"\${CMAKE_CURRENT_LIST_DIR}/monetTargets.cmake\")\n")
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/monetConfig.cmake DESTINATION lib/cmake/monet)
endif()
