cmake_minimum_required(VERSION 3.20)
project(cf_basic_io_v2 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

get_filename_component(_CF_REPO_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../" ABSOLUTE)
include("${_CF_REPO_ROOT}/tools/cmake/cf_contracts_include.cmake")

set(GENERATED_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated)
file(MAKE_DIRECTORY ${GENERATED_DIR})

set(STEPS_DOCUMENT ${CMAKE_CURRENT_SOURCE_DIR}/../steps.nq)
set(SIG_HEADER ${GENERATED_DIR}/cf_basic_io_signature_hashes.h)

set(CF_SIGGEN_COMMAND ${Python3_EXECUTABLE} -m cf_step_tooling.siggen)
execute_process(
  COMMAND ${Python3_EXECUTABLE} -c
          "import inspect, pathlib, cf_step_tooling.siggen as sig, cf_step_tooling._signatures as impl, cf_step_tooling._step_document as doc, cf_step_tooling._rdf as rdf; print(pathlib.Path(inspect.getsourcefile(sig)).resolve()); print(pathlib.Path(inspect.getsourcefile(impl)).resolve()); print(pathlib.Path(inspect.getsourcefile(doc)).resolve()); print(pathlib.Path(inspect.getsourcefile(rdf)).resolve())"
  OUTPUT_VARIABLE CF_SIGGEN_DEPENDENCY_OUTPUT
  OUTPUT_STRIP_TRAILING_WHITESPACE
)
string(REPLACE "\r\n" "\n" CF_SIGGEN_DEPENDENCY_OUTPUT "${CF_SIGGEN_DEPENDENCY_OUTPUT}")
string(REPLACE "\n" ";" CF_SIGGEN_DEPENDENCIES "${CF_SIGGEN_DEPENDENCY_OUTPUT}")

add_custom_command(
  OUTPUT ${SIG_HEADER}
  COMMAND ${CF_SIGGEN_COMMAND} --steps ${STEPS_DOCUMENT} --out ${SIG_HEADER} --scratch
  DEPENDS ${STEPS_DOCUMENT} ${CF_SIGGEN_DEPENDENCIES}
  COMMENT "Generating cf_basic_io signature hashes"
)

add_library(cf_basic_io_v2 SHARED
  ${CMAKE_CURRENT_SOURCE_DIR}/steps.cpp
  ${SIG_HEADER}
)

target_include_directories(cf_basic_io_v2 PRIVATE
  ${CF_CONTRACTS_INCLUDE}
  ${GENERATED_DIR}
)

target_compile_definitions(cf_basic_io_v2 PRIVATE CF_STEP_ABI_EXPORTS)

add_custom_command(TARGET cf_basic_io_v2 POST_BUILD
  COMMAND ${CMAKE_COMMAND} -E make_directory ${SKBUILD_PLATLIB_DIR}/cf_basic_io/bin
  COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:cf_basic_io_v2> ${SKBUILD_PLATLIB_DIR}/cf_basic_io/bin
  COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_SOURCE_DIR}/../bin
  COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:cf_basic_io_v2> ${CMAKE_CURRENT_SOURCE_DIR}/../bin
)
