[PATCH] docs-rst: automatically convert Graphviz and SVG images

Markus Heiser markus.heiser at darmarit.de
Thu Mar 2 19:06:39 UTC 2017


Hi Mauro,

> Tested here with the enclosed patch.

great, big step forward making /media/Makefile smaller ...  thanks a lot!!!!

> It crashed:
> Exception occurred:
>  File "/devel/v4l/patchwork/Documentation/sphinx/kfigure.py", line 222, in dot2format
>    sys.stderr.write(err)
> TypeError: write() argument must be str, not bytes
> The full traceback has been saved in /tmp/sphinx-err-_1vahbmg.log, if you want to report the issue to the developers.
> Please also report this if it was a user error, so that a better error message can be provided next time.
> A bug report can be filed in the tracker at <https://github.com/sphinx-doc/sphinx/issues>. Thanks!
> Documentation/Makefile.sphinx:69: recipe for target 'htmldocs' failed
> make[1]: *** [htmldocs] Error 1
> Makefile:1450: recipe for target 'htmldocs' failed
> make: *** [htmldocs] Error 2
> 
> Weird enough, it produced a Documentation/output/media/uapi/v4l/pipeline.svg file.

I guess that the dot command writes something to stderr. This is captured 
by the extension and printed to stderr ...

+def dot2format(dot_fname, out_fname):
...
+    exit_code = 42
+    with open(out_fname, "w") as out:
+        p = subprocess.Popen(
+            cmd, stdout = out, stderr = subprocess.PIPE )
+        nil, err = p.communicate()
+
+        sys.stderr.write(err)
+
+        exit_code = p.returncode
+        out.flush()
+    return bool(exit_code == 0)

>  File "/devel/v4l/patchwork/Documentation/sphinx/kfigure.py", line 222, in dot2format
>    sys.stderr.write(err)
> TypeError: write() argument must be str, not bytes

Do we need this stderr output? For a first test, uncomment the 
"sys.stderr.write(err)“ in line 222. Or, if we really need the
stderr, try:

-        sys.stderr.write(err)
+        sys.stderr.write(str(err))

I this fixes, there is another "sys.stderr.write(err)" in 
func svg2pdf(..) which should also fixed ….
 
+def svg2pdf(svg_fname, pdf_fname):
...
+    cmd = [convert_cmd, svg_fname, pdf_fname]
+    p = subprocess.Popen(
+        cmd, stdout = out, stderr = subprocess.PIPE )
+    nil, err = p.communicate()
+
-        sys.stderr.write(err)
+        sys.stderr.write(str(err))
+
+    exit_code = p.returncode
+    return bool(exit_code == 0)

Thanks!

 -- Markus --

> 
> 
> Thanks,
> Mauro
> 
> --
> 
> [PATCH] docs-rst: Don't use explicit Makefile rules to build SVG and
> DOT files
> 
> Now that we have an extension to handle images, use it.
> 
> Signed-off-by: Mauro Carvalho Chehab <mchehab at s-opensource.com>
> 
> diff --git a/Documentation/media/Makefile b/Documentation/media/Makefile
> index 32663602ff25..5bd52ea1eff0 100644
> --- a/Documentation/media/Makefile
> +++ b/Documentation/media/Makefile
> @@ -1,51 +1,6 @@
> -# Rules to convert DOT and SVG to Sphinx images
> -
> -SRC_DIR=$(srctree)/Documentation/media
> -
> -DOTS = \
> -	uapi/v4l/pipeline.dot \
> -
> -IMAGES = \
> -	typical_media_device.svg \
> -	uapi/dvb/dvbstb.svg \
> -	uapi/v4l/bayer.svg \
> -	uapi/v4l/constraints.svg \
> -	uapi/v4l/crop.svg \
> -	uapi/v4l/fieldseq_bt.svg \
> -	uapi/v4l/fieldseq_tb.svg \
> -	uapi/v4l/nv12mt.svg \
> -	uapi/v4l/nv12mt_example.svg \
> -	uapi/v4l/pipeline.svg \
> -	uapi/v4l/selection.svg \
> -	uapi/v4l/subdev-image-processing-full.svg \
> -	uapi/v4l/subdev-image-processing-scaling-multi-source.svg \
> -	uapi/v4l/subdev-image-processing-crop.svg \
> -	uapi/v4l/vbi_525.svg \
> -	uapi/v4l/vbi_625.svg \
> -	uapi/v4l/vbi_hsync.svg \
> -
> -DOTTGT := $(patsubst %.dot,%.svg,$(DOTS))
> -IMGDOT := $(patsubst %,$(SRC_DIR)/%,$(DOTTGT))
> -
> -IMGTGT := $(patsubst %.svg,%.pdf,$(IMAGES))
> -IMGPDF := $(patsubst %,$(SRC_DIR)/%,$(IMGTGT))
> -
> -cmd = $(echo-cmd) $(cmd_$(1))
> -
> -quiet_cmd_genpdf = GENPDF  $2
> -      cmd_genpdf = convert $2 $3
> -
> -quiet_cmd_gendot = DOT     $2
> -      cmd_gendot = dot -Tsvg $2 > $3
> -
> -%.pdf: %.svg
> -	@$(call cmd,genpdf,$<,$@)
> -
> -%.svg: %.dot
> -	@$(call cmd,gendot,$<,$@)
> -
> # Rules to convert a .h file to inline RST documentation
> 
> +SRC_DIR=$(srctree)/Documentation/media
> PARSER = $(srctree)/Documentation/sphinx/parse-headers.pl
> UAPI = $(srctree)/include/uapi/linux
> KAPI = $(srctree)/include/linux
> diff --git a/Documentation/media/intro.rst b/Documentation/media/intro.rst
> index 8f7490c9a8ef..5562fba1d51d 100644
> --- a/Documentation/media/intro.rst
> +++ b/Documentation/media/intro.rst
> @@ -13,8 +13,8 @@ A typical media device hardware is shown at :ref:`typical_media_device`.
> 
> .. _typical_media_device:
> 
> -.. figure::  typical_media_device.*
> -    :alt:    typical_media_device.pdf / typical_media_device.svg
> +.. kernel-figure::  typical_media_device.svg
> +    :alt:    typical_media_device.svg
>     :align:  center
> 
>     Typical Media Device
> diff --git a/Documentation/media/uapi/dvb/intro.rst b/Documentation/media/uapi/dvb/intro.rst
> index 2ed5c23102b4..0e76067a5b58 100644
> --- a/Documentation/media/uapi/dvb/intro.rst
> +++ b/Documentation/media/uapi/dvb/intro.rst
> @@ -55,8 +55,8 @@ Overview
> 
> .. _stb_components:
> 
> -.. figure::  dvbstb.*
> -    :alt:    dvbstb.pdf / dvbstb.svg
> +.. kernel-figure::  dvbstb.svg
> +    :alt:    dvbstb.svg
>     :align:  center
> 
>     Components of a DVB card/STB
> diff --git a/Documentation/media/uapi/v4l/crop.rst b/Documentation/media/uapi/v4l/crop.rst
> index be58894c9c89..adea29b14135 100644
> --- a/Documentation/media/uapi/v4l/crop.rst
> +++ b/Documentation/media/uapi/v4l/crop.rst
> @@ -53,8 +53,8 @@ Cropping Structures
> 
> .. _crop-scale:
> 
> -.. figure::  crop.*
> -    :alt:    crop.pdf / crop.svg
> +.. kernel-figure::  crop.svg
> +    :alt:    crop.svg
>     :align:  center
> 
>     Image Cropping, Insertion and Scaling
> diff --git a/Documentation/media/uapi/v4l/dev-raw-vbi.rst b/Documentation/media/uapi/v4l/dev-raw-vbi.rst
> index baf5f2483927..f761d3a93783 100644
> --- a/Documentation/media/uapi/v4l/dev-raw-vbi.rst
> +++ b/Documentation/media/uapi/v4l/dev-raw-vbi.rst
> @@ -221,8 +221,8 @@ and always returns default parameters as :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` does
> 
> .. _vbi-hsync:
> 
> -.. figure::  vbi_hsync.*
> -    :alt:    vbi_hsync.pdf / vbi_hsync.svg
> +.. kernel-figure::  vbi_hsync.svg
> +    :alt:    vbi_hsync.svg
>     :align:  center
> 
>     **Figure 4.1. Line synchronization**
> @@ -230,8 +230,8 @@ and always returns default parameters as :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` does
> 
> .. _vbi-525:
> 
> -.. figure::  vbi_525.*
> -    :alt:    vbi_525.pdf / vbi_525.svg
> +.. kernel-figure::  vbi_525.svg
> +    :alt:    vbi_525.svg
>     :align:  center
> 
>     **Figure 4.2. ITU-R 525 line numbering (M/NTSC and M/PAL)**
> @@ -240,8 +240,8 @@ and always returns default parameters as :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` does
> 
> .. _vbi-625:
> 
> -.. figure::  vbi_625.*
> -    :alt:    vbi_625.pdf / vbi_625.svg
> +.. kernel-figure::  vbi_625.svg
> +    :alt:    vbi_625.svg
>     :align:  center
> 
>     **Figure 4.3. ITU-R 625 line numbering**
> diff --git a/Documentation/media/uapi/v4l/dev-subdev.rst b/Documentation/media/uapi/v4l/dev-subdev.rst
> index cd2870180208..0a54e4d95013 100644
> --- a/Documentation/media/uapi/v4l/dev-subdev.rst
> +++ b/Documentation/media/uapi/v4l/dev-subdev.rst
> @@ -99,8 +99,8 @@ the video sensor and the host image processing hardware.
> 
> .. _pipeline-scaling:
> 
> -.. figure::  pipeline.*
> -    :alt:    pipeline.pdf / pipeline.svg
> +.. kernel-figure::  pipeline.dot
> +    :alt:    pipeline.dot
>     :align:  center
> 
>     Image Format Negotiation on Pipelines
> @@ -404,8 +404,8 @@ selection will refer to the sink pad format dimensions instead.
> 
> .. _subdev-image-processing-crop:
> 
> -.. figure::  subdev-image-processing-crop.*
> -    :alt:    subdev-image-processing-crop.pdf / subdev-image-processing-crop.svg
> +.. kernel-figure::  subdev-image-processing-crop.svg
> +    :alt:    subdev-image-processing-crop.svg
>     :align:  center
> 
>     **Figure 4.5. Image processing in subdevs: simple crop example**
> @@ -421,8 +421,8 @@ pad.
> 
> .. _subdev-image-processing-scaling-multi-source:
> 
> -.. figure::  subdev-image-processing-scaling-multi-source.*
> -    :alt:    subdev-image-processing-scaling-multi-source.pdf / subdev-image-processing-scaling-multi-source.svg
> +.. kernel-figure::  subdev-image-processing-scaling-multi-source.svg
> +    :alt:    subdev-image-processing-scaling-multi-source.svg
>     :align:  center
> 
>     **Figure 4.6. Image processing in subdevs: scaling with multiple sources**
> @@ -437,8 +437,8 @@ an area at location specified by the source crop rectangle from it.
> 
> .. _subdev-image-processing-full:
> 
> -.. figure::  subdev-image-processing-full.*
> -    :alt:    subdev-image-processing-full.pdf / subdev-image-processing-full.svg
> +.. kernel-figure::  subdev-image-processing-full.svg
> +    :alt:    subdev-image-processing-full.svg
>     :align:  center
> 
>     **Figure 4.7. Image processing in subdevs: scaling and composition with multiple sinks and sources**
> diff --git a/Documentation/media/uapi/v4l/field-order.rst b/Documentation/media/uapi/v4l/field-order.rst
> index e05fb1041363..7a1a0ac8e37a 100644
> --- a/Documentation/media/uapi/v4l/field-order.rst
> +++ b/Documentation/media/uapi/v4l/field-order.rst
> @@ -141,8 +141,8 @@ enum v4l2_field
> Field Order, Top Field First Transmitted
> ========================================
> 
> -.. figure::  fieldseq_tb.*
> -    :alt:    fieldseq_tb.pdf / fieldseq_tb.svg
> +.. kernel-figure::  fieldseq_tb.svg
> +    :alt:    fieldseq_tb.svg
>     :align:  center
> 
> 
> @@ -151,7 +151,7 @@ Field Order, Top Field First Transmitted
> Field Order, Bottom Field First Transmitted
> ===========================================
> 
> -.. figure::  fieldseq_bt.*
> -    :alt:    fieldseq_bt.pdf / fieldseq_bt.svg
> +.. kernel-figure::  fieldseq_bt.svg
> +    :alt:    fieldseq_bt.svg
>     :align:  center
> 
> diff --git a/Documentation/media/uapi/v4l/pixfmt-nv12mt.rst b/Documentation/media/uapi/v4l/pixfmt-nv12mt.rst
> index 32d0c8743460..a4d64edc6200 100644
> --- a/Documentation/media/uapi/v4l/pixfmt-nv12mt.rst
> +++ b/Documentation/media/uapi/v4l/pixfmt-nv12mt.rst
> @@ -33,8 +33,8 @@ Layout of macroblocks in memory is presented in the following figure.
> 
> .. _nv12mt:
> 
> -.. figure::  nv12mt.*
> -    :alt:    nv12mt.pdf / nv12mt.svg
> +.. kernel-figure::  nv12mt.svg
> +    :alt:    nv12mt.svg
>     :align:  center
> 
>     V4L2_PIX_FMT_NV12MT macroblock Z shape memory layout
> @@ -50,8 +50,8 @@ interleaved. Height of the buffer is aligned to 32.
> 
> .. _nv12mt_ex:
> 
> -.. figure::  nv12mt_example.*
> -    :alt:    nv12mt_example.pdf / nv12mt_example.svg
> +.. kernel-figure::  nv12mt_example.svg
> +    :alt:    nv12mt_example.svg
>     :align:  center
> 
>     Example V4L2_PIX_FMT_NV12MT memory layout of macroblocks
> diff --git a/Documentation/media/uapi/v4l/selection-api-003.rst b/Documentation/media/uapi/v4l/selection-api-003.rst
> index 21686f93c38f..04e9384e1be8 100644
> --- a/Documentation/media/uapi/v4l/selection-api-003.rst
> +++ b/Documentation/media/uapi/v4l/selection-api-003.rst
> @@ -7,8 +7,8 @@ Selection targets
> 
> .. _sel-targets-capture:
> 
> -.. figure::  selection.*
> -    :alt:    selection.pdf / selection.svg
> +.. kernel-figure::  selection.svg
> +    :alt:    selection.svg
>     :align:  center
> 
>     Cropping and composing targets
> diff --git a/Documentation/media/uapi/v4l/subdev-formats.rst b/Documentation/media/uapi/v4l/subdev-formats.rst
> index d6152c907b8b..4fbf2e29e653 100644
> --- a/Documentation/media/uapi/v4l/subdev-formats.rst
> +++ b/Documentation/media/uapi/v4l/subdev-formats.rst
> @@ -1514,8 +1514,8 @@ be named ``MEDIA_BUS_FMT_SRGGB10_2X8_PADHI_LE``.
> 
> .. _bayer-patterns:
> 
> -.. figure::  bayer.*
> -    :alt:    bayer.pdf / bayer.svg
> +.. figure::  bayer.svg
> +    :alt:    bayer.svg
>     :align:  center
> 
>     **Figure 4.8 Bayer Patterns**
> 



More information about the dri-devel mailing list