doc: generate doxygen html output from the scanner

This switches the scanner to generate doxygen-compatible tags for the
generated protocol headers, and hooks up the doxygen build to generate server
and client-side API documentation. That documentation is now in
Client/ and Server/, respectively.

GENERATE_HTML is on by default and must be disabled for the xml/man targets to
avoid messing up the new documentation. We disable all three three targets in
the doxyfile (xml and man default to NO anyway) to make it obvious that they
need to be set in the per-target instructions.

Each protocol is a separate doxygen @page, with each interface a @subpage.
Wayland only has one protocol, wayland-protocols will have these nested.
Each protocol page has a list of interfaces and the copyright and description
where available.
All interfaces are grouped by doxygen @defgroup and @ingroups and appear in
"Modules" in the generated output. Each interface subpage has the description
and a link to the actual API doc.
Function, struct and #defines are documented in doxygen style and associated
with the matching interface.

Note that pages and groups have fixed HTML file names and are directly
linkable/bookmark-able.

The @mainpage is a separate file that's included at build time. It doesn't
contain much other than links to where the interesting bits are. It's a static
file though that supports markdown, so we can extend it easily in the future.

For doxygen we need the new options EXTRACT_ALL and OPTIMIZE_OUTPUT_FOR_C so
it scans C code properly. EXTRACT_STATIC is needed since most of the protocol
hooks are static.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
This commit is contained in:
Peter Hutterer 2016-03-01 09:26:21 +10:00 committed by Bryce Harrington
parent f8f3e54aa7
commit 2b5310a367
4 changed files with 188 additions and 78 deletions

View file

@ -1,7 +1,11 @@
.SUFFIXES = .gv .png .map
noinst_DATA = xml/Client/index.xml xml/Server/index.xml
noinst_DATA = \
xml/Client/index.xml \
xml/Server/index.xml \
html/Client/index.html \
html/Server/index.html
dist_noinst_DATA = wayland.doxygen.in
scanned_src_files_shared = \
@ -27,6 +31,17 @@ scanned_src_files_man = \
$(top_srcdir)/src/wayland-client.h \
$(top_srcdir)/src/wayland-client-core.h
extra_doxygen = \
mainpage.dox
extra_doxygen_Server = \
$(top_builddir)/protocol/wayland-server-protocol.h \
$(extra_doxygen)
extra_doxygen_Client = \
$(top_builddir)/protocol/wayland-client-protocol.h \
$(extra_doxygen)
diagramsdir := $(srcdir)/dot
diagramssrc := $(wildcard $(diagramsdir)/*.gv)
diagrams := $(patsubst $(diagramsdir)/%,xml/%,$(diagramssrc:.gv=.png))
@ -38,7 +53,7 @@ diagram_maps := $(patsubst $(diagramsdir)/%,xml/%,$(diagramssrc:.gv=.map))
dist_man3_MANS = $(shell test -d man && find man/man3 -name "wl_*.3" -printf "man/man3/%P\n")
# Listing various directories that might need to be created.
alldirs := xml xml/Client xml/Server man/man3
alldirs := xml xml/Client xml/Server man/man3 html/Client html/Server
$(diagrams): $(diagramssrc)
@ -51,6 +66,13 @@ xml/%/index.xml: $(top_srcdir)/src/scanner.c $(scanned_src_files_%) wayland.doxy
echo "INPUT= $(scanned_src_files_$*)"; \
) | $(DOXYGEN) -
html/%/index.html: $(scanned_src_files_%) wayland.doxygen $(diagrams) $(diagram_maps) | html/%
$(AM_V_GEN)(cat wayland.doxygen; \
echo "GENERATE_HTML=YES"; \
echo "HTML_OUTPUT=html/$*"; \
echo "INPUT= $(scanned_src_files_$*) $(extra_doxygen_$*)"; \
) | $(DOXYGEN) -
man/man3/wl_display.3: $(top_srcdir)/src/scanner.c $(scanned_src_files_man) wayland.doxygen | man/man3
$(AM_V_GEN)(cat wayland.doxygen; \
echo "GENERATE_MAN=YES"; \
@ -74,6 +96,7 @@ all-local: man/man3/wl_display.3
clean-local:
rm -rf xml/
rm -rf html/
rm -rf man/
EXTRA_DIST = $(diagramssrc)

13
doc/doxygen/mainpage.dox Normal file
View file

@ -0,0 +1,13 @@
/**
* @mainpage
* Wayland protocol API documentation.
*
* @section ifaces Interfaces
* For the list of available interfaces, please see the
* <a href="modules.html">modules</a> list.
*
* @section protocols Protocols
* For the list of protocols, please see the
* <a href="pages.html">Related Pages</a>.
*
*/

View file

@ -13,4 +13,10 @@ MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = YES
DOT_MULTI_TARGETS = YES
ALIASES += comment{1}="/* \1 *<!-- -->/"
OPTIMIZE_OUTPUT_FOR_C = YES
EXTRACT_ALL = YES
EXTRACT_STATIC = YES
# These must be set in the Makefile
GENERATE_HTML = NO
GENERATE_XML = NO
GENERATE_MAN = NO