1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-05-08 22:37:04 +08:00

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
This commit is contained in:
Brad King 2022-04-27 15:02:44 -04:00
parent 37fb70591e
commit 4cb616fed6
5 changed files with 54 additions and 2 deletions

2
.gitignore vendored
View File

@ -4,6 +4,8 @@
*.user*
*.pyc
Help/_generated
Testing
CMakeUserPresets.json

View File

@ -11,8 +11,9 @@ work together in an example project can be very helpful.
Steps
=====
The tutorial documentation and source code for examples can be found in
the ``Help/guide/tutorial`` directory of the CMake source code tree.
.. include:: source.txt
|tutorial_source|
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.

View File

@ -0,0 +1,3 @@
.. |tutorial_source| replace::
The tutorial documentation and source code examples can be found in
the ``Help/guide/tutorial`` directory of the CMake source code tree.

View File

@ -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"

View File

@ -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}")