Files
tracy/cmake/manual.cmake
2026-10-16 01:23:07 +02:00

89 lines
4.2 KiB
CMake

set(PANDOC_VERSION 3.12.1)
find_package(Python3 COMPONENTS Interpreter REQUIRED)
find_program(TRACY_PANDOC pandoc)
if(TRACY_PANDOC)
execute_process(
COMMAND ${TRACY_PANDOC} --version
OUTPUT_VARIABLE _pandoc_version
OUTPUT_STRIP_TRAILING_WHITESPACE
RESULT_VARIABLE _pandoc_rc
ERROR_QUIET)
string(REGEX MATCH "pandoc [0-9.]+" _pandoc_version "${_pandoc_version}")
if(NOT _pandoc_rc EQUAL 0 OR NOT _pandoc_version STREQUAL "pandoc ${PANDOC_VERSION}")
set(TRACY_PANDOC "")
endif()
endif()
if(TRACY_PANDOC)
message(STATUS "Using system pandoc ${PANDOC_VERSION}: ${TRACY_PANDOC}")
else()
if(WIN32)
if(NOT CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^(x86_64|AMD64|amd64)$")
message(FATAL_ERROR "No pinned pandoc ${PANDOC_VERSION} binary for ${CMAKE_HOST_SYSTEM_PROCESSOR}; install pandoc ${PANDOC_VERSION}")
endif()
set(_pandoc_asset pandoc-${PANDOC_VERSION}-windows-x86_64.zip)
set(_pandoc_hash 6ef431cb20b2c24a0371fc19200dc49d452be54b1b5c9239f3462841ef53e587)
set(_pandoc_exe pandoc-${PANDOC_VERSION}/pandoc.exe)
elseif(APPLE)
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^(arm64|aarch64)$")
set(_pandoc_asset pandoc-${PANDOC_VERSION}-arm64-macOS.zip)
set(_pandoc_hash c2146cf33a583f3ac93eccddf1bb662371d5cfcce1aad1c87ad860cca1435d46)
set(_pandoc_exe pandoc-${PANDOC_VERSION}-arm64/bin/pandoc)
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^(x86_64|AMD64|amd64)$")
set(_pandoc_asset pandoc-${PANDOC_VERSION}-x86_64-macOS.zip)
set(_pandoc_hash 81ed3e2cfecf096df15d407152f89a684fd65221082b919963f738e977fad3bc)
set(_pandoc_exe pandoc-${PANDOC_VERSION}-x86_64/bin/pandoc)
else()
message(FATAL_ERROR "No pinned pandoc ${PANDOC_VERSION} binary for ${CMAKE_HOST_SYSTEM_PROCESSOR}; install pandoc ${PANDOC_VERSION}")
endif()
else()
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)$")
set(_pandoc_asset pandoc-${PANDOC_VERSION}-linux-arm64.tar.gz)
set(_pandoc_hash 445d96fd08801fe636cab1158b4f017ee320ac3b7446328b4fe2f902117b19b9)
set(_pandoc_exe pandoc-${PANDOC_VERSION}/bin/pandoc)
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^(x86_64|AMD64|amd64)$")
set(_pandoc_asset pandoc-${PANDOC_VERSION}-linux-amd64.tar.gz)
set(_pandoc_hash d0c90410e90204c9ca83b8539fac5c7aed01fd537207e4585849f8abc5df20b8)
set(_pandoc_exe pandoc-${PANDOC_VERSION}/bin/pandoc)
else()
message(FATAL_ERROR "No pinned pandoc ${PANDOC_VERSION} binary for ${CMAKE_HOST_SYSTEM_PROCESSOR}; install pandoc ${PANDOC_VERSION}")
endif()
endif()
# Shared cache: $PANDOC_CACHE_DIR, else the platform user cache directory.
if(DEFINED ENV{PANDOC_CACHE_DIR})
set(_pandoc_cache $ENV{PANDOC_CACHE_DIR})
elseif(WIN32)
set(_pandoc_cache $ENV{LOCALAPPDATA}/tracy/pandoc)
elseif(APPLE)
set(_pandoc_cache $ENV{HOME}/Library/Caches/tracy/pandoc)
elseif(DEFINED ENV{XDG_CACHE_HOME})
set(_pandoc_cache $ENV{XDG_CACHE_HOME}/tracy/pandoc)
else()
set(_pandoc_cache $ENV{HOME}/.cache/tracy/pandoc)
endif()
set(TRACY_PANDOC ${_pandoc_cache}/${_pandoc_exe})
if(NOT EXISTS ${TRACY_PANDOC})
# Concurrent configures on a cold cache can collide; worst case the
# hash check fails and a rerun succeeds.
message(STATUS "Downloading pandoc ${PANDOC_VERSION} (${_pandoc_asset})")
file(MAKE_DIRECTORY ${_pandoc_cache})
file(DOWNLOAD
https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/${_pandoc_asset}
${_pandoc_cache}/pandoc.archive
EXPECTED_HASH SHA256=${_pandoc_hash}
STATUS _pandoc_download)
list(GET _pandoc_download 0 _pandoc_download_rc)
if(NOT _pandoc_download_rc STREQUAL "0")
file(REMOVE ${_pandoc_cache}/pandoc.archive)
message(FATAL_ERROR "Failed to download pandoc ${PANDOC_VERSION}: ${_pandoc_download}")
endif()
file(ARCHIVE_EXTRACT
INPUT ${_pandoc_cache}/pandoc.archive
DESTINATION ${_pandoc_cache})
file(REMOVE ${_pandoc_cache}/pandoc.archive)
endif()
endif()