diff options
| author | _ov4 <ov4@ov4.org> | 2026-10-13 11:10:08 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-10-13 11:10:08 +0000 |
| commit | 3320220943fee04e6fff98c14aadf148472e6556 (patch) | |
| tree | c4d40991fcf904af48378927dd284d1cc036f46c /cmake | |
| parent | 85bd5c6663dc8c663f86828d1b1a5273ee0a82fe (diff) | |
build: use local Pandoc packages for manual generation
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Diffstat (limited to 'cmake')
| -rw-r--r-- | cmake/ExtractPackages.cmake | 1 | ||||
| -rw-r--r-- | cmake/GenerateManual.cmake.in | 40 | ||||
| -rw-r--r-- | cmake/LocalDependencies.cmake | 6 | ||||
| -rw-r--r-- | cmake/Manual.cmake | 23 |
4 files changed, 70 insertions, 0 deletions
diff --git a/cmake/ExtractPackages.cmake b/cmake/ExtractPackages.cmake index 7b525d7..71a9dea 100644 --- a/cmake/ExtractPackages.cmake +++ b/cmake/ExtractPackages.cmake @@ -16,6 +16,7 @@ function(cpsc_extract_packages) "${CPSC_DEPS_DIR}/packages/*.deb" "${CPSC_DEPS_DIR}/packages/*.pkg.tar.*" "${CPSC_DEPS_DIR}/packages/*.bottle*.tar.gz" + "${CPSC_DEPS_DIR}/packages/pandoc-*-windows-x86_64.zip" ) list(FILTER packages EXCLUDE REGEX "\\.sig$") # Homebrew exposes both a cache symlink and its downloads/ target. diff --git a/cmake/GenerateManual.cmake.in b/cmake/GenerateManual.cmake.in new file mode 100644 index 0000000..dd1db2e --- /dev/null +++ b/cmake/GenerateManual.cmake.in @@ -0,0 +1,40 @@ +# Pandoc is optional until the doc/install/release target actually needs it. +set(local_bins "@CPSC_LOCAL_BIN_DIRS@") +find_program(pandoc NAMES pandoc PATHS ${local_bins} NO_DEFAULT_PATH) +if(pandoc) + set(local_pandoc TRUE) +else() + find_program(pandoc NAMES pandoc) +endif() +if(NOT pandoc) + message(FATAL_ERROR "Generating the manual requires Pandoc; download it to deps/packages or install it in PATH") +endif() +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") +endif() +if(local_pandoc AND IS_DIRECTORY "@CPSC_DEPS_ROOT@/usr/share/pandoc/data") + list(APPEND arguments "--data-dir=@CPSC_DEPS_ROOT@/usr/share/pandoc/data") +endif() + +if(local_pandoc AND WIN32) + set(ENV{PATH} "${local_bins};$ENV{PATH}") +elseif(local_pandoc AND UNIX AND NOT APPLE) + string(REPLACE ";" ":" libraries "@CPSC_LOCAL_LIBRARY_DIRS@") + if(NOT "$ENV{LD_LIBRARY_PATH}" STREQUAL "") + string(APPEND libraries ":$ENV{LD_LIBRARY_PATH}") + endif() + set(ENV{LD_LIBRARY_PATH} "${libraries}") +endif() + +file(MAKE_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@/doc") +execute_process( + COMMAND "${pandoc}" ${arguments} "@CMAKE_CURRENT_SOURCE_DIR@/doc/cpsc.md" + --output "@cpsc_manual_file@" + RESULT_VARIABLE result +) +if(NOT result EQUAL 0) + message(FATAL_ERROR "Pandoc failed to generate @cpsc_manual_file@ (${result})") +endif() diff --git a/cmake/LocalDependencies.cmake b/cmake/LocalDependencies.cmake index 8160f86..8b80ee3 100644 --- a/cmake/LocalDependencies.cmake +++ b/cmake/LocalDependencies.cmake @@ -27,6 +27,12 @@ foreach(prefix IN LISTS cpsc_local_prefixes) list(APPEND CPSC_LOCAL_INCLUDE_DIRS "${prefix}/include/libxml2") list(APPEND CPSC_LOCAL_BIN_DIRS "${prefix}/bin") endforeach() +file(GLOB pandoc_directories LIST_DIRECTORIES TRUE "${CPSC_DEPS_ROOT}/pandoc-*") +foreach(directory IN LISTS pandoc_directories) + if(IS_DIRECTORY "${directory}") + list(APPEND CPSC_LOCAL_BIN_DIRS "${directory}") + endif() +endforeach() if(CMAKE_LIBRARY_ARCHITECTURE) list(INSERT CPSC_LOCAL_LIBRARY_DIRS 0 "${CPSC_DEPS_ROOT}/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}" diff --git a/cmake/Manual.cmake b/cmake/Manual.cmake new file mode 100644 index 0000000..0ba4ccb --- /dev/null +++ b/cmake/Manual.cmake @@ -0,0 +1,23 @@ +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.md" + "${CMAKE_CURRENT_BINARY_DIR}/GenerateManual.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}") |
