cmake_minimum_required(VERSION 3.10)
cmake_policy(SET CMP0086 NEW)
cmake_policy(SET CMP0078 NEW)

#execute_process(COMMAND swig -python medpython.i
#  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

FIND_PACKAGE(SWIG REQUIRED)
INCLUDE(${SWIG_USE_FILE})

#This always finds the system's python installtion
#FIND_PACKAGE(PythonLibs)
message("*********************************************")
if("${Python3_INCLUDE_DIRS}" STREQUAL "")
    message(FATAL_ERROR "Could not find PYTHON_INCLUDE_DIR")
endif()
message("*********************************************")

# Numpy:
execute_process(
    COMMAND "${Python3_EXECUTABLE}" -c "import numpy; print(numpy.get_include())"
    OUTPUT_VARIABLE Python3_NumPy_INCLUDE_DIR
    OUTPUT_STRIP_TRAILING_WHITESPACE
)

# 3. Verify it was found
if(NOT EXISTS "${Python3_NumPy_INCLUDE_DIR}")
    message(FATAL_ERROR "NumPy headers not found. Please install numpy.")
endif()

# 4. Add to includes
message(STATUS "NumPy Headers found: ${Python3_NumPy_INCLUDE_DIR}")
INCLUDE_DIRECTORIES(${Python3_NumPy_INCLUDE_DIR})

ADD_CUSTOM_TARGET(apply_directives
                  COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/scripts/make_apply.py ${CMAKE_CURRENT_SOURCE_DIR}/../../MedPyExport/ ${CMAKE_CURRENT_SOURCE_DIR}/apply_directives.i )


INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
INCLUDE_DIRECTORIES(${Python3_INCLUDE_DIRS})

file(GLOB MedPyHeaders "${CMAKE_CURRENT_SOURCE_DIR}/../../MedPyExport/*.h")

set(GENERATED_SWIG_FILE "${CMAKE_CURRENT_BINARY_DIR}/autogenerated_includes.i")
file(WRITE ${GENERATED_SWIG_FILE} "// Auto-generated by CMake - DO NOT EDIT\n")

foreach(header ${MedPyHeaders})
    # We use get_filename_component to get just "MyHeader.h" 
    # because we already added the folder to INCLUDE_DIRECTORIES above.
    get_filename_component(HEADER_NAME ${header} NAME)
    file(APPEND ${GENERATED_SWIG_FILE} "%include \"${HEADER_NAME}\"\n")
endforeach()
message("Created ${GENERATED_SWIG_FILE} based on ${CMAKE_CURRENT_SOURCE_DIR}")

SET(CMAKE_SWIG_FLAGS "")
SET_SOURCE_FILES_PROPERTIES(medpython.i PROPERTIES CPLUSPLUS ON)
SET_SOURCE_FILES_PROPERTIES(medpython.i PROPERTIES SWIG_FLAGS "")
message("\n*********************************************\n${CMAKE_CXX_FLAGS}\n*********************************************\n")
file(GLOB CppFiles ${CMAKE_CURRENT_SOURCE_DIR}/../../MedPyExport/*.cpp)
file(GLOB HeaderFiles ${CMAKE_CURRENT_SOURCE_DIR}/../../MedPyExport/*.h)


SET_SOURCE_FILES_PROPERTIES(SOURCE ${CppFiles} PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS} -lpython3 -lpthread -ldl -lutil -lm")
set(SWIG_MODULE_medpython_EXTRA_DEPS MedPython.h MedPython.h ${HeaderFiles} apply_directives pythoncode.i)

set_property(SOURCE medpython.i PROPERTY SWIG_MODULE_NAME medpython)

swig_add_library(medpython LANGUAGE python SOURCES medpython.i ${CppFiles})


SWIG_LINK_LIBRARIES(medpython -Wl,-Bstatic,--whole-archive -Wl,--start-group ${MEDIAL_INTERNAL_LIBS} ${BOOST_STATIC_LIB_PATHS} xgboost _lightgbm_static -Wl,--end-group -Wl,-no-whole-archive -Wl,-Bdynamic)