CMakeLists.txt 6.37 KB
Newer Older
1 2 3 4
#
#  CMake file for OpenCV docs
#

5
if(BUILD_DOCS AND HAVE_SPHINX)
6

7 8
  project(opencv_docs)

9 10 11 12 13 14 15 16 17 18
  set(DOC_LIST
      "${OpenCV_SOURCE_DIR}/doc/opencv-logo.png"
      "${OpenCV_SOURCE_DIR}/doc/opencv-logo2.png"
      "${OpenCV_SOURCE_DIR}/doc/opencv-logo-white.png"
      "${OpenCV_SOURCE_DIR}/doc/opencv.ico"
      "${OpenCV_SOURCE_DIR}/doc/pattern.png"
      "${OpenCV_SOURCE_DIR}/doc/acircles_pattern.png")
  if(NOT INSTALL_CREATE_DISTRIB)
    list(APPEND DOC_LIST "${OpenCV_SOURCE_DIR}/doc/haartraining.htm")
  endif()
19 20 21 22

  set(OPTIONAL_DOC_LIST "")


23
  # build lists of modules to be documented
24 25
  set(BASE_MODULES "")
  set(EXTRA_MODULES "")
26 27 28 29

  foreach(mod ${OPENCV_MODULES_BUILD} ${OPENCV_MODULES_DISABLED_USER} ${OPENCV_MODULES_DISABLED_AUTO} ${OPENCV_MODULES_DISABLED_FORCE})
    string(REGEX REPLACE "^opencv_" "" mod "${mod}")
    if("${OPENCV_MODULE_opencv_${mod}_LOCATION}" STREQUAL "${OpenCV_SOURCE_DIR}/modules/${mod}")
30
      list(APPEND BASE_MODULES ${mod})
31
    else()
32
      list(APPEND EXTRA_MODULES ${mod})
33 34
    endif()
  endforeach()
35

36
  set(FIXED_ORDER_MODULES core imgproc highgui video calib3d features2d objdetect ml flann photo stitching nonfree contrib legacy)
37 38 39 40 41 42 43

  list(REMOVE_ITEM BASE_MODULES ${FIXED_ORDER_MODULES})

  ocv_list_sort(BASE_MODULES)
  ocv_list_sort(EXTRA_MODULES)

  set(BASE_MODULES ${FIXED_ORDER_MODULES} ${BASE_MODULES})
44 45 46

  # build lists of documentation files and generate table of contents for reference manual

47 48
  set(DOC_FAKE_ROOT "${CMAKE_CURRENT_BINARY_DIR}/fake-root")
  set(DOC_FAKE_ROOT_FILES "")
49

50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
  function(ocv_doc_add_file_to_fake_root source destination)
    add_custom_command(
      OUTPUT "${DOC_FAKE_ROOT}/${destination}"
      COMMAND "${CMAKE_COMMAND}" -E copy "${source}" "${DOC_FAKE_ROOT}/${destination}"
      DEPENDS "${source}"
      COMMENT "Copying ${destination} to fake root..."
      VERBATIM
    )
    list(APPEND DOC_FAKE_ROOT_FILES "${DOC_FAKE_ROOT}/${destination}")
    set(DOC_FAKE_ROOT_FILES "${DOC_FAKE_ROOT_FILES}" PARENT_SCOPE)
  endfunction()

  function(ocv_doc_add_to_fake_root source)
    if(ARGC GREATER 1)
      set(destination "${ARGV1}")
    else()
      file(RELATIVE_PATH destination "${OpenCV_SOURCE_DIR}" "${source}")
    endif()

    if(IS_DIRECTORY "${source}")
      file(GLOB_RECURSE files RELATIVE "${source}" "${source}/*")

      foreach(file ${files})
        ocv_doc_add_file_to_fake_root("${source}/${file}" "${destination}/${file}")
      endforeach()
    else()
      ocv_doc_add_file_to_fake_root("${source}" "${destination}")
77 78
    endif()

79 80
    set(DOC_FAKE_ROOT_FILES "${DOC_FAKE_ROOT_FILES}" PARENT_SCOPE)
  endfunction()
81

82 83 84 85 86 87 88 89
  set(OPENCV_REFMAN_TOC "")

  foreach(mod ${BASE_MODULES} ${EXTRA_MODULES})
    if(EXISTS "${OPENCV_MODULE_opencv_${mod}_LOCATION}/doc/${mod}.rst")
      ocv_doc_add_to_fake_root("${OPENCV_MODULE_opencv_${mod}_LOCATION}/doc" modules/${mod}/doc)
      set(OPENCV_REFMAN_TOC "${OPENCV_REFMAN_TOC}   ${mod}/doc/${mod}.rst\n")
    endif()
  endforeach()
90

91
  configure_file("${OpenCV_SOURCE_DIR}/modules/refman.rst.in" "${DOC_FAKE_ROOT}/modules/refman.rst" @ONLY)
92

93 94 95 96
  ocv_doc_add_to_fake_root("${OpenCV_SOURCE_DIR}/index.rst")
  ocv_doc_add_to_fake_root("${OpenCV_SOURCE_DIR}/doc")
  ocv_doc_add_to_fake_root("${OpenCV_SOURCE_DIR}/platforms/android")
  ocv_doc_add_to_fake_root("${OpenCV_SOURCE_DIR}/samples")
97

antonella's avatar
antonella committed
98 99 100 101 102
  set(BUILD_PLANTUML "")
  if(PLANTUML)
    set(BUILD_PLANTUML "-tplantuml")
  endif()

103 104
  if(PDFLATEX_COMPILER)
    add_custom_target(docs
105
      COMMAND ${SPHINX_BUILD} ${BUILD_PLANTUML} -b latex -c "${CMAKE_CURRENT_SOURCE_DIR}" "${DOC_FAKE_ROOT}" .
106 107
      COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/pics ${CMAKE_CURRENT_BINARY_DIR}/doc/opencv1/pics
      COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/mymath.sty ${CMAKE_CURRENT_BINARY_DIR}
108
      COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/patch_refman_latex.py" opencv2refman.tex
109
      COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/patch_refman_latex.py" opencv2manager.tex
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
      COMMAND ${CMAKE_COMMAND} -E echo "Generating opencv2refman.pdf"
      COMMAND ${PDFLATEX_COMPILER} -interaction=batchmode opencv2refman.tex
      COMMAND ${PDFLATEX_COMPILER} -interaction=batchmode opencv2refman.tex
      COMMAND ${CMAKE_COMMAND} -E echo "Generating opencv2manager.pdf"
      COMMAND ${PDFLATEX_COMPILER} -interaction=batchmode opencv2manager.tex
      COMMAND ${PDFLATEX_COMPILER} -interaction=batchmode opencv2manager.tex
      COMMAND ${CMAKE_COMMAND} -E echo "Generating opencv_user.pdf"
      COMMAND ${PDFLATEX_COMPILER} -interaction=batchmode opencv_user.tex
      COMMAND ${PDFLATEX_COMPILER} -interaction=batchmode opencv_user.tex
      COMMAND ${CMAKE_COMMAND} -E echo "Generating opencv_tutorials.pdf"
      COMMAND ${PDFLATEX_COMPILER} -interaction=batchmode opencv_tutorials.tex
      COMMAND ${PDFLATEX_COMPILER} -interaction=batchmode opencv_tutorials.tex
      COMMAND ${CMAKE_COMMAND} -E echo "Generating opencv_cheatsheet.pdf"
      COMMAND ${PDFLATEX_COMPILER} -interaction=batchmode "${CMAKE_CURRENT_SOURCE_DIR}/opencv_cheatsheet.tex"
      COMMAND ${PDFLATEX_COMPILER} -interaction=batchmode "${CMAKE_CURRENT_SOURCE_DIR}/opencv_cheatsheet.tex"
125
      DEPENDS ${DOC_FAKE_ROOT_FILES}
126 127 128 129
      WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
      COMMENT "Generating the PDF Manuals"
      )

130 131 132
    LIST(APPEND OPTIONAL_DOC_LIST "${CMAKE_BINARY_DIR}/doc/opencv2refman.pdf" "${CMAKE_BINARY_DIR}/doc/opencv2manager.pdf"
          "${CMAKE_BINARY_DIR}/doc/opencv_user.pdf" "${CMAKE_BINARY_DIR}/doc/opencv_tutorials.pdf" "${CMAKE_BINARY_DIR}/doc/opencv_cheatsheet.pdf")

133 134 135 136 137 138
    if(ENABLE_SOLUTION_FOLDERS)
      set_target_properties(docs PROPERTIES FOLDER "documentation")
    endif()
  endif()

  add_custom_target(html_docs
139
    COMMAND "${SPHINX_BUILD}" ${BUILD_PLANTUML} -b html -c "${CMAKE_CURRENT_SOURCE_DIR}" "${DOC_FAKE_ROOT}" ./_html
140
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/mymath.sty ${CMAKE_CURRENT_BINARY_DIR}
141
    DEPENDS ${DOC_FAKE_ROOT_FILES}
142 143 144 145 146 147 148
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    COMMENT "Generating Online Documentation"
    )

  if(ENABLE_SOLUTION_FOLDERS)
    set_target_properties(html_docs PROPERTIES FOLDER "documentation")
  endif()
149

150
  foreach(f ${DOC_LIST})
151
    install(FILES "${f}" DESTINATION "${OPENCV_DOC_INSTALL_PATH}" COMPONENT docs)
152 153 154
  endforeach()

  foreach(f ${OPTIONAL_DOC_LIST})
155
    install(FILES "${f}" DESTINATION "${OPENCV_DOC_INSTALL_PATH}" OPTIONAL COMPONENT docs)
156 157
  endforeach()

158
endif()