blob: a1de749c7d60f032f911eacce8657c8b7bc1c9ed [file] [log] [blame]
################################################################################
# Copyright (c) 2021 in-tech GmbH
#
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
################################################################################
# The rst files of the sphinx documentation contain PLACEHOLDERS for referencing
# files outside the source folder of the documentation. This makes references
# into the repository "as a whole" easier, but also introduces a step for
# resolving these references before building. To prevent changes in the original
# documentation source, the this file copies the original source folder ${SRC}
# into a new ${DST} folder. After that, the PLACEHOLDERS are updated w.r.t
# to the the new origin.
#
# Currently supported PLACEHOLDERS
# - @OP_REL_SIM@ => relative path to the "op sim" root (e.g. deps/os/sim if
# using a git submodule with the openPASS open source code at deps/os inside
# the local repository)
# - @CUSTOM_REL_SIM@ => relative path to the "custom sim" root (.)
macro(copy_documentation source destination)
message(VERBOSE "Copy ${source} to ${destination}")
file(COPY ${source} DESTINATION ${destination})
endmacro()
macro(update_placeholder source destination)
message(VERBOSE "Updating ${source} to ${destination}")
file(RELATIVE_PATH target ${destination} ${source}/../..)
# Remove potential trailing "/"
string(REGEX REPLACE "(.*)/$" "\\1" target ${target})
# Placeholder for conf.py: no initial '/' => real relative paths
set(OP_REL_SIM ../${target}/deps/os/sim) # relative path to the openPASS open source code, with prefix '../${target}' pointing to the custom repository root if this file is located at <root>/doc
set(CUSTOM_REL_SIM ../${target}) # relative path to the custom repository root (equal to custom sim root in this example)
configure_file(${destination}/source/conf.py
${destination}/source/conf.py @ONLY)
# Placeholder for RST files: use initial '/' => sphinx style for "from source"
# Override old one, because we want to use the same placeholder in both contexts
set(OP_REL_SIM /${OP_REL_SIM})
set(CUSTOM_REL_SIM /${CUSTOM_REL_SIM})
file(GLOB_RECURSE rstFiles LIST_DIRECTORIES false ${destination}/*.rst)
foreach(rstFile IN LISTS rstFiles)
message(DEBUG "Replacing placeholders in ${rstFile}")
configure_file(${rstFile} ${rstFile} @ONLY)
endforeach()
endmacro()
copy_documentation(${SRC} ${DST})
update_placeholder(${SRC} ${DST})