Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • m4/ac_doxygen.m4

    • Property mode changed from 120000 to 100644
    ra19da5d rcc2ee5  
    1 ../../m4/ac_doxygen.m4
     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
     42DX_ENV=""
     43AC_DEFUN([DX_FEATURE_doc],  ON)
     44AC_DEFUN([DX_FEATURE_dot],  ON)
     45AC_DEFUN([DX_FEATURE_man],  OFF)
     46AC_DEFUN([DX_FEATURE_html], ON)
     47AC_DEFUN([DX_FEATURE_chm],  OFF)
     48AC_DEFUN([DX_FEATURE_chi],  OFF)
     49AC_DEFUN([DX_FEATURE_rtf],  OFF)
     50AC_DEFUN([DX_FEATURE_xml],  OFF)
     51AC_DEFUN([DX_FEATURE_pdf],  ON)
     52AC_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.
     61AC_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.
     66AC_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.
     72AC_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.
     77AC_DEFUN([DX_REQUIRE_PROG], [
     78AC_PATH_TOOL([$1], [$2])
     79if 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)
     82fi
     83])
     84
     85# DX_TEST_FEATURE(FEATURE)
     86# ------------------------
     87# Expand to a shell expression testing whether the feature is active.
     88AC_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.
     94AC_DEFUN([DX_CHECK_DEPEND], [
     95test "$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.
     103AC_DEFUN([DX_CLEAR_DEPEND], [
     104test "$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.
     117AC_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                  [
     125case "$enableval" in
     126#(
     127y|Y|yes|Yes|YES)
     128    AC_SUBST([DX_FLAG_$1], 1)
     129    $3
     130;; #(
     131n|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;;
     137esac
     138], [
     139AC_SUBST([DX_FLAG_$1], [DX_IF_FEATURE([$1], 1, 0)])
     140$4
     141])
     142if DX_TEST_FEATURE([$1]); then
     143    $5
     144    :
     145fi
     146if DX_TEST_FEATURE([$1]); then
     147    AM_CONDITIONAL(DX_COND_$1, :)
     148    $6
     149    :
     150else
     151    AM_CONDITIONAL(DX_COND_$1, false)
     152    $7
     153    :
     154fi
     155])
     156
     157## -------------- ##
     158## Public macros. ##
     159## -------------- ##
     160
     161# DX_XXX_FEATURE(DEFAULT_STATE)
     162# -----------------------------
     163AC_DEFUN([DX_DOXYGEN_FEATURE], [AC_DEFUN([DX_FEATURE_doc],  [$1])])
     164AC_DEFUN([DX_MAN_FEATURE],     [AC_DEFUN([DX_FEATURE_man],  [$1])])
     165AC_DEFUN([DX_HTML_FEATURE],    [AC_DEFUN([DX_FEATURE_html], [$1])])
     166AC_DEFUN([DX_CHM_FEATURE],     [AC_DEFUN([DX_FEATURE_chm],  [$1])])
     167AC_DEFUN([DX_CHI_FEATURE],     [AC_DEFUN([DX_FEATURE_chi],  [$1])])
     168AC_DEFUN([DX_RTF_FEATURE],     [AC_DEFUN([DX_FEATURE_rtf],  [$1])])
     169AC_DEFUN([DX_XML_FEATURE],     [AC_DEFUN([DX_FEATURE_xml],  [$1])])
     170AC_DEFUN([DX_XML_FEATURE],     [AC_DEFUN([DX_FEATURE_xml],  [$1])])
     171AC_DEFUN([DX_PDF_FEATURE],     [AC_DEFUN([DX_FEATURE_pdf],  [$1])])
     172AC_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".
     178AC_DEFUN([DX_INIT_DOXYGEN], [
     179
     180# Files:
     181AC_SUBST([DX_PROJECT], [$1])
     182AC_SUBST([DX_CONFIG], [ifelse([$2], [], Doxyfile, [$2])])
     183AC_SUBST([DX_DOCDIR], [ifelse([$3], [], doxygen-doc, [$3])])
     184
     185# Environment variables used inside doxygen.cfg:
     186DX_ENV_APPEND(SRCDIR, $srcdir)
     187DX_ENV_APPEND(PROJECT, $DX_PROJECT)
     188DX_ENV_APPEND(DOCDIR, $DX_DOCDIR)
     189DX_ENV_APPEND(VERSION, $PACKAGE_VERSION)
     190
     191# Doxygen itself:
     192DX_ARG_ABLE(doc, [generate any doxygen documentation],
     193            [],
     194            [],
     195            [DX_REQUIRE_PROG([DX_DOXYGEN], doxygen)
     196             DX_REQUIRE_PROG([DX_PERL], perl)],
     197            [DX_ENV_APPEND(PERL_PATH, $DX_PERL)])
     198
     199# Dot for graphics:
     200DX_ARG_ABLE(dot, [generate graphics for doxygen documentation],
     201            [DX_CHECK_DEPEND(doc, 1)],
     202            [DX_CLEAR_DEPEND(doc, 1)],
     203            [DX_REQUIRE_PROG([DX_DOT], dot)],
     204            [DX_ENV_APPEND(HAVE_DOT, YES)
     205             DX_ENV_APPEND(DOT_PATH, [`DX_DIRNAME_EXPR($DX_DOT)`])],
     206            [DX_ENV_APPEND(HAVE_DOT, NO)])
     207
     208# Man pages generation:
     209DX_ARG_ABLE(man, [generate doxygen manual pages],
     210            [DX_CHECK_DEPEND(doc, 1)],
     211            [DX_CLEAR_DEPEND(doc, 1)],
     212            [],
     213            [DX_ENV_APPEND(GENERATE_MAN, YES)],
     214            [DX_ENV_APPEND(GENERATE_MAN, NO)])
     215
     216# RTF file generation:
     217DX_ARG_ABLE(rtf, [generate doxygen RTF documentation],
     218            [DX_CHECK_DEPEND(doc, 1)],
     219            [DX_CLEAR_DEPEND(doc, 1)],
     220            [],
     221            [DX_ENV_APPEND(GENERATE_RTF, YES)],
     222            [DX_ENV_APPEND(GENERATE_RTF, NO)])
     223
     224# XML file generation:
     225DX_ARG_ABLE(xml, [generate doxygen XML documentation],
     226            [DX_CHECK_DEPEND(doc, 1)],
     227            [DX_CLEAR_DEPEND(doc, 1)],
     228            [],
     229            [DX_ENV_APPEND(GENERATE_XML, YES)],
     230            [DX_ENV_APPEND(GENERATE_XML, NO)])
     231
     232# (Compressed) HTML help generation:
     233DX_ARG_ABLE(chm, [generate doxygen compressed HTML help documentation],
     234            [DX_CHECK_DEPEND(doc, 1)],
     235            [DX_CLEAR_DEPEND(doc, 1)],
     236            [DX_REQUIRE_PROG([DX_HHC], hhc)],
     237            [DX_ENV_APPEND(HHC_PATH, $DX_HHC)
     238             DX_ENV_APPEND(GENERATE_HTML, YES)
     239             DX_ENV_APPEND(GENERATE_HTMLHELP, YES)],
     240            [DX_ENV_APPEND(GENERATE_HTMLHELP, NO)])
     241
     242# Seperate CHI file generation.
     243DX_ARG_ABLE(chi, [generate doxygen seperate compressed HTML help index file],
     244            [DX_CHECK_DEPEND(chm, 1)],
     245            [DX_CLEAR_DEPEND(chm, 1)],
     246            [],
     247            [DX_ENV_APPEND(GENERATE_CHI, YES)],
     248            [DX_ENV_APPEND(GENERATE_CHI, NO)])
     249
     250# Plain HTML pages generation:
     251DX_ARG_ABLE(html, [generate doxygen plain HTML documentation],
     252            [DX_CHECK_DEPEND(doc, 1) DX_CHECK_DEPEND(chm, 0)],
     253            [DX_CLEAR_DEPEND(doc, 1) DX_CLEAR_DEPEND(chm, 0)],
     254            [],
     255            [DX_ENV_APPEND(GENERATE_HTML, YES)],
     256            [DX_TEST_FEATURE(chm) || DX_ENV_APPEND(GENERATE_HTML, NO)])
     257
     258# PostScript file generation:
     259DX_ARG_ABLE(ps, [generate doxygen PostScript documentation],
     260            [DX_CHECK_DEPEND(doc, 1)],
     261            [DX_CLEAR_DEPEND(doc, 1)],
     262            [DX_REQUIRE_PROG([DX_LATEX], latex)
     263             DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex)
     264             DX_REQUIRE_PROG([DX_DVIPS], dvips)
     265             DX_REQUIRE_PROG([DX_EGREP], egrep)])
     266
     267# PDF file generation:
     268DX_ARG_ABLE(pdf, [generate doxygen PDF documentation],
     269            [DX_CHECK_DEPEND(doc, 1)],
     270            [DX_CLEAR_DEPEND(doc, 1)],
     271            [DX_REQUIRE_PROG([DX_PDFLATEX], pdflatex)
     272             DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex)
     273             DX_REQUIRE_PROG([DX_EGREP], egrep)])
     274
     275# LaTeX generation for PS and/or PDF:
     276if DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf); then
     277    AM_CONDITIONAL(DX_COND_latex, :)
     278    DX_ENV_APPEND(GENERATE_LATEX, YES)
     279else
     280    AM_CONDITIONAL(DX_COND_latex, false)
     281    DX_ENV_APPEND(GENERATE_LATEX, NO)
     282fi
     283
     284# Paper size for PS and/or PDF:
     285AC_ARG_VAR(DOXYGEN_PAPER_SIZE,
     286           [a4wide (default), a4, letter, legal or executive])
     287case "$DOXYGEN_PAPER_SIZE" in
     288#(
     289"")
     290    AC_SUBST(DOXYGEN_PAPER_SIZE, "")
     291;; #(
     292a4wide|a4|letter|legal|executive)
     293    DX_ENV_APPEND(PAPER_SIZE, $DOXYGEN_PAPER_SIZE)
     294;; #(
     295*)
     296    AC_MSG_ERROR([unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'])
     297;;
     298esac
     299
     300#For debugging:
     301#echo DX_FLAG_doc=$DX_FLAG_doc
     302#echo DX_FLAG_dot=$DX_FLAG_dot
     303#echo DX_FLAG_man=$DX_FLAG_man
     304#echo DX_FLAG_html=$DX_FLAG_html
     305#echo DX_FLAG_chm=$DX_FLAG_chm
     306#echo DX_FLAG_chi=$DX_FLAG_chi
     307#echo DX_FLAG_rtf=$DX_FLAG_rtf
     308#echo DX_FLAG_xml=$DX_FLAG_xml
     309#echo DX_FLAG_pdf=$DX_FLAG_pdf
     310#echo DX_FLAG_ps=$DX_FLAG_ps
     311#echo DX_ENV=$DX_ENV
     312])
Note: See TracChangeset for help on using the changeset viewer.