cmake_minimum_required(VERSION 3.15)

if(APPLE)
    set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum macOS deployment version")
endif()

project(wnetalign LANGUAGES CXX)
find_package(Python 3.8
  REQUIRED COMPONENTS Interpreter Development.Module
  OPTIONAL_COMPONENTS Development.SABIModule)
find_package(nanobind REQUIRED CONFIG)

execute_process(
   COMMAND ${Python_EXECUTABLE} -m pylmcf --include
   OUTPUT_VARIABLE PYLMCF_INCLUDE_DIRS
   OUTPUT_STRIP_TRAILING_WHITESPACE
   RESULT_VARIABLE PYLMCF_INCLUDE_RESULT
)
if(NOT PYLMCF_INCLUDE_RESULT EQUAL 0)
    message(FATAL_ERROR "Failed to get include path from pylmcf (is it installed for ${Python_EXECUTABLE}?)")
endif()

execute_process(
   COMMAND ${Python_EXECUTABLE} -m wnet --include
   OUTPUT_VARIABLE WNET_INCLUDE_DIRS
   OUTPUT_STRIP_TRAILING_WHITESPACE
   RESULT_VARIABLE WNET_INCLUDE_RESULT
)
if(NOT WNET_INCLUDE_RESULT EQUAL 0)
    message(FATAL_ERROR "Failed to get include path from wnet (is it installed for ${Python_EXECUTABLE}?)")
endif()


set(CMAKE_CXX_STANDARD 20)

nanobind_add_module(wnetalign_cpp
    NB_STATIC NOMINSIZE
    src/wnetalign/cpp/wnetalign/wnetalign.cpp)

target_include_directories(wnetalign_cpp PRIVATE ${PYLMCF_INCLUDE_DIRS} ${WNET_INCLUDE_DIRS})
target_compile_definitions(wnetalign_cpp PRIVATE INCLUDE_NANOBIND_STUFF)

install(TARGETS wnetalign_cpp LIBRARY DESTINATION wnetalign)

# Pure C++ test executable
add_executable(test_lcms_align tests_cpp/test_lcms_align.cpp)
target_include_directories(test_lcms_align PRIVATE
    src/wnetalign/cpp
    ${PYLMCF_INCLUDE_DIRS}
    ${WNET_INCLUDE_DIRS}
)
target_compile_features(test_lcms_align PRIVATE cxx_std_20)

