UseDoxygen.cmake 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. # (c) 2014 Copyright ownCloud GmbH
  2. # Redistribution and use is allowed according to the terms of the BSD license.
  3. # For details see the accompanying COPYING* file.
  4. # -helper macro to add a "doc" target with CMake build system.
  5. # and configure doxy.config.in to doxy.config
  6. #
  7. # target "doc" allows building the documentation with doxygen/dot on WIN32 and Linux
  8. # Creates .chm windows help file if MS HTML help workshop
  9. # (available from http://msdn.microsoft.com/workshop/author/htmlhelp)
  10. # is installed with its DLLs in PATH.
  11. #
  12. #
  13. # Please note, that the tools, e.g.:
  14. # doxygen, dot, latex, dvips, makeindex, gswin32, etc.
  15. # must be in path.
  16. #
  17. # Note about Visual Studio Projects:
  18. # MSVS has its own path environment which may differ from the shell.
  19. # See "Menu Tools/Options/Projects/VC++ Directories" in VS 7.1
  20. #
  21. # author Jan Woetzel 2004-2006
  22. # www.mip.informatik.uni-kiel.de/~jw
  23. FIND_PACKAGE(Doxygen)
  24. IF (DOXYGEN_FOUND)
  25. # click+jump in Emacs and Visual Studio (for doxy.config) (jw)
  26. IF (CMAKE_BUILD_TOOL MATCHES "(msdev|devenv)")
  27. SET(DOXY_WARN_FORMAT "\"$file($line) : $text \"")
  28. ELSE (CMAKE_BUILD_TOOL MATCHES "(msdev|devenv)")
  29. SET(DOXY_WARN_FORMAT "\"$file:$line: $text \"")
  30. ENDIF (CMAKE_BUILD_TOOL MATCHES "(msdev|devenv)")
  31. # we need latex for doxygen because of the formulas
  32. FIND_PACKAGE(LATEX)
  33. IF (NOT LATEX_COMPILER)
  34. MESSAGE(STATUS "latex command LATEX_COMPILER not found but usually required. You will probably get warnings and user interaction on doxy run.")
  35. ENDIF (NOT LATEX_COMPILER)
  36. IF (NOT MAKEINDEX_COMPILER)
  37. MESSAGE(STATUS "makeindex command MAKEINDEX_COMPILER not found but usually required.")
  38. ENDIF (NOT MAKEINDEX_COMPILER)
  39. IF (NOT DVIPS_CONVERTER)
  40. MESSAGE(STATUS "dvips command DVIPS_CONVERTER not found but usually required.")
  41. ENDIF (NOT DVIPS_CONVERTER)
  42. FIND_PROGRAM(DOXYGEN_DOT_EXECUTABLE_PATH NAMES dot)
  43. IF (DOXYGEN_DOT_EXECUTABLE_PATH)
  44. SET(DOXYGEN_DOT_FOUND "YES")
  45. ENDIF (DOXYGEN_DOT_EXECUTABLE_PATH)
  46. IF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/doxy.config.in")
  47. MESSAGE(STATUS "Generate ${CMAKE_CURRENT_BINARY_DIR}/doxy.config from doxy.config.in")
  48. CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/doxy.config.in
  49. ${CMAKE_CURRENT_BINARY_DIR}/doxy.config
  50. @ONLY )
  51. # use (configured) doxy.config from (out of place) BUILD tree:
  52. SET(DOXY_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/doxy.config")
  53. ELSE (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/doxy.config.in")
  54. # use static hand-edited doxy.config from SOURCE tree:
  55. SET(DOXY_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/doxy.config")
  56. IF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/doxy.config")
  57. MESSAGE(STATUS "WARNING: using existing ${CMAKE_CURRENT_SOURCE_DIR}/doxy.config instead of configuring from doxy.config.in file.")
  58. ELSE (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/doxy.config")
  59. IF (EXISTS "${CMAKE_MODULE_PATH}/doxy.config.in")
  60. # using template doxy.config.in
  61. MESSAGE(STATUS "Generate ${CMAKE_CURRENT_BINARY_DIR}/doxy.config from doxy.config.in")
  62. CONFIGURE_FILE(${CMAKE_MODULE_PATH}/doxy.config.in
  63. ${CMAKE_CURRENT_BINARY_DIR}/doxy.config
  64. @ONLY )
  65. SET(DOXY_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/doxy.config")
  66. ELSE (EXISTS "${CMAKE_MODULE_PATH}/doxy.config.in")
  67. # failed completely...
  68. MESSAGE(SEND_ERROR "Please create ${CMAKE_CURRENT_SOURCE_DIR}/doxy.config.in (or doxy.config as fallback)")
  69. ENDIF(EXISTS "${CMAKE_MODULE_PATH}/doxy.config.in")
  70. ENDIF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/doxy.config")
  71. ENDIF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/doxy.config.in")
  72. ADD_CUSTOM_TARGET(csync_doc ${DOXYGEN_EXECUTABLE} ${DOXY_CONFIG} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/doxy.config)
  73. # create a windows help .chm file using hhc.exe
  74. # HTMLHelp DLL must be in path!
  75. # fallback: use hhw.exe interactively
  76. IF (WIN32)
  77. FIND_PACKAGE(HTMLHelp)
  78. IF (HTML_HELP_COMPILER)
  79. SET (TMP "${CMAKE_CURRENT_BINARY_DIR}\\doc\\html\\index.hhp")
  80. STRING(REGEX REPLACE "[/]" "\\\\" HHP_FILE ${TMP} )
  81. # MESSAGE(SEND_ERROR "DBG HHP_FILE=${HHP_FILE}")
  82. ADD_CUSTOM_TARGET(winhelp ${HTML_HELP_COMPILER} ${HHP_FILE})
  83. ADD_DEPENDENCIES (winhelp doc)
  84. IF (NOT TARGET_DOC_SKIP_INSTALL)
  85. # install windows help?
  86. # determine useful name for output file
  87. # should be project and version unique to allow installing
  88. # multiple projects into one global directory
  89. IF (EXISTS "${PROJECT_BINARY_DIR}/doc/html/index.chm")
  90. IF (PROJECT_NAME)
  91. SET(OUT "${PROJECT_NAME}")
  92. ELSE (PROJECT_NAME)
  93. SET(OUT "Documentation") # default
  94. ENDIF(PROJECT_NAME)
  95. IF (${PROJECT_NAME}_VERSION_MAJOR)
  96. SET(OUT "${OUT}-${${PROJECT_NAME}_VERSION_MAJOR}")
  97. IF (${PROJECT_NAME}_VERSION_MINOR)
  98. SET(OUT "${OUT}.${${PROJECT_NAME}_VERSION_MINOR}")
  99. IF (${PROJECT_NAME}_VERSION_PATCH)
  100. SET(OUT "${OUT}.${${PROJECT_NAME}_VERSION_PATCH}")
  101. ENDIF(${PROJECT_NAME}_VERSION_PATCH)
  102. ENDIF(${PROJECT_NAME}_VERSION_MINOR)
  103. ENDIF(${PROJECT_NAME}_VERSION_MAJOR)
  104. # keep suffix
  105. SET(OUT "${OUT}.chm")
  106. #MESSAGE("DBG ${PROJECT_BINARY_DIR}/doc/html/index.chm \n${OUT}")
  107. # create target used by install and package commands
  108. INSTALL(FILES "${PROJECT_BINARY_DIR}/doc/html/index.chm"
  109. DESTINATION "doc"
  110. RENAME "${OUT}"
  111. )
  112. ENDIF(EXISTS "${PROJECT_BINARY_DIR}/doc/html/index.chm")
  113. ENDIF(NOT TARGET_DOC_SKIP_INSTALL)
  114. ENDIF(HTML_HELP_COMPILER)
  115. # MESSAGE(SEND_ERROR "HTML_HELP_COMPILER=${HTML_HELP_COMPILER}")
  116. ENDIF (WIN32)
  117. ENDIF(DOXYGEN_FOUND)