1# -helper macro to add a "doc" target with CMake build system.
2# and configure Doxyfile.in to Doxyfile
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 hast 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
21SET (MKDIR_DOC ${CMAKE_COMMAND} -E make_directory ${CMAKE_INSTALL_PREFIX}/share/doc/chilitags)
22SET (INSTALL_DOC ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/doc/html ${CMAKE_INSTALL_PREFIX}/share/doc/chilitags)
23
24FIND_PACKAGE(Doxygen)
25
26IF (DOXYGEN_FOUND)
27
28  # click+jump in Emacs and Visual Studio (for Doxyfile) (jw)
29  IF    (CMAKE_BUILD_TOOL MATCHES "(msdev|devenv)")
30    SET(DOXY_WARN_FORMAT "\"$file($line) : $text \"")
31  ELSE  (CMAKE_BUILD_TOOL MATCHES "(msdev|devenv)")
32    SET(DOXY_WARN_FORMAT "\"$file:$line: $text \"")
33  ENDIF (CMAKE_BUILD_TOOL MATCHES "(msdev|devenv)")
34
35  # we need latex for doxygen because of the formulas
36  FIND_PACKAGE(LATEX)
37  IF    (NOT LATEX_COMPILER)
38    MESSAGE(STATUS "latex command LATEX_COMPILER not found but usually required. You will probably get warnings and user inetraction on doxy run.")
39  ENDIF (NOT LATEX_COMPILER)
40  IF    (NOT MAKEINDEX_COMPILER)
41    MESSAGE(STATUS "makeindex command MAKEINDEX_COMPILER not found but usually required.")
42  ENDIF (NOT MAKEINDEX_COMPILER)
43  IF    (NOT DVIPS_CONVERTER)
44    MESSAGE(STATUS "dvips command DVIPS_CONVERTER not found but usually required.")
45  ENDIF (NOT DVIPS_CONVERTER)
46
47  IF   (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in")
48    MESSAGE(STATUS "configured ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in --> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile")
49    CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
50      ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
51      @ONLY )
52    # use (configured) Doxyfile from (out of place) BUILD tree:
53    SET(DOXY_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile")
54  ELSE (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in")
55    # use static hand-edited Doxyfile from SOURCE tree:
56    SET(DOXY_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile")
57    IF   (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile")
58      MESSAGE(STATUS "WARNING: using existing ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile instead of configuring from Doxyfile.in file.")
59    ELSE (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile")
60      IF   (EXISTS "${CMAKE_MODULE_PATH}/Doxyfile.in")
61        # using template Doxyfile.in
62        MESSAGE(STATUS "configured ${CMAKE_CMAKE_MODULE_PATH}/Doxyfile.in --> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile")
63        CONFIGURE_FILE(${CMAKE_MODULE_PATH}/Doxyfile.in
64          ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
65          @ONLY )
66        SET(DOXY_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile")
67      ELSE (EXISTS "${CMAKE_MODULE_PATH}/Doxyfile.in")
68        # failed completely...
69        MESSAGE(SEND_ERROR "Please create ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in (or Doxyfile as fallback)")
70      ENDIF(EXISTS "${CMAKE_MODULE_PATH}/Doxyfile.in")
71
72    ENDIF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile")
73  ENDIF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in")
74
75  ADD_CUSTOM_TARGET(doc ${DOXYGEN_EXECUTABLE} ${DOXY_CONFIG})
76  ADD_CUSTOM_TARGET(install-doc ${MKDIR_DOC} COMMAND ${INSTALL_DOC})
77
78  # create a windows help .chm file using hhc.exe
79  # HTMLHelp DLL must be in path!
80  # fallback: use hhw.exe interactively
81  IF    (WIN32)
82    FIND_PACKAGE(HTMLHelp)
83    IF   (HTML_HELP_COMPILER)
84      SET (TMP "${CMAKE_CURRENT_BINARY_DIR}\\Doc\\html\\index.hhp")
85      STRING(REGEX REPLACE "[/]" "\\\\" HHP_FILE ${TMP} )
86      # MESSAGE(SEND_ERROR "DBG  HHP_FILE=${HHP_FILE}")
87      ADD_CUSTOM_TARGET(winhelp ${HTML_HELP_COMPILER} ${HHP_FILE})
88      ADD_DEPENDENCIES (winhelp doc)
89
90      IF (NOT TARGET_DOC_SKIP_INSTALL)
91      # install windows help?
92      # determine useful name for output file
93      # should be project and version unique to allow installing
94      # multiple projects into one global directory
95      IF   (EXISTS "${PROJECT_BINARY_DIR}/Doc/html/index.chm")
96        IF   (PROJECT_NAME)
97          SET(OUT "${PROJECT_NAME}")
98        ELSE (PROJECT_NAME)
99          SET(OUT "Documentation") # default
100        ENDIF(PROJECT_NAME)
101        IF   (${PROJECT_NAME}_VERSION_MAJOR)
102          SET(OUT "${OUT}-${${PROJECT_NAME}_VERSION_MAJOR}")
103          IF   (${PROJECT_NAME}_VERSION_MINOR)
104            SET(OUT  "${OUT}.${${PROJECT_NAME}_VERSION_MINOR}")
105            IF   (${PROJECT_NAME}_VERSION_PATCH)
106              SET(OUT "${OUT}.${${PROJECT_NAME}_VERSION_PATCH}")
107            ENDIF(${PROJECT_NAME}_VERSION_PATCH)
108          ENDIF(${PROJECT_NAME}_VERSION_MINOR)
109        ENDIF(${PROJECT_NAME}_VERSION_MAJOR)
110        # keep suffix
111        SET(OUT  "${OUT}.chm")
112
113        #MESSAGE("DBG ${PROJECT_BINARY_DIR}/Doc/html/index.chm \n${OUT}")
114        # create target used by install and package commands
115        INSTALL(FILES "${PROJECT_BINARY_DIR}/Doc/html/index.chm"
116          DESTINATION "doc"
117          RENAME "${OUT}"
118        )
119      ENDIF(EXISTS "${PROJECT_BINARY_DIR}/Doc/html/index.chm")
120      ENDIF(NOT TARGET_DOC_SKIP_INSTALL)
121
122    ENDIF(HTML_HELP_COMPILER)
123    # MESSAGE(SEND_ERROR "HTML_HELP_COMPILER=${HTML_HELP_COMPILER}")
124  ENDIF (WIN32)
125ENDIF(DOXYGEN_FOUND)
126
127