blob: 22e3dcb776aa222251d7e0310bfadba5e9358320 [file] [log] [blame]
Tom Stellard9c50cf02017-05-09 01:41:28 +00001
2# Create sphinx target
Tom Stellardaf79e412017-05-15 09:34:23 +00003if (LLVM_ENABLE_SPHINX)
Tom Stellard9c50cf02017-05-09 01:41:28 +00004 message(STATUS "Sphinx enabled.")
5 find_package(Sphinx REQUIRED)
Tom Stellardaf79e412017-05-15 09:34:23 +00006 if (LLVM_BUILD_DOCS AND NOT TARGET sphinx)
Tom Stellard9c50cf02017-05-09 01:41:28 +00007 add_custom_target(sphinx ALL)
8 endif()
9else()
10 message(STATUS "Sphinx disabled.")
11endif()
12
13
Reid Kleckner4c464de2014-04-18 21:45:25 +000014# Handy function for creating the different Sphinx targets.
15#
16# ``builder`` should be one of the supported builders used by
17# the sphinx-build command.
18#
19# ``project`` should be the project name
20function (add_sphinx_target builder project)
21 set(SPHINX_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/${builder}")
Michal Gorny14540ca2017-11-30 19:09:22 +000022 set(SPHINX_DOC_TREE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_doctrees-${project}-${builder}")
Reid Kleckner4c464de2014-04-18 21:45:25 +000023 set(SPHINX_TARGET_NAME docs-${project}-${builder})
Dan Liew550abf82014-08-14 11:57:13 +000024
25 if (SPHINX_WARNINGS_AS_ERRORS)
26 set(SPHINX_WARNINGS_AS_ERRORS_FLAG "-W")
27 else()
28 set(SPHINX_WARNINGS_AS_ERRORS_FLAG "")
29 endif()
30
Reid Kleckner4c464de2014-04-18 21:45:25 +000031 add_custom_target(${SPHINX_TARGET_NAME}
32 COMMAND ${SPHINX_EXECUTABLE}
33 -b ${builder}
34 -d "${SPHINX_DOC_TREE_DIR}"
35 -q # Quiet: no output other than errors and warnings.
Dan Liew550abf82014-08-14 11:57:13 +000036 ${SPHINX_WARNINGS_AS_ERRORS_FLAG} # Treat warnings as errors if requested
Reid Kleckner4c464de2014-04-18 21:45:25 +000037 "${CMAKE_CURRENT_SOURCE_DIR}" # Source
38 "${SPHINX_BUILD_DIR}" # Output
39 COMMENT
Dan Liew43d68492014-08-14 11:57:16 +000040 "Generating ${builder} Sphinx documentation for ${project} into \"${SPHINX_BUILD_DIR}\"")
Reid Kleckner4c464de2014-04-18 21:45:25 +000041
42 # When "clean" target is run, remove the Sphinx build directory
43 set_property(DIRECTORY APPEND PROPERTY
44 ADDITIONAL_MAKE_CLEAN_FILES
45 "${SPHINX_BUILD_DIR}")
46
47 # We need to remove ${SPHINX_DOC_TREE_DIR} when make clean is run
48 # but we should only add this path once
49 get_property(_CURRENT_MAKE_CLEAN_FILES
50 DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES)
51 list(FIND _CURRENT_MAKE_CLEAN_FILES "${SPHINX_DOC_TREE_DIR}" _INDEX)
52 if (_INDEX EQUAL -1)
53 set_property(DIRECTORY APPEND PROPERTY
54 ADDITIONAL_MAKE_CLEAN_FILES
55 "${SPHINX_DOC_TREE_DIR}")
56 endif()
57
58 if (LLVM_BUILD_DOCS)
59 add_dependencies(sphinx ${SPHINX_TARGET_NAME})
60
61 # Handle installation
Dan Liew00f06272014-04-28 22:06:20 +000062 if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
63 if (builder STREQUAL man)
Jonathan Roelofs50982d32017-04-05 14:49:46 +000064 if (CMAKE_INSTALL_MANDIR)
65 set(INSTALL_MANDIR ${CMAKE_INSTALL_MANDIR}/)
66 else()
67 set(INSTALL_MANDIR share/man/)
68 endif()
Dan Liew00f06272014-04-28 22:06:20 +000069 # FIXME: We might not ship all the tools that these man pages describe
70 install(DIRECTORY "${SPHINX_BUILD_DIR}/" # Slash indicates contents of
Michal Gorny02114e62016-12-05 09:15:05 +000071 COMPONENT "${project}-sphinx-man"
Jonathan Roelofs50982d32017-04-05 14:49:46 +000072 DESTINATION ${INSTALL_MANDIR}man1)
Reid Kleckner4c464de2014-04-18 21:45:25 +000073
Dan Liew00f06272014-04-28 22:06:20 +000074 elseif (builder STREQUAL html)
Michal Gorny91fdd2b2016-09-23 11:09:33 +000075 string(TOUPPER "${project}" project_upper)
76 set(${project_upper}_INSTALL_SPHINX_HTML_DIR "share/doc/${project}/html"
77 CACHE STRING "HTML documentation install directory for ${project}")
78
79 # '/.' indicates: copy the contents of the directory directly into
80 # the specified destination, without recreating the last component
81 # of ${SPHINX_BUILD_DIR} implicitly.
82 install(DIRECTORY "${SPHINX_BUILD_DIR}/."
Michal Gorny02114e62016-12-05 09:15:05 +000083 COMPONENT "${project}-sphinx-html"
Michal Gorny91fdd2b2016-09-23 11:09:33 +000084 DESTINATION "${${project_upper}_INSTALL_SPHINX_HTML_DIR}")
Dan Liew00f06272014-04-28 22:06:20 +000085 else()
86 message(WARNING Installation of ${builder} not supported)
87 endif()
Reid Kleckner4c464de2014-04-18 21:45:25 +000088 endif()
89 endif()
90endfunction()