1 | # This file is part of Autoconf. -*- Autoconf -*-
|
---|
2 |
|
---|
3 | # Copyright (C) 2004 Oren Ben-Kiki
|
---|
4 | # This file is distributed under the same terms as the Autoconf macro files.
|
---|
5 |
|
---|
6 | # Generate automatic documentation using Doxygen. Works in concert with the
|
---|
7 | # aminclude.m4 file and a compatible doxygen configuration file. Defines the
|
---|
8 | # following public macros:
|
---|
9 | #
|
---|
10 | # DX_???_FEATURE(ON|OFF) - control the default setting fo a Doxygen feature.
|
---|
11 | # Supported features are 'DOXYGEN' itself, 'DOT' for generating graphics,
|
---|
12 | # 'HTML' for plain HTML, 'CHM' for compressed HTML help (for MS users), 'CHI'
|
---|
13 | # for generating a seperate .chi file by the .chm file, and 'MAN', 'RTF',
|
---|
14 | # 'XML', 'PDF' and 'PS' for the appropriate output formats. The environment
|
---|
15 | # variable DOXYGEN_PAPER_SIZE may be specified to override the default 'a4wide'
|
---|
16 | # paper size.
|
---|
17 | #
|
---|
18 | # By default, HTML, PDF and PS documentation is generated as this seems to be
|
---|
19 | # the most popular and portable combination. MAN pages created by Doxygen are
|
---|
20 | # usually problematic, though by picking an appropriate subset and doing some
|
---|
21 | # massaging they might be better than nothing. CHM and RTF are specific for MS
|
---|
22 | # (note that you can't generate both HTML and CHM at the same time). The XML is
|
---|
23 | # rather useless unless you apply specialized post-processing to it.
|
---|
24 | #
|
---|
25 | # The macro mainly controls the default state of the feature. The use can
|
---|
26 | # override the default by specifying --enable or --disable. The macros ensure
|
---|
27 | # that contradictory flags are not given (e.g., --enable-doxygen-html and
|
---|
28 | # --enable-doxygen-chm, --enable-doxygen-anything with --disable-doxygen, etc.)
|
---|
29 | # Finally, each feature will be automatically disabled (with a warning) if the
|
---|
30 | # required programs are missing.
|
---|
31 | #
|
---|
32 | # Once all the feature defaults have been specified, call DX_INIT_DOXYGEN with
|
---|
33 | # the following parameters: a one-word name for the project for use as a
|
---|
34 | # filename base etc., an optional configuration file name (the default is
|
---|
35 | # 'Doxyfile', the same as Doxygen's default), and an optional output directory
|
---|
36 | # name (the default is 'doxygen-doc').
|
---|
37 |
|
---|
38 | ## ----------##
|
---|
39 | ## Defaults. ##
|
---|
40 | ## ----------##
|
---|
41 |
|
---|
42 | DX_ENV=""
|
---|
43 | AC_DEFUN([DX_FEATURE_doc], ON)
|
---|
44 | AC_DEFUN([DX_FEATURE_dot], ON)
|
---|
45 | AC_DEFUN([DX_FEATURE_man], OFF)
|
---|
46 | AC_DEFUN([DX_FEATURE_html], ON)
|
---|
47 | AC_DEFUN([DX_FEATURE_chm], OFF)
|
---|
48 | AC_DEFUN([DX_FEATURE_chi], OFF)
|
---|
49 | AC_DEFUN([DX_FEATURE_rtf], OFF)
|
---|
50 | AC_DEFUN([DX_FEATURE_xml], OFF)
|
---|
51 | AC_DEFUN([DX_FEATURE_pdf], ON)
|
---|
52 | AC_DEFUN([DX_FEATURE_ps], ON)
|
---|
53 |
|
---|
54 | ## --------------- ##
|
---|
55 | ## Private macros. ##
|
---|
56 | ## --------------- ##
|
---|
57 |
|
---|
58 | # DX_ENV_APPEND(VARIABLE, VALUE)
|
---|
59 | # ------------------------------
|
---|
60 | # Append VARIABLE="VALUE" to DX_ENV for invoking doxygen.
|
---|
61 | AC_DEFUN([DX_ENV_APPEND], [AC_SUBST([DX_ENV], ["$DX_ENV $1='$2'"])])
|
---|
62 |
|
---|
63 | # DX_DIRNAME_EXPR
|
---|
64 | # ---------------
|
---|
65 | # Expand into a shell expression prints the directory part of a path.
|
---|
66 | AC_DEFUN([DX_DIRNAME_EXPR],
|
---|
67 | [[expr ".$1" : '\(\.\)[^/]*$' \| "x$1" : 'x\(.*\)/[^/]*$']])
|
---|
68 |
|
---|
69 | # DX_IF_FEATURE(FEATURE, IF-ON, IF-OFF)
|
---|
70 | # -------------------------------------
|
---|
71 | # Expands according to the M4 (static) status of the feature.
|
---|
72 | AC_DEFUN([DX_IF_FEATURE], [ifelse(DX_FEATURE_$1, ON, [$2], [$3])])
|
---|
73 |
|
---|
74 | # DX_REQUIRE_PROG(VARIABLE, PROGRAM)
|
---|
75 | # ----------------------------------
|
---|
76 | # Require the specified program to be found for the DX_CURRENT_FEATURE to work.
|
---|
77 | AC_DEFUN([DX_REQUIRE_PROG], [
|
---|
78 | AC_PATH_TOOL([$1], [$2])
|
---|
79 | if test "$DX_FLAG_[]DX_CURRENT_FEATURE$$1" = 1; then
|
---|
80 | AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION])
|
---|
81 | AC_SUBST([DX_FLAG_]DX_CURRENT_FEATURE, 0)
|
---|
82 | fi
|
---|
83 | ])
|
---|
84 |
|
---|
85 | # DX_TEST_FEATURE(FEATURE)
|
---|
86 | # ------------------------
|
---|
87 | # Expand to a shell expression testing whether the feature is active.
|
---|
88 | AC_DEFUN([DX_TEST_FEATURE], [test "$DX_FLAG_$1" = 1])
|
---|
89 |
|
---|
90 | # DX_CHECK_DEPEND(REQUIRED_FEATURE, REQUIRED_STATE)
|
---|
91 | # -------------------------------------------------
|
---|
92 | # Verify that a required features has the right state before trying to turn on
|
---|
93 | # the DX_CURRENT_FEATURE.
|
---|
94 | AC_DEFUN([DX_CHECK_DEPEND], [
|
---|
95 | test "$DX_FLAG_$1" = "$2" \
|
---|
96 | || AC_MSG_ERROR([doxygen-DX_CURRENT_FEATURE ifelse([$2], 1,
|
---|
97 | requires, contradicts) doxygen-DX_CURRENT_FEATURE])
|
---|
98 | ])
|
---|
99 |
|
---|
100 | # DX_CLEAR_DEPEND(FEATURE, REQUIRED_FEATURE, REQUIRED_STATE)
|
---|
101 | # ----------------------------------------------------------
|
---|
102 | # Turn off the DX_CURRENT_FEATURE if the required feature is off.
|
---|
103 | AC_DEFUN([DX_CLEAR_DEPEND], [
|
---|
104 | test "$DX_FLAG_$1" = "$2" || AC_SUBST([DX_FLAG_]DX_CURRENT_FEATURE, 0)
|
---|
105 | ])
|
---|
106 |
|
---|
107 | # DX_FEATURE_ARG(FEATURE, DESCRIPTION,
|
---|
108 | # CHECK_DEPEND, CLEAR_DEPEND,
|
---|
109 | # REQUIRE, DO-IF-ON, DO-IF-OFF)
|
---|
110 | # --------------------------------------------
|
---|
111 | # Parse the command-line option controlling a feature. CHECK_DEPEND is called
|
---|
112 | # if the user explicitly turns the feature on (and invokes DX_CHECK_DEPEND),
|
---|
113 | # otherwise CLEAR_DEPEND is called to turn off the default state if a required
|
---|
114 | # feature is disabled (using DX_CLEAR_DEPEND). REQUIRE performs additional
|
---|
115 | # requirement tests (DX_REQUIRE_PROG). Finally, an automake flag is set and
|
---|
116 | # DO-IF-ON or DO-IF-OFF are called according to the final state of the feature.
|
---|
117 | AC_DEFUN([DX_ARG_ABLE], [
|
---|
118 | AC_DEFUN([DX_CURRENT_FEATURE], [$1])
|
---|
119 | AC_DEFUN([DX_CURRENT_DESCRIPTION], [$2])
|
---|
120 | AC_ARG_ENABLE(doxygen-$1,
|
---|
121 | [AS_HELP_STRING(DX_IF_FEATURE([$1], [--disable-doxygen-$1],
|
---|
122 | [--enable-doxygen-$1]),
|
---|
123 | DX_IF_FEATURE([$1], [don't $2], [$2]))],
|
---|
124 | [
|
---|
125 | case "$enableval" in
|
---|
126 | #(
|
---|
127 | y|Y|yes|Yes|YES)
|
---|
128 | AC_SUBST([DX_FLAG_$1], 1)
|
---|
129 | $3
|
---|
130 | ;; #(
|
---|
131 | n|N|no|No|NO)
|
---|
132 | AC_SUBST([DX_FLAG_$1], 0)
|
---|
133 | ;; #(
|
---|
134 | *)
|
---|
135 | AC_MSG_ERROR([invalid value '$enableval' given to doxygen-$1])
|
---|
136 | ;;
|
---|
137 | esac
|
---|
138 | ], [
|
---|
139 | AC_SUBST([DX_FLAG_$1], [DX_IF_FEATURE([$1], 1, 0)])
|
---|
140 | $4
|
---|
141 | ])
|
---|
142 | if DX_TEST_FEATURE([$1]); then
|
---|
143 | $5
|
---|
144 | :
|
---|
145 | fi
|
---|
146 | if DX_TEST_FEATURE([$1]); then
|
---|
147 | AM_CONDITIONAL(DX_COND_$1, :)
|
---|
148 | $6
|
---|
149 | :
|
---|
150 | else
|
---|
151 | AM_CONDITIONAL(DX_COND_$1, false)
|
---|
152 | $7
|
---|
153 | :
|
---|
154 | fi
|
---|
155 | ])
|
---|
156 |
|
---|
157 | ## -------------- ##
|
---|
158 | ## Public macros. ##
|
---|
159 | ## -------------- ##
|
---|
160 |
|
---|
161 | # DX_XXX_FEATURE(DEFAULT_STATE)
|
---|
162 | # -----------------------------
|
---|
163 | AC_DEFUN([DX_DOXYGEN_FEATURE], [AC_DEFUN([DX_FEATURE_doc], [$1])])
|
---|
164 | AC_DEFUN([DX_MAN_FEATURE], [AC_DEFUN([DX_FEATURE_man], [$1])])
|
---|
165 | AC_DEFUN([DX_HTML_FEATURE], [AC_DEFUN([DX_FEATURE_html], [$1])])
|
---|
166 | AC_DEFUN([DX_CHM_FEATURE], [AC_DEFUN([DX_FEATURE_chm], [$1])])
|
---|
167 | AC_DEFUN([DX_CHI_FEATURE], [AC_DEFUN([DX_FEATURE_chi], [$1])])
|
---|
168 | AC_DEFUN([DX_RTF_FEATURE], [AC_DEFUN([DX_FEATURE_rtf], [$1])])
|
---|
169 | AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])])
|
---|
170 | AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])])
|
---|
171 | AC_DEFUN([DX_PDF_FEATURE], [AC_DEFUN([DX_FEATURE_pdf], [$1])])
|
---|
172 | AC_DEFUN([DX_PS_FEATURE], [AC_DEFUN([DX_FEATURE_ps], [$1])])
|
---|
173 |
|
---|
174 | # DX_INIT_DOXYGEN(PROJECT, [CONFIG-FILE], [OUTPUT-DOC-DIR])
|
---|
175 | # ---------------------------------------------------------
|
---|
176 | # PROJECT also serves as the base name for the documentation files.
|
---|
177 | # The default CONFIG-FILE is "Doxyfile" and OUTPUT-DOC-DIR is "doxygen-doc".
|
---|
178 | AC_DEFUN([DX_INIT_DOXYGEN], [
|
---|
179 |
|
---|
180 | # Files:
|
---|
181 | AC_SUBST([DX_PROJECT], [$1])
|
---|
182 | AC_SUBST([DX_CONFIG], [ifelse([$2], [], Doxyfile, [$2])])
|
---|
183 | AC_SUBST([DX_DOCDIR], [ifelse([$3], [], doxygen-doc, [$3])])
|
---|
184 |
|
---|
185 | # Environment variables used inside doxygen.cfg:
|
---|
186 | DX_ENV_APPEND(SRCDIR, $srcdir)
|
---|
187 | DX_ENV_APPEND(TOPSRCDIR, \$(top_srcdir))
|
---|
188 | DX_ENV_APPEND(PROJECT, $DX_PROJECT)
|
---|
189 | DX_ENV_APPEND(DOCDIR, $DX_DOCDIR)
|
---|
190 | DX_ENV_APPEND(VERSION, $PACKAGE_VERSION)
|
---|
191 |
|
---|
192 | # Doxygen itself:
|
---|
193 | DX_ARG_ABLE(doc, [generate any doxygen documentation],
|
---|
194 | [],
|
---|
195 | [],
|
---|
196 | [DX_REQUIRE_PROG([DX_DOXYGEN], doxygen)
|
---|
197 | DX_REQUIRE_PROG([DX_PERL], perl)],
|
---|
198 | [DX_ENV_APPEND(PERL_PATH, $DX_PERL)])
|
---|
199 |
|
---|
200 | # Dot for graphics:
|
---|
201 | DX_ARG_ABLE(dot, [generate graphics for doxygen documentation],
|
---|
202 | [DX_CHECK_DEPEND(doc, 1)],
|
---|
203 | [DX_CLEAR_DEPEND(doc, 1)],
|
---|
204 | [DX_REQUIRE_PROG([DX_DOT], dot)],
|
---|
205 | [DX_ENV_APPEND(HAVE_DOT, YES)
|
---|
206 | DX_ENV_APPEND(DOT_PATH, [`DX_DIRNAME_EXPR($DX_DOT)`])],
|
---|
207 | [DX_ENV_APPEND(HAVE_DOT, NO)])
|
---|
208 |
|
---|
209 | # Man pages generation:
|
---|
210 | DX_ARG_ABLE(man, [generate doxygen manual pages],
|
---|
211 | [DX_CHECK_DEPEND(doc, 1)],
|
---|
212 | [DX_CLEAR_DEPEND(doc, 1)],
|
---|
213 | [],
|
---|
214 | [DX_ENV_APPEND(GENERATE_MAN, YES)],
|
---|
215 | [DX_ENV_APPEND(GENERATE_MAN, NO)])
|
---|
216 |
|
---|
217 | # RTF file generation:
|
---|
218 | DX_ARG_ABLE(rtf, [generate doxygen RTF documentation],
|
---|
219 | [DX_CHECK_DEPEND(doc, 1)],
|
---|
220 | [DX_CLEAR_DEPEND(doc, 1)],
|
---|
221 | [],
|
---|
222 | [DX_ENV_APPEND(GENERATE_RTF, YES)],
|
---|
223 | [DX_ENV_APPEND(GENERATE_RTF, NO)])
|
---|
224 |
|
---|
225 | # XML file generation:
|
---|
226 | DX_ARG_ABLE(xml, [generate doxygen XML documentation],
|
---|
227 | [DX_CHECK_DEPEND(doc, 1)],
|
---|
228 | [DX_CLEAR_DEPEND(doc, 1)],
|
---|
229 | [],
|
---|
230 | [DX_ENV_APPEND(GENERATE_XML, YES)],
|
---|
231 | [DX_ENV_APPEND(GENERATE_XML, NO)])
|
---|
232 |
|
---|
233 | # (Compressed) HTML help generation:
|
---|
234 | DX_ARG_ABLE(chm, [generate doxygen compressed HTML help documentation],
|
---|
235 | [DX_CHECK_DEPEND(doc, 1)],
|
---|
236 | [DX_CLEAR_DEPEND(doc, 1)],
|
---|
237 | [DX_REQUIRE_PROG([DX_HHC], hhc)],
|
---|
238 | [DX_ENV_APPEND(HHC_PATH, $DX_HHC)
|
---|
239 | DX_ENV_APPEND(GENERATE_HTML, YES)
|
---|
240 | DX_ENV_APPEND(GENERATE_HTMLHELP, YES)],
|
---|
241 | [DX_ENV_APPEND(GENERATE_HTMLHELP, NO)])
|
---|
242 |
|
---|
243 | # Seperate CHI file generation.
|
---|
244 | DX_ARG_ABLE(chi, [generate doxygen seperate compressed HTML help index file],
|
---|
245 | [DX_CHECK_DEPEND(chm, 1)],
|
---|
246 | [DX_CLEAR_DEPEND(chm, 1)],
|
---|
247 | [],
|
---|
248 | [DX_ENV_APPEND(GENERATE_CHI, YES)],
|
---|
249 | [DX_ENV_APPEND(GENERATE_CHI, NO)])
|
---|
250 |
|
---|
251 | # Plain HTML pages generation:
|
---|
252 | DX_ARG_ABLE(html, [generate doxygen plain HTML documentation],
|
---|
253 | [DX_CHECK_DEPEND(doc, 1) DX_CHECK_DEPEND(chm, 0)],
|
---|
254 | [DX_CLEAR_DEPEND(doc, 1) DX_CLEAR_DEPEND(chm, 0)],
|
---|
255 | [],
|
---|
256 | [DX_ENV_APPEND(GENERATE_HTML, YES)],
|
---|
257 | [DX_TEST_FEATURE(chm) || DX_ENV_APPEND(GENERATE_HTML, NO)])
|
---|
258 |
|
---|
259 | # PostScript file generation:
|
---|
260 | DX_ARG_ABLE(ps, [generate doxygen PostScript documentation],
|
---|
261 | [DX_CHECK_DEPEND(doc, 1)],
|
---|
262 | [DX_CLEAR_DEPEND(doc, 1)],
|
---|
263 | [DX_REQUIRE_PROG([DX_LATEX], latex)
|
---|
264 | DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex)
|
---|
265 | DX_REQUIRE_PROG([DX_DVIPS], dvips)
|
---|
266 | DX_REQUIRE_PROG([DX_EGREP], egrep)])
|
---|
267 |
|
---|
268 | # PDF file generation:
|
---|
269 | DX_ARG_ABLE(pdf, [generate doxygen PDF documentation],
|
---|
270 | [DX_CHECK_DEPEND(doc, 1)],
|
---|
271 | [DX_CLEAR_DEPEND(doc, 1)],
|
---|
272 | [DX_REQUIRE_PROG([DX_PDFLATEX], pdflatex)
|
---|
273 | DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex)
|
---|
274 | DX_REQUIRE_PROG([DX_EGREP], egrep)])
|
---|
275 |
|
---|
276 | # LaTeX generation for PS and/or PDF:
|
---|
277 | if DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf); then
|
---|
278 | AM_CONDITIONAL(DX_COND_latex, :)
|
---|
279 | DX_ENV_APPEND(GENERATE_LATEX, YES)
|
---|
280 | else
|
---|
281 | AM_CONDITIONAL(DX_COND_latex, false)
|
---|
282 | DX_ENV_APPEND(GENERATE_LATEX, NO)
|
---|
283 | fi
|
---|
284 |
|
---|
285 | # Paper size for PS and/or PDF:
|
---|
286 | AC_ARG_VAR(DOXYGEN_PAPER_SIZE,
|
---|
287 | [a4wide (default), a4, letter, legal or executive])
|
---|
288 | case "$DOXYGEN_PAPER_SIZE" in
|
---|
289 | #(
|
---|
290 | "")
|
---|
291 | AC_SUBST(DOXYGEN_PAPER_SIZE, "")
|
---|
292 | ;; #(
|
---|
293 | a4wide|a4|letter|legal|executive)
|
---|
294 | DX_ENV_APPEND(PAPER_SIZE, $DOXYGEN_PAPER_SIZE)
|
---|
295 | ;; #(
|
---|
296 | *)
|
---|
297 | AC_MSG_ERROR([unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'])
|
---|
298 | ;;
|
---|
299 | esac
|
---|
300 |
|
---|
301 | #For debugging:
|
---|
302 | #echo DX_FLAG_doc=$DX_FLAG_doc
|
---|
303 | #echo DX_FLAG_dot=$DX_FLAG_dot
|
---|
304 | #echo DX_FLAG_man=$DX_FLAG_man
|
---|
305 | #echo DX_FLAG_html=$DX_FLAG_html
|
---|
306 | #echo DX_FLAG_chm=$DX_FLAG_chm
|
---|
307 | #echo DX_FLAG_chi=$DX_FLAG_chi
|
---|
308 | #echo DX_FLAG_rtf=$DX_FLAG_rtf
|
---|
309 | #echo DX_FLAG_xml=$DX_FLAG_xml
|
---|
310 | #echo DX_FLAG_pdf=$DX_FLAG_pdf
|
---|
311 | #echo DX_FLAG_ps=$DX_FLAG_ps
|
---|
312 | #echo DX_ENV=$DX_ENV
|
---|
313 | ])
|
---|