build: non-recursive doc + parallel sphinx

Sphinx actually does work with a parallel build, if the doctree creation
is a separate step (which the other builds will then just read
unmodified.)  This can be done with the "dummy" target.

This also adds "-j6" to sphinx-build and adds a "--disable-doc-html"
switch on ./configure to turn on/off building HTML docs separately.

Also, HTML docs are now installed by "make install" to
/usr/share/doc/frr/html.

Signed-off-by: David Lamparter <equinox@diac24.net>
This commit is contained in:
David Lamparter 2018-08-15 22:59:31 +02:00
parent f177317a20
commit 9e53b31551
17 changed files with 581 additions and 650 deletions

View File

@ -20,11 +20,13 @@ sbin_SCRIPTS =
noinst_PROGRAMS =
noinst_HEADERS =
noinst_LIBRARIES =
nodist_noinst_DATA =
lib_LTLIBRARIES =
module_LTLIBRARIES =
pkginclude_HEADERS =
nodist_pkginclude_HEADERS =
dist_examples_DATA =
man_MANS =
## libtool, the self-made GNU scourge
## ... this should fix relinking
@ -34,6 +36,10 @@ $(AUTOMAKE_DUMMY)install-moduleLTLIBRARIES: install-libLTLIBRARIES
$(AUTOMAKE_DUMMY)install-binPROGRAMS: install-libLTLIBRARIES
$(AUTOMAKE_DUMMY)install-sbinPROGRAMS: install-libLTLIBRARIES
include doc/subdir.am
include doc/user/subdir.am
include doc/manpages/subdir.am
include doc/developer/subdir.am
include include/subdir.am
include lib/subdir.am
include zebra/subdir.am
@ -60,11 +66,11 @@ include bfdd/subdir.am
SUBDIRS = . @LIBRFP@ @RFPTEST@ \
@BGPD@ \
@VTYSH@ @DOC@ \
@VTYSH@ \
@SOLARIS@ tests
DIST_SUBDIRS = . bgpd \
vtysh doc tests \
vtysh tests \
solaris bgpd/rfp-example/librfp \
bgpd/rfp-example/rfptest \
debianpkg \
@ -108,6 +114,11 @@ EXTRA_DIST += \
\
vtysh/Makefile.am \
vtysh/Makefile.in \
\
doc/Makefile \
doc/developer/Makefile \
doc/manpages/Makefile \
doc/user/Makefile \
# end
ACLOCAL_AMFLAGS = -I m4

View File

@ -343,6 +343,8 @@ AC_ARG_ENABLE(vtysh,
AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for FRR]))
AC_ARG_ENABLE(doc,
AS_HELP_STRING([--disable-doc], [do not build docs]))
AC_ARG_ENABLE(doc-html,
AS_HELP_STRING([--disable-doc-html], [do not build HTML docs]))
AC_ARG_ENABLE(zebra,
AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
AC_ARG_ENABLE(bgpd,
@ -1313,12 +1315,9 @@ FRR_INCLUDES
])dnl
dnl disable doc check
if test "${enable_doc}" = "no";then
DOC=""
else
AC_CHECK_PROGS([SPHINXBUILD], [sphinx-build sphinx-build3 sphinx-build2], [no])
DOC="doc"
fi
AC_CHECK_PROGS([SPHINXBUILD], [sphinx-build sphinx-build3 sphinx-build2], [no])
AM_CONDITIONAL(DOC, test "${enable_doc}" != "no")
AM_CONDITIONAL(DOC_HTML, test "${enable_doc_html}" != "no")
dnl --------------------
dnl Daemon disable check
@ -1434,7 +1433,6 @@ fi
# set
AM_CONDITIONAL([ENABLE_BGP_VNC], [test x${enable_bgp_vnc} != xno])
AC_SUBST(DOC)
AC_SUBST(RFPTEST)
AC_SUBST(LIBRFP)
AC_SUBST(RFPINC)
@ -1986,10 +1984,6 @@ AC_MSG_RESULT($ac_cv_htonl_works)
AC_CONFIG_FILES([Makefile
bgpd/Makefile
vtysh/Makefile
doc/Makefile
doc/user/Makefile
doc/manpages/Makefile
doc/developer/Makefile
tests/Makefile
bgpd/rfp-example/rfptest/Makefile
bgpd/rfp-example/librfp/Makefile

3
doc/.gitignore vendored
View File

@ -1,5 +1,4 @@
Makefile
Makefile.in
!Makefile
mdate-sh
draft-zebra-00.txt
*.pdf

18
doc/Makefile Normal file
View File

@ -0,0 +1,18 @@
all: ALWAYS
@$(MAKE) -s -C .. doc
%: ALWAYS
@$(MAKE) -s -C .. doc/$@
html:
@$(MAKE) -s -C .. doc/user/_build/html/.buildinfo
info:
@$(MAKE) -s -C .. doc/user/_build/texinfo/frr.info
pdf:
@$(MAKE) -s -C .. doc/user/_build/latexpdf
frr.info: info
frr.pdf: pdf
Makefile:
#nothing
ALWAYS:
.PHONY: ALWAYS makefiles html info frr.info pdf frr.pdf
.SUFFIXES:

View File

@ -1,293 +0,0 @@
## Process this file with automake to produce Makefile.in.
# Pass down make invocation to each subdirectory.
#
# Each of these directories contains a Sphinx-generated Makefile that has been
# modified to implement all the targets required by Automake, as documented in
# the 'Third-Party Makefiles' section of the Automake docs.
#
# Note the absence of the 'developer' directory here; development docs are
# never built as part of a regular build. They are only built when explicitly
# asked for. See comment further down.
# Sphinx is not designed to be invoked multiple times against the same toctree.
.NOTPARALLEL:
SUBDIRS = manpages user
AM_MAKEFLAGS = DESTDIR=${DESTDIR} infodir=${infodir}
MANPAGE_BUILDDIR = manpages/_build/man
# This is a hack, see comment further down.
man_MANS = $(MANPAGE_BUILDDIR)/frr.1
if PIMD
man_MANS += $(MANPAGE_BUILDDIR)/pimd.8
man_MANS += $(MANPAGE_BUILDDIR)/mtracebis.8
endif
if PBRD
man_MANS += $(MANPAGE_BUILDDIR)/pbrd.8
endif
if BGPD
man_MANS += $(MANPAGE_BUILDDIR)/bgpd.8
endif
if ISISD
man_MANS += $(MANPAGE_BUILDDIR)/isisd.8
endif
if OSPF6D
man_MANS += $(MANPAGE_BUILDDIR)/ospf6d.8
endif
if OSPFCLIENT
man_MANS += $(MANPAGE_BUILDDIR)/ospfclient.8
endif
if OSPFD
man_MANS += $(MANPAGE_BUILDDIR)/ospfd.8
endif
if LDPD
man_MANS += $(MANPAGE_BUILDDIR)/ldpd.8
endif
if RIPD
man_MANS += $(MANPAGE_BUILDDIR)/ripd.8
endif
if RIPNGD
man_MANS += $(MANPAGE_BUILDDIR)/ripngd.8
endif
if NHRPD
man_MANS += $(MANPAGE_BUILDDIR)/nhrpd.8
endif
if VTYSH
man_MANS += $(MANPAGE_BUILDDIR)/vtysh.1
endif
if WATCHFRR
man_MANS += $(MANPAGE_BUILDDIR)/watchfrr.8
endif
if ZEBRA
man_MANS += $(MANPAGE_BUILDDIR)/zebra.8
endif
if EIGRPD
man_MANS += $(MANPAGE_BUILDDIR)/eigrpd.8
endif
if SHARPD
man_MANS += $(MANPAGE_BUILDDIR)/sharpd.8
endif
if STATICD
man_MANS += $(MANPAGE_BUILDDIR)/staticd.8
endif
if BFDD
man_MANS += $(MANPAGE_BUILDDIR)/bfdd.8
endif
# Automake is particular about manpages. It is aware of them and has some
# special facilities for handling them, but it assumes that manpages are always
# given in groff source and so these facilities are limited to simply
# specifying the path to the groff sources in a special variable. There is no
# target for building manpages that can be extended, as there are for pdf,
# html, dvi, etc. Unfortunately this leaves us with hijacking the
# 'install-data' and 'all' targets in the 3rd-party Makefile in manpages/ to
# make sure manpages are always built, and then using the special Automake
# variable defined above in order to take advantage of automatic installation.
#
# However, it is conceivable that someone may want to build just the manpages,
# so here's an explicit target for that.
man:
$(MAKE) -C manpages man
# Automake automatically defines targets for various document formats. All of
# the child 3rd-party Makefiles are aware of all Automake targets and implement
# the ones we are interested in.
#
# The SUBDIRS variable at the top of this Makefile.am causes the following
# implicit Automake targets to only build user documentation, and not developer
# documentation:
# - info
# - html
# - pdf
#
# If you wish to build developer documentation, use these targets:
developer-info:
$(MAKE) -C developer info
developer-pdf:
$(MAKE) -C developer latexpdf
developer-html:
$(MAKE) -C developer html
# If you want to build the developer's docs in other formats, try the
# following:
#
# $ cd developer
# $ make help
# dist tarballs want doc sources
EXTRA_DIST = frr-sphinx.mk \
manpages/bgpd.rst \
manpages/common-options.rst \
manpages/conf.py \
manpages/defines.rst \
manpages/eigrpd.rst \
manpages/epilogue.rst \
manpages/frr.rst \
manpages/index.rst \
manpages/isisd.rst \
manpages/ldpd.rst \
manpages/Makefile.am \
manpages/mtracebis.rst \
manpages/nhrpd.rst \
manpages/ospf6d.rst \
manpages/ospfclient.rst \
manpages/ospfd.rst \
manpages/pimd.rst \
manpages/ripd.rst \
manpages/pbrd.rst \
manpages/ripngd.rst \
manpages/sharpd.rst \
manpages/staticd.rst \
manpages/vtysh.rst \
manpages/watchfrr.rst \
manpages/zebra.rst \
manpages/bfdd.rst \
manpages/bfd-options.rst \
developer/bgpd.rst \
developer/bgp-typecodes.rst \
developer/building-frr-for-openwrt.rst \
developer/building-frr-on-alpine.rst \
developer/building-frr-on-centos6.rst \
developer/building-frr-on-centos7.rst \
developer/building-frr-on-debian8.rst \
developer/building-frr-on-debian9.rst \
developer/building-frr-on-fedora24.rst \
developer/building-frr-on-freebsd10.rst \
developer/building-frr-on-freebsd11.rst \
developer/building-frr-on-freebsd9.rst \
developer/building-frr-on-netbsd6.rst \
developer/building-frr-on-netbsd7.rst \
developer/building-frr-on-omnios.rst \
developer/building-frr-on-openbsd6.rst \
developer/building-frr-on-ubuntu1204.rst \
developer/building-frr-on-ubuntu1404.rst \
developer/building-frr-on-ubuntu1604.rst \
developer/building-frr-on-ubuntu1804.rst \
developer/building.rst \
developer/cli.rst \
developer/conf.py \
developer/draft-zebra-00.ms \
developer/hooks.rst \
developer/index.rst \
developer/ldpd-basic-test-setup.md \
developer/library.rst \
developer/logging.rst \
developer/Makefile.in \
developer/maintainer-release-build.rst \
developer/memtypes.rst \
developer/modules.rst \
developer/next-hop-tracking.rst \
developer/ospf-api.rst \
developer/ospf.rst \
developer/ospf-sr.rst \
developer/workflow.rst \
developer/zebra.rst \
user/babeld.rst \
user/ldpd.rst \
user/basic.rst \
user/bgp.rst \
user/bugs.rst \
user/conf.py \
user/eigrpd.rst \
user/filter.rst \
user/glossary.rst \
user/index.rst \
user/installation.rst \
user/ipv6.rst \
user/isisd.rst \
user/kernel.rst \
user/Makefile.am \
user/nhrpd.rst \
user/ospf6d.rst \
user/ospfd.rst \
user/ospf_fundamentals.rst \
user/overview.rst \
user/packet-dumps.rst \
user/pim.rst \
user/ripd.rst \
user/pbr.rst \
user/ripngd.rst \
user/routemap.rst \
user/routeserver.rst \
user/rpki.rst \
user/setup.rst \
user/sharp.rst \
user/snmp.rst \
user/snmptrap.rst \
user/static.rst \
user/Useful_Sysctl_Settings.md \
user/vnc.rst \
user/vtysh.rst \
user/zebra.rst \
user/bfd.rst \
user/flowspec.rst \
mpls/ChangeLog.opaque.txt \
mpls/ospfd.conf \
mpls/cli_summary.txt \
mpls/opaque_lsa.txt \
figures/cligraph.png \
figures/cligraph.svg \
figures/fig-normal-processing.dia \
figures/fig-normal-processing.png \
figures/fig-normal-processing.txt \
figures/fig-rs-processing.dia \
figures/fig-rs-processing.png \
figures/fig-rs-processing.txt \
figures/fig_topologies_full.dia \
figures/fig_topologies_full.png \
figures/fig_topologies_full.txt \
figures/fig_topologies_rs.dia \
figures/fig_topologies_rs.png \
figures/fig_topologies_rs.txt \
figures/fig-vnc-commercial-route-reflector.dia \
figures/fig-vnc-commercial-route-reflector.png \
figures/fig-vnc-commercial-route-reflector.txt \
figures/fig-vnc-frr-route-reflector.dia \
figures/fig-vnc-frr-route-reflector.png \
figures/fig-vnc-frr-route-reflector.txt \
figures/fig-vnc-gw.dia \
figures/fig-vnc-gw.png \
figures/fig-vnc-gw-rr.dia \
figures/fig-vnc-gw-rr.png \
figures/fig-vnc-gw-rr.txt \
figures/fig-vnc-gw.txt \
figures/fig-vnc-mesh.dia \
figures/fig-vnc-mesh.png \
figures/fig-vnc-mesh.txt \
figures/fig-vnc-redundant-route-reflectors.dia \
figures/fig-vnc-redundant-route-reflectors.png \
figures/fig-vnc-redundant-route-reflectors.txt \
figures/frr-icon.svg \
figures/frr-logo-icon.png \
figures/frr-logo-medium.png \
figures/frr-logo.png \
figures/frr-logo-small.png \
figures/git_branches.png \
figures/git_branches.svg \
figures/ospf_api_architecture.png \
figures/ospf_api_msghdr.png \
figures/ospf_api_msgs1.png \
figures/ospf_api_msgs2.png \
extra/frrlexer.py

16
doc/developer/Makefile Normal file
View File

@ -0,0 +1,16 @@
all: ALWAYS
@$(MAKE) -s -C ../.. developer-html
help: ALWAYS
@$(MAKE) -s -C ../.. doc/help
pdf: ALWAYS
@$(MAKE) -s -C ../.. doc/developer/_build/latexpdf
info: ALWAYS
@$(MAKE) -s -C ../.. doc/developer/_build/texinfo/frr.info
%: ALWAYS
@$(MAKE) -s -C ../.. doc/developer/_build/$@
Makefile:
#nothing
ALWAYS:
.PHONY: ALWAYS makefiles
.SUFFIXES:

View File

@ -1,8 +0,0 @@
# This is necessary to support VPATH builds.
srcdir = @srcdir@
VPATH = @srcdir@
# This variable is used as the documentation source location in frr-sphinx.mk
SOURCESDIR = @srcdir@
include @srcdir@/../frr-sphinx.mk

72
doc/developer/subdir.am Normal file
View File

@ -0,0 +1,72 @@
#
# doc/developer
#
dev_RSTFILES = \
doc/developer/bgp-typecodes.rst \
doc/developer/bgpd.rst \
doc/developer/building-frr-for-openwrt.rst \
doc/developer/building-frr-on-alpine.rst \
doc/developer/building-frr-on-centos6.rst \
doc/developer/building-frr-on-centos7.rst \
doc/developer/building-frr-on-debian8.rst \
doc/developer/building-frr-on-debian9.rst \
doc/developer/building-frr-on-fedora24.rst \
doc/developer/building-frr-on-freebsd10.rst \
doc/developer/building-frr-on-freebsd11.rst \
doc/developer/building-frr-on-freebsd9.rst \
doc/developer/building-frr-on-netbsd6.rst \
doc/developer/building-frr-on-netbsd7.rst \
doc/developer/building-frr-on-omnios.rst \
doc/developer/building-frr-on-openbsd6.rst \
doc/developer/building-frr-on-ubuntu1204.rst \
doc/developer/building-frr-on-ubuntu1404.rst \
doc/developer/building-frr-on-ubuntu1604.rst \
doc/developer/building-frr-on-ubuntu1804.rst \
doc/developer/building.rst \
doc/developer/cli.rst \
doc/developer/conf.py \
doc/developer/hooks.rst \
doc/developer/index.rst \
doc/developer/library.rst \
doc/developer/logging.rst \
doc/developer/maintainer-release-build.rst \
doc/developer/memtypes.rst \
doc/developer/modules.rst \
doc/developer/next-hop-tracking.rst \
doc/developer/ospf-api.rst \
doc/developer/ospf-sr.rst \
doc/developer/ospf.rst \
doc/developer/workflow.rst \
doc/developer/zebra.rst \
# end
EXTRA_DIST += \
$(dev_RSTFILES) \
doc/developer/draft-zebra-00.ms \
doc/developer/ldpd-basic-test-setup.md \
# end
DEVBUILD = doc/developer/_build
$(DEVBUILD)/.doctrees/environment.pickle: $(dev_RSTFILES)
#
# nothing built automatically for "all" target.
#
#
# standard targets
#
developer-info: $(DEVBUILD)/texinfo/frr.info
developer-html: $(DEVBUILD)/html/.buildinfo
developer-pdf: $(DEVBUILD)/latexpdf
#
# hook-in for clean
#
.PHONY: clean-devdocs
clean-local: clean-devdocs
clean-devdocs:
-rm -rf "$(DEVBUILD)"

View File

@ -1,229 +0,0 @@
# Makefile for Sphinx documentation
#
# Sphinx is not designed to be invoked multiple times against the same toctree.
.NOTPARALLEL:
# You can set these variables from the command line.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
PAPER ?=
BUILDDIR = _build
# This is a custom FRR variable just for this docs subdirectory used to support
# VPATH builds. Makefiles which include this file should override it to point
# to the correct sources path.
SOURCESDIR ?= .
# User-friendly check for sphinx-build
ifneq ($(MAKECMDGOALS), clean)
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
SPHINXBUILD = sphinx-1.0-build
endif
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
$(error "The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD make variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/")
endif
endif
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) $(SOURCESDIR)
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) $(SOURCESDIR)
.PHONY: help
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " applehelp to make an Apple Help Book"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
@echo " coverage to run coverage check of the documentation (if enabled)"
.PHONY: clean
clean:
rm -rf $(BUILDDIR)/*
.PHONY: html
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
.PHONY: dirhtml
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
.PHONY: singlehtml
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
.PHONY: pickle
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
.PHONY: json
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
.PHONY: htmlhelp
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
.PHONY: qthelp
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/FRR.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/FRR.qhc"
.PHONY: applehelp
applehelp:
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
@echo
@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
@echo "N.B. You won't be able to view it unless you put it in" \
"~/Library/Documentation/Help or install it in your application" \
"bundle."
.PHONY: devhelp
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/FRR"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/FRR"
@echo "# devhelp"
.PHONY: epub
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
.PHONY: latex
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
.PHONY: latexpdf
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
.PHONY: latexpdfja
latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
.PHONY: text
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
.PHONY: man
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
.PHONY: texinfo
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
.PHONY: info
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
$(MAKE) -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
.PHONY: gettext
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
.PHONY: changes
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
.PHONY: linkcheck
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
.PHONY: doctest
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
.PHONY: coverage
coverage:
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
@echo "Testing of coverage in the sources finished, look at the " \
"results in $(BUILDDIR)/coverage/python.txt."
.PHONY: xml
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
.PHONY: pseudoxml
pseudoxml:
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."

12
doc/manpages/Makefile Normal file
View File

@ -0,0 +1,12 @@
all: ALWAYS
@$(MAKE) -s -C ../.. doc/manpages/man.stamp
help: ALWAYS
@$(MAKE) -s -C ../.. doc/help
%: ALWAYS
@$(MAKE) -s -C ../.. doc/manpages/_build/$@
Makefile:
#nothing
ALWAYS:
.PHONY: ALWAYS makefiles
.SUFFIXES:

View File

@ -1,48 +0,0 @@
# This is necessary to support VPATH builds.
srcdir = @srcdir@
VPATH = @srcdir@
# This variable is used as the documentation source location in frr-sphinx.mk
SOURCESDIR = @srcdir@
include @srcdir@/../frr-sphinx.mk
# -----------------------------------------------------------------------------
# Automake requires that 3rd-party Makefiles recognize these targets.
# -----------------------------------------------------------------------------
# install
# install-data
# install-exec
# uninstall
# install-dvi
# install-html
# install-info
# install-ps
# install-pdf
# installdirs
# check
# installcheck
# mostlyclean
# clean
# distclean
# maintainer-clean
# dvi
# pdf
# ps
# info
# html
# tags
# ctags
# These targets are automatically generated by Sphinx but conflict with
# implicitly defined Automake rules, so we manually override them to nothing.
# The other option is deleting the Sphinx-generated rules, which suppresses the
# warning but kinda screws up the symmetry between Makefiles.
info: ;
html: ;
all: man
install-data: man
install: install-data

139
doc/manpages/subdir.am Normal file
View File

@ -0,0 +1,139 @@
#
# doc/manpages
#
man_RSTFILES = \
doc/manpages/bgpd.rst \
doc/manpages/common-options.rst \
doc/manpages/conf.py \
doc/manpages/defines.rst \
doc/manpages/eigrpd.rst \
doc/manpages/epilogue.rst \
doc/manpages/frr.rst \
doc/manpages/index.rst \
doc/manpages/isisd.rst \
doc/manpages/ldpd.rst \
doc/manpages/mtracebis.rst \
doc/manpages/nhrpd.rst \
doc/manpages/ospf6d.rst \
doc/manpages/ospfclient.rst \
doc/manpages/ospfd.rst \
doc/manpages/pimd.rst \
doc/manpages/ripd.rst \
doc/manpages/pbrd.rst \
doc/manpages/ripngd.rst \
doc/manpages/sharpd.rst \
doc/manpages/staticd.rst \
doc/manpages/vtysh.rst \
doc/manpages/watchfrr.rst \
doc/manpages/zebra.rst \
doc/manpages/bfdd.rst \
doc/manpages/bfd-options.rst \
# end
EXTRA_DIST += $(man_RSTFILES)
MANBUILD = doc/manpages/_build/man
doc/manpages/_build/.doctrees/environment.pickle: $(man_RSTFILES)
#
# automake integration
#
rstman1dir = $(mandir)/man1
rstman8dir = $(mandir)/man8
rstman1_DATA =
rstman8_DATA =
rstman1_DATA += $(MANBUILD)/frr.1
if PIMD
rstman8_DATA += $(MANBUILD)/pimd.8
rstman8_DATA += $(MANBUILD)/mtracebis.8
endif
if PBRD
rstman8_DATA += $(MANBUILD)/pbrd.8
endif
if BGPD
rstman8_DATA += $(MANBUILD)/bgpd.8
endif
if ISISD
rstman8_DATA += $(MANBUILD)/isisd.8
endif
if OSPF6D
rstman8_DATA += $(MANBUILD)/ospf6d.8
endif
if OSPFCLIENT
rstman8_DATA += $(MANBUILD)/ospfclient.8
endif
if OSPFD
rstman8_DATA += $(MANBUILD)/ospfd.8
endif
if LDPD
rstman8_DATA += $(MANBUILD)/ldpd.8
endif
if RIPD
rstman8_DATA += $(MANBUILD)/ripd.8
endif
if RIPNGD
rstman8_DATA += $(MANBUILD)/ripngd.8
endif
if NHRPD
rstman8_DATA += $(MANBUILD)/nhrpd.8
endif
if VTYSH
rstman1_DATA += $(MANBUILD)/vtysh.1
endif
if WATCHFRR
rstman8_DATA += $(MANBUILD)/watchfrr.8
endif
if ZEBRA
rstman8_DATA += $(MANBUILD)/zebra.8
endif
if EIGRPD
rstman8_DATA += $(MANBUILD)/eigrpd.8
endif
if SHARPD
rstman8_DATA += $(MANBUILD)/sharpd.8
endif
if STATICD
rstman8_DATA += $(MANBUILD)/staticd.8
endif
if BFDD
rstman8_DATA += $(MANBUILD)/bfdd.8
endif
# dependency
$(rstman8_DATA) $(rstman1_DATA): $(MANBUILD)/man.stamp
#
# hook-ins for clean / doc
# (install is handled by automake _DATA)
#
clean-local: clean-manpages
.PHONY: clean-manpages
clean-manpages:
-rm -rf $(MANBUILD)
doc: doc-man
.PHONY: doc-man
doc-man: $(rstman8_DATA) $(rstman1_DATA)

176
doc/subdir.am Normal file
View File

@ -0,0 +1,176 @@
#
# doc
#
# You can set these variables from the command line.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
PAPER ?=
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS)
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS)
###
AM_V_SPHINX = $(am__v_SPHINX_$(V))
am__v_SPHINX_ = $(am__v_SPHINX_$(AM_DEFAULT_VERBOSITY))
am__v_SPHINX_0 = @echo " SPHINX " $@;
am__v_SPHINX_1 =
AM_V_MAKEINFO = $(am__v_MAKEINFO_$(V))
am__v_MAKEINFO_ = $(am__v_MAKEINFO_$(AM_DEFAULT_VERBOSITY))
am__v_MAKEINFO_0 = @echo " MAKEINFO" $@;
am__v_MAKEINFO_1 =
#
# real-file sphinx targets that work for dependencies
#
doc/%/_build/.doctrees/environment.pickle:
$(AM_V_SPHINX) ( \
subdoc="$@"; subdoc="$${subdoc#doc/}"; subdoc="doc/$${subdoc%%/*}"; \
$(SPHINXBUILD) -a -q -b text -d "$${subdoc}/_build/.doctrees" \
$(ALLSPHINXOPTS) "$(top_srcdir)/$${subdoc}" "$${subdoc}/_build/text" \
)
doc/%/_build/html/.buildinfo: doc/%/_build/.doctrees/environment.pickle
$(AM_V_SPHINX) ( \
subdoc="$@"; subdoc="$${subdoc#doc/}"; subdoc="doc/$${subdoc%%/*}"; \
$(SPHINXBUILD) -q -b html -d "$${subdoc}/_build/.doctrees" \
$(ALLSPHINXOPTS) "$(top_srcdir)/$${subdoc}" "$${subdoc}/_build/html" \
)
.PRECIOUS: doc/%/_build/texinfo/frr.texi
doc/%/_build/texinfo/frr.texi: doc/%/_build/.doctrees/environment.pickle
$(AM_V_SPHINX) ( \
subdoc="$@"; subdoc="$${subdoc#doc/}"; subdoc="doc/$${subdoc%%/*}"; \
$(SPHINXBUILD) -q -b texinfo -d "$${subdoc}/_build/.doctrees" \
$(ALLSPHINXOPTS) "$(top_srcdir)/$${subdoc}" "$${subdoc}/_build/texinfo" \
)
doc/%/_build/texinfo/frr.info: doc/%/_build/texinfo/frr.texi
$(AM_V_MAKEINFO)$(MAKEINFO) --no-split -o '$@' '$<'
doc/%/_build/man/man.stamp: doc/%/_build/.doctrees/environment.pickle
$(AM_V_SPHINX) ( \
subdoc="$@"; subdoc="$${subdoc#doc/}"; subdoc="doc/$${subdoc%%/*}"; \
$(MKDIR_P) "$${subdoc}/_build/man"; touch $@.tmp; \
$(SPHINXBUILD) -a -q -b man -d "$${subdoc}/_build/.doctrees" \
$(ALLSPHINXOPTS) "$(top_srcdir)/$${subdoc}" "$${subdoc}/_build/man" && \
mv $@.tmp $@ \
)
#
# auxiliary sphinx targets (output name = directory,
# deps will not work very well)
#
SPHINXTARGETS = \
html dirhtml singlehtml pickle json \
htmlhelp qthelp applehelp devhelp \
epub latex text man texinfo gettext \
changes linkcheck doctest coverage \
xml pseudoxml \
# end
M_SPHINXTARGETS = $(addprefix doc/%/_build/,$(SPHINXTARGETS))
.PRECIOUS: $(M_SPHINXTARGETS)
$(M_SPHINXTARGETS): doc/%/_build/.doctrees/environment.pickle
$(AM_V_SPHINX) ( \
target="$@"; \
builder="$${target##*/}"; \
subdoc="$${target#doc/}"; subdoc="doc/$${subdoc%%/*}"; \
rm -rf "$@"; \
$(SPHINXBUILD) -q -b $${builder} -d $${subdoc}/_build/.doctrees \
$(ALLSPHINXOPTS) $(top_srcdir)/$${subdoc} $@ \
)
.PHONY: doc/%/_build/latexpdf
doc/%/_build/latexpdf: doc/%/_build/latex
@make -C $< all-pdf
# If you want to build the developer's docs in other formats, try the
# following:
#
# $ cd developer
# $ make help
# dist tarballs want doc sources
EXTRA_DIST += \
doc/mpls/ChangeLog.opaque.txt \
doc/mpls/ospfd.conf \
doc/mpls/cli_summary.txt \
doc/mpls/opaque_lsa.txt \
doc/figures/cligraph.png \
doc/figures/cligraph.svg \
doc/figures/fig-normal-processing.dia \
doc/figures/fig-normal-processing.png \
doc/figures/fig-normal-processing.txt \
doc/figures/fig-rs-processing.dia \
doc/figures/fig-rs-processing.png \
doc/figures/fig-rs-processing.txt \
doc/figures/fig_topologies_full.dia \
doc/figures/fig_topologies_full.png \
doc/figures/fig_topologies_full.txt \
doc/figures/fig_topologies_rs.dia \
doc/figures/fig_topologies_rs.png \
doc/figures/fig_topologies_rs.txt \
doc/figures/fig-vnc-commercial-route-reflector.dia \
doc/figures/fig-vnc-commercial-route-reflector.png \
doc/figures/fig-vnc-commercial-route-reflector.txt \
doc/figures/fig-vnc-frr-route-reflector.dia \
doc/figures/fig-vnc-frr-route-reflector.png \
doc/figures/fig-vnc-frr-route-reflector.txt \
doc/figures/fig-vnc-gw.dia \
doc/figures/fig-vnc-gw.png \
doc/figures/fig-vnc-gw-rr.dia \
doc/figures/fig-vnc-gw-rr.png \
doc/figures/fig-vnc-gw-rr.txt \
doc/figures/fig-vnc-gw.txt \
doc/figures/fig-vnc-mesh.dia \
doc/figures/fig-vnc-mesh.png \
doc/figures/fig-vnc-mesh.txt \
doc/figures/fig-vnc-redundant-route-reflectors.dia \
doc/figures/fig-vnc-redundant-route-reflectors.png \
doc/figures/fig-vnc-redundant-route-reflectors.txt \
doc/figures/frr-icon.svg \
doc/figures/frr-logo-icon.png \
doc/figures/frr-logo-medium.png \
doc/figures/frr-logo.png \
doc/figures/frr-logo-small.png \
doc/figures/git_branches.png \
doc/figures/git_branches.svg \
doc/figures/ospf_api_architecture.png \
doc/figures/ospf_api_msghdr.png \
doc/figures/ospf_api_msgs1.png \
doc/figures/ospf_api_msgs2.png \
doc/extra/frrlexer.py \
# end
.PHONY: doc/help
doc/help:
@echo "Please use \`make doc/{user,manpages,developer}/<target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " applehelp to make an Apple Help Book"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
@echo " coverage to run coverage check of the documentation (if enabled)"

16
doc/user/Makefile Normal file
View File

@ -0,0 +1,16 @@
all: ALWAYS
@$(MAKE) -s -C ../.. doc-user
help: ALWAYS
@$(MAKE) -s -C ../.. doc/help
pdf: ALWAYS
@$(MAKE) -s -C ../.. doc/user/_build/latexpdf
info: ALWAYS
@$(MAKE) -s -C ../.. doc/user/_build/texinfo/frr.info
%: ALWAYS
@$(MAKE) -s -C ../.. doc/user/_build/$@
Makefile:
#nothing
ALWAYS:
.PHONY: ALWAYS makefiles
.SUFFIXES:

View File

@ -1,55 +0,0 @@
# This is necessary to support VPATH builds.
srcdir = @srcdir@
VPATH = @srcdir@
# This variable is used as the documentation source location in frr-sphinx.mk
SOURCESDIR = @srcdir@
include @srcdir@/../frr-sphinx.mk
# -----------------------------------------------------------------------------
# Automake requires that 3rd-party Makefiles recognize these targets.
# -----------------------------------------------------------------------------
# install
# install-data
# install-exec
# uninstall
# install-dvi
# install-html
# install-info
# install-ps
# install-pdf
# installdirs
# check
# installcheck
# mostlyclean
# clean
# distclean
# maintainer-clean
# dvi
# pdf
# ps
# info
# html
# tags
# ctags
# When building 'all', the logic is that we want to make docs that are easily
# readable by the person that just built them. Technically the reST source is
# readable in its own right, but we'll also build info and html because those
# offer sequentially better reading experiences. PDF is not built by default
# because it takes quite a while.
all: info
# info and html already have built-in sphinx rules; pdf goes to latexpdf
pdf: latexpdf
# install user manual as info file
install-info: info
install -d ${DESTDIR}${infodir}
gzip < _build/texinfo/frr.info > ${DESTDIR}${infodir}/frr.info.gz
install-info _build/texinfo/frr.info ${DESTDIR}${infodir}/dir
install-data: install-info
install: install-data

110
doc/user/subdir.am Normal file
View File

@ -0,0 +1,110 @@
#
# doc/user
#
user_RSTFILES = \
doc/user/babeld.rst \
doc/user/ldpd.rst \
doc/user/basic.rst \
doc/user/bgp.rst \
doc/user/bugs.rst \
doc/user/conf.py \
doc/user/eigrpd.rst \
doc/user/filter.rst \
doc/user/glossary.rst \
doc/user/index.rst \
doc/user/installation.rst \
doc/user/ipv6.rst \
doc/user/isisd.rst \
doc/user/kernel.rst \
doc/user/nhrpd.rst \
doc/user/ospf6d.rst \
doc/user/ospfd.rst \
doc/user/ospf_fundamentals.rst \
doc/user/overview.rst \
doc/user/packet-dumps.rst \
doc/user/pim.rst \
doc/user/ripd.rst \
doc/user/pbr.rst \
doc/user/ripngd.rst \
doc/user/routemap.rst \
doc/user/routeserver.rst \
doc/user/rpki.rst \
doc/user/setup.rst \
doc/user/sharp.rst \
doc/user/snmp.rst \
doc/user/snmptrap.rst \
doc/user/static.rst \
doc/user/vnc.rst \
doc/user/vtysh.rst \
doc/user/zebra.rst \
doc/user/bfd.rst \
doc/user/flowspec.rst \
# end
EXTRA_DIST += \
$(user_RSTFILES) \
doc/user/Useful_Sysctl_Settings.md \
# end
USERBUILD = doc/user/_build
$(USERBUILD)/.doctrees/environment.pickle: $(user_RSTFILES)
#
# automake integration (things that should be built in "all")
#
if DOC
nodist_noinst_DATA += $(USERBUILD)/texinfo/frr.info
endif
if DOC_HTML
nodist_noinst_DATA += $(USERBUILD)/html/.buildinfo
endif
#
# standard targets
#
.PHONY: info html pdf
info: $(USERBUILD)/texinfo/frr.info
html: $(USERBUILD)/html/.buildinfo
pdf: $(USERBUILD)/latexpdf
#
# hook-ins for clean / install / doc
#
.PHONY: clean-userdocs
clean-local: clean-userdocs
clean-userdocs:
-rm -rf "$(USERBUILD)"
# INSTALL_INFO=install-info
.PHONY: install-info uninstall-info install-html uninstall-html
install-info: $(USERBUILD)/texinfo/frr.info
$(MKDIR_P) "$(DESTDIR)$(infodir)"
$(INSTALL_DATA) "$<" "$(DESTDIR)$(infodir)"
[ -z "${DESTDIR}" ] && $(INSTALL_INFO) --info-dir="$(DESTDIR)$(infodir)" "$<" || true
uninstall-info: $(USERBUILD)/texinfo/frr.info
-rm -f "$(DESTDIR)$(infodir)/$<"
[ -z "${DESTDIR}" ] && $(INSTALL_INFO) --delete --info-dir="$(DESTDIR)$(infodir)" "$<" || true
install-html: $(USERBUILD)/html/.buildinfo
$(MKDIR_P) "$(DESTDIR)$(htmldir)"
cp -r "$(USERBUILD)/html" "$(DESTDIR)$(htmldir)"
uninstall-html:
-rm -rf "$(DESTDIR)$(htmldir)/html"
.PHONY: install-data-local uninstall-local
if DOC
DOC_INFO=info
install-data-local: install-info
uninstall-local: uninstall-info
endif
if DOC_HTML
DOC_HTML=html
install-data-local: install-html
uninstall-local: uninstall-html
endif
doc: $(DOC_INFO) $(DOC_HTML)

View File

@ -291,7 +291,7 @@ if GIT_VERSION
# (even if gitversion.h's file timestamp doesn't change, make will think it
# did, because of .PHONY...)
.PHONY: lib/gitversion.h.tmp
PHONY_GITVERSION=lib/gitversion.h.tmp
.SILENT: lib/gitversion.h lib/gitversion.h.tmp
GITH=lib/gitversion.h
lib/gitversion.h.tmp: $(top_srcdir)/.git
@ -300,7 +300,8 @@ lib/gitversion.h: lib/gitversion.h.tmp
{ test -f ${GITH} && diff -s -q ${GITH}.tmp ${GITH}; } || cp ${GITH}.tmp ${GITH}
else
.PHONY: lib/gitversion.h
PHONY_GITVERSION=lib/gitversion.h
lib/gitversion.h:
true
endif
.PHONY: $(PHONY_GITVERSION)