source: git/factory/acinclude.m4 @ d8a7da

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