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* *.user*
*.pyc *.pyc
Help/_generated
Testing Testing
CMakeUserPresets.json CMakeUserPresets.json

View File

@ -11,8 +11,9 @@ work together in an example project can be very helpful.
Steps Steps
===== =====
The tutorial documentation and source code for examples can be found in .. include:: source.txt
the ``Help/guide/tutorial`` directory of the CMake source code tree.
|tutorial_source|
Each step has its own subdirectory containing code that may be used as a 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 starting point. The tutorial examples are progressive so that each step
provides the complete solution for the previous 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) list(APPEND doc_html_opts -A outdated=1)
endif() 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 list(APPEND qthelp_post_commands
COMMAND ${CMAKE_COMMAND} -E copy COMMAND ${CMAKE_COMMAND} -E copy
"${CMAKE_CURRENT_BINARY_DIR}/qthelp/CMake.qch" "${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}")