- 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
213 lines
8.8 KiB
CMake
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()
|