mirror of
https://github.com/LizardByte/Sunshine.git
synced 2024-12-28 18:16:43 +00:00
126 lines
3.5 KiB
CMake
126 lines
3.5 KiB
CMake
cmake_minimum_required(VERSION 3.19)
|
|
|
|
# find doxygen and graphviz
|
|
find_package(Doxygen
|
|
REQUIRED dot)
|
|
|
|
if(POLICY CMP0094) # https://cmake.org/cmake/help/latest/policy/CMP0094.html
|
|
cmake_policy(SET CMP0094 NEW) # FindPython should return the first matching Python
|
|
endif()
|
|
|
|
# needed on GitHub Actions CI: actions/setup-python does not touch registry/frameworks on Windows/macOS
|
|
# this mirrors PythonInterp behavior which did not consult registry/frameworks first
|
|
if(NOT DEFINED Python_FIND_REGISTRY)
|
|
set(Python_FIND_REGISTRY "LAST") # cmake-lint: disable=C0103
|
|
endif()
|
|
if(NOT DEFINED Python_FIND_FRAMEWORK)
|
|
set(Python_FIND_FRAMEWORK "LAST") # cmake-lint: disable=C0103
|
|
endif()
|
|
|
|
# find python
|
|
if(NOT DEFINED Python_EXECUTABLE)
|
|
find_package(Python3 3.9 REQUIRED COMPONENTS Interpreter)
|
|
else()
|
|
set(Python3_EXECUTABLE "${Python_EXECUTABLE}") # cmake-lint: disable=C0103
|
|
message(STATUS "Using Python3_EXECUTABLE: ${Python3_EXECUTABLE}")
|
|
endif()
|
|
|
|
# create venv in build dir
|
|
set(VENV_DIR "${CMAKE_BINARY_DIR}/venv")
|
|
|
|
# create venv
|
|
execute_process(
|
|
COMMAND ${Python3_EXECUTABLE} -m venv ${VENV_DIR}
|
|
COMMAND_ERROR_IS_FATAL LAST
|
|
RESULT_VARIABLE VENV_RESULT
|
|
)
|
|
|
|
unset(Python3_EXECUTABLE)
|
|
|
|
set(VENV_PATTERNS
|
|
${VENV_DIR}/bin/python
|
|
${VENV_DIR}/Scripts/python.exe
|
|
)
|
|
|
|
# set Python3_EXECUTABLE to the python interpreter in the venv
|
|
foreach(pattern ${VENV_PATTERNS})
|
|
if(EXISTS ${pattern})
|
|
set(Python3_EXECUTABLE "${pattern}") # cmake-lint: disable=C0103
|
|
get_filename_component(Python3_ROOT_DIR ${pattern} DIRECTORY)
|
|
message(STATUS "Using Python3_EXECUTABLE (venv): ${Python3_EXECUTABLE}")
|
|
message(STATUS "Using Python3_ROOT_DIR (venv): ${Python3_ROOT_DIR}")
|
|
break()
|
|
endif()
|
|
endforeach()
|
|
|
|
# fail if Python3_ROOT_DIR is not set
|
|
if(NOT DEFINED Python3_EXECUTABLE)
|
|
message(FATAL_ERROR "Unable to setup python venv")
|
|
endif()
|
|
|
|
# call a simple python command
|
|
execute_process(
|
|
COMMAND ${Python3_EXECUTABLE} -c "print(' Testing Python3_EXECUTABLE')"
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
RESULT_VARIABLE PYTHON_RESULT
|
|
)
|
|
|
|
# fail if the python command failed
|
|
if(NOT PYTHON_RESULT EQUAL 0)
|
|
message(FATAL_ERROR "Python3_EXECUTABLE failed")
|
|
endif()
|
|
|
|
# install doc requirements
|
|
execute_process(
|
|
COMMAND ${Python3_EXECUTABLE} -m pip install -r ${CMAKE_CURRENT_SOURCE_DIR}/requirements.txt
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
RESULT_VARIABLE PIP_RESULT
|
|
)
|
|
|
|
# rst check
|
|
set(RST_PATTERNS
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
${CMAKE_SOURCE_DIR}/README.rst
|
|
)
|
|
|
|
# check rst files
|
|
foreach(pattern ${RST_PATTERNS})
|
|
message(STATUS "Checking RST files: ${pattern}")
|
|
execute_process(
|
|
COMMAND "${Python3_ROOT_DIR}/rstcheck" -r "${pattern}"
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
RESULT_VARIABLE RST_RESULT
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
)
|
|
endforeach()
|
|
|
|
# commands
|
|
list(APPEND SPHINX_BUILD_HTML_COMMAND
|
|
"${Python3_ROOT_DIR}/sphinx-build"
|
|
"-M"
|
|
"html"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/source"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/build/html"
|
|
"-W"
|
|
"--keep-going"
|
|
)
|
|
|
|
list(APPEND SPHINX_BUILD_EPUB_COMMAND
|
|
"${Python3_ROOT_DIR}/sphinx-build"
|
|
"-M"
|
|
"epub"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/source"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/build/epub"
|
|
"-W"
|
|
"--keep-going"
|
|
)
|
|
|
|
# build docs
|
|
add_custom_target(docs ALL
|
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
|
COMMENT "Building documentation"
|
|
COMMAND ${SPHINX_BUILD_HTML_COMMAND}
|
|
COMMAND ${SPHINX_BUILD_EPUB_COMMAND}
|
|
VERBATIM
|
|
)
|