cmake_minimum_required(VERSION 3.20)

project(vectorail-core VERSION 0.1.0 LANGUAGES CXX)

include(GNUInstallDirs)
include(CMakePackageConfigHelpers)

find_package(OpenGL REQUIRED)
find_package(PNG REQUIRED)
find_package(SDL3 CONFIG REQUIRED)
find_package(glm CONFIG REQUIRED)

add_library(vectorail-core
    src/DdsTexture.cpp
    src/PngTexture.cpp
    src/Shader.cpp
    src/Spline.cpp
    src/gl_loader.cpp
)
add_library(Vectorail::Core ALIAS vectorail-core)

target_compile_features(vectorail-core PUBLIC cxx_std_23)
target_include_directories(vectorail-core
    PUBLIC
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
target_link_libraries(vectorail-core
    PUBLIC
        SDL3::SDL3
        OpenGL::GL
        PNG::PNG
        glm::glm
)

set_target_properties(vectorail-core PROPERTIES
    EXPORT_NAME Core
    VERSION ${PROJECT_VERSION}
    SOVERSION ${PROJECT_VERSION_MAJOR}
)

install(TARGETS vectorail-core
    EXPORT VectorailCoreTargets
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(EXPORT VectorailCoreTargets
    FILE VectorailCoreTargets.cmake
    NAMESPACE Vectorail::
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/VectorailCore
)

configure_package_config_file(
    cmake/VectorailCoreConfig.cmake.in
    ${CMAKE_CURRENT_BINARY_DIR}/VectorailCoreConfig.cmake
    INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/VectorailCore
)
write_basic_package_version_file(
    ${CMAKE_CURRENT_BINARY_DIR}/VectorailCoreConfigVersion.cmake
    VERSION ${PROJECT_VERSION}
    COMPATIBILITY SameMajorVersion
)
install(FILES
    ${CMAKE_CURRENT_BINARY_DIR}/VectorailCoreConfig.cmake
    ${CMAKE_CURRENT_BINARY_DIR}/VectorailCoreConfigVersion.cmake
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/VectorailCore
)

