On 16:23 Tue 12 Dec     , Peter Maydell wrote:
> We don't currently document the syntax of .hx files anywhere
> except in a few comments at the top of individual .hx files.
> We don't even have somewhere in the developer docs where we
> could do this.
> 
> Add a new files docs/devel/docs.rst which can be a place to
> document how our docs build process works. For the moment,
> put in only a brief introductory paragraph and the documentation
> of the .hx files. We could later add to this file by for
> example describing how the QAPI-schema-to-docs process works,
> or anything else that developers might need to know about
> how to add documentation.
> 
> Make the .hx files refer to this doc file, and clean
> up their header comments to be more accurate for the
> usage in each file and less cut-n-pasted.
> 
> Signed-off-by: Peter Maydell <peter.mayd...@linaro.org>

Reviewed-by: Luc Michel <luc.mic...@amd.com>

> ---
> My motivation here is that we're about to add support for
> extending the SRST directive to specify a label so we
> can hyperlink to a documentation fragment; this gives us
> somewhere we can document the syntax for that.
> ---
>  MAINTAINERS                |  1 +
>  docs/devel/docs.rst        | 60 ++++++++++++++++++++++++++++++++++++++
>  docs/devel/index-build.rst |  1 +
>  hmp-commands-info.hx       | 10 +++----
>  hmp-commands.hx            | 10 +++----
>  qemu-img-cmds.hx           |  2 ++
>  qemu-options.hx            |  2 ++
>  7 files changed, 76 insertions(+), 10 deletions(-)
>  create mode 100644 docs/devel/docs.rst
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 695e0bd34fb..49b8ca9d1a8 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -4149,6 +4149,7 @@ F: docs/conf.py
>  F: docs/*/conf.py
>  F: docs/sphinx/
>  F: docs/_templates/
> +F: docs/devel/docs.rst
> 
>  Miscellaneous
>  -------------
> diff --git a/docs/devel/docs.rst b/docs/devel/docs.rst
> new file mode 100644
> index 00000000000..7da067905b8
> --- /dev/null
> +++ b/docs/devel/docs.rst
> @@ -0,0 +1,60 @@
> +
> +==================
> +QEMU Documentation
> +==================
> +
> +QEMU's documentation is written in reStructuredText format and
> +built using the Sphinx documentation generator. We generate both
> +the HTML manual and the manpages from the some documentation sources.
> +
> +hxtool and .hx files
> +--------------------
> +
> +The documentation for QEMU command line options and Human Monitor Protocol
> +(HMP) commands is written in files with the ``.hx`` suffix. These
> +are processed in two ways:
> +
> + * ``scripts/hxtool`` creates C header files from them, which are included
> +   in QEMU to do things like handle the ``--help`` option output
> + * a Sphinx extension in ``docs/sphinx/hxtool.py`` generates rST output
> +   to be included in the HTML or manpage documentation
> +
> +The syntax of these ``.hx`` files is simple. It is broadly an
> +alternation of C code put into the C output and rST format text
> +put into the documention. A few special directives are recognised;
> +these are all-caps and must be at the beginning of the line.
> +
> +``HXCOMM`` is the comment marker. The line, including any arbitrary
> +text after the marker, is discarded and appears neither in the C output
> +nor the documentation output.
> +
> +``SRST`` starts a reStructuredText section. Following lines
> +are put into the documentation verbatim, and discarded from the C output.
> +
> +``ERST`` ends the documentation section started with ``SRST``,
> +and switches back to a C code section.
> +
> +``DEFHEADING()`` defines a heading that should appear in both the
> +``--help`` output and in the documentation. This directive should
> +be in the C code block. If there is a string inside the brackets,
> +this is the heading to use. If this string is empty, it produces
> +a blank line in the ``--help`` output and is ignored for the rST
> +output.
> +
> +``ARCHHEADING()`` is a variant of ``DEFHEADING()`` which produces
> +the heading only if the specified guest architecture was compiled
> +into QEMU. This should be avoided in new documentation.
> +
> +Within C code sections, you should check the comments at the top
> +of the file to see what the expected usage is, because this
> +varies between files. For instance in ``qemu-options.hx`` we use
> +the ``DEF()`` macro to define each option and specify its ``--help``
> +text, but in ``hmp-commands.hx`` the C code sections are elements
> +of an array of structs of type ``HMPCommand`` which define the
> +name, behaviour and help text for each monitor command.
> +
> +In the file ``qemu-options.hx``, do not try to define a
> +reStructuredText label within a documentation section. This file
> +is included into two separate Sphinx documents, and some
> +versions of Sphinx will complain about the duplicate label
> +that results.
> diff --git a/docs/devel/index-build.rst b/docs/devel/index-build.rst
> index 57e8d39d985..90b406ca0ed 100644
> --- a/docs/devel/index-build.rst
> +++ b/docs/devel/index-build.rst
> @@ -10,6 +10,7 @@ the basics if you are adding new files and targets to the 
> build.
> 
>     build-system
>     kconfig
> +   docs
>     testing
>     acpi-bits
>     qtest
> diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
> index f5b37eb74ab..da120f82a32 100644
> --- a/hmp-commands-info.hx
> +++ b/hmp-commands-info.hx
> @@ -1,8 +1,8 @@
> -HXCOMM Use DEFHEADING() to define headings in both help text and rST.
> -HXCOMM Text between SRST and ERST is copied to the rST version and
> -HXCOMM discarded from C version.
> -HXCOMM DEF(command, args, callback, arg_string, help) is used to construct
> -HXCOMM monitor info commands
> +HXCOMM See docs/devel/docs.rst for the format of this file.
> +HXCOMM
> +HXCOMM This file defines the contents of an array of HMPCommand structs
> +HXCOMM which specify the name, behaviour and help text for HMP commands.
> +HXCOMM Text between SRST and ERST is rST format documentation.
>  HXCOMM HXCOMM can be used for comments, discarded from both rST and C.
>  HXCOMM
>  HXCOMM In this file, generally SRST fragments should have two extra
> diff --git a/hmp-commands.hx b/hmp-commands.hx
> index 765349ed149..2db5701d49c 100644
> --- a/hmp-commands.hx
> +++ b/hmp-commands.hx
> @@ -1,8 +1,8 @@
> -HXCOMM Use DEFHEADING() to define headings in both help text and rST.
> -HXCOMM Text between SRST and ERST is copied to the rST version and
> -HXCOMM discarded from C version.
> -HXCOMM DEF(command, args, callback, arg_string, help) is used to construct
> -HXCOMM monitor commands
> +HXCOMM See docs/devel/docs.rst for the format of this file.
> +HXCOMM
> +HXCOMM This file defines the contents of an array of HMPCommand structs
> +HXCOMM which specify the name, behaviour and help text for HMP commands.
> +HXCOMM Text between SRST and ERST is rST format documentation.
>  HXCOMM HXCOMM can be used for comments, discarded from both rST and C.
> 
> 
> diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx
> index 068692d13eb..c9dd70a8920 100644
> --- a/qemu-img-cmds.hx
> +++ b/qemu-img-cmds.hx
> @@ -1,3 +1,5 @@
> +HXCOMM See docs/devel/docs.rst for the format of this file.
> +HXCOMM
>  HXCOMM Keep the list of subcommands sorted by name.
>  HXCOMM Use DEFHEADING() to define headings in both help text and rST
>  HXCOMM Text between SRST and ERST are copied to rST version and
> diff --git a/qemu-options.hx b/qemu-options.hx
> index 42fd09e4de9..d3e31e65c25 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -1,3 +1,5 @@
> +HXCOMM See docs/devel/docs.rst for the format of this file.
> +HXCOMM
>  HXCOMM Use DEFHEADING() to define headings in both help text and rST.
>  HXCOMM Text between SRST and ERST is copied to the rST version and
>  HXCOMM discarded from C version.
> --
> 2.34.1
> 
> 

-- 

Reply via email to