@@ -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 ()
134216endif ()
0 commit comments