Skip to content

Commit 4d162ef

Browse files
committed
Add env support to Sphinx docs target
1 parent 6c5c251 commit 4d162ef

File tree

1 file changed

+86
-4
lines changed

1 file changed

+86
-4
lines changed

cmake/FindSphinx.cmake

Lines changed: 86 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,39 @@ if (Sphinx_FOUND AND NOT TARGET Sphinx::Build)
5050
PROPERTIES
5151
IMPORTED_LOCATION "${SPHINX_EXECUTABLE}")
5252

53+
# Helper function to register a Sphinx documentation target.
5354
function(sphinx_add_docs NAME)
55+
set(_BOOL_ARGS
56+
ALL
57+
SHOW_TRACEBACK
58+
WRITE_ALL
59+
FRESH_ENV
60+
ISOLATED
61+
)
62+
63+
set(_SINGLE_VALUE_ARGS
64+
COMMENT
65+
BUILDER
66+
CONFIG_DIRECTORY
67+
SOURCE_DIRECTORY
68+
OUTPUT_DIRECTORY
69+
WORKING_DIRECTORY
70+
)
71+
72+
set(_MULTI_VALUE_ARGS
73+
DEFINE
74+
DEPENDS
75+
LIBRARY_PATH_PREPEND
76+
PYTHON_PATH_PREPEND
77+
ENVIRONMENT
78+
)
79+
5480
cmake_parse_arguments(
5581
PARSE_ARGV 1 ""
56-
"ALL;SHOW_TRACEBACK;WRITE_ALL;FRESH_ENV;ISOLATED"
57-
"COMMENT;BUILDER;CONFIG_DIRECTORY;SOURCE_DIRECTORY;OUTPUT_DIRECTORY"
58-
"DEFINE;DEPENDS")
82+
"${_BOOL_ARGS}"
83+
"${_SINGLE_VALUE_ARGS}"
84+
"${_MULTI_VALUE_ARGS}"
85+
)
5986

6087
# Ensure that target should be added to the default build target,
6188
# if required.
@@ -65,6 +92,61 @@ if (Sphinx_FOUND AND NOT TARGET Sphinx::Build)
6592
set(_ALL "")
6693
endif()
6794

95+
# Set platform-specific library path environment variable.
96+
if (CMAKE_SYSTEM_NAME STREQUAL Windows)
97+
set(LIBRARY_ENV_NAME PATH)
98+
elseif (CMAKE_SYSTEM_NAME STREQUAL Darwin)
99+
set(LIBRARY_ENV_NAME DYLD_LIBRARY_PATH)
100+
else()
101+
set(LIBRARY_ENV_NAME LD_LIBRARY_PATH)
102+
endif()
103+
104+
# Convert paths to CMake-friendly format.
105+
if(DEFINED ENV{${LIBRARY_ENV_NAME}})
106+
cmake_path(CONVERT "$ENV{${LIBRARY_ENV_NAME}}" TO_CMAKE_PATH_LIST LIBRARY_PATH)
107+
else()
108+
set(LIBRARY_PATH "")
109+
endif()
110+
if(DEFINED ENV{PYTHONPATH})
111+
cmake_path(CONVERT "$ENV{PYTHONPATH}" TO_CMAKE_PATH_LIST PYTHON_PATH)
112+
else()
113+
set(PYTHON_PATH "")
114+
endif()
115+
116+
# Prepend specified paths to the library and Python paths.
117+
if (_LIBRARY_PATH_PREPEND)
118+
list(PREPEND LIBRARY_PATH ${_LIBRARY_PATH_PREPEND})
119+
endif()
120+
121+
if (_PYTHON_PATH_PREPEND)
122+
list(PREPEND PYTHON_PATH ${_PYTHON_PATH_PREPEND})
123+
endif()
124+
125+
# Build environment arguments for cmake -E env.
126+
set(_env_args "")
127+
128+
if (LIBRARY_PATH)
129+
if (CMAKE_SYSTEM_NAME STREQUAL Windows)
130+
list(JOIN LIBRARY_PATH ";" _LIBRARY_PATH_STRING)
131+
else()
132+
list(JOIN LIBRARY_PATH ":" _LIBRARY_PATH_STRING)
133+
endif()
134+
list(APPEND _env_args "${LIBRARY_ENV_NAME}=${_LIBRARY_PATH_STRING}")
135+
endif()
136+
137+
if (PYTHON_PATH)
138+
if (CMAKE_SYSTEM_NAME STREQUAL Windows)
139+
list(JOIN PYTHON_PATH ";" _PYTHON_PATH_STRING)
140+
else()
141+
list(JOIN PYTHON_PATH ":" _PYTHON_PATH_STRING)
142+
endif()
143+
list(APPEND _env_args "PYTHONPATH=${_PYTHON_PATH_STRING}")
144+
endif()
145+
146+
foreach(_env ${_ENVIRONMENT})
147+
list(APPEND _env_args "${_env}")
148+
endforeach()
149+
68150
# Default working directory to current source path if none is provided.
69151
if (NOT _WORKING_DIRECTORY)
70152
set(_WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
@@ -128,7 +210,7 @@ if (Sphinx_FOUND AND NOT TARGET Sphinx::Build)
128210
COMMENT ${_COMMENT}
129211
DEPENDS ${_DEPENDS}
130212
COMMAND ${CMAKE_COMMAND} -E make_directory ${_OUTPUT_DIRECTORY}
131-
COMMAND Sphinx::Build ${_args}
213+
COMMAND ${CMAKE_COMMAND} -E env ${_env_args} "${SPHINX_EXECUTABLE}" ${_args}
132214
COMMAND_EXPAND_LISTS)
133215
endfunction()
134216
endif()

0 commit comments

Comments
 (0)