1# - Lucene++Docs.cmake
2# This file provides support for building the Lucene++ Documentation.
3# To build the documention, you will have to enable it
4# and then do the equivalent of "make doc".
5
6MACRO(SET_YESNO)
7    FOREACH(param ${ARGV})
8    	IF ( ${param} )
9    	    SET(${param} "YES")
10        ELSE ( ${param} )
11            SET(${param} "NO")
12    	ENDIF ( ${param} )
13    ENDFOREACH(param)
14ENDMACRO(SET_YESNO)
15MACRO(SET_BLANK)
16    FOREACH(param ${ARGV})
17    	IF ( NOT ${param} )
18    	    SET(${param} "")
19    	ENDIF ( NOT ${param} )
20    ENDFOREACH(param)
21ENDMACRO(SET_BLANK)
22
23IF (ENABLE_DOCS)
24    OPTION(DOCS_HTML_HELP
25        "Doxygen should compile HTML into a Help file (CHM)." NO)
26
27    OPTION(DOCS_HTML
28        "Doxygen should build HTML documentation." YES)
29    OPTION(DOCS_XML
30        "Doxygen should build XML documentation." NO)
31    OPTION(DOCS_RTF
32        "Doxygen should build RTF documentation." NO)
33    OPTION(DOCS_MAN
34        "Doxygen should build man documentation." NO)
35    OPTION(DOCS_TAGFILE
36        "Doxygen should build a tagfile." NO)
37
38    OPTION(DOCS_LATEX
39        "Doxygen should build Latex documentation." NO )
40
41    MARK_AS_ADVANCED(
42        DOCS_HTML_HELP
43        DOCS_LATEX
44        DOCS_XML
45        DOCS_HTML
46        DOCS_RTF
47        DOCS_MAN
48        DOCS_TAGFILE
49    )
50
51    #
52    # Check for the tools
53    #
54    FIND_PACKAGE(Doxygen)
55
56    IF ( DOXYGEN_FOUND )
57        # This creates a new target to build documentation.
58        # It runs ${DOXYGEN_EXECUTABLE} which is the full path and executable to
59        # Doxygen on your system, set by the FindDoxygen.cmake module
60        # (called by FindDocumentation.cmake).
61        # It runs the final generated Doxyfile against it.
62        # The DOT_PATH is substituted into the Doxyfile.
63        ADD_CUSTOM_TARGET(doc
64            "${DOXYGEN_EXECUTABLE}" "${PROJECT_BINARY_DIR}/doc/doxyfile"
65            VERBATIM
66        )
67
68        IF ( DOCS_HTML_HELP )
69            IF ( NOT DOCS_HTML )
70                MESSAGE ( FATAL_ERROR "DOCS_HTML is required to buidl DOCS_HTML_HELP" )
71            ENDIF ( NOT DOCS_HTML )
72            FIND_PACKAGE(HTMLHelp)
73            IF ( NOT HTML_HELP_COMPILER )
74                MESSAGE(FATAL_ERROR "HTML Help compiler not found, turn DOCS_HTML_HELP off to proceed")
75            ENDIF ( NOT HTML_HELP_COMPILER )
76
77            #make cygwin work with hhc...
78            IF ( CYGWIN )
79                EXECUTE_PROCESS ( COMMAND cygpath "${HTML_HELP_COMPILER}"
80                    OUTPUT_VARIABLE HTML_HELP_COMPILER_EX )
81                STRING ( REPLACE "\n" "" HTML_HELP_COMPILER_EX "${HTML_HELP_COMPILER_EX}" )
82                STRING ( REPLACE "\r" "" HTML_HELP_COMPILER_EX "${HTML_HELP_COMPILER_EX}" )
83                SET ( HTML_HELP_COMPILER_EX "\"${HTML_HELP_COMPILER_EX}\"" )
84            ELSE ( CYGWIN )
85                SET ( HTML_HELP_COMPILER_EX "${HTML_HELP_COMPILER}" )
86            ENDIF ( CYGWIN )
87        ENDIF ( DOCS_HTML_HELP )
88
89        IF ( DOCS_LATEX )
90            FIND_PACKAGE(LATEX)
91            IF ( NOT LATEX_COMPILER )
92                MESSAGE(FATAL_ERROR "Latex compiler not found, turn DOCS_LATEX off to proceed")
93            ENDIF ( NOT LATEX_COMPILER )
94        ENDIF ( DOCS_LATEX )
95
96        FIND_PACKAGE(Perl)
97
98        IF ( DOXYGEN_DOT_EXECUTABLE )
99            SET ( HAVE_DOT "YES" )
100        ELSE ( DOXYGEN_DOT_EXECUTABLE )
101            SET ( HAVE_DOT "NO" )
102        ENDIF ( DOXYGEN_DOT_EXECUTABLE )
103
104        #doxygen expects YES/NO parameters
105        SET_YESNO(
106            DOCS_HTML_HELP
107            DOCS_LATEX
108            DOCS_XML
109            DOCS_HTML
110            DOCS_RTF
111            DOCS_MAN
112        )
113        #empty out paths if not found
114        SET_BLANK(
115            PERL_EXECUTABLE
116            DOXYGEN_DOT_EXECUTABLE
117            HTML_HELP_COMPILER
118            LATEX_COMPILER
119        )
120
121        IF ( DOCS_TAGFILE )
122            SET ( DOCS_TAGFILE_LOCATION "${PROJECT_BINARY_DIR}/doc/tag/lucene++.tag"  )
123        ENDIF ( DOCS_TAGFILE )
124
125        # This processes our Doxyfile.cmake and substitutes paths to generate a final Doxyfile
126        CONFIGURE_FILE("${PROJECT_SOURCE_DIR}/doc/doxygen/Doxyfile.cmake" "${PROJECT_BINARY_DIR}/doc/doxyfile")
127        CONFIGURE_FILE("${PROJECT_SOURCE_DIR}/doc/doxygen/helpheader.htm.cmake" "${PROJECT_BINARY_DIR}/doc/helpheader.htm")
128        CONFIGURE_FILE("${PROJECT_SOURCE_DIR}/doc/doxygen/helpfooter.htm.cmake" "${PROJECT_BINARY_DIR}/doc/helpfooter.htm")
129        CONFIGURE_FILE("${PROJECT_SOURCE_DIR}/doc/doxygen/doxygen.css.cmake" "${PROJECT_BINARY_DIR}/doc/html/doxygen.css")
130
131        #create a target for tar.gz html help
132        FIND_PACKAGE(UnixCommands)
133        IF ( TAR AND GZIP )
134            ADD_CUSTOM_TARGET(doc-tarz
135                COMMAND "${TAR}" "-czf" "${PROJECT_BINARY_DIR}/doc/lucene++-doc.tar.gz" ./
136                WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/doc/html/"
137                #DEPENDS doc
138                VERBATIM
139            )
140        ENDIF ( TAR AND GZIP )
141
142	#install HTML pages if they were built
143	IF ( DOCS_HTML AND NOT WIN32 )
144            INSTALL(DIRECTORY "${PROJECT_BINARY_DIR}/doc/html/" DESTINATION share/doc/lucene++-doc/html)
145        ENDIF ( DOCS_HTML AND NOT WIN32 )
146
147        #install man pages if they were built
148        IF ( DOCS_MAN )
149            INSTALL(DIRECTORY "${PROJECT_BINARY_DIR}/doc/man/" DESTINATION man)
150        ENDIF ( DOCS_MAN )
151
152    ELSE ( DOXYGEN_FOUND )
153        MESSAGE(FATAL_ERROR "Doxygen not found, turn ENABLE_DOCS off to proceed")
154    ENDIF ( DOXYGEN_FOUND )
155
156
157ENDIF (ENABLE_DOCS)
158