CMakeLists.txt 5.93 KB
Newer Older
Valentin Platzgummer's avatar
Valentin Platzgummer committed
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
# Where the html versions of the man pages (extension .1.html) are
# found.
set (MANDIR ${PROJECT_BINARY_DIR}/man)

# Build up a list of the .1.html files.
set (HTMLMAN)
foreach (TOOL ${TOOLS})
  set (HTMLMAN ${HTMLMAN} ${MANDIR}/${TOOL}.1.html)
endforeach ()

if (COMMON_INSTALL_PATH)
  set (INSTALL_DOC_DIR "share/doc/GeographicLib")
else ()
  set (INSTALL_DOC_DIR "doc")
endif ()

# Run doxygen, if available

# First assemble a list of all the files the documentation uses.  Add a
# dependency on htmlman (from man/CMakeLists.txt).  Use html/index.html
# as the make target.  To make this target, copy the non-doxygen
# generated files into html/.  Run doxfile.in thru cmake's config
# process so that absolute path names are used and so that the pathnames
# are properly stripped by doxygen (via STRIP_FROM_PATH). The
# distrib-doc target copies the html directory into the source tree.

# If doxygen is not available, only the install step (from the source
# tree) is done.

file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html-stage)
if (DOXYGEN_FOUND)
  set (DOCTARGETS)

  configure_file (GeographicLib.dox.in GeographicLib.dox @ONLY)
  configure_file (doxyfile.in doxyfile @ONLY)
  file (GLOB CXXSOURCES
    ../src/[A-Za-z]*.cpp ../include/GeographicLib/[A-Za-z]*.hpp
    ../tools/[A-Za-z]*.cpp ../examples/[A-Za-z]*.cpp
    ../examples/[A-Za-z]*.hpp)
  file (GLOB EXTRA_FILES ../maxima/[A-Za-z]*.mac
    tmseries30.html geodseries30.html ../LICENSE.txt)
  file (GLOB FIGURES *.png *.svg *.gif)
  file (COPY ${EXTRA_FILES} DESTINATION html-stage)
  add_custom_target (cxxdoc ALL
    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/html/index.html)
  add_dependencies (cxxdoc htmlman)
  add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/html/index.html
    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/doxyfile
      ${CMAKE_CURRENT_BINARY_DIR}/GeographicLib.dox
      ${CXXSOURCES} ${EXTRA_FILES} ${FIGURES} ${HTMLMAN}
    COMMAND ${CMAKE_COMMAND} -E remove_directory html
    COMMAND ${CMAKE_COMMAND} -E copy_directory html-stage html
    COMMAND ${DOXYGEN_EXECUTABLE} doxyfile > doxygen.log
    COMMENT "Generating C++ documentation tree")
  set (DOCTARGETS ${DOCTARGETS} cxxdoc)

  configure_file (doxyfile-c.in doxyfile-c @ONLY)
  file (GLOB CSOURCES ../legacy/C/*.[ch])
  add_custom_target (cdoc ALL
    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/html/C/index.html)
  add_dependencies (cdoc cxxdoc)
  add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/html/C/index.html
    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/doxyfile-c geodesic-c.dox ${CSOURCES}
    COMMAND ${DOXYGEN_EXECUTABLE} doxyfile-c > doxygen-c.log
    COMMENT "Generating C documentation tree")
  set (DOCTARGETS ${DOCTARGETS} cdoc)

  configure_file (doxyfile-for.in doxyfile-for @ONLY)
  file (GLOB FORTRANSOURCES ../legacy/Fortran/*.for ../legacy/Fortran/*.inc)
  add_custom_target (fortrandoc ALL
    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/html/Fortran/index.html)
  add_dependencies (fortrandoc cxxdoc)
  add_custom_command (OUTPUT
      ${CMAKE_CURRENT_BINARY_DIR}/html/Fortran/index.html
    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/doxyfile-for
      geodesic-for.dox ${FORTRANSOURCES}
    COMMAND ${DOXYGEN_EXECUTABLE} doxyfile-for > doxygen-for.log
    COMMENT "Generating Fortran documentation tree")
  set (DOCTARGETS ${DOCTARGETS} fortrandoc)

  configure_file (doxyfile-net.in doxyfile-net @ONLY)
  file (GLOB DOTNETSOURCES
    ../dotnet/NETGeographicLib/*.cpp ../dotnet/NETGeographicLib/*.h
    ../dotnet/examples/CS/*.cs ../dotnet/examples/ManagedCPP/*.cpp
    ../dotnet/examples/VB/*.vb)
  add_custom_target (dotnetdoc ALL
    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/html/NET/index.html)
  add_dependencies (dotnetdoc cxxdoc)
  add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/html/NET/index.html
    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/doxyfile-net
      NETGeographicLib.dox ${DOTNETSOURCES}
    COMMAND ${DOXYGEN_EXECUTABLE} doxyfile-net > doxygen-net.log
    COMMENT "Generating .NET documentation tree")
  set (DOCTARGETS ${DOCTARGETS} dotnetdoc)

  if (JSDOC)
    file (GLOB JSSOURCES
      ../js/src/*.js ../js/GeographicLib.md  ../js/doc/*.md)
    add_custom_target (jsdoc ALL
      DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/html/js/index.html)
    add_dependencies (jsdoc cxxdoc)
    add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/html/js/index.html
      DEPENDS ${JSSOURCES}
      COMMAND ${JSDOC} --verbose -d html/js
        -u ${PROJECT_SOURCE_DIR}/js/doc
        -c ${PROJECT_SOURCE_DIR}/js/conf.json
        -R ${PROJECT_SOURCE_DIR}/js/GeographicLib.md
        ${PROJECT_SOURCE_DIR}/js/src > jsdoc.log
      COMMENT "Generating JavaScript documentation tree")
    set (DOCTARGETS ${DOCTARGETS} jsdoc)
  endif ()

  if (SPHINX)
    file (GLOB PYTHONSOURCES
      ../python/geographiclib/*.py ../python/doc/*.rst ../python/doc/conf.py)
    add_custom_target (pythondoc ALL
      DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/html/python/index.html)
    add_dependencies (pythondoc cxxdoc)
    add_custom_command (OUTPUT
        ${CMAKE_CURRENT_BINARY_DIR}/html/python/index.html
      DEPENDS ${PYTHONSOURCES}
      COMMAND ${SPHINX} -v -b html -d python-doctree
        ${PROJECT_SOURCE_DIR}/python/doc html/python > pythondoc.log
      COMMENT "Generating python documentation tree")
    set (DOCTARGETS ${DOCTARGETS} pythondoc)
  endif ()

  add_custom_target (doc ALL)
  add_dependencies (doc ${DOCTARGETS})

  install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html
    DESTINATION ${INSTALL_DOC_DIR})
else ()
  file (COPY ../LICENSE.txt DESTINATION html)
  # Need to absolute path on destination to support old versions of cmake
  configure_file (index.html.in html/index.html)
  configure_file (utilities.html.in html/utilities.html)
  install (FILES
    ${CMAKE_CURRENT_BINARY_DIR}/html/LICENSE.txt
    ${CMAKE_CURRENT_BINARY_DIR}/html/index.html
    ${CMAKE_CURRENT_BINARY_DIR}/html/utilities.html
    DESTINATION ${INSTALL_DOC_DIR}/html)
endif ()