summaryrefslogtreecommitdiff
path: root/Utilities/Sphinx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2022-04-27 15:02:44 -0400
committerBrad King <brad.king@kitware.com>2022-04-28 13:36:20 -0400
commit4cb616fed63a93547e81812980d59660bdf9757f (patch)
treed51bd474bd7efcd166a856d2f887c37ec8f58cb0 /Utilities/Sphinx
parent37fb70591ebd06d8434eb7a650aeaae17b2380e2 (diff)
downloadcmake-4cb616fed63a93547e81812980d59660bdf9757f.tar.gz
Tutorial: Provide a source archive when published on cmake.org
Provide readers following the tutorial on `cmake.org` a direct link to download the tutorial's source examples. Previously readers had to fetch the CMake source tree separately and look for the tutorial source examples inside it. Fixes: #22475
Diffstat (limited to 'Utilities/Sphinx')
-rw-r--r--Utilities/Sphinx/CMakeLists.txt4
-rw-r--r--Utilities/Sphinx/tutorial_archive.cmake42
2 files changed, 46 insertions, 0 deletions
diff --git a/Utilities/Sphinx/CMakeLists.txt b/Utilities/Sphinx/CMakeLists.txt
index f77bab4073..51c035e9ee 100644
--- a/Utilities/Sphinx/CMakeLists.txt
+++ b/Utilities/Sphinx/CMakeLists.txt
@@ -148,6 +148,10 @@ if(CMake_SPHINX_CMAKE_ORG)
list(APPEND doc_html_opts -A outdated=1)
endif()
+ list(APPEND html_pre_commands
+ COMMAND ${CMAKE_COMMAND} -Dversion=${CMake_VERSION} -P ${CMAKE_CURRENT_SOURCE_DIR}/tutorial_archive.cmake
+ )
+
list(APPEND qthelp_post_commands
COMMAND ${CMAKE_COMMAND} -E copy
"${CMAKE_CURRENT_BINARY_DIR}/qthelp/CMake.qch"
diff --git a/Utilities/Sphinx/tutorial_archive.cmake b/Utilities/Sphinx/tutorial_archive.cmake
new file mode 100644
index 0000000000..212a6220e7
--- /dev/null
+++ b/Utilities/Sphinx/tutorial_archive.cmake
@@ -0,0 +1,42 @@
+if(NOT version)
+ message(FATAL_ERROR "Pass -Dversion=")
+endif()
+
+# Name of the archive and its top-level directory.
+set(archive_name "cmake-${version}-tutorial-source")
+
+# Base directory for CMake Documentation.
+set(help_dir "${CMAKE_CURRENT_LIST_DIR}/../../Help")
+cmake_path(ABSOLUTE_PATH help_dir NORMALIZE)
+
+# Collect the non-documentation part of the tutorial directory.
+file(COPY "${help_dir}/guide/tutorial/"
+ DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/${archive_name}"
+ NO_SOURCE_PERMISSIONS
+ PATTERN *.rst EXCLUDE
+ PATTERN source.txt EXCLUDE
+ )
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${archive_name}/README.txt" [[
+This directory contains source code examples for the CMake Tutorial.
+Each step has its own subdirectory containing code that may be used as a
+starting point. The tutorial examples are progressive so that each step
+provides the complete solution for the previous step.
+]])
+
+# Create an archive containing the tutorial source examples.
+file(MAKE_DIRECTORY "${help_dir}/_generated")
+file(ARCHIVE_CREATE
+ OUTPUT "${help_dir}/_generated/${archive_name}.zip"
+ PATHS "${CMAKE_CURRENT_BINARY_DIR}/${archive_name}"
+ FORMAT zip
+ )
+
+# Write a reStructuredText snippet included from the tutorial index.
+file(WRITE "${help_dir}/guide/tutorial/source.txt" "
+.. |tutorial_source| replace::
+ The tutorial source code examples are available in
+ :download:`this archive </_generated/${archive_name}.zip>`.
+")
+
+# Remove temporary directory.
+file(REMOVE_RECURSE "${CMAKE_CURRENT_BINARY_DIR}/${archive_name}")