AusweisApp2/cmake/Sphinx.cmake

92 lines
3.1 KiB
CMake

FIND_PROGRAM(SPHINX_BIN NAMES sphinx-build2 sphinx-build CMAKE_FIND_ROOT_PATH_BOTH)
IF(SPHINX_BIN)
SET(SPHINX_FOUND TRUE)
FUNCTION(SPHINX_INTERNAL_BUILD SPHINX_DOCS_DIR _target _builder _options _output _defaultLang)
IF("${_builder}" STREQUAL "gettext")
MESSAGE(STATUS "Generate ${_target} POT files")
ELSE()
FILE(GLOB _LOCALES "${SPHINX_DOCS_DIR}/locales/*")
ENDIF()
LIST(APPEND _LOCALES ${_defaultLang})
SET(_TMP_DIR "${CMAKE_BINARY_DIR}/_tmp/${_target}/${_builder}")
SET(_CONFIG_DIR "${_TMP_DIR}/config")
SET(SPHINX_CONF_PY_IN "${SPHINX_DOCS_DIR}/${_builder}.conf.py.in")
IF(NOT EXISTS "${SPHINX_CONF_PY_IN}")
SET(SPHINX_CONF_PY_IN "${SPHINX_DOCS_DIR}/conf.py.in")
ENDIF()
CONFIGURE_FILE("${SPHINX_CONF_PY_IN}" "${_CONFIG_DIR}/conf.py" @ONLY) # Use @SPHINX_DOCS_DIR@ here
FILE(GLOB_RECURSE _FILES
"${SPHINX_DOCS_DIR}/*.rst"
"${SPHINX_DOCS_DIR}/*.po"
"${SPHINX_DOCS_DIR}/*.png"
"${SPHINX_DOCS_DIR}/*.jpg"
"${SPHINX_DOCS_DIR}/*.svg")
FOREACH(lang ${_LOCALES})
GET_FILENAME_COMPONENT(lang "${lang}" NAME)
MESSAGE(STATUS "Generate (${_builder}) ${_target}: ${lang}")
SET(target_dir "${_output}/${_target}/${_builder}/${lang}")
SET(TARGET_CMD ${SPHINX_BIN} -c "${_CONFIG_DIR}" -Dlanguage=${lang} ${_options} -d "${_TMP_DIR}/${lang}" -b ${_builder} "${SPHINX_DOCS_DIR}" "${target_dir}")
ADD_CUSTOM_COMMAND(OUTPUT ${target_dir} COMMAND ${TARGET_CMD} DEPENDS ${_FILES})
SET(subtarget ${_target}.${_builder}.${lang})
ADD_CUSTOM_TARGET(${subtarget} DEPENDS ${target_dir} SOURCES ${_FILES})
LIST(APPEND target_list ${subtarget})
IF("${_builder}" STREQUAL "latex")
ADD_CUSTOM_TARGET(${subtarget}.pdf COMMAND make WORKING_DIRECTORY ${target_dir} DEPENDS ${subtarget})
LIST(APPEND target_list_pdf ${subtarget}.pdf)
ENDIF()
ENDFOREACH()
LIST(APPEND _FILES "${SPHINX_CONF_PY_IN}")
ADD_CUSTOM_TARGET(${_target}.${_builder} DEPENDS ${target_list} SOURCES ${_FILES})
IF("${_builder}" STREQUAL "latex")
ADD_CUSTOM_TARGET(${_target}.${_builder}.pdf DEPENDS ${target_list_pdf} SOURCES ${_FILES})
ENDIF()
ENDFUNCTION()
FUNCTION(SPHINX_GEN SPHINX_DOCS_DIR _target)
SET(options )
SET(oneValueArgs DEST OPTIONS DEFAULT_LANG)
SET(multiValueArgs BUILDER)
cmake_parse_arguments(_PARAM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
IF(NOT _PARAM_DEST)
SET(_PARAM_DEST "${CMAKE_CURRENT_BINARY_DIR}")
ENDIF()
IF(NOT _PARAM_DEFAULT_LANG)
SET(_PARAM_DEFAULT_LANG de)
ENDIF()
IF(NOT _PARAM_BUILDER)
IF(SPHINX_BUILDER_${_target})
SET(_PARAM_BUILDER ${SPHINX_BUILDER_${_target}})
ELSEIF(SPHINX_BUILDER)
SET(_PARAM_BUILDER ${SPHINX_BUILDER})
ELSE()
SET(_PARAM_BUILDER "html")
ENDIF()
ENDIF()
FOREACH(builder ${_PARAM_BUILDER})
map_get_value(builder_options "${_PARAM_OPTIONS}" "${builder}")
SPHINX_INTERNAL_BUILD(${SPHINX_DOCS_DIR} "${_target}" "${builder}" "${builder_options}" "${_PARAM_DEST}" "${_PARAM_DEFAULT_LANG}")
LIST(APPEND _dep_targets ${_target}.${builder})
ENDFOREACH()
ADD_CUSTOM_TARGET(${_target} DEPENDS ${_dep_targets})
CREATE_DOC8_TARGET("${SPHINX_DOCS_DIR}" "${_target}")
ENDFUNCTION()
ENDIF()