19888Sandreas@sandberg.pp.se# ===========================================================================
29888Sandreas@sandberg.pp.se#      http://www.gnu.org/software/autoconf-archive/ax_prog_doxygen.html
39888Sandreas@sandberg.pp.se# ===========================================================================
49888Sandreas@sandberg.pp.se#
59888Sandreas@sandberg.pp.se# SYNOPSIS
69888Sandreas@sandberg.pp.se#
79888Sandreas@sandberg.pp.se#   DX_INIT_DOXYGEN(PROJECT-NAME, DOXYFILE-PATH, [OUTPUT-DIR])
89888Sandreas@sandberg.pp.se#   DX_DOXYGEN_FEATURE(ON|OFF)
99888Sandreas@sandberg.pp.se#   DX_DOT_FEATURE(ON|OFF)
109888Sandreas@sandberg.pp.se#   DX_HTML_FEATURE(ON|OFF)
119888Sandreas@sandberg.pp.se#   DX_CHM_FEATURE(ON|OFF)
129888Sandreas@sandberg.pp.se#   DX_CHI_FEATURE(ON|OFF)
139888Sandreas@sandberg.pp.se#   DX_MAN_FEATURE(ON|OFF)
149888Sandreas@sandberg.pp.se#   DX_RTF_FEATURE(ON|OFF)
159888Sandreas@sandberg.pp.se#   DX_XML_FEATURE(ON|OFF)
169888Sandreas@sandberg.pp.se#   DX_PDF_FEATURE(ON|OFF)
179888Sandreas@sandberg.pp.se#   DX_PS_FEATURE(ON|OFF)
189888Sandreas@sandberg.pp.se#
199888Sandreas@sandberg.pp.se# DESCRIPTION
209888Sandreas@sandberg.pp.se#
219888Sandreas@sandberg.pp.se#   The DX_*_FEATURE macros control the default setting for the given
229888Sandreas@sandberg.pp.se#   Doxygen feature. Supported features are 'DOXYGEN' itself, 'DOT' for
239888Sandreas@sandberg.pp.se#   generating graphics, 'HTML' for plain HTML, 'CHM' for compressed HTML
249888Sandreas@sandberg.pp.se#   help (for MS users), 'CHI' for generating a seperate .chi file by the
259888Sandreas@sandberg.pp.se#   .chm file, and 'MAN', 'RTF', 'XML', 'PDF' and 'PS' for the appropriate
269888Sandreas@sandberg.pp.se#   output formats. The environment variable DOXYGEN_PAPER_SIZE may be
279888Sandreas@sandberg.pp.se#   specified to override the default 'a4wide' paper size.
289888Sandreas@sandberg.pp.se#
299888Sandreas@sandberg.pp.se#   By default, HTML, PDF and PS documentation is generated as this seems to
309888Sandreas@sandberg.pp.se#   be the most popular and portable combination. MAN pages created by
319888Sandreas@sandberg.pp.se#   Doxygen are usually problematic, though by picking an appropriate subset
329888Sandreas@sandberg.pp.se#   and doing some massaging they might be better than nothing. CHM and RTF
339888Sandreas@sandberg.pp.se#   are specific for MS (note that you can't generate both HTML and CHM at
349888Sandreas@sandberg.pp.se#   the same time). The XML is rather useless unless you apply specialized
359888Sandreas@sandberg.pp.se#   post-processing to it.
369888Sandreas@sandberg.pp.se#
379888Sandreas@sandberg.pp.se#   The macros mainly control the default state of the feature. The use can
389888Sandreas@sandberg.pp.se#   override the default by specifying --enable or --disable. The macros
399888Sandreas@sandberg.pp.se#   ensure that contradictory flags are not given (e.g.,
409888Sandreas@sandberg.pp.se#   --enable-doxygen-html and --enable-doxygen-chm,
419888Sandreas@sandberg.pp.se#   --enable-doxygen-anything with --disable-doxygen, etc.) Finally, each
429888Sandreas@sandberg.pp.se#   feature will be automatically disabled (with a warning) if the required
439888Sandreas@sandberg.pp.se#   programs are missing.
449888Sandreas@sandberg.pp.se#
459888Sandreas@sandberg.pp.se#   Once all the feature defaults have been specified, call DX_INIT_DOXYGEN
469888Sandreas@sandberg.pp.se#   with the following parameters: a one-word name for the project for use
479888Sandreas@sandberg.pp.se#   as a filename base etc., an optional configuration file name (the
489888Sandreas@sandberg.pp.se#   default is 'Doxyfile', the same as Doxygen's default), and an optional
499888Sandreas@sandberg.pp.se#   output directory name (the default is 'doxygen-doc').
509888Sandreas@sandberg.pp.se#
519888Sandreas@sandberg.pp.se#   Automake Support
529888Sandreas@sandberg.pp.se#
539888Sandreas@sandberg.pp.se#   The following is a template aminclude.am file for use with Automake.
549888Sandreas@sandberg.pp.se#   Make targets and variables values are controlled by the various
559888Sandreas@sandberg.pp.se#   DX_COND_* conditionals set by autoconf.
569888Sandreas@sandberg.pp.se#
579888Sandreas@sandberg.pp.se#   The provided targets are:
589888Sandreas@sandberg.pp.se#
599888Sandreas@sandberg.pp.se#     doxygen-doc: Generate all doxygen documentation.
609888Sandreas@sandberg.pp.se#
619888Sandreas@sandberg.pp.se#     doxygen-run: Run doxygen, which will generate some of the
629888Sandreas@sandberg.pp.se#                  documentation (HTML, CHM, CHI, MAN, RTF, XML)
639888Sandreas@sandberg.pp.se#                  but will not do the post processing required
649888Sandreas@sandberg.pp.se#                  for the rest of it (PS, PDF, and some MAN).
659888Sandreas@sandberg.pp.se#
669888Sandreas@sandberg.pp.se#     doxygen-man: Rename some doxygen generated man pages.
679888Sandreas@sandberg.pp.se#
689888Sandreas@sandberg.pp.se#     doxygen-ps:  Generate doxygen PostScript documentation.
699888Sandreas@sandberg.pp.se#
709888Sandreas@sandberg.pp.se#     doxygen-pdf: Generate doxygen PDF documentation.
719888Sandreas@sandberg.pp.se#
729888Sandreas@sandberg.pp.se#   Note that by default these are not integrated into the automake targets.
739888Sandreas@sandberg.pp.se#   If doxygen is used to generate man pages, you can achieve this
749888Sandreas@sandberg.pp.se#   integration by setting man3_MANS to the list of man pages generated and
759888Sandreas@sandberg.pp.se#   then adding the dependency:
769888Sandreas@sandberg.pp.se#
779888Sandreas@sandberg.pp.se#     $(man3_MANS): doxygen-doc
789888Sandreas@sandberg.pp.se#
799888Sandreas@sandberg.pp.se#   This will cause make to run doxygen and generate all the documentation.
809888Sandreas@sandberg.pp.se#
819888Sandreas@sandberg.pp.se#   The following variable is intended for use in Makefile.am:
829888Sandreas@sandberg.pp.se#
839888Sandreas@sandberg.pp.se#     DX_CLEANFILES = everything to clean.
849888Sandreas@sandberg.pp.se#
859888Sandreas@sandberg.pp.se#   Then add this variable to MOSTLYCLEANFILES.
869888Sandreas@sandberg.pp.se#
879888Sandreas@sandberg.pp.se#     ----- begin aminclude.am -------------------------------------
889888Sandreas@sandberg.pp.se#
899888Sandreas@sandberg.pp.se#     ## --------------------------------- ##
909888Sandreas@sandberg.pp.se#     ## Format-independent Doxygen rules. ##
919888Sandreas@sandberg.pp.se#     ## --------------------------------- ##
929888Sandreas@sandberg.pp.se#
939888Sandreas@sandberg.pp.se#     if DX_COND_doc
949888Sandreas@sandberg.pp.se#
959888Sandreas@sandberg.pp.se#     ## ------------------------------- ##
969888Sandreas@sandberg.pp.se#     ## Rules specific for HTML output. ##
979888Sandreas@sandberg.pp.se#     ## ------------------------------- ##
989888Sandreas@sandberg.pp.se#
999888Sandreas@sandberg.pp.se#     if DX_COND_html
1009888Sandreas@sandberg.pp.se#
1019888Sandreas@sandberg.pp.se#     DX_CLEAN_HTML = @DX_DOCDIR@/html
1029888Sandreas@sandberg.pp.se#
1039888Sandreas@sandberg.pp.se#     endif DX_COND_html
1049888Sandreas@sandberg.pp.se#
1059888Sandreas@sandberg.pp.se#     ## ------------------------------ ##
1069888Sandreas@sandberg.pp.se#     ## Rules specific for CHM output. ##
1079888Sandreas@sandberg.pp.se#     ## ------------------------------ ##
1089888Sandreas@sandberg.pp.se#
1099888Sandreas@sandberg.pp.se#     if DX_COND_chm
1109888Sandreas@sandberg.pp.se#
1119888Sandreas@sandberg.pp.se#     DX_CLEAN_CHM = @DX_DOCDIR@/chm
1129888Sandreas@sandberg.pp.se#
1139888Sandreas@sandberg.pp.se#     if DX_COND_chi
1149888Sandreas@sandberg.pp.se#
1159888Sandreas@sandberg.pp.se#     DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi
1169888Sandreas@sandberg.pp.se#
1179888Sandreas@sandberg.pp.se#     endif DX_COND_chi
1189888Sandreas@sandberg.pp.se#
1199888Sandreas@sandberg.pp.se#     endif DX_COND_chm
1209888Sandreas@sandberg.pp.se#
1219888Sandreas@sandberg.pp.se#     ## ------------------------------ ##
1229888Sandreas@sandberg.pp.se#     ## Rules specific for MAN output. ##
1239888Sandreas@sandberg.pp.se#     ## ------------------------------ ##
1249888Sandreas@sandberg.pp.se#
1259888Sandreas@sandberg.pp.se#     if DX_COND_man
1269888Sandreas@sandberg.pp.se#
1279888Sandreas@sandberg.pp.se#     DX_CLEAN_MAN = @DX_DOCDIR@/man
1289888Sandreas@sandberg.pp.se#
1299888Sandreas@sandberg.pp.se#     endif DX_COND_man
1309888Sandreas@sandberg.pp.se#
1319888Sandreas@sandberg.pp.se#     ## ------------------------------ ##
1329888Sandreas@sandberg.pp.se#     ## Rules specific for RTF output. ##
1339888Sandreas@sandberg.pp.se#     ## ------------------------------ ##
1349888Sandreas@sandberg.pp.se#
1359888Sandreas@sandberg.pp.se#     if DX_COND_rtf
1369888Sandreas@sandberg.pp.se#
1379888Sandreas@sandberg.pp.se#     DX_CLEAN_RTF = @DX_DOCDIR@/rtf
1389888Sandreas@sandberg.pp.se#
1399888Sandreas@sandberg.pp.se#     endif DX_COND_rtf
1409888Sandreas@sandberg.pp.se#
1419888Sandreas@sandberg.pp.se#     ## ------------------------------ ##
1429888Sandreas@sandberg.pp.se#     ## Rules specific for XML output. ##
1439888Sandreas@sandberg.pp.se#     ## ------------------------------ ##
1449888Sandreas@sandberg.pp.se#
1459888Sandreas@sandberg.pp.se#     if DX_COND_xml
1469888Sandreas@sandberg.pp.se#
1479888Sandreas@sandberg.pp.se#     DX_CLEAN_XML = @DX_DOCDIR@/xml
1489888Sandreas@sandberg.pp.se#
1499888Sandreas@sandberg.pp.se#     endif DX_COND_xml
1509888Sandreas@sandberg.pp.se#
1519888Sandreas@sandberg.pp.se#     ## ----------------------------- ##
1529888Sandreas@sandberg.pp.se#     ## Rules specific for PS output. ##
1539888Sandreas@sandberg.pp.se#     ## ----------------------------- ##
1549888Sandreas@sandberg.pp.se#
1559888Sandreas@sandberg.pp.se#     if DX_COND_ps
1569888Sandreas@sandberg.pp.se#
1579888Sandreas@sandberg.pp.se#     DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps
1589888Sandreas@sandberg.pp.se#
1599888Sandreas@sandberg.pp.se#     DX_PS_GOAL = doxygen-ps
1609888Sandreas@sandberg.pp.se#
1619888Sandreas@sandberg.pp.se#     doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps
1629888Sandreas@sandberg.pp.se#
1639888Sandreas@sandberg.pp.se#     @DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag
1649888Sandreas@sandberg.pp.se#         cd @DX_DOCDIR@/latex; \
1659888Sandreas@sandberg.pp.se#         rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
1669888Sandreas@sandberg.pp.se#         $(DX_LATEX) refman.tex; \
1679888Sandreas@sandberg.pp.se#         $(MAKEINDEX_PATH) refman.idx; \
1689888Sandreas@sandberg.pp.se#         $(DX_LATEX) refman.tex; \
1699888Sandreas@sandberg.pp.se#         countdown=5; \
1709888Sandreas@sandberg.pp.se#         while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \
1719888Sandreas@sandberg.pp.se#                           refman.log > /dev/null 2>&1 \
1729888Sandreas@sandberg.pp.se#            && test $$countdown -gt 0; do \
1739888Sandreas@sandberg.pp.se#             $(DX_LATEX) refman.tex; \
1749888Sandreas@sandberg.pp.se#             countdown=`expr $$countdown - 1`; \
1759888Sandreas@sandberg.pp.se#         done; \
1769888Sandreas@sandberg.pp.se#         $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi
1779888Sandreas@sandberg.pp.se#
1789888Sandreas@sandberg.pp.se#     endif DX_COND_ps
1799888Sandreas@sandberg.pp.se#
1809888Sandreas@sandberg.pp.se#     ## ------------------------------ ##
1819888Sandreas@sandberg.pp.se#     ## Rules specific for PDF output. ##
1829888Sandreas@sandberg.pp.se#     ## ------------------------------ ##
1839888Sandreas@sandberg.pp.se#
1849888Sandreas@sandberg.pp.se#     if DX_COND_pdf
1859888Sandreas@sandberg.pp.se#
1869888Sandreas@sandberg.pp.se#     DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf
1879888Sandreas@sandberg.pp.se#
1889888Sandreas@sandberg.pp.se#     DX_PDF_GOAL = doxygen-pdf
1899888Sandreas@sandberg.pp.se#
1909888Sandreas@sandberg.pp.se#     doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf
1919888Sandreas@sandberg.pp.se#
1929888Sandreas@sandberg.pp.se#     @DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag
1939888Sandreas@sandberg.pp.se#         cd @DX_DOCDIR@/latex; \
1949888Sandreas@sandberg.pp.se#         rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
1959888Sandreas@sandberg.pp.se#         $(DX_PDFLATEX) refman.tex; \
1969888Sandreas@sandberg.pp.se#         $(DX_MAKEINDEX) refman.idx; \
1979888Sandreas@sandberg.pp.se#         $(DX_PDFLATEX) refman.tex; \
1989888Sandreas@sandberg.pp.se#         countdown=5; \
1999888Sandreas@sandberg.pp.se#         while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \
2009888Sandreas@sandberg.pp.se#                           refman.log > /dev/null 2>&1 \
2019888Sandreas@sandberg.pp.se#            && test $$countdown -gt 0; do \
2029888Sandreas@sandberg.pp.se#             $(DX_PDFLATEX) refman.tex; \
2039888Sandreas@sandberg.pp.se#             countdown=`expr $$countdown - 1`; \
2049888Sandreas@sandberg.pp.se#         done; \
2059888Sandreas@sandberg.pp.se#         mv refman.pdf ../@PACKAGE@.pdf
2069888Sandreas@sandberg.pp.se#
2079888Sandreas@sandberg.pp.se#     endif DX_COND_pdf
2089888Sandreas@sandberg.pp.se#
2099888Sandreas@sandberg.pp.se#     ## ------------------------------------------------- ##
2109888Sandreas@sandberg.pp.se#     ## Rules specific for LaTeX (shared for PS and PDF). ##
2119888Sandreas@sandberg.pp.se#     ## ------------------------------------------------- ##
2129888Sandreas@sandberg.pp.se#
2139888Sandreas@sandberg.pp.se#     if DX_COND_latex
2149888Sandreas@sandberg.pp.se#
2159888Sandreas@sandberg.pp.se#     DX_CLEAN_LATEX = @DX_DOCDIR@/latex
2169888Sandreas@sandberg.pp.se#
2179888Sandreas@sandberg.pp.se#     endif DX_COND_latex
2189888Sandreas@sandberg.pp.se#
2199888Sandreas@sandberg.pp.se#     .PHONY: doxygen-run doxygen-doc $(DX_PS_GOAL) $(DX_PDF_GOAL)
2209888Sandreas@sandberg.pp.se#
2219888Sandreas@sandberg.pp.se#     .INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)
2229888Sandreas@sandberg.pp.se#
2239888Sandreas@sandberg.pp.se#     doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag
2249888Sandreas@sandberg.pp.se#
2259888Sandreas@sandberg.pp.se#     doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)
2269888Sandreas@sandberg.pp.se#
2279888Sandreas@sandberg.pp.se#     @DX_DOCDIR@/@PACKAGE@.tag: $(DX_CONFIG) $(pkginclude_HEADERS)
2289888Sandreas@sandberg.pp.se#         rm -rf @DX_DOCDIR@
2299888Sandreas@sandberg.pp.se#         $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG)
2309888Sandreas@sandberg.pp.se#
2319888Sandreas@sandberg.pp.se#     DX_CLEANFILES = \
2329888Sandreas@sandberg.pp.se#         @DX_DOCDIR@/@PACKAGE@.tag \
2339888Sandreas@sandberg.pp.se#         -r \
2349888Sandreas@sandberg.pp.se#         $(DX_CLEAN_HTML) \
2359888Sandreas@sandberg.pp.se#         $(DX_CLEAN_CHM) \
2369888Sandreas@sandberg.pp.se#         $(DX_CLEAN_CHI) \
2379888Sandreas@sandberg.pp.se#         $(DX_CLEAN_MAN) \
2389888Sandreas@sandberg.pp.se#         $(DX_CLEAN_RTF) \
2399888Sandreas@sandberg.pp.se#         $(DX_CLEAN_XML) \
2409888Sandreas@sandberg.pp.se#         $(DX_CLEAN_PS) \
2419888Sandreas@sandberg.pp.se#         $(DX_CLEAN_PDF) \
2429888Sandreas@sandberg.pp.se#         $(DX_CLEAN_LATEX)
2439888Sandreas@sandberg.pp.se#
2449888Sandreas@sandberg.pp.se#     endif DX_COND_doc
2459888Sandreas@sandberg.pp.se#
2469888Sandreas@sandberg.pp.se#     ----- end aminclude.am ---------------------------------------
2479888Sandreas@sandberg.pp.se#
2489888Sandreas@sandberg.pp.se# LICENSE
2499888Sandreas@sandberg.pp.se#
2509888Sandreas@sandberg.pp.se#   Copyright (c) 2009 Oren Ben-Kiki <oren@ben-kiki.org>
2519888Sandreas@sandberg.pp.se#
2529888Sandreas@sandberg.pp.se#   Copying and distribution of this file, with or without modification, are
2539888Sandreas@sandberg.pp.se#   permitted in any medium without royalty provided the copyright notice
2549888Sandreas@sandberg.pp.se#   and this notice are preserved. This file is offered as-is, without any
2559888Sandreas@sandberg.pp.se#   warranty.
2569888Sandreas@sandberg.pp.se
2579888Sandreas@sandberg.pp.se#serial 12
2589888Sandreas@sandberg.pp.se
2599888Sandreas@sandberg.pp.se## ----------##
2609888Sandreas@sandberg.pp.se## Defaults. ##
2619888Sandreas@sandberg.pp.se## ----------##
2629888Sandreas@sandberg.pp.se
2639888Sandreas@sandberg.pp.seDX_ENV=""
2649888Sandreas@sandberg.pp.seAC_DEFUN([DX_FEATURE_doc],  ON)
2659888Sandreas@sandberg.pp.seAC_DEFUN([DX_FEATURE_dot],  OFF)
2669888Sandreas@sandberg.pp.seAC_DEFUN([DX_FEATURE_man],  OFF)
2679888Sandreas@sandberg.pp.seAC_DEFUN([DX_FEATURE_html], ON)
2689888Sandreas@sandberg.pp.seAC_DEFUN([DX_FEATURE_chm],  OFF)
2699888Sandreas@sandberg.pp.seAC_DEFUN([DX_FEATURE_chi],  OFF)
2709888Sandreas@sandberg.pp.seAC_DEFUN([DX_FEATURE_rtf],  OFF)
2719888Sandreas@sandberg.pp.seAC_DEFUN([DX_FEATURE_xml],  OFF)
2729888Sandreas@sandberg.pp.seAC_DEFUN([DX_FEATURE_pdf],  ON)
2739888Sandreas@sandberg.pp.seAC_DEFUN([DX_FEATURE_ps],   ON)
2749888Sandreas@sandberg.pp.se
2759888Sandreas@sandberg.pp.se## --------------- ##
2769888Sandreas@sandberg.pp.se## Private macros. ##
2779888Sandreas@sandberg.pp.se## --------------- ##
2789888Sandreas@sandberg.pp.se
2799888Sandreas@sandberg.pp.se# DX_ENV_APPEND(VARIABLE, VALUE)
2809888Sandreas@sandberg.pp.se# ------------------------------
2819888Sandreas@sandberg.pp.se# Append VARIABLE="VALUE" to DX_ENV for invoking doxygen.
2829888Sandreas@sandberg.pp.seAC_DEFUN([DX_ENV_APPEND], [AC_SUBST([DX_ENV], ["$DX_ENV $1='$2'"])])
2839888Sandreas@sandberg.pp.se
2849888Sandreas@sandberg.pp.se# DX_DIRNAME_EXPR
2859888Sandreas@sandberg.pp.se# ---------------
2869888Sandreas@sandberg.pp.se# Expand into a shell expression prints the directory part of a path.
2879888Sandreas@sandberg.pp.seAC_DEFUN([DX_DIRNAME_EXPR],
2889888Sandreas@sandberg.pp.se         [[expr ".$1" : '\(\.\)[^/]*$' \| "x$1" : 'x\(.*\)/[^/]*$']])
2899888Sandreas@sandberg.pp.se
2909888Sandreas@sandberg.pp.se# DX_IF_FEATURE(FEATURE, IF-ON, IF-OFF)
2919888Sandreas@sandberg.pp.se# -------------------------------------
2929888Sandreas@sandberg.pp.se# Expands according to the M4 (static) status of the feature.
2939888Sandreas@sandberg.pp.seAC_DEFUN([DX_IF_FEATURE], [ifelse(DX_FEATURE_$1, ON, [$2], [$3])])
2949888Sandreas@sandberg.pp.se
2959888Sandreas@sandberg.pp.se# DX_REQUIRE_PROG(VARIABLE, PROGRAM)
2969888Sandreas@sandberg.pp.se# ----------------------------------
2979888Sandreas@sandberg.pp.se# Require the specified program to be found for the DX_CURRENT_FEATURE to work.
2989888Sandreas@sandberg.pp.seAC_DEFUN([DX_REQUIRE_PROG], [
2999888Sandreas@sandberg.pp.seAC_PATH_TOOL([$1], [$2])
3009888Sandreas@sandberg.pp.seif test "$DX_FLAG_[]DX_CURRENT_FEATURE$$1" = 1; then
3019888Sandreas@sandberg.pp.se    AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION])
3029888Sandreas@sandberg.pp.se    AC_SUBST(DX_FLAG_[]DX_CURRENT_FEATURE, 0)
3039888Sandreas@sandberg.pp.sefi
3049888Sandreas@sandberg.pp.se])
3059888Sandreas@sandberg.pp.se
3069888Sandreas@sandberg.pp.se# DX_TEST_FEATURE(FEATURE)
3079888Sandreas@sandberg.pp.se# ------------------------
3089888Sandreas@sandberg.pp.se# Expand to a shell expression testing whether the feature is active.
3099888Sandreas@sandberg.pp.seAC_DEFUN([DX_TEST_FEATURE], [test "$DX_FLAG_$1" = 1])
3109888Sandreas@sandberg.pp.se
3119888Sandreas@sandberg.pp.se# DX_CHECK_DEPEND(REQUIRED_FEATURE, REQUIRED_STATE)
3129888Sandreas@sandberg.pp.se# -------------------------------------------------
3139888Sandreas@sandberg.pp.se# Verify that a required features has the right state before trying to turn on
3149888Sandreas@sandberg.pp.se# the DX_CURRENT_FEATURE.
3159888Sandreas@sandberg.pp.seAC_DEFUN([DX_CHECK_DEPEND], [
3169888Sandreas@sandberg.pp.setest "$DX_FLAG_$1" = "$2" \
3179888Sandreas@sandberg.pp.se|| AC_MSG_ERROR([doxygen-DX_CURRENT_FEATURE ifelse([$2], 1,
3189888Sandreas@sandberg.pp.se                            requires, contradicts) doxygen-DX_CURRENT_FEATURE])
3199888Sandreas@sandberg.pp.se])
3209888Sandreas@sandberg.pp.se
3219888Sandreas@sandberg.pp.se# DX_CLEAR_DEPEND(FEATURE, REQUIRED_FEATURE, REQUIRED_STATE)
3229888Sandreas@sandberg.pp.se# ----------------------------------------------------------
3239888Sandreas@sandberg.pp.se# Turn off the DX_CURRENT_FEATURE if the required feature is off.
3249888Sandreas@sandberg.pp.seAC_DEFUN([DX_CLEAR_DEPEND], [
3259888Sandreas@sandberg.pp.setest "$DX_FLAG_$1" = "$2" || AC_SUBST(DX_FLAG_[]DX_CURRENT_FEATURE, 0)
3269888Sandreas@sandberg.pp.se])
3279888Sandreas@sandberg.pp.se
3289888Sandreas@sandberg.pp.se# DX_FEATURE_ARG(FEATURE, DESCRIPTION,
3299888Sandreas@sandberg.pp.se#                CHECK_DEPEND, CLEAR_DEPEND,
3309888Sandreas@sandberg.pp.se#                REQUIRE, DO-IF-ON, DO-IF-OFF)
3319888Sandreas@sandberg.pp.se# --------------------------------------------
3329888Sandreas@sandberg.pp.se# Parse the command-line option controlling a feature. CHECK_DEPEND is called
3339888Sandreas@sandberg.pp.se# if the user explicitly turns the feature on (and invokes DX_CHECK_DEPEND),
3349888Sandreas@sandberg.pp.se# otherwise CLEAR_DEPEND is called to turn off the default state if a required
3359888Sandreas@sandberg.pp.se# feature is disabled (using DX_CLEAR_DEPEND). REQUIRE performs additional
3369888Sandreas@sandberg.pp.se# requirement tests (DX_REQUIRE_PROG). Finally, an automake flag is set and
3379888Sandreas@sandberg.pp.se# DO-IF-ON or DO-IF-OFF are called according to the final state of the feature.
3389888Sandreas@sandberg.pp.seAC_DEFUN([DX_ARG_ABLE], [
3399888Sandreas@sandberg.pp.se    AC_DEFUN([DX_CURRENT_FEATURE], [$1])
3409888Sandreas@sandberg.pp.se    AC_DEFUN([DX_CURRENT_DESCRIPTION], [$2])
3419888Sandreas@sandberg.pp.se    AC_ARG_ENABLE(doxygen-$1,
3429888Sandreas@sandberg.pp.se                  [AS_HELP_STRING(DX_IF_FEATURE([$1], [--disable-doxygen-$1],
3439888Sandreas@sandberg.pp.se                                                      [--enable-doxygen-$1]),
3449888Sandreas@sandberg.pp.se                                  DX_IF_FEATURE([$1], [don't $2], [$2]))],
3459888Sandreas@sandberg.pp.se                  [
3469888Sandreas@sandberg.pp.secase "$enableval" in
3479888Sandreas@sandberg.pp.se#(
3489888Sandreas@sandberg.pp.sey|Y|yes|Yes|YES)
3499888Sandreas@sandberg.pp.se    AC_SUBST([DX_FLAG_$1], 1)
3509888Sandreas@sandberg.pp.se    $3
3519888Sandreas@sandberg.pp.se;; #(
3529888Sandreas@sandberg.pp.sen|N|no|No|NO)
3539888Sandreas@sandberg.pp.se    AC_SUBST([DX_FLAG_$1], 0)
3549888Sandreas@sandberg.pp.se;; #(
3559888Sandreas@sandberg.pp.se*)
3569888Sandreas@sandberg.pp.se    AC_MSG_ERROR([invalid value '$enableval' given to doxygen-$1])
3579888Sandreas@sandberg.pp.se;;
3589888Sandreas@sandberg.pp.seesac
3599888Sandreas@sandberg.pp.se], [
3609888Sandreas@sandberg.pp.seAC_SUBST([DX_FLAG_$1], [DX_IF_FEATURE([$1], 1, 0)])
3619888Sandreas@sandberg.pp.se$4
3629888Sandreas@sandberg.pp.se])
3639888Sandreas@sandberg.pp.seif DX_TEST_FEATURE([$1]); then
3649888Sandreas@sandberg.pp.se    $5
3659888Sandreas@sandberg.pp.se    :
3669888Sandreas@sandberg.pp.sefi
3679888Sandreas@sandberg.pp.seAM_CONDITIONAL(DX_COND_$1, DX_TEST_FEATURE([$1]))
3689888Sandreas@sandberg.pp.seif DX_TEST_FEATURE([$1]); then
3699888Sandreas@sandberg.pp.se    $6
3709888Sandreas@sandberg.pp.se    :
3719888Sandreas@sandberg.pp.seelse
3729888Sandreas@sandberg.pp.se    $7
3739888Sandreas@sandberg.pp.se    :
3749888Sandreas@sandberg.pp.sefi
3759888Sandreas@sandberg.pp.se])
3769888Sandreas@sandberg.pp.se
3779888Sandreas@sandberg.pp.se## -------------- ##
3789888Sandreas@sandberg.pp.se## Public macros. ##
3799888Sandreas@sandberg.pp.se## -------------- ##
3809888Sandreas@sandberg.pp.se
3819888Sandreas@sandberg.pp.se# DX_XXX_FEATURE(DEFAULT_STATE)
3829888Sandreas@sandberg.pp.se# -----------------------------
3839888Sandreas@sandberg.pp.seAC_DEFUN([DX_DOXYGEN_FEATURE], [AC_DEFUN([DX_FEATURE_doc],  [$1])])
3849888Sandreas@sandberg.pp.seAC_DEFUN([DX_DOT_FEATURE],     [AC_DEFUN([DX_FEATURE_dot], [$1])])
3859888Sandreas@sandberg.pp.seAC_DEFUN([DX_MAN_FEATURE],     [AC_DEFUN([DX_FEATURE_man],  [$1])])
3869888Sandreas@sandberg.pp.seAC_DEFUN([DX_HTML_FEATURE],    [AC_DEFUN([DX_FEATURE_html], [$1])])
3879888Sandreas@sandberg.pp.seAC_DEFUN([DX_CHM_FEATURE],     [AC_DEFUN([DX_FEATURE_chm],  [$1])])
3889888Sandreas@sandberg.pp.seAC_DEFUN([DX_CHI_FEATURE],     [AC_DEFUN([DX_FEATURE_chi],  [$1])])
3899888Sandreas@sandberg.pp.seAC_DEFUN([DX_RTF_FEATURE],     [AC_DEFUN([DX_FEATURE_rtf],  [$1])])
3909888Sandreas@sandberg.pp.seAC_DEFUN([DX_XML_FEATURE],     [AC_DEFUN([DX_FEATURE_xml],  [$1])])
3919888Sandreas@sandberg.pp.seAC_DEFUN([DX_XML_FEATURE],     [AC_DEFUN([DX_FEATURE_xml],  [$1])])
3929888Sandreas@sandberg.pp.seAC_DEFUN([DX_PDF_FEATURE],     [AC_DEFUN([DX_FEATURE_pdf],  [$1])])
3939888Sandreas@sandberg.pp.seAC_DEFUN([DX_PS_FEATURE],      [AC_DEFUN([DX_FEATURE_ps],   [$1])])
3949888Sandreas@sandberg.pp.se
3959888Sandreas@sandberg.pp.se# DX_INIT_DOXYGEN(PROJECT, [CONFIG-FILE], [OUTPUT-DOC-DIR])
3969888Sandreas@sandberg.pp.se# ---------------------------------------------------------
3979888Sandreas@sandberg.pp.se# PROJECT also serves as the base name for the documentation files.
3989888Sandreas@sandberg.pp.se# The default CONFIG-FILE is "Doxyfile" and OUTPUT-DOC-DIR is "doxygen-doc".
3999888Sandreas@sandberg.pp.seAC_DEFUN([DX_INIT_DOXYGEN], [
4009888Sandreas@sandberg.pp.se
4019888Sandreas@sandberg.pp.se# Files:
4029888Sandreas@sandberg.pp.seAC_SUBST([DX_PROJECT], [$1])
4039888Sandreas@sandberg.pp.seAC_SUBST([DX_CONFIG], [ifelse([$2], [], Doxyfile, [$2])])
4049888Sandreas@sandberg.pp.seAC_SUBST([DX_DOCDIR], [ifelse([$3], [], doxygen-doc, [$3])])
4059888Sandreas@sandberg.pp.se
4069888Sandreas@sandberg.pp.se# Environment variables used inside doxygen.cfg:
4079888Sandreas@sandberg.pp.seDX_ENV_APPEND(SRCDIR, $srcdir)
4089888Sandreas@sandberg.pp.seDX_ENV_APPEND(PROJECT, $DX_PROJECT)
4099888Sandreas@sandberg.pp.seDX_ENV_APPEND(DOCDIR, $DX_DOCDIR)
4109888Sandreas@sandberg.pp.seDX_ENV_APPEND(VERSION, $PACKAGE_VERSION)
4119888Sandreas@sandberg.pp.se
4129888Sandreas@sandberg.pp.se# Doxygen itself:
4139888Sandreas@sandberg.pp.seDX_ARG_ABLE(doc, [generate any doxygen documentation],
4149888Sandreas@sandberg.pp.se            [],
4159888Sandreas@sandberg.pp.se            [],
4169888Sandreas@sandberg.pp.se            [DX_REQUIRE_PROG([DX_DOXYGEN], doxygen)
4179888Sandreas@sandberg.pp.se             DX_REQUIRE_PROG([DX_PERL], perl)],
4189888Sandreas@sandberg.pp.se            [DX_ENV_APPEND(PERL_PATH, $DX_PERL)])
4199888Sandreas@sandberg.pp.se
4209888Sandreas@sandberg.pp.se# Dot for graphics:
4219888Sandreas@sandberg.pp.seDX_ARG_ABLE(dot, [generate graphics for doxygen documentation],
4229888Sandreas@sandberg.pp.se            [DX_CHECK_DEPEND(doc, 1)],
4239888Sandreas@sandberg.pp.se            [DX_CLEAR_DEPEND(doc, 1)],
4249888Sandreas@sandberg.pp.se            [DX_REQUIRE_PROG([DX_DOT], dot)],
4259888Sandreas@sandberg.pp.se            [DX_ENV_APPEND(HAVE_DOT, YES)
4269888Sandreas@sandberg.pp.se             DX_ENV_APPEND(DOT_PATH, [`DX_DIRNAME_EXPR($DX_DOT)`])],
4279888Sandreas@sandberg.pp.se            [DX_ENV_APPEND(HAVE_DOT, NO)])
4289888Sandreas@sandberg.pp.se
4299888Sandreas@sandberg.pp.se# Man pages generation:
4309888Sandreas@sandberg.pp.seDX_ARG_ABLE(man, [generate doxygen manual pages],
4319888Sandreas@sandberg.pp.se            [DX_CHECK_DEPEND(doc, 1)],
4329888Sandreas@sandberg.pp.se            [DX_CLEAR_DEPEND(doc, 1)],
4339888Sandreas@sandberg.pp.se            [],
4349888Sandreas@sandberg.pp.se            [DX_ENV_APPEND(GENERATE_MAN, YES)],
4359888Sandreas@sandberg.pp.se            [DX_ENV_APPEND(GENERATE_MAN, NO)])
4369888Sandreas@sandberg.pp.se
4379888Sandreas@sandberg.pp.se# RTF file generation:
4389888Sandreas@sandberg.pp.seDX_ARG_ABLE(rtf, [generate doxygen RTF documentation],
4399888Sandreas@sandberg.pp.se            [DX_CHECK_DEPEND(doc, 1)],
4409888Sandreas@sandberg.pp.se            [DX_CLEAR_DEPEND(doc, 1)],
4419888Sandreas@sandberg.pp.se            [],
4429888Sandreas@sandberg.pp.se            [DX_ENV_APPEND(GENERATE_RTF, YES)],
4439888Sandreas@sandberg.pp.se            [DX_ENV_APPEND(GENERATE_RTF, NO)])
4449888Sandreas@sandberg.pp.se
4459888Sandreas@sandberg.pp.se# XML file generation:
4469888Sandreas@sandberg.pp.seDX_ARG_ABLE(xml, [generate doxygen XML documentation],
4479888Sandreas@sandberg.pp.se            [DX_CHECK_DEPEND(doc, 1)],
4489888Sandreas@sandberg.pp.se            [DX_CLEAR_DEPEND(doc, 1)],
4499888Sandreas@sandberg.pp.se            [],
4509888Sandreas@sandberg.pp.se            [DX_ENV_APPEND(GENERATE_XML, YES)],
4519888Sandreas@sandberg.pp.se            [DX_ENV_APPEND(GENERATE_XML, NO)])
4529888Sandreas@sandberg.pp.se
4539888Sandreas@sandberg.pp.se# (Compressed) HTML help generation:
4549888Sandreas@sandberg.pp.seDX_ARG_ABLE(chm, [generate doxygen compressed HTML help documentation],
4559888Sandreas@sandberg.pp.se            [DX_CHECK_DEPEND(doc, 1)],
4569888Sandreas@sandberg.pp.se            [DX_CLEAR_DEPEND(doc, 1)],
4579888Sandreas@sandberg.pp.se            [DX_REQUIRE_PROG([DX_HHC], hhc)],
4589888Sandreas@sandberg.pp.se            [DX_ENV_APPEND(HHC_PATH, $DX_HHC)
4599888Sandreas@sandberg.pp.se             DX_ENV_APPEND(GENERATE_HTML, YES)
4609888Sandreas@sandberg.pp.se             DX_ENV_APPEND(GENERATE_HTMLHELP, YES)],
4619888Sandreas@sandberg.pp.se            [DX_ENV_APPEND(GENERATE_HTMLHELP, NO)])
4629888Sandreas@sandberg.pp.se
4639888Sandreas@sandberg.pp.se# Seperate CHI file generation.
4649888Sandreas@sandberg.pp.seDX_ARG_ABLE(chi, [generate doxygen seperate compressed HTML help index file],
4659888Sandreas@sandberg.pp.se            [DX_CHECK_DEPEND(chm, 1)],
4669888Sandreas@sandberg.pp.se            [DX_CLEAR_DEPEND(chm, 1)],
4679888Sandreas@sandberg.pp.se            [],
4689888Sandreas@sandberg.pp.se            [DX_ENV_APPEND(GENERATE_CHI, YES)],
4699888Sandreas@sandberg.pp.se            [DX_ENV_APPEND(GENERATE_CHI, NO)])
4709888Sandreas@sandberg.pp.se
4719888Sandreas@sandberg.pp.se# Plain HTML pages generation:
4729888Sandreas@sandberg.pp.seDX_ARG_ABLE(html, [generate doxygen plain HTML documentation],
4739888Sandreas@sandberg.pp.se            [DX_CHECK_DEPEND(doc, 1) DX_CHECK_DEPEND(chm, 0)],
4749888Sandreas@sandberg.pp.se            [DX_CLEAR_DEPEND(doc, 1) DX_CLEAR_DEPEND(chm, 0)],
4759888Sandreas@sandberg.pp.se            [],
4769888Sandreas@sandberg.pp.se            [DX_ENV_APPEND(GENERATE_HTML, YES)],
4779888Sandreas@sandberg.pp.se            [DX_TEST_FEATURE(chm) || DX_ENV_APPEND(GENERATE_HTML, NO)])
4789888Sandreas@sandberg.pp.se
4799888Sandreas@sandberg.pp.se# PostScript file generation:
4809888Sandreas@sandberg.pp.seDX_ARG_ABLE(ps, [generate doxygen PostScript documentation],
4819888Sandreas@sandberg.pp.se            [DX_CHECK_DEPEND(doc, 1)],
4829888Sandreas@sandberg.pp.se            [DX_CLEAR_DEPEND(doc, 1)],
4839888Sandreas@sandberg.pp.se            [DX_REQUIRE_PROG([DX_LATEX], latex)
4849888Sandreas@sandberg.pp.se             DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex)
4859888Sandreas@sandberg.pp.se             DX_REQUIRE_PROG([DX_DVIPS], dvips)
4869888Sandreas@sandberg.pp.se             DX_REQUIRE_PROG([DX_EGREP], egrep)])
4879888Sandreas@sandberg.pp.se
4889888Sandreas@sandberg.pp.se# PDF file generation:
4899888Sandreas@sandberg.pp.seDX_ARG_ABLE(pdf, [generate doxygen PDF documentation],
4909888Sandreas@sandberg.pp.se            [DX_CHECK_DEPEND(doc, 1)],
4919888Sandreas@sandberg.pp.se            [DX_CLEAR_DEPEND(doc, 1)],
4929888Sandreas@sandberg.pp.se            [DX_REQUIRE_PROG([DX_PDFLATEX], pdflatex)
4939888Sandreas@sandberg.pp.se             DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex)
4949888Sandreas@sandberg.pp.se             DX_REQUIRE_PROG([DX_EGREP], egrep)])
4959888Sandreas@sandberg.pp.se
4969888Sandreas@sandberg.pp.se# LaTeX generation for PS and/or PDF:
4979888Sandreas@sandberg.pp.seAM_CONDITIONAL(DX_COND_latex, DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf))
4989888Sandreas@sandberg.pp.seif DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf); then
4999888Sandreas@sandberg.pp.se    DX_ENV_APPEND(GENERATE_LATEX, YES)
5009888Sandreas@sandberg.pp.seelse
5019888Sandreas@sandberg.pp.se    DX_ENV_APPEND(GENERATE_LATEX, NO)
5029888Sandreas@sandberg.pp.sefi
5039888Sandreas@sandberg.pp.se
5049888Sandreas@sandberg.pp.se# Paper size for PS and/or PDF:
5059888Sandreas@sandberg.pp.seAC_ARG_VAR(DOXYGEN_PAPER_SIZE,
5069888Sandreas@sandberg.pp.se           [a4wide (default), a4, letter, legal or executive])
5079888Sandreas@sandberg.pp.secase "$DOXYGEN_PAPER_SIZE" in
5089888Sandreas@sandberg.pp.se#(
5099888Sandreas@sandberg.pp.se"")
5109888Sandreas@sandberg.pp.se    AC_SUBST(DOXYGEN_PAPER_SIZE, "")
5119888Sandreas@sandberg.pp.se;; #(
5129888Sandreas@sandberg.pp.sea4wide|a4|letter|legal|executive)
5139888Sandreas@sandberg.pp.se    DX_ENV_APPEND(PAPER_SIZE, $DOXYGEN_PAPER_SIZE)
5149888Sandreas@sandberg.pp.se;; #(
5159888Sandreas@sandberg.pp.se*)
5169888Sandreas@sandberg.pp.se    AC_MSG_ERROR([unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'])
5179888Sandreas@sandberg.pp.se;;
5189888Sandreas@sandberg.pp.seesac
5199888Sandreas@sandberg.pp.se
5209888Sandreas@sandberg.pp.se#For debugging:
5219888Sandreas@sandberg.pp.se#echo DX_FLAG_doc=$DX_FLAG_doc
5229888Sandreas@sandberg.pp.se#echo DX_FLAG_dot=$DX_FLAG_dot
5239888Sandreas@sandberg.pp.se#echo DX_FLAG_man=$DX_FLAG_man
5249888Sandreas@sandberg.pp.se#echo DX_FLAG_html=$DX_FLAG_html
5259888Sandreas@sandberg.pp.se#echo DX_FLAG_chm=$DX_FLAG_chm
5269888Sandreas@sandberg.pp.se#echo DX_FLAG_chi=$DX_FLAG_chi
5279888Sandreas@sandberg.pp.se#echo DX_FLAG_rtf=$DX_FLAG_rtf
5289888Sandreas@sandberg.pp.se#echo DX_FLAG_xml=$DX_FLAG_xml
5299888Sandreas@sandberg.pp.se#echo DX_FLAG_pdf=$DX_FLAG_pdf
5309888Sandreas@sandberg.pp.se#echo DX_FLAG_ps=$DX_FLAG_ps
5319888Sandreas@sandberg.pp.se#echo DX_ENV=$DX_ENV
5329888Sandreas@sandberg.pp.se])
533