119 lines
3.9 KiB
CMake
119 lines
3.9 KiB
CMake
add_subdirectory(tutorial)
|
|
add_subdirectory(coro_tutorial)
|
|
|
|
set(SPHINX_DOCUMENT_DIR "${CMAKE_SOURCE_DIR}/documentation/sphinx")
|
|
|
|
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
|
find_package(Sphinx)
|
|
if(NOT Sphinx_FOUND)
|
|
message(STATUS "Sphinx not found, setting up sphinx virtual environment")
|
|
set(SPHINX_VENV_DIR "${CMAKE_BINARY_DIR}/sphinx-venv")
|
|
execute_process(COMMAND "${Python3_EXECUTABLE}" -m venv ${SPHINX_VENV_DIR})
|
|
find_program(
|
|
VENV_Python3_EXECUTABLE
|
|
NAMES python3 python3.exe
|
|
PATHS ${SPHINX_VENV_DIR}/Scripts ${SPHINX_VENV_DIR}/bin REQUIRED
|
|
NO_DEFAULT_PATH NO_CACHE
|
|
DOC "Checking Python3 executable in virtual environment")
|
|
execute_process(COMMAND "${VENV_Python3_EXECUTABLE}" -m ensurepip COMMAND_ERROR_IS_FATAL ANY)
|
|
execute_process(COMMAND "${VENV_Python3_EXECUTABLE}" -m pip install --upgrade pip COMMAND_ERROR_IS_FATAL ANY)
|
|
execute_process(COMMAND "${VENV_Python3_EXECUTABLE}" -m pip install -r "${SPHINX_DOCUMENT_DIR}/requirements.txt" COMMAND_ERROR_IS_FATAL ANY)
|
|
set(Sphinx_ROOT "${SPHINX_VENV_DIR}")
|
|
unset(Sphinx_FOUND)
|
|
find_package(Sphinx REQUIRED)
|
|
endif()
|
|
|
|
message(
|
|
STATUS "Sphinx found at ${Sphinx_EXECUTABLE} with version ${Sphinx_VERSION}")
|
|
|
|
function(add_documentation_target)
|
|
set(options)
|
|
set(oneValueArgs GENERATOR DOCTREE)
|
|
set(multiValueArgs ADDITIONAL_ARGUMENTS)
|
|
cmake_parse_arguments(ADT "${options}" "${oneValueArgs}" "${multiValueArgs}"
|
|
"${ARGN}")
|
|
|
|
if(NOT ADT_GENERATOR)
|
|
message(ERROR
|
|
"GENERATOR is a required argument to add_documentation_target")
|
|
endif()
|
|
set(TARGET ${ADT_GENERATOR})
|
|
|
|
set(DOCTREE "doctree")
|
|
if(ADT_DOCTREE)
|
|
set(DOCTREE "${ADT_DOCTREE}")
|
|
endif()
|
|
|
|
set(OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/${TARGET})
|
|
set(STAMP_FILE ${CMAKE_CURRENT_BINARY_DIR}/document_${TARGET}_done)
|
|
file(
|
|
GLOB_RECURSE DOC_FILES
|
|
LIST_DIRECTORIES false
|
|
CONFIGURE_DEPENDS ${SPHINX_DOCUMENT_DIR}/*.*)
|
|
add_custom_command(
|
|
OUTPUT ${STAMP_FILE}
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUT_DIR}
|
|
COMMAND
|
|
${Sphinx_EXECUTABLE} -W -b ${TARGET} -d ${DOCTREE} -c
|
|
${SPHINX_DOCUMENT_DIR} ${SPHINX_DOCUMENT_DIR}/source ${OUTPUT_DIR}
|
|
-Dversion=${FDB_VERSION} -Drelease=${FDB_RELEASE}
|
|
COMMAND ${CMAKE_COMMAND} -E touch ${STAMP_FILE}
|
|
DEPENDS ${DOC_FILES}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
|
add_custom_target(${TARGET}
|
|
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/document_${TARGET}_done)
|
|
endfunction()
|
|
|
|
message(STATUS "Add html target")
|
|
add_documentation_target(GENERATOR html)
|
|
|
|
set(DOCSERVER_PORT
|
|
"-1"
|
|
CACHE
|
|
STRING
|
|
"Port to which the documentation server should bind (negative means cmake will choose one)"
|
|
)
|
|
|
|
if(DOCSERVER_PORT GREATER_EQUAL 0)
|
|
set(port ${DOCSERVER_PORT})
|
|
else()
|
|
if(WIN32)
|
|
if(DEFINED $ENV{USERNAME})
|
|
set(username $ENV{USERNAME})
|
|
else()
|
|
set(username "dummy_user")
|
|
endif()
|
|
else()
|
|
if(DEFINED $ENV{USER})
|
|
set(username $ENV{USER})
|
|
else()
|
|
set(username "dummy_user")
|
|
endif()
|
|
endif()
|
|
string(MD5 username_hash ${username})
|
|
# cmake math function can only use 64 bit signed integers - so we just
|
|
# truncate the string
|
|
string(SUBSTRING "${username_hash}" 0 15 username_hash_small)
|
|
math(EXPR port "(0x${username_hash_small} % 8000) + 8000"
|
|
OUTPUT_FORMAT DECIMAL)
|
|
message(STATUS "Port is ${port}")
|
|
endif()
|
|
|
|
add_custom_target(
|
|
docpreview
|
|
COMMAND ${Python3_EXECUTABLE} -m http.server ${port}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html
|
|
USES_TERMINAL)
|
|
add_dependencies(docpreview html)
|
|
|
|
set(tar_file
|
|
${CMAKE_BINARY_DIR}/packages/${CMAKE_PROJECT_NAME}-docs-${FDB_VERSION}.tar.gz
|
|
)
|
|
add_custom_command(
|
|
OUTPUT ${tar_file}
|
|
COMMAND ${CMAKE_COMMAND} -E tar czf ${tar_file} .
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html)
|
|
add_custom_target(package_html DEPENDS ${tar_file})
|
|
add_dependencies(package_html html)
|
|
add_dependencies(packages package_html)
|