diff options
| author | _ov4 <ov4@ov4.org> | 2026-10-13 14:16:53 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-10-13 14:16:53 +0000 |
| commit | 1c64adaad7ad89386ae9cb44c8e3050672a59d6e (patch) | |
| tree | fa54be5a52e73e5e67d3a0bfe0f76597d82cea5f /cmake | |
| parent | 3b4e89d96afe203bb0e8b5b331bb30d1193d0831 (diff) | |
Build and package all language manuals with offline HTML links
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Diffstat (limited to 'cmake')
| -rw-r--r-- | cmake/GenerateManual.cmake.in | 14 | ||||
| -rw-r--r-- | cmake/Manual.cmake | 38 | ||||
| -rw-r--r-- | cmake/ManualLinks.lua | 8 | ||||
| -rw-r--r-- | cmake/Release.cmake | 7 |
4 files changed, 51 insertions, 16 deletions
diff --git a/cmake/GenerateManual.cmake.in b/cmake/GenerateManual.cmake.in index b6bf853..8874c82 100644 --- a/cmake/GenerateManual.cmake.in +++ b/cmake/GenerateManual.cmake.in @@ -6,7 +6,9 @@ message(STATUS "Using Pandoc: ${pandoc}") set(arguments --standalone --from=markdown --to=@cpsc_manual_format@) if("@cpsc_manual_format@" STREQUAL "html5") - list(APPEND arguments --metadata "title=cpsc manual") + get_filename_component(title "${CPSC_MANUAL_SOURCE}" NAME) + string(REGEX REPLACE "\\.[17]\\.md$" "" title "${title}") + list(APPEND arguments --metadata "title=${title}") endif() if(pandoc_LOCAL AND IS_DIRECTORY "@CPSC_DEPS_ROOT@/usr/share/pandoc/data") list(APPEND arguments "--data-dir=@CPSC_DEPS_ROOT@/usr/share/pandoc/data") @@ -22,12 +24,14 @@ elseif(pandoc_LOCAL AND UNIX AND NOT APPLE) set(ENV{LD_LIBRARY_PATH} "${libraries}") endif() -file(MAKE_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@/doc") +get_filename_component(output_dir "${CPSC_MANUAL_OUTPUT}" DIRECTORY) +file(MAKE_DIRECTORY "${output_dir}") +list(APPEND arguments "--lua-filter=@CMAKE_CURRENT_SOURCE_DIR@/cmake/ManualLinks.lua") execute_process( - COMMAND "${pandoc}" ${arguments} "@CMAKE_CURRENT_SOURCE_DIR@/doc/cpsc.1.md" - --output "@cpsc_manual_file@" + COMMAND "${pandoc}" ${arguments} "${CPSC_MANUAL_SOURCE}" + --output "${CPSC_MANUAL_OUTPUT}" RESULT_VARIABLE result ) if(NOT result EQUAL 0) - message(FATAL_ERROR "Pandoc failed to generate @cpsc_manual_file@ (${result})") + message(FATAL_ERROR "Pandoc failed to generate ${CPSC_MANUAL_OUTPUT} (${result})") endif() diff --git a/cmake/Manual.cmake b/cmake/Manual.cmake index 3c20f12..689c91e 100644 --- a/cmake/Manual.cmake +++ b/cmake/Manual.cmake @@ -1,24 +1,40 @@ if(WIN32) - set(cpsc_manual_file "${CMAKE_CURRENT_BINARY_DIR}/doc/cpsc.html") set(cpsc_manual_format html5) else() - set(cpsc_manual_file "${CMAKE_CURRENT_BINARY_DIR}/doc/cpsc.1") set(cpsc_manual_format man) endif() configure_file("${CMAKE_CURRENT_LIST_DIR}/GenerateManual.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/GenerateManual.cmake" @ONLY) -set(cpsc_manual_dependencies "${CMAKE_CURRENT_SOURCE_DIR}/doc/cpsc.1.md" +file(GLOB cpsc_language_sources CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/doc/language/cpsc-*.7.md") +set(cpsc_manual_sources "${CMAKE_CURRENT_SOURCE_DIR}/doc/cpsc.1.md" + ${cpsc_language_sources}) +set(cpsc_manual_dependencies "${CMAKE_CURRENT_BINARY_DIR}/GenerateManual.cmake" + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/ManualLinks.lua" "${CPSC_DEPS_MODULE_DIR}/FindDependency.cmake") if(EXISTS "${CPSC_DEPS_DIR}/packages.sha256") list(APPEND cpsc_manual_dependencies "${CPSC_DEPS_DIR}/packages.sha256") endif() -add_custom_command( - OUTPUT "${cpsc_manual_file}" - COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/GenerateManual.cmake" - DEPENDS ${cpsc_manual_dependencies} - COMMENT "Generating cpsc manual (${cpsc_manual_format})" - VERBATIM -) -add_custom_target(doc DEPENDS "${cpsc_manual_file}") +set(cpsc_manual_outputs) +foreach(source IN LISTS cpsc_manual_sources) + file(RELATIVE_PATH relative "${CMAKE_CURRENT_SOURCE_DIR}/doc" "${source}") + if(WIN32) + string(REGEX REPLACE "\\.[17]\\.md$" ".html" relative "${relative}") + else() + string(REGEX REPLACE "\\.md$" "" relative "${relative}") + endif() + set(output "${CMAKE_CURRENT_BINARY_DIR}/doc/${relative}") + add_custom_command( + OUTPUT "${output}" + COMMAND "${CMAKE_COMMAND}" "-DCPSC_MANUAL_SOURCE=${source}" + "-DCPSC_MANUAL_OUTPUT=${output}" + -P "${CMAKE_CURRENT_BINARY_DIR}/GenerateManual.cmake" + DEPENDS "${source}" ${cpsc_manual_dependencies} + COMMENT "Generating ${relative} (${cpsc_manual_format})" + VERBATIM + ) + list(APPEND cpsc_manual_outputs "${output}") +endforeach() +add_custom_target(doc DEPENDS ${cpsc_manual_outputs}) diff --git a/cmake/ManualLinks.lua b/cmake/ManualLinks.lua new file mode 100644 index 0000000..0fddef5 --- /dev/null +++ b/cmake/ManualLinks.lua @@ -0,0 +1,8 @@ +-- Markdown sources share links; render local HTML links or man-page names. +function Link(link) + if FORMAT == 'man' then + return link.content + end + link.target = link.target:gsub('%.[17]%.md$', '.html') + return link +end diff --git a/cmake/Release.cmake b/cmake/Release.cmake index 49dee98..59a1d79 100644 --- a/cmake/Release.cmake +++ b/cmake/Release.cmake @@ -21,6 +21,7 @@ if(CPSC_WINDOWS) set(cpsc_binary_name cpsc.exe) set(cpsc_installer install.ps1) set(cpsc_manual cpsc.html) + set(cpsc_language_pattern "${CPSC_BINARY_DIR}/doc/language/cpsc-*.html") set(cpsc_tar_flags cf) set(cpsc_archive_format zip) else() @@ -28,6 +29,7 @@ else() set(cpsc_binary_name cpsc) set(cpsc_installer install.sh) set(cpsc_manual cpsc.1) + set(cpsc_language_pattern "${CPSC_BINARY_DIR}/doc/language/cpsc-*.7") set(cpsc_tar_flags cJf) set(cpsc_archive_format gnutar) endif() @@ -38,6 +40,11 @@ configure_file("${CPSC_EXECUTABLE}" "${cpsc_package_dir}/${cpsc_binary_name}" CO file(COPY "${CPSC_SOURCE_DIR}/${cpsc_installer}" "${CPSC_SOURCE_DIR}/LICENSE" DESTINATION "${cpsc_package_dir}") file(COPY "${CPSC_BINARY_DIR}/doc/${cpsc_manual}" DESTINATION "${cpsc_package_dir}/doc") +file(GLOB cpsc_language_manuals "${cpsc_language_pattern}") +if(NOT cpsc_language_manuals) + message(FATAL_ERROR "Language manuals are missing; build the doc target first") +endif() +file(COPY ${cpsc_language_manuals} DESTINATION "${cpsc_package_dir}/doc/language") execute_process( COMMAND "${CMAKE_COMMAND}" -E tar "${cpsc_tar_flags}" "${cpsc_archive}" "--format=${cpsc_archive_format}" "${cpsc_package_name}" |
