Ping^2 on this one? -- PMM
On Mon, 19 May 2025 at 15:32, Peter Maydell <peter.mayd...@linaro.org> wrote: > > Ping? Any opinions on this? > > In the interim we've applied commit 82707dd4f0 to drop > the specific duplicate-label that is causing problems > right now, so patch 2 here will need the obvious trivial > update. But I do think this is a better approach than > forever avoiding defining labels in .rst.inc files... > > thanks > -- PMM > > On Tue, 29 Apr 2025 at 17:32, Peter Maydell <peter.mayd...@linaro.org> wrote: > > > > Sphinx requires that labels within documents are unique across the > > whole manual. This is because the "create a hyperlink" directive > > specifies only the name of the label, not a filename+label. Some > > Sphinx versions will warn about duplicate labels, but even if there > > is no warning there is still an ambiguity and no guarantee that the > > hyperlink will be created to the intended target. > > > > For QEMU this is awkward, because we have various .rst.inc fragments > > which we include into multiple .rst files. If you define a label in > > the .rst.inc file then it will be a duplicate label. We have mostly > > worked around this by not putting labels into those .rst.inc files, > > or by adding "insert a label" functionality into the hxtool extension > > (see commit 1eeb432a953b0 "doc/sphinx/hxtool.py: add optional label > > argument to SRST directive"). However, we let one into the codebase > > without initially noticing, in commit 7f6314427e ("docs/devel: add a > > codebase section"), because not all versions of Sphinx warn about > > the duplicate labels. > > > > This patchset resolves the problem by implementing a small Sphinx > > extension. The extension lets you write in a .rst.inc: > > > > .. uniquelabel:: mylabel > > > > and it will be as if you had written: > > > > .. _foo/bar-mylabel > > > > where foo/bar.rst is the top level document that includes the > > .rst.inc file. > > > > Patch 1 is the extension; patch 2 is the use of it to fix the > > problem in qemu-block-drivers.rst.inc. (Concretely, the result is > > that instead of an ambiguous "nbd" label, we now have separate > > "system/images-nbd" and "system/qemu-block-drivers-nbd" labels. > > We want to link to the former, because the latter is in the > > manpage, not the proper HTML manual.) > > > > This patchset is a bit RFC quality -- I have not tested it > > super thoroughly, and the extension itself is written based on > > our existing ones, because I'm neither a Python nor a Sphinx > > expert. I figured I'd send it out to see if people agreed that > > it was the right way to solve this problem. > > > > (In theory we could remove the SRST(label) functionality from > > the hxtool extension and have the .hx files use uniquelabel. > > Not sure that's worthwhile at this point.) > > > > PS: I find that our extensions are confused about whether they > > should set "required_arguments = 1" or "required_argument = 1"; > > probably the latter are all bugs that happen to have no bad > > side effects... > > > > thanks > > -- PMM > > > > Peter Maydell (2): > > docs: Create a uniquelabel Sphinx extension > > docs: Use uniquelabel in qemu-block-drivers.rst.inc > > > > docs/conf.py | 1 + > > docs/devel/codebase.rst | 2 +- > > docs/sphinx/uniquelabel.py | 74 ++++++++++++++++++++++++++ > > docs/system/qemu-block-drivers.rst.inc | 2 +- > > 4 files changed, 77 insertions(+), 2 deletions(-) > > create mode 100644 docs/sphinx/uniquelabel.py > > > > --