message("Python Found: '${Python_VERSION}' (${Python_LIBRARIES})")

SET(PYTHON_API_DIR ${CMAKE_BINARY_DIR}/python)

# CMake does not have proper support for copying files and its scripting language does not make adding it easy.

function(COPY_HELPER FILE DESTINATION DEP_LIST)
    get_filename_component(BASENAME "${FILE}" NAME)
    if ("${BASENAME}" IN_LIST COPY_EXCLUDE)
        return()
    endif()
    if (IS_DIRECTORY "${FILE}")
        file(GLOB SUBFILES "${FILE}/*")
        foreach (SUBFILE ${SUBFILES})
            COPY_HELPER("${SUBFILE}" "${DESTINATION}/${BASENAME}" "${DEP_LIST}")
        endforeach()
    else()
        set(OUTFILE "${DESTINATION}/${BASENAME}")
        add_custom_command(
            OUTPUT "${OUTFILE}"
            COMMAND ${CMAKE_COMMAND} -E copy "${FILE}" "${OUTFILE}"
            MAIN_DEPENDENCY "${FILE}"
            )
        list(APPEND DEP_LIST "${OUTFILE}")
        # of course this does not work for custom targets
        # add_dependencies(target ${OUTFILE})
    endif()
    set(DEP_LIST "${DEP_LIST}" PARENT_SCOPE)
endfunction()

set_property(GLOBAL PROPERTY COPY_HELPER_TARGET_COUNTER_PROPERTY "0")

function(COPY FILE DESTINATION)
    include(CMakeParseArguments)
    cmake_parse_arguments(PARSE_ARGV 2
        "COPY"
        ""
        ""
        "EXCLUDE"
        )

    get_filename_component(FILE "${FILE}" REALPATH)

    list(APPEND DEP_LIST "")
    COPY_HELPER("${FILE}" "${DESTINATION}" "${DEP_LIST}")

    get_property(COPY_HELPER_TARGET_COUNTER GLOBAL PROPERTY COPY_HELPER_TARGET_COUNTER_PROPERTY)
    math(EXPR COPY_HELPER_TARGET_COUNTER "${COPY_HELPER_TARGET_COUNTER}+1")
    set_property(GLOBAL PROPERTY COPY_HELPER_TARGET_COUNTER_PROPERTY ${COPY_HELPER_TARGET_COUNTER})

    add_custom_target(
        copy_helper_${COPY_HELPER_TARGET_COUNTER}
        ALL
        DEPENDS ${DEP_LIST}
    )
endfunction()


copy(vapor ${PYTHON_API_DIR} EXCLUDE cmake.py __pycache__)
copy(setup.py ${PYTHON_API_DIR})

copy(examples ${PYTHON_API_DIR} EXCLUDE CMakeLists.txt)
add_subdirectory (examples)

# copy(bld.bat ${PYTHON_API_DIR})
# copy(build.sh ${PYTHON_API_DIR})
# configure_file (meta.yaml ${PYTHON_API_DIR}/meta.yaml)

# get_target_property(VAPI_PRIVATE_COMPILE_DEFS vapi COMPILE_DEFINITIONS)
get_target_property(VAPI_COMPILE_DEFS vapi INTERFACE_COMPILE_DEFINITIONS)
get_property(GLOBAL_COMPILE_DEFS DIRECTORY PROPERTY COMPILE_DEFINITIONS)
# These don't quite work
# get_target_property(VAPI_DEFS vapi COMPILE_DEFINITIONS)
# get_target_property(VAPI_INT_DEFS vapi INTERFACE_COMPILE_DEFINITIONS)
# get_property(DIR_DEFS DIRECTORY PROPERTY COMPILE_DEFINITIONS)

configure_file (cmake.py ${PYTHON_API_DIR}/cmake.py)
configure_file (vapor/cmake.py ${PYTHON_API_DIR}/vapor/cmake.py)


if (CONDA_BUILD)
    set(CONDA_SITE_PACKAGE_DIR "$ENV{SP_DIR}")
    install(
        DIRECTORY "${PYTHON_API_DIR}/vapor"
		DESTINATION "${CONDA_SITE_PACKAGE_DIR}"
		COMPONENT Dependencies
	)
endif()

# Fails to find either despite both being installed
# list(APPEND CMAKE_MODULE_PATH "/usr/local/Caskroom/miniconda/base/envs/test/lib/python3.9/site-packages/cppyy_backend/cmake")
# find_package (LibClang REQUIRED)
# find_package (Cppyy REQUIRED)

