Skip to content

Commit

Permalink
Sphinx Python Documentation (#1567) - Added MATERIALX_BUILD_PYTHON_DO…
Browse files Browse the repository at this point in the history
…CS build option.
  • Loading branch information
StefanHabel committed Oct 18, 2023
1 parent bef6e1f commit 9d4b492
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 83 deletions.
7 changes: 6 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ option(MATERIALX_BUILD_PYTHON "Build the MaterialX Python package from C++ bindi
option(MATERIALX_BUILD_VIEWER "Build the MaterialX Viewer." OFF)
option(MATERIALX_BUILD_GRAPH_EDITOR "Build the MaterialX Graph Editor." OFF)
option(MATERIALX_BUILD_DOCS "Create HTML documentation using Doxygen. Requires that Doxygen be installed." OFF)
option(MATERIALX_BUILD_PYTHON_DOCS "Create HTML documentation using Sphinx. Requires that Sphinx be installed." OFF)
if (MATERIALX_BUILD_PYTHON_DOCS)
set(MATERIALX_BUILD_PYTHON ON)
endif()

option(MATERIALX_BUILD_GEN_GLSL "Build the GLSL shader generator back-end." ON)
option(MATERIALX_BUILD_GEN_OSL "Build the OSL shader generator back-end." ON)
Expand Down Expand Up @@ -125,6 +129,7 @@ message(STATUS "Setting namespace to '${MATERIALX_NAMESPACE}'")
set (MATERIALX_LIBNAME_SUFFIX "" CACHE STRING "Specify a suffix to all libraries that are built")

mark_as_advanced(MATERIALX_BUILD_DOCS)
mark_as_advanced(MATERIALX_BUILD_PYTHON_DOCS)
mark_as_advanced(MATERIALX_BUILD_GEN_GLSL)
mark_as_advanced(MATERIALX_BUILD_GEN_OSL)
mark_as_advanced(MATERIALX_BUILD_GEN_MDL)
Expand Down Expand Up @@ -327,7 +332,7 @@ if(MATERIALX_BUILD_PYTHON)
add_subdirectory(python)
endif()

if(MATERIALX_BUILD_DOCS)
if(MATERIALX_BUILD_DOCS OR MATERIALX_BUILD_PYTHON_DOCS)
add_subdirectory(documents)
endif()

Expand Down
14 changes: 7 additions & 7 deletions cmake/modules/FindSphinx.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ if(PYTHON3_FOUND)
"${_PYTHON_EXECUTABLE_DIR}/bin"
"${_PYTHON_EXECUTABLE_DIR}/Scripts"
)
endif()

find_program(
SPHINX_EXECUTABLE
NAMES sphinx-build sphinx-build.exe
HINTS ${_SPHINX_SEARCH_PATHS})
mark_as_advanced(SPHINX_EXECUTABLE)
find_program(
SPHINX_EXECUTABLE
NAMES sphinx-build sphinx-build.exe
HINTS ${_SPHINX_SEARCH_PATHS})
mark_as_advanced(SPHINX_EXECUTABLE)

find_package_handle_standard_args(Sphinx DEFAULT_MSG SPHINX_EXECUTABLE)
find_package_handle_standard_args(Sphinx DEFAULT_MSG SPHINX_EXECUTABLE)
endif()
180 changes: 105 additions & 75 deletions documents/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,84 +1,114 @@
# MaterialX C++ API Documentation
set(DOXYGEN_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
set(DOXYGEN_HTML_OUTPUT_DIR ${DOXYGEN_OUTPUT_DIR}/html)
set(DOXYGEN_INPUT_LIST ${CMAKE_SOURCE_DIR}/documents/DeveloperGuide/MainPage.md
${CMAKE_SOURCE_DIR}/source/MaterialXCore
${CMAKE_SOURCE_DIR}/source/MaterialXFormat
${CMAKE_SOURCE_DIR}/source/MaterialXGenShader
${CMAKE_SOURCE_DIR}/source/MaterialXGenShader/Nodes
${CMAKE_SOURCE_DIR}/source/MaterialXGenGlsl
${CMAKE_SOURCE_DIR}/source/MaterialXGenGlsl/Nodes
${CMAKE_SOURCE_DIR}/source/MaterialXGenOsl
${CMAKE_SOURCE_DIR}/source/MaterialXGenMdl
${CMAKE_SOURCE_DIR}/source/MaterialXRender
${CMAKE_SOURCE_DIR}/source/MaterialXRenderHw
${CMAKE_SOURCE_DIR}/source/MaterialXRenderGlsl
${CMAKE_SOURCE_DIR}/source/MaterialXRenderOsl
)
string (REPLACE ";" " " DOXYGEN_INPUT_STR "${DOXYGEN_INPUT_LIST}")
if(MATERIALX_BUILD_DOCS)
find_package(Doxygen)
if(DOXYGEN_FOUND)
set(DOXYGEN_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
set(DOXYGEN_HTML_OUTPUT_DIR ${DOXYGEN_OUTPUT_DIR}/html)
set(
DOXYGEN_INPUT_LIST
${CMAKE_SOURCE_DIR}/documents/DeveloperGuide/MainPage.md
${CMAKE_SOURCE_DIR}/source/MaterialXCore
${CMAKE_SOURCE_DIR}/source/MaterialXFormat
${CMAKE_SOURCE_DIR}/source/MaterialXGenShader
${CMAKE_SOURCE_DIR}/source/MaterialXGenShader/Nodes
${CMAKE_SOURCE_DIR}/source/MaterialXGenGlsl
${CMAKE_SOURCE_DIR}/source/MaterialXGenGlsl/Nodes
${CMAKE_SOURCE_DIR}/source/MaterialXGenOsl
${CMAKE_SOURCE_DIR}/source/MaterialXGenMdl
${CMAKE_SOURCE_DIR}/source/MaterialXRender
${CMAKE_SOURCE_DIR}/source/MaterialXRenderHw
${CMAKE_SOURCE_DIR}/source/MaterialXRenderGlsl
${CMAKE_SOURCE_DIR}/source/MaterialXRenderOsl
)
string (REPLACE ";" " " DOXYGEN_INPUT_STR "${DOXYGEN_INPUT_LIST}")

find_package(Doxygen)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)

if(DOXYGEN_FOUND)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
add_custom_target(MaterialXDocs ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Building MaterialX C++ API Documentation: ${DOXYGEN_HTML_OUTPUT_DIR}/index.html")
add_custom_command(TARGET MaterialXDocs PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/documents/DoxygenAwesome ${DOXYGEN_HTML_OUTPUT_DIR})
add_custom_command(TARGET MaterialXDocs PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/documents/Images ${DOXYGEN_HTML_OUTPUT_DIR})
install(DIRECTORY ${DOXYGEN_HTML_OUTPUT_DIR}
DESTINATION "documents" MESSAGE_NEVER)
else()
message(WARNING "Unable to build MaterialX C++ API Documentation: Doxygen not found.")
endif(DOXYGEN_FOUND)
add_custom_target(
MaterialXDocs
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Building MaterialX C++ API Documentation: ${DOXYGEN_HTML_OUTPUT_DIR}/index.html"
)
add_custom_command(
TARGET MaterialXDocs PRE_BUILD
COMMAND ${CMAKE_COMMAND}
-E copy_directory ${CMAKE_SOURCE_DIR}/documents/DoxygenAwesome
${DOXYGEN_HTML_OUTPUT_DIR}
)
add_custom_command(
TARGET MaterialXDocs PRE_BUILD
COMMAND ${CMAKE_COMMAND}
-E copy_directory ${CMAKE_SOURCE_DIR}/documents/Images
${DOXYGEN_HTML_OUTPUT_DIR}
)
install(DIRECTORY ${DOXYGEN_HTML_OUTPUT_DIR}
DESTINATION "documents"
MESSAGE_NEVER)
else()
message(WARNING "Unable to build MaterialX C++ API Documentation: Doxygen not found.")
endif(DOXYGEN_FOUND)
endif(MATERIALX_BUILD_DOCS)


# MaterialX Python API Documentation
set(SPHINX_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
set(SPHINX_HTML_OUTPUT_DIR ${SPHINX_OUTPUT_DIR}/html-sphinx)
set(
SPHINX_INPUT_LIST
${CMAKE_SOURCE_DIR}/documents/DeveloperGuide/
)
set(MATERIALX_PYTHONPATH ${CMAKE_SOURCE_DIR}/lib)
set(MATERIALX_LOGO_FILENAME "MaterialXLogo_200x155.png")
if(MATERIALX_BUILD_PYTHON_DOCS)
find_package(Sphinx)
if(SPHINX_FOUND)
set(SPHINX_SOURCE_DIR ${CMAKE_SOURCE_DIR}/documents/DeveloperGuide/)
set(SPHINX_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
set(SPHINX_HTML_OUTPUT_DIR ${SPHINX_OUTPUT_DIR}/html-sphinx)
set(
MATERIALX_PYTHON_DOCS_TARGET_DEPENDENCIES
MaterialXCore
PyMaterialXCore
PyMaterialXFormat
PyMaterialXGenShader
PyMaterialXGenGlsl
PyMaterialXGenOsl
PyMaterialXGenMdl
PyMaterialXGenMsl
PyMaterialXRender
PyMaterialXRenderGlsl
PyMaterialXRenderOsl
PyMaterialXRenderMsl
)

find_package(Sphinx)
# Configure the Sphinx configuration file `conf.py`
set(MATERIALX_PYTHONPATH ${CMAKE_SOURCE_DIR}/lib)
set(MATERIALX_LOGO_FILENAME "MaterialXLogo_200x155.png")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/sphinx-conf.py.in
${CMAKE_CURRENT_BINARY_DIR}/conf.py)

if(SPHINX_FOUND)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/sphinx-conf.py.in ${CMAKE_CURRENT_BINARY_DIR}/conf.py)
# Add a custom target to invoke `sphinx-build` to generate the Python
# API docs, which depends on the Python bindings to be built
add_custom_target(
MaterialXDocsPython
${SPHINX_EXECUTABLE}
-c ${CMAKE_CURRENT_BINARY_DIR}
${SPHINX_SOURCE_DIR}
${SPHINX_HTML_OUTPUT_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS ${MATERIALX_PYTHON_DOCS_TARGET_DEPENDENCIES}
COMMENT "Building MaterialX Python API Documentation: ${SPHINX_HTML_OUTPUT_DIR}/index.html"
)

add_custom_target(MaterialXDocsPython ${SPHINX_EXECUTABLE}
-c ${CMAKE_CURRENT_BINARY_DIR}
${SPHINX_INPUT_LIST}
${SPHINX_HTML_OUTPUT_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Building MaterialX Python API Documentation: ${SPHINX_HTML_OUTPUT_DIR}/index.html")

# Add post-build commands to copy our logo and custom style sheet to the
# "_static" folder
add_custom_command(
TARGET MaterialXDocsPython POST_BUILD COMMAND ${CMAKE_COMMAND}
-E copy ${CMAKE_SOURCE_DIR}/documents/sphinx-custom.css
${SPHINX_HTML_OUTPUT_DIR}/_static/custom.css
)
add_custom_command(
TARGET MaterialXDocsPython POST_BUILD COMMAND ${CMAKE_COMMAND}
-E copy ${CMAKE_SOURCE_DIR}/documents/Images/${MATERIALX_LOGO_FILENAME}
${SPHINX_HTML_OUTPUT_DIR}/_static/
)

# Add a post-build command to copy the DoxygenAwesome style sheet to the
# "_static" folder
add_custom_command(
TARGET MaterialXDocsPython POST_BUILD COMMAND ${CMAKE_COMMAND}
-E copy_directory ${CMAKE_SOURCE_DIR}/documents/DoxygenAwesome
${SPHINX_HTML_OUTPUT_DIR}/_static/DoxygenAwesome
)
else()
message(WARNING "Unable to build MaterialX Python API Documentation: Sphinx not found.")
endif(SPHINX_FOUND)
# Add post-build commands to copy our logo and custom style sheet to the
# "_static" folder
add_custom_command(
TARGET MaterialXDocsPython POST_BUILD
COMMAND ${CMAKE_COMMAND}
-E copy ${CMAKE_SOURCE_DIR}/documents/sphinx-custom.css
${SPHINX_HTML_OUTPUT_DIR}/_static/custom.css
)
add_custom_command(
TARGET MaterialXDocsPython POST_BUILD
COMMAND ${CMAKE_COMMAND}
-E copy ${CMAKE_SOURCE_DIR}/documents/Images/${MATERIALX_LOGO_FILENAME}
${SPHINX_HTML_OUTPUT_DIR}/_static/
)
else()
message(WARNING "Unable to build MaterialX Python API Documentation: Sphinx not found.")
endif(SPHINX_FOUND)
endif(MATERIALX_BUILD_PYTHON_DOCS)
2 changes: 2 additions & 0 deletions documents/DeveloperGuide/MainPage.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ Select the `MATERIALX_BUILD_VIEWER` option to build the MaterialX Viewer. Insta

To generate HTML documentation for the MaterialX C++ API, make sure a version of [Doxygen](https://www.doxygen.org/) is on your path, and select the advanced option `MATERIALX_BUILD_DOCS` in CMake. This option will add a target named `MaterialXDocs` to your project, which can be built as an independent step from your development environment.

To generate HTML documentation for the MaterialX Python API, make sure a version of [Sphinx](https://www.sphinx-doc.org/) is on your path, and select the advanced option `MATERIALX_BUILD_PYTHON_DOCS` in CMake. This option will add a target named `MaterialXDocsPython` to your project, which can be built as an independent step from your development environment.

## Installing MaterialX

Building the `install` target of your project will install the MaterialX C++ and Python libraries to the folder specified by the `CMAKE_INSTALL_PREFIX` setting, and will install MaterialX Python as a third-party library in your Python environment. Installation of MaterialX Python as a third-party library can be disabled by setting `MATERIALX_INSTALL_PYTHON` to `OFF`.
Expand Down

0 comments on commit 9d4b492

Please sign in to comment.