/docs/CMakeLists.txt

http://github.com/imageworks/OpenColorIO · CMake · 186 lines · 127 code · 30 blank · 29 comment · 8 complexity · 0882fbab44ce1f0f2f29595d03ae61f4 MD5 · raw file

  1. # SPDX-License-Identifier: BSD-3-Clause
  2. # Copyright Contributors to the OpenColorIO Project.
  3. ###############################################################################
  4. ### Python ###
  5. find_package(PythonInterp 2.7 REQUIRED)
  6. if(NOT OCIO_BUILD_PYTHON)
  7. message(FATAL_ERROR "Doc generation requires that the python bindings be built")
  8. endif()
  9. ###############################################################################
  10. ### External Python dependencies ###
  11. include(FindPythonPackage)
  12. # Sphinx
  13. # https://pypi.python.org/pypi/Sphinx
  14. set(SPHINX_MIN_VERSION 1.8.5)
  15. find_package(Sphinx ${SPHINX_MIN_VERSION} REQUIRED)
  16. if(NOT SPHINX_FOUND)
  17. message(FATAL_ERROR "Doc generation requires Sphinx")
  18. endif()
  19. ###############################################################################
  20. ### Setup PYTHONPATH ###
  21. # Override PYTHONPATH prior to running Sphinx. This makes the PyOpenColorIO
  22. # build available, prioritizes ext/ installed Python dependencies, and
  23. # propagates the system PYTHONPATH.
  24. if(WIN32)
  25. # Use Windows path separators since this is being passed through to cmd
  26. file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} WIN_BINARY_DIR)
  27. set(DLL_PATH "${WIN_BINARY_DIR}\\src\\OpenColorIO")
  28. if(MSVC_IDE)
  29. set(DLL_PATH "${DLL_PATH}\\${CMAKE_BUILD_TYPE}")
  30. endif()
  31. string(CONCAT PATH_SET
  32. "PATH="
  33. "${DLL_PATH}"
  34. "\\\\;"
  35. "%PATH%"
  36. )
  37. set(PYD_PATH "${WIN_BINARY_DIR}\\src\\bindings\\python")
  38. if(MSVC_IDE)
  39. set(PYD_PATH "${PYD_PATH}\\${CMAKE_BUILD_TYPE}")
  40. endif()
  41. string(CONCAT PYTHONPATH_SET
  42. "PYTHONPATH="
  43. "${PYD_PATH}"
  44. "\\\\;"
  45. "${WIN_BINARY_DIR}\\ext\\dist\\lib\\site-packages"
  46. "\\\\;"
  47. "%PYTHONPATH%"
  48. )
  49. # Mimic *nix:
  50. # '> PYTHONPATH=XXX CMD'
  51. # on Windows with:
  52. # '> set PYTHONPATH=XXX \n call CMD'
  53. # '\n' is here because '\\&' does not work.
  54. set(PYT_PRE_CMD set ${PATH_SET} "\n" set ${PYTHONPATH_SET} "\n" call)
  55. else()
  56. set(PYTHON_VARIANT "${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}")
  57. string(CONCAT PYT_PRE_CMD
  58. "PYTHONPATH="
  59. "${CMAKE_BINARY_DIR}/src/bindings/python"
  60. ":"
  61. "${CMAKE_BINARY_DIR}/ext/dist/lib${LIB_SUFFIX}/python${PYTHON_VARIANT}/site-packages"
  62. ":"
  63. "$ENV{PYTHONPATH}"
  64. )
  65. endif()
  66. ###############################################################################
  67. ### Copy templates to build area ###
  68. message(STATUS "Create sphinx conf.py from conf.py.in")
  69. configure_file(conf.py.in ${CMAKE_BINARY_DIR}/docs/conf.py @ONLY)
  70. file(GLOB_RECURSE DOC_SOURCES "${CMAKE_SOURCE_DIR}/docs/*")
  71. list(APPEND DOC_SOURCES
  72. ${CMAKE_SOURCE_DIR}/README.md
  73. ${CMAKE_SOURCE_DIR}/INSTALL.md
  74. ${CMAKE_SOURCE_DIR}/CHANGELOG.md
  75. ${CMAKE_SOURCE_DIR}/LICENSE
  76. )
  77. if(OCIO_BUILD_NUKE)
  78. list(APPEND DOC_SOURCES ${CMAKE_SOURCE_DIR}/share/nuke/ocionuke/viewer.py)
  79. endif()
  80. add_custom_target(doc_copy
  81. COMMENT "Copying doc files to staging area"
  82. )
  83. foreach(f ${DOC_SOURCES})
  84. string(REGEX REPLACE "^${CMAKE_SOURCE_DIR}/" "" relpath ${f})
  85. string(REGEX REPLACE "[/. ]" "_" tgtname ${relpath})
  86. string(REGEX MATCH "^docs" IN_DOCS ${relpath})
  87. set(SRC_PATH ${CMAKE_SOURCE_DIR}/${relpath})
  88. set(DST_PATH ${CMAKE_BINARY_DIR}/${relpath})
  89. if(NOT IN_DOCS)
  90. get_filename_component(F_NAME ${relpath} NAME)
  91. set(DST_PATH "${CMAKE_BINARY_DIR}/docs/${F_NAME}")
  92. endif()
  93. add_custom_command(OUTPUT ${DST_PATH}
  94. COMMAND ${CMAKE_COMMAND} -E copy ${SRC_PATH} ${DST_PATH}
  95. DEPENDS ${SRC_PATH}
  96. )
  97. add_custom_target("copy_${tgtname}" DEPENDS ${DST_PATH})
  98. add_dependencies(doc_copy "copy_${tgtname}")
  99. endforeach()
  100. ###############################################################################
  101. ### Extract rst from c++ headers ###
  102. set(EXTRACT_COMMAND "${CMAKE_SOURCE_DIR}/share/sphinx/ExtractRstFromSourceCPP.py")
  103. set(OCIO_HEADER_DIR "${CMAKE_SOURCE_DIR}/include/OpenColorIO")
  104. set(RST_DESTINATION "${CMAKE_BINARY_DIR}/docs/developers/api/")
  105. add_custom_target(rst_extraction
  106. COMMAND ${CMAKE_COMMAND} -E make_directory ${RST_DESTINATION}
  107. COMMAND ${PYTHON_EXECUTABLE} ${EXTRACT_COMMAND} ${OCIO_HEADER_DIR}/OpenColorIO.h ${RST_DESTINATION}/OpenColorIO.rst
  108. COMMAND ${PYTHON_EXECUTABLE} ${EXTRACT_COMMAND} ${OCIO_HEADER_DIR}/OpenColorTransforms.h ${RST_DESTINATION}/OpenColorTransforms.rst
  109. COMMAND ${PYTHON_EXECUTABLE} ${EXTRACT_COMMAND} ${OCIO_HEADER_DIR}/OpenColorTypes.h ${RST_DESTINATION}/OpenColorTypes.rst
  110. COMMENT "Extracting .rst files from C++ headers"
  111. )
  112. ###############################################################################
  113. ### HTML doc target ###
  114. add_custom_target(docs ALL
  115. COMMAND
  116. ${PYT_PRE_CMD} "${SPHINX_EXECUTABLE}" -b html . "${CMAKE_CURRENT_BINARY_DIR}/build-html"
  117. DEPENDS
  118. OpenColorIO
  119. PyOpenColorIO
  120. ${CMAKE_BINARY_DIR}/docs/conf.py
  121. rst_extraction
  122. doc_copy
  123. Sphinx
  124. COMMENT "Building html docs"
  125. )
  126. ###############################################################################
  127. ### Installation ###
  128. install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/build-html/
  129. DESTINATION ${CMAKE_INSTALL_PREFIX}/share/doc/OpenColorIO/html
  130. PATTERN .* EXCLUDE
  131. )
  132. ###############################################################################
  133. ### PDF target ###
  134. find_package(LATEX)
  135. if(PDFLATEX_COMPILER)
  136. add_custom_target(latex
  137. COMMAND
  138. ${PYT_PRE_CMD} "${SPHINX_EXECUTABLE}" -b latex . "${CMAKE_CURRENT_BINARY_DIR}/build-latex"
  139. DEPENDS
  140. OpenColorIO
  141. PyOpenColorIO
  142. ${CMAKE_BINARY_DIR}/docs/conf.py
  143. rst_extraction
  144. doc_copy
  145. Sphinx
  146. COMMENT "Building latex doc"
  147. )
  148. add_custom_target(pdf ALL
  149. DEPENDS latex
  150. COMMAND ${PDFLATEX_COMPILER} OpenColorIO.tex
  151. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/build-latex
  152. COMMENT "Building pdf doc"
  153. )
  154. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/build-latex/OpenColorIO.pdf
  155. DESTINATION ${CMAKE_INSTALL_PREFIX}/share/doc/OpenColorIO/)
  156. endif()