
cmake_minimum_required(VERSION 3.18)
project(QtTinySplinePovStarter LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Options
option(TINYSPLINE_REQUIRED "Fail configure if TinySpline is not found" ON)

# Qt
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)

# Try TinySpline (C++ wrapper preferred)
set(HAVE_TINYSPLINE OFF)
find_package(tinyspline QUIET)
if(tinyspline_FOUND)
  # Try the common imported targets
  if(TARGET tinysplinecxx::tinysplinecxx)
    set(TINYSPLINE_TARGET tinysplinecxx::tinysplinecxx)
    set(HAVE_TINYSPLINE ON)
  elseif(TARGET tinyspline::tinyspline)
    set(TINYSPLINE_TARGET tinyspline::tinyspline)
    set(HAVE_TINYSPLINE ON)
  endif()
endif()

if(NOT HAVE_TINYSPLINE)
  if(TINYSPLINE_REQUIRED)
    message(FATAL_ERROR "TinySpline not found. Install tinyspline (e.g. package manager or build from source).")
  else()
    message(WARNING "TinySpline not found — building with linear sampler fallback only.")
  endif()
endif()

# Sources
add_subdirectory(src)

# Configure header to pass HAVE_TINYSPLINE to code
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config/Config.h.in
               ${CMAKE_CURRENT_BINARY_DIR}/generated/Config.h @ONLY)
include_directories(${CMAKE_CURRENT_BINARY_DIR}/generated)
