mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-06-12 23:01:16 -03:00
This task is a bit annoying to implement because `sphinx-build` depends on `fish_indent`, so that needs to be built, and the binary location added to `PATH`. Building `fish_indent` can be avoided by setting the `--fish-indent` argument to the path to an existing `fish_indent` executable. Use the new xtask in CMake builds. To do so without having to add configuration options about where to put the docs, or having to copy them from the default location to `build/user_doc`, we instead get rid of the `user_doc` directory and change the code which accesses the docs to read them from the non-configurable default output location in Cargo's target directory. Part of #12292
65 lines
2.2 KiB
CMake
65 lines
2.2 KiB
CMake
include(FeatureSummary)
|
|
|
|
set(SPHINX_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/doc_src")
|
|
set(SPHINX_OUTPUT_DIR "${FISH_RUST_BUILD_DIR}/fish-docs")
|
|
set(SPHINX_MANPAGE_DIR "${SPHINX_OUTPUT_DIR}/man")
|
|
|
|
set(FISH_INDENT_FOR_BUILDING_DOCS "" CACHE FILEPATH "Path to fish_indent executable for building HTML docs")
|
|
|
|
if(FISH_INDENT_FOR_BUILDING_DOCS)
|
|
set(SPHINX_HTML_FISH_INDENT_DEP)
|
|
else()
|
|
set(FISH_INDENT_FOR_BUILDING_DOCS "${CMAKE_CURRENT_BINARY_DIR}/fish_indent")
|
|
set(SPHINX_HTML_FISH_INDENT_DEP fish_indent)
|
|
endif()
|
|
|
|
set(VARS_FOR_CARGO_SPHINX_WRAPPER
|
|
"CARGO_TARGET_DIR=${FISH_RUST_BUILD_DIR}"
|
|
"FISH_SPHINX=${SPHINX_EXECUTABLE}"
|
|
)
|
|
|
|
add_custom_target(sphinx-docs
|
|
COMMAND env ${VARS_FOR_CARGO_SPHINX_WRAPPER}
|
|
cargo xtask html-docs --fish-indent=${FISH_INDENT_FOR_BUILDING_DOCS}
|
|
DEPENDS ${SPHINX_HTML_FISH_INDENT_DEP}
|
|
COMMENT "Building HTML documentation with Sphinx")
|
|
|
|
add_custom_target(sphinx-manpages
|
|
${SPHINX_EXECUTABLE}
|
|
-j auto
|
|
-q -b man
|
|
-c "${SPHINX_SRC_DIR}"
|
|
-d "${SPHINX_OUTPUT_DIR}/.doctrees-man"
|
|
"${SPHINX_SRC_DIR}"
|
|
"${SPHINX_MANPAGE_DIR}/man1"
|
|
COMMENT "Building man pages with Sphinx")
|
|
|
|
if(NOT DEFINED WITH_DOCS) # Don't check for legacy options if the new one is defined, to help bisecting.
|
|
if(DEFINED BUILD_DOCS)
|
|
message(FATAL_ERROR "the BUILD_DOCS option is no longer supported, use -DWITH_DOCS=ON|OFF")
|
|
endif()
|
|
if(DEFINED INSTALL_DOCS)
|
|
message(FATAL_ERROR "the INSTALL_DOCS option is no longer supported, use -DWITH_DOCS=ON|OFF")
|
|
endif()
|
|
endif()
|
|
|
|
if(SPHINX_EXECUTABLE)
|
|
option(WITH_DOCS "build documentation (requires Sphinx)" ON)
|
|
else()
|
|
option(WITH_DOCS "build documentation (requires Sphinx)" OFF)
|
|
endif()
|
|
|
|
if(WITH_DOCS AND NOT SPHINX_EXECUTABLE)
|
|
message(FATAL_ERROR "build documentation selected, but sphinx-build could not be found")
|
|
endif()
|
|
|
|
add_feature_info(Documentation WITH_DOCS "user manual and documentation")
|
|
|
|
if(WITH_DOCS)
|
|
add_custom_target(doc ALL
|
|
DEPENDS sphinx-docs sphinx-manpages)
|
|
# Group docs targets into a DocsTargets folder
|
|
set_property(TARGET doc sphinx-docs sphinx-manpages
|
|
PROPERTY FOLDER cmake/DocTargets)
|
|
endif()
|