cmake_minimum_required(VERSION 4.3)
project(PythonCppExtension)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

find_package(Python3 "3.14" COMPONENTS Interpreter Development)

set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-color=always")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=always")

#set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fsanitize=leak")
#set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fsanitize=leak")

set(SRCS
    "src/gdb-others.cpp"
    "src/py-obj-type.cpp"
    "src/python-internal.cpp"
    "src/my_py_module.cpp"
    "src/A.cpp"
    "src/B.cpp"
    "src/ObjWithAlloc.cpp")
add_library(MyModule SHARED ${SRCS})
set_target_properties(
    MyModule
    PROPERTIES
        PREFIX ""
        OUTPUT_NAME "MyModule"
        LINKER_LANGUAGE C
        LINK_LIBRARIES Python3::Python
        INCLUDE_DIRECTORIES "${PYTHON_INCLUDE_DIR};${CMAKE_CURRENT_SOURCE_DIR}/include;${CMAKE_CURRENT_SOURCE_DIR}/src"
        COMPILE_DEFINITIONS "Py_LIMITED_API=0x030e0000"
    )

add_executable(PyDebug "pydbg.cpp")
target_link_libraries(PyDebug ${PYTHON_LIBRARIES})
set_target_properties(
    PyDebug
    PROPERTIES
        PREFIX ""
        OUTPUT_NAME "PyDebug"
        LINKER_LANGUAGE C
        LINK_LIBRARIES Python3::Python
        INCLUDE_DIRECTORIES "${PYTHON_INCLUDE_DIR};${CMAKE_CURRENT_SOURCE_DIR}"
    )

add_custom_target(test-pydebug
                  COMMAND cmake -E env PYTHONPATH=${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/PyDebug 2>&1
                  VERBATIM)
add_dependencies(test-pydebug PyDebug)

add_custom_target(test-py
                  COMMAND cmake -E env PYTHONPATH=${CMAKE_BINARY_DIR} python3 ${CMAKE_CURRENT_SOURCE_DIR}/test.py
                  VERBATIM)
add_dependencies(test-py MyModule)

