UseDoxygen.cmake 5.5 KB

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