diff mbox series

[v2,1/2] python3-sphinxcontrib-svg2pdfconverter: add new recipe

Message ID 20251202-svg2pdf-v2-1-529856a2b6da@cherry.de
State Accepted, archived
Commit f3f001967744b593fb39c32058d29595bbf0ffb6
Headers show
Series buildtools-docs-tarball: add new Sphinx extension svg2pdfconverter | expand

Commit Message

Quentin Schulz Dec. 2, 2025, 6:05 p.m. UTC
From: Quentin Schulz <quentin.schulz@cherry.de>

This will be a dependency for building the Yocto docs soon, so let's add
a recipe for it.

This does SVG to PDF (or PNG) conversion for images used in Sphinx
projects.

It exposes three different Sphinx extensions, each using a different
tool for the conversion:
- cairosvg, a Python module with no available recipe,
- inkscape, only available in seemingly unmaintained 3rd party layer,
- rsvg-convert,

So we'll only support the last extension for now.

Signed-off-by: Quentin Schulz <quentin.schulz@cherry.de>
---
 .../python3-sphinxcontrib-svg2pdfconverter_2.0.0.bb  | 20 ++++++++++++++++++++
 scripts/lib/recipetool/create_buildsys_python.py     |  8 ++++++--
 2 files changed, 26 insertions(+), 2 deletions(-)

Comments

Antonin Godard Dec. 3, 2025, 8:49 a.m. UTC | #1
Hi,

On Tue Dec 2, 2025 at 7:05 PM CET, Quentin Schulz wrote:
> From: Quentin Schulz <quentin.schulz@cherry.de>
>
> This will be a dependency for building the Yocto docs soon, so let's add
> a recipe for it.
>
> This does SVG to PDF (or PNG) conversion for images used in Sphinx
> projects.
>
> It exposes three different Sphinx extensions, each using a different
> tool for the conversion:
> - cairosvg, a Python module with no available recipe,
> - inkscape, only available in seemingly unmaintained 3rd party layer,
> - rsvg-convert,
>
> So we'll only support the last extension for now.
>
> Signed-off-by: Quentin Schulz <quentin.schulz@cherry.de>
> ---
>  .../python3-sphinxcontrib-svg2pdfconverter_2.0.0.bb  | 20 ++++++++++++++++++++
>  scripts/lib/recipetool/create_buildsys_python.py     |  8 ++++++--
>  2 files changed, 26 insertions(+), 2 deletions(-)
>
> diff --git a/meta/recipes-devtools/python/python3-sphinxcontrib-svg2pdfconverter_2.0.0.bb b/meta/recipes-devtools/python/python3-sphinxcontrib-svg2pdfconverter_2.0.0.bb
> new file mode 100644
> index 0000000000..c686ebff23
> --- /dev/null
> +++ b/meta/recipes-devtools/python/python3-sphinxcontrib-svg2pdfconverter_2.0.0.bb
> @@ -0,0 +1,20 @@
> +SUMMARY = "Sphinx SVG to PDF or PNG converter extension"
> +HOMEPAGE = "https://github.com/missinglinkelectronics/sphinxcontrib-svg2pdfconverter"
> +LICENSE = "BSD-2-Clause"
> +LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=b11cf936853a71258d4b57bb1849a3f9"
> +
> +SRC_URI[sha256sum] = "ab9c8f1080391e231812d20abf2657a69ee35574563b1014414f953964a95fa3"
> +
> +inherit pypi python_setuptools_build_meta
> +
> +PYPI_PACKAGE = "sphinxcontrib_svg2pdfconverter"
> +UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
> +
> +RDEPENDS:${PN} = "python3-sphinx"
> +# Only support sphinxcontrib.rsvgconverter for now.
> +# As cairosvgconverter depends on cairosvg module, no recipe available yet
> +# As inkscapeconverter depends on inkscape, recipe in meta-office, 3rd-party
> +# layer not updated in years
> +RDEPENDS:${PN} += "librsvg"
> +
> +BBCLASSEXTEND = "native nativesdk"

Patchtest should have seen this, but you need to add an entry for the recipe in
meta/conf/distro/include/maintainers.inc. I can assign myself otherwise as I
maintain some of the other docs related recipes.

> diff --git a/scripts/lib/recipetool/create_buildsys_python.py b/scripts/lib/recipetool/create_buildsys_python.py
> index a807dafae5..c6a40f5a7d 100644
> --- a/scripts/lib/recipetool/create_buildsys_python.py
> +++ b/scripts/lib/recipetool/create_buildsys_python.py
> @@ -858,10 +858,14 @@ class PythonPyprojectTomlRecipeHandler(PythonRecipeHandler):
>              if metadata:
>                  for field, values in metadata.items():
>                      if field == "license":
> -                        # For setuptools.build_meta and flit, licence is a table
> +                        # For flit, licence is a table
> +                        # For setuptools.build_meta, license can be:
> +                        #  - an SPDX license expression as string, since PEP-0639,
> +                        #  - a table, pre-PEP-0639,
>                          # but for poetry licence is a string
>                          # for hatchling, both table (jsonschema) and string (iniconfig) have been used
> -                        if build_backend == "poetry.core.masonry.api":
> +                        if build_backend == "poetry.core.masonry.api" or \
> +                                (build_backend == "setuptools.build_meta" and type(values) == str):

Should this be sent in a separate patch? It looks like it's fixing a bug in
recipetool, there's no explanation about it in your commit message.

Otherwise, I was able to build the tarball and test building the docs with it
(and your other docs patch)!

Thanks,
Antonin
Quentin Schulz Dec. 3, 2025, 9:23 a.m. UTC | #2
Hi Antonin,

On 12/3/25 9:49 AM, Antonin Godard wrote:
> Hi,
> 
> On Tue Dec 2, 2025 at 7:05 PM CET, Quentin Schulz wrote:
>> From: Quentin Schulz <quentin.schulz@cherry.de>
>>
>> This will be a dependency for building the Yocto docs soon, so let's add
>> a recipe for it.
>>
>> This does SVG to PDF (or PNG) conversion for images used in Sphinx
>> projects.
>>
>> It exposes three different Sphinx extensions, each using a different
>> tool for the conversion:
>> - cairosvg, a Python module with no available recipe,
>> - inkscape, only available in seemingly unmaintained 3rd party layer,
>> - rsvg-convert,
>>
>> So we'll only support the last extension for now.
>>
>> Signed-off-by: Quentin Schulz <quentin.schulz@cherry.de>
>> ---
>>   .../python3-sphinxcontrib-svg2pdfconverter_2.0.0.bb  | 20 ++++++++++++++++++++
>>   scripts/lib/recipetool/create_buildsys_python.py     |  8 ++++++--
>>   2 files changed, 26 insertions(+), 2 deletions(-)
>>
>> diff --git a/meta/recipes-devtools/python/python3-sphinxcontrib-svg2pdfconverter_2.0.0.bb b/meta/recipes-devtools/python/python3-sphinxcontrib-svg2pdfconverter_2.0.0.bb
>> new file mode 100644
>> index 0000000000..c686ebff23
>> --- /dev/null
>> +++ b/meta/recipes-devtools/python/python3-sphinxcontrib-svg2pdfconverter_2.0.0.bb
>> @@ -0,0 +1,20 @@
>> +SUMMARY = "Sphinx SVG to PDF or PNG converter extension"
>> +HOMEPAGE = "https://github.com/missinglinkelectronics/sphinxcontrib-svg2pdfconverter"
>> +LICENSE = "BSD-2-Clause"
>> +LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=b11cf936853a71258d4b57bb1849a3f9"
>> +
>> +SRC_URI[sha256sum] = "ab9c8f1080391e231812d20abf2657a69ee35574563b1014414f953964a95fa3"
>> +
>> +inherit pypi python_setuptools_build_meta
>> +
>> +PYPI_PACKAGE = "sphinxcontrib_svg2pdfconverter"
>> +UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
>> +
>> +RDEPENDS:${PN} = "python3-sphinx"
>> +# Only support sphinxcontrib.rsvgconverter for now.
>> +# As cairosvgconverter depends on cairosvg module, no recipe available yet
>> +# As inkscapeconverter depends on inkscape, recipe in meta-office, 3rd-party
>> +# layer not updated in years
>> +RDEPENDS:${PN} += "librsvg"
>> +
>> +BBCLASSEXTEND = "native nativesdk"
> 
> Patchtest should have seen this, but you need to add an entry for the recipe in
> meta/conf/distro/include/maintainers.inc. I can assign myself otherwise as I
> maintain some of the other docs related recipes.
> 

I'll add yourself since you don't mind, thanks!

>> diff --git a/scripts/lib/recipetool/create_buildsys_python.py b/scripts/lib/recipetool/create_buildsys_python.py
>> index a807dafae5..c6a40f5a7d 100644
>> --- a/scripts/lib/recipetool/create_buildsys_python.py
>> +++ b/scripts/lib/recipetool/create_buildsys_python.py
>> @@ -858,10 +858,14 @@ class PythonPyprojectTomlRecipeHandler(PythonRecipeHandler):
>>               if metadata:
>>                   for field, values in metadata.items():
>>                       if field == "license":
>> -                        # For setuptools.build_meta and flit, licence is a table
>> +                        # For flit, licence is a table
>> +                        # For setuptools.build_meta, license can be:
>> +                        #  - an SPDX license expression as string, since PEP-0639,
>> +                        #  - a table, pre-PEP-0639,
>>                           # but for poetry licence is a string
>>                           # for hatchling, both table (jsonschema) and string (iniconfig) have been used
>> -                        if build_backend == "poetry.core.masonry.api":
>> +                        if build_backend == "poetry.core.masonry.api" or \
>> +                                (build_backend == "setuptools.build_meta" and type(values) == str):
> 
> Should this be sent in a separate patch? It looks like it's fixing a bug in
> recipetool, there's no explanation about it in your commit message.
> 

Sigh... I was working on this after sending the v1 and forgot to stash 
it before preparing the v2. I'll send a v3, thanks for catching this one.

Cheers,
Quentin
diff mbox series

Patch

diff --git a/meta/recipes-devtools/python/python3-sphinxcontrib-svg2pdfconverter_2.0.0.bb b/meta/recipes-devtools/python/python3-sphinxcontrib-svg2pdfconverter_2.0.0.bb
new file mode 100644
index 0000000000..c686ebff23
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-sphinxcontrib-svg2pdfconverter_2.0.0.bb
@@ -0,0 +1,20 @@ 
+SUMMARY = "Sphinx SVG to PDF or PNG converter extension"
+HOMEPAGE = "https://github.com/missinglinkelectronics/sphinxcontrib-svg2pdfconverter"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=b11cf936853a71258d4b57bb1849a3f9"
+
+SRC_URI[sha256sum] = "ab9c8f1080391e231812d20abf2657a69ee35574563b1014414f953964a95fa3"
+
+inherit pypi python_setuptools_build_meta
+
+PYPI_PACKAGE = "sphinxcontrib_svg2pdfconverter"
+UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
+
+RDEPENDS:${PN} = "python3-sphinx"
+# Only support sphinxcontrib.rsvgconverter for now.
+# As cairosvgconverter depends on cairosvg module, no recipe available yet
+# As inkscapeconverter depends on inkscape, recipe in meta-office, 3rd-party
+# layer not updated in years
+RDEPENDS:${PN} += "librsvg"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/scripts/lib/recipetool/create_buildsys_python.py b/scripts/lib/recipetool/create_buildsys_python.py
index a807dafae5..c6a40f5a7d 100644
--- a/scripts/lib/recipetool/create_buildsys_python.py
+++ b/scripts/lib/recipetool/create_buildsys_python.py
@@ -858,10 +858,14 @@  class PythonPyprojectTomlRecipeHandler(PythonRecipeHandler):
             if metadata:
                 for field, values in metadata.items():
                     if field == "license":
-                        # For setuptools.build_meta and flit, licence is a table
+                        # For flit, licence is a table
+                        # For setuptools.build_meta, license can be:
+                        #  - an SPDX license expression as string, since PEP-0639,
+                        #  - a table, pre-PEP-0639,
                         # but for poetry licence is a string
                         # for hatchling, both table (jsonschema) and string (iniconfig) have been used
-                        if build_backend == "poetry.core.masonry.api":
+                        if build_backend == "poetry.core.masonry.api" or \
+                                (build_backend == "setuptools.build_meta" and type(values) == str):
                             value = values
                         else:
                             value = values.get("text", "")