FindSphinx.cmake 4.5 KB
Newer Older
Z
zhangjinchao01 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
# - This module looks for Sphinx
# Find the Sphinx documentation generator
#
# This modules defines
#  SPHINX_EXECUTABLE
#  SPHINX_FOUND

find_program(SPHINX_EXECUTABLE
  NAMES sphinx-build
  PATHS
    /usr/bin
    /usr/local/bin
    /opt/local/bin
  DOC "Sphinx documentation generator"
)

if( NOT SPHINX_EXECUTABLE )
  set(_Python_VERSIONS
    2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0 1.6 1.5
  )

  foreach( _version ${_Python_VERSIONS} )
    set( _sphinx_NAMES sphinx-build-${_version} )

    find_program( SPHINX_EXECUTABLE
      NAMES ${_sphinx_NAMES}
      PATHS
        /usr/bin
        /usr/local/bin
        /opt/loca/bin
      DOC "Sphinx documentation generator"
    )
  endforeach()
endif()

include(FindPackageHandleStandardArgs)

find_package_handle_standard_args(Sphinx DEFAULT_MSG
  SPHINX_EXECUTABLE
)


option( SPHINX_HTML_OUTPUT "Build a single HTML with the whole content." ON )
option( SPHINX_DIRHTML_OUTPUT "Build HTML pages, but with a single directory per document." OFF )
option( SPHINX_HTMLHELP_OUTPUT "Build HTML pages with additional information for building a documentation collection in htmlhelp." OFF )
option( SPHINX_QTHELP_OUTPUT "Build HTML pages with additional information for building a documentation collection in qthelp." OFF )
option( SPHINX_DEVHELP_OUTPUT "Build HTML pages with additional information for building a documentation collection in devhelp." OFF )
option( SPHINX_EPUB_OUTPUT "Build HTML pages with additional information for building a documentation collection in epub." OFF )
option( SPHINX_LATEX_OUTPUT "Build LaTeX sources that can be compiled to a PDF document using pdflatex." OFF )
option( SPHINX_MAN_OUTPUT "Build manual pages in groff format for UNIX systems." OFF )
option( SPHINX_TEXT_OUTPUT "Build plain text files." OFF )


mark_as_advanced(
  SPHINX_EXECUTABLE
  SPHINX_HTML_OUTPUT
  SPHINX_DIRHTML_OUTPUT
  SPHINX_HTMLHELP_OUTPUT
  SPHINX_QTHELP_OUTPUT
  SPHINX_DEVHELP_OUTPUT
  SPHINX_EPUB_OUTPUT
  SPHINX_LATEX_OUTPUT
  SPHINX_MAN_OUTPUT
  SPHINX_TEXT_OUTPUT
)

function( Sphinx_add_target target_name builder conf cache source destination )
  add_custom_target( ${target_name} ALL
    COMMAND ${SPHINX_EXECUTABLE} -b ${builder}
    -d ${cache}
    -c ${conf}
    ${source}
    ${destination}
    COMMENT "Generating sphinx documentation: ${builder}"
    )

  set_property(
    DIRECTORY APPEND PROPERTY
    ADDITIONAL_MAKE_CLEAN_FILES
    ${destination}
    )
endfunction()

# Target dependencies can be optionally listed at the end.
function( Sphinx_add_targets target_base_name conf source base_destination )

  set( _dependencies )

  foreach( arg IN LISTS ARGN )
    set( _dependencies ${_dependencies} ${arg} )
  endforeach()

  if( ${SPHINX_HTML_OUTPUT} )
    Sphinx_add_target( ${target_base_name}_html html ${conf} ${source} ${base_destination}/html )

    add_dependencies( ${target_base_name}_html ${_dependencies} )
  endif()

  if( ${SPHINX_DIRHTML_OUTPUT} )
    Sphinx_add_target( ${target_base_name}_dirhtml dirhtml ${conf} ${source} ${base_destination}/dirhtml )

    add_dependencies( ${target_base_name}_dirhtml ${_dependencies} )
  endif()

  if( ${SPHINX_QTHELP_OUTPUT} )
    Sphinx_add_target( ${target_base_name}_qthelp qthelp ${conf} ${source} ${base_destination}/qthelp )

    add_dependencies( ${target_base_name}_qthelp ${_dependencies} )
  endif()

  if( ${SPHINX_DEVHELP_OUTPUT} )
    Sphinx_add_target( ${target_base_name}_devhelp devhelp ${conf} ${source} ${base_destination}/devhelp )

    add_dependencies( ${target_base_name}_devhelp ${_dependencies} )
  endif()

  if( ${SPHINX_EPUB_OUTPUT} )
    Sphinx_add_target( ${target_base_name}_epub epub ${conf} ${source} ${base_destination}/epub )

    add_dependencies( ${target_base_name}_epub ${_dependencies} )
  endif()

  if( ${SPHINX_LATEX_OUTPUT} )
    Sphinx_add_target( ${target_base_name}_latex latex ${conf} ${source} ${base_destination}/latex )

    add_dependencies( ${target_base_name}_latex ${_dependencies} )
  endif()

  if( ${SPHINX_MAN_OUTPUT} )
    Sphinx_add_target( ${target_base_name}_man man ${conf} ${source} ${base_destination}/man )

    add_dependencies( ${target_base_name}_man ${_dependencies} )
  endif()

  if( ${SPHINX_TEXT_OUTPUT} )
    Sphinx_add_target( ${target_base_name}_text text ${conf} ${source} ${base_destination}/text )

    add_dependencies( ${target_base_name}_text ${_dependencies} )
  endif()

  if( ${BUILD_TESTING} )
    sphinx_add_target( ${target_base_name}_linkcheck linkcheck ${conf} ${source} ${base_destination}/linkcheck )

    add_dependencies( ${target_base_name}_linkcheck ${_dependencies} )
  endif()
endfunction()