# =================================================================
# Img2Num Python Bindings
# =================================================================
project(PyImg2Num
  LANGUAGES CXX
  VERSION 0.0.0
)

include(CMakePackageConfigHelpers)
include(GNUInstallDirs)

set(PYBIND11_FINDPYTHON ON)
find_package(Python3 REQUIRED COMPONENTS Interpreter Development.Module NumPy)
find_package(pybind11 REQUIRED)

file(GLOB BINDING_SRC
    "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp"
)

pybind11_add_module(_img2num MODULE ${BINDING_SRC})

target_compile_options(_img2num PRIVATE ${IMG2NUM_STRICT_CXX_FLAGS})

target_link_libraries(_img2num PRIVATE Img2Num)

target_include_directories(_img2num PRIVATE
    "${CMAKE_CURRENT_SOURCE_DIR}/include"
)

install(DIRECTORY ${CMAKE_SOURCE_DIR}/packages/py/img2num/
    DESTINATION img2num
    FILES_MATCHING
      PATTERN "*.py"
      PATTERN "py.typed"
)

install(TARGETS _img2num
    LIBRARY DESTINATION img2num
    RUNTIME DESTINATION img2num
)

# ---------------------------------------------------------------
# Type stub: generated by importing the freshly built extension,
# so it is provably in sync with the binary it ships alongside.
# Impossible when cross-compiling (host can't import target .so);
# such wheels ship without a stub.
# ---------------------------------------------------------------
if(NOT CMAKE_CROSSCOMPILING)
  add_custom_command(TARGET _img2num POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=$<TARGET_FILE_DIR:_img2num>"
      ${Python3_EXECUTABLE} -m pybind11_stubgen _img2num
        --exit-code
        -o "${CMAKE_CURRENT_BINARY_DIR}/stubs"
    COMMENT "Generating _img2num.pyi from the built extension"
    VERBATIM
  )
  install(FILES "${CMAKE_CURRENT_BINARY_DIR}/stubs/_img2num.pyi"
    DESTINATION img2num
  )
else()
  message(WARNING "Cross-compiling: _img2num.pyi will not be generated; wheel ships without a stub")
endif()
