Files
cariflex/tools/EVerest-main/cmake/trailbook-ext-everest/generate-rst-from-manifest.cmake
Eric F d398a6ced2 Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1)
- OpenOCPP extracted (firmware OCPP 1.6J/2.0.1)
- ShapeShifter library installed (pip install -e)
- ShapeShifter specification extracted
- EVerest extracted

TODO updated with progress
2026-06-08 00:38:27 -04:00

213 lines
8.8 KiB
CMake

# This macro is for internal use only
#
# It is used in the function trailbook_ev_generate_rst_from_manifest().
# It adds an custom command to generate the RST file from the manifest file
macro(_trailbook_ev_generate_rst_from_manifest_generate_command)
string(REPLACE "/manifest.yaml" ".rst" GENERATED_FILE "${TRAILBOOK_EV_REFERENCE_MODULES_DIRECTORY}/${RELATIVE_PATH_MANIFEST}")
get_filename_component(RELATIVE_PATH ${RELATIVE_PATH_MANIFEST} DIRECTORY)
set(GENERATED_FILE "${TRAILBOOK_EV_REFERENCE_MODULES_DIRECTORY}/${RELATIVE_PATH}/autogenerated.rst")
get_filename_component(GENERATED_PATH ${GENERATED_FILE} DIRECTORY)
set(TEMPLATES_DIRECTORY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/templates")
if(EXISTS "${MODULE_DIR}/docs/")
set(HANDWRITTEN_MODULE_DOC "--module-handwritten-doc" "index.inc")
endif()
add_custom_command(
OUTPUT
${GENERATED_FILE}
DEPENDS
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/process_template.py
${args_MANIFEST_FILE}
${TEMPLATES_DIRECTORY}/module.rst.jinja
${TEMPLATES_DIRECTORY}/macros.jinja
trailbook_${args_TRAILBOOK_NAME}_stage_prepare_sphinx_source_after
${DEPS_STAGE_PREPARE_SPHINX_SOURCE_AFTER}
COMMENT
"Generating RST file ${GENERATED_FILE} from manifest ${args_MANIFEST_FILE}"
COMMAND
${CMAKE_COMMAND} -E make_directory "${GENERATED_PATH}"
COMMAND
${Python3_EXECUTABLE}
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/process_template.py
--template-dir "${TEMPLATES_DIRECTORY}"
--template-file "${TEMPLATES_DIRECTORY}/module.rst.jinja"
--name "${MODULE_NAME}"
--data-file "${args_MANIFEST_FILE}"
--target-file "${GENERATED_FILE}"
${HANDWRITTEN_MODULE_DOC}
)
set(TOP_LEVEL_MODULE_DIRECTORY "${CMAKE_SOURCE_DIR}")
get_filename_component(CURRENT_RELATIVE_FOLDER_TMP "${RELATIVE_PATH_MANIFEST}" DIRECTORY)
get_filename_component(CURRENT_RELATIVE_FOLDER "modules/${CURRENT_RELATIVE_FOLDER_TMP}" DIRECTORY)
while(NOT CURRENT_RELATIVE_FOLDER STREQUAL "modules")
set(CURRENT_INDEX_DIRECTORY_CONCAT "${CMAKE_SOURCE_DIR}/${CURRENT_RELATIVE_FOLDER}")
get_filename_component(CURRENT_INDEX_DIRECTORY "${CURRENT_INDEX_DIRECTORY_CONCAT}" ABSOLUTE)
set(CURRENT_DEST_DIRECTORY_CONCAT "${TRAILBOOK_EV_REFERENCE_DIRECTORY}/${CURRENT_RELATIVE_FOLDER}")
get_filename_component(CURRENT_DEST_DIRECTORY "${CURRENT_DEST_DIRECTORY_CONCAT}" ABSOLUTE)
set(INDEX_FILE "${CURRENT_DEST_DIRECTORY}/autogenerated.rst")
get_filename_component(CURRENT_FOLDER_NAME "${CURRENT_INDEX_DIRECTORY}" NAME)
string(REPLACE "/" "_" INDEX_TARGET_SUFFIX "${CURRENT_RELATIVE_FOLDER}")
get_property(is_create_index_cmd_added DIRECTORY "${CURRENT_INDEX_DIRECTORY}" PROPERTY did_add_create_index_cmd SET)
if (NOT ${is_create_index_cmd_added})
message(VERBOSE "ADDING DEFINITION OF add_custom_command FOR THE INDEX FILE OF ${CURRENT_DEST_DIRECTORY} FOR ${INDEX_FILE}")
set(INDEX_TEMPLATE_FILE "${TEMPLATES_DIRECTORY}/module_ref_index.rst.jinja")
set(CUSTOM_TEMPLATE_SUBSTITUTION_SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/DOCS_process_index_template_${INDEX_TARGET_SUFFIX}.py")
configure_file(
"${CMAKE_CURRENT_FUNCTION_LIST_DIR}/process_index_template.py.in"
"${CUSTOM_TEMPLATE_SUBSTITUTION_SCRIPT}"
@ONLY
)
add_custom_command(
OUTPUT
"${INDEX_FILE}"
COMMAND ${CMAKE_COMMAND} -E make_directory "${CURRENT_DEST_DIRECTORY}"
COMMAND ${Python3_EXECUTABLE} "${CUSTOM_TEMPLATE_SUBSTITUTION_SCRIPT}"
DEPENDS
"${INDEX_TEMPLATE_FILE}"
"${CUSTOM_TEMPLATE_SUBSTITUTION_SCRIPT}"
trailbook_${args_TRAILBOOK_NAME}_stage_prepare_sphinx_source_after
${DEPS_STAGE_PREPARE_SPHINX_SOURCE_AFTER}
COMMENT "Rendering Jinja2 template for ${INDEX_TARGET_SUFFIX}"
VERBATIM
)
set_property(
DIRECTORY "${CURRENT_INDEX_DIRECTORY}"
PROPERTY did_add_create_index_cmd
"TRUE"
)
add_custom_target(
trailbook_${args_TRAILBOOK_NAME}_generate_reference_index_for_module_${INDEX_TARGET_SUFFIX}
DEPENDS
"${INDEX_FILE}"
trailbook_${args_TRAILBOOK_NAME}_stage_prepare_sphinx_source_after
${DEPS_STAGE_PREPARE_SPHINX_SOURCE_AFTER}
COMMENT
"Target to generate RST file ${INDEX_FILE}"
)
set_property(
TARGET
trailbook_${args_TRAILBOOK_NAME}
APPEND
PROPERTY
ADDITIONAL_DEPS_STAGE_BUILD_SPHINX_BEFORE
"${INDEX_FILE}"
trailbook_${args_TRAILBOOK_NAME}_generate_reference_index_for_module_${INDEX_TARGET_SUFFIX}
)
else()
message(VERBOSE "SKIPPING DEFINITION OF add_custom_command FOR THE INDEX FILE OF ${CURRENT_FOLDER_NAME}")
endif()
# go up one level
get_filename_component(CURRENT_RELATIVE_FOLDER "${CURRENT_RELATIVE_FOLDER}" DIRECTORY)
endwhile()
endmacro()
# This function generates an RST file from a manifest definition file.
# It takes the following arguments:
# TRAILBOOK_NAME (required): The name of the trailbook.
# MANIFEST_FILE (required): The absolute path to the manifest
# definition file.
# Usage:
# trailbook_ev_generate_rst_from_manifest(
# TRAILBOOK_NAME <trailbook_name>
# MANIFEST_FILE <path_to_manifest_definition_file>
# )
function(trailbook_ev_generate_rst_from_manifest)
set(options)
set(one_value_args
TRAILBOOK_NAME
MANIFEST_FILE
)
set(multi_value_args)
cmake_parse_arguments(
"args"
"${options}"
"${one_value_args}"
"${multi_value_args}"
${ARGN}
)
# Parameter TRAILBOOK_NAME
# - is required
# - there should be a target named trailbook_<TRAILBOOK_NAME>
if(NOT args_TRAILBOOK_NAME)
message(FATAL_ERROR "trailbook_ext_ev_generate_rst_from_manifest: TRAILBOOK_NAME argument is required")
endif()
if(NOT TARGET trailbook_${args_TRAILBOOK_NAME})
message(
FATAL_ERROR
"trailbook_ext_ev_generate_rst_from_manifest: No target named trailbook_${args_TRAILBOOK_NAME} found."
" Did you forget to call add_trailbook() first?"
)
endif()
# Parameter MANIFEST_FILE
# - is required
# - must be a absolute path
# - must exist
if(NOT args_MANIFEST_FILE)
message(FATAL_ERROR "trailbook_ext_ev_generate_rst_from_manifest: MANIFEST_FILE argument is required")
endif()
if(NOT IS_ABSOLUTE "${args_MANIFEST_FILE}")
message(FATAL_ERROR "trailbook_ext_ev_generate_rst_from_manifest: MANIFEST_FILE must be an absolute path")
endif()
if(NOT EXISTS "${args_MANIFEST_FILE}")
message(FATAL_ERROR "trailbook_ext_ev_generate_rst_from_manifest: MANIFEST_FILE must exist")
endif()
get_target_property(
TRAILBOOK_INSTANCE_SOURCE_DIRECTORY
trailbook_${args_TRAILBOOK_NAME}
TRAILBOOK_INSTANCE_SOURCE_DIRECTORY
)
get_target_property(
DEPS_STAGE_PREPARE_SPHINX_SOURCE_AFTER
trailbook_${args_TRAILBOOK_NAME}
DEPS_STAGE_PREPARE_SPHINX_SOURCE_AFTER
)
set(TRAILBOOK_EV_REFERENCE_DIRECTORY "${TRAILBOOK_INSTANCE_SOURCE_DIRECTORY}/reference")
set(TRAILBOOK_EV_REFERENCE_MODULES_DIRECTORY "${TRAILBOOK_EV_REFERENCE_DIRECTORY}/modules")
get_filename_component(MODULE_DIR ${args_MANIFEST_FILE} DIRECTORY)
get_filename_component(MODULE_NAME ${MODULE_DIR} NAME_WE)
file(RELATIVE_PATH RELATIVE_PATH_MANIFEST
"${CMAKE_SOURCE_DIR}/modules"
"${args_MANIFEST_FILE}"
)
_trailbook_ev_generate_rst_from_manifest_generate_command()
add_custom_target(
trailbook_${args_TRAILBOOK_NAME}_generate_rst_from_manifest_${MODULE_NAME}
DEPENDS
${GENERATED_FILE}
trailbook_${args_TRAILBOOK_NAME}_stage_prepare_sphinx_source_after
${DEPS_STAGE_PREPARE_SPHINX_SOURCE_AFTER}
COMMENT
"Target to generate RST file ${GENERATED_FILE} from manifest definition ${args_MANIFEST_FILE}"
)
set_property(
TARGET
trailbook_${args_TRAILBOOK_NAME}
APPEND
PROPERTY
ADDITIONAL_DEPS_STAGE_BUILD_SPHINX_BEFORE
${GENERATED_FILE}
trailbook_${args_TRAILBOOK_NAME}_generate_rst_from_manifest_${MODULE_NAME}
)
endfunction()