All of lore.kernel.org
 help / color / mirror / Atom feed
* Functions and data structure cross references with Sphinx
@ 2016-08-01 11:25 Mauro Carvalho Chehab
  2016-08-05  7:29 ` Markus Heiser
  0 siblings, 1 reply; 5+ messages in thread
From: Mauro Carvalho Chehab @ 2016-08-01 11:25 UTC (permalink / raw)
  To: Jani Nikula, Markus Heiser
  Cc: Jonathan Corbet, Linux Media Mailing List, linux-doc

There's one remaining major issue I noticed after the conversion of the
media books to Sphinx:

While sphinx complains if a cross-reference (using :ref:) points to an
undefined reference, the same doesn't happen if the reference uses
:c:func: and :c:type:.

In practice, it means that, if we do some typo there, or if we forget to
add the function/struct prototype (or use the wrong domain, like :cpp:),
Sphinx won't generate the proper cross-reference, nor warning the user.

That's specially bad for media, as, while we're using the c domain for
the kAPI and driver-specific books, we need to use the cpp domain on the 
uAPI book - as the c domain doesn't allow multiple declarations for
syscalls, and we have multiple pages for read, write, open, close, 
poll and ioctl.

It would be good to have a way to run Sphinx on some "pedantic"
mode or have something similar to xmlint that would be complaining
about invalid c/cpp domain references.

Thanks,
Mauro

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Functions and data structure cross references with Sphinx
  2016-08-01 11:25 Functions and data structure cross references with Sphinx Mauro Carvalho Chehab
@ 2016-08-05  7:29 ` Markus Heiser
  2016-08-05 10:47   ` Mauro Carvalho Chehab
  0 siblings, 1 reply; 5+ messages in thread
From: Markus Heiser @ 2016-08-05  7:29 UTC (permalink / raw)
  To: Mauro Carvalho Chehab
  Cc: Jani Nikula, Jonathan Corbet, Linux Media Mailing List, linux-doc


Am 01.08.2016 um 13:25 schrieb Mauro Carvalho Chehab <mchehab@s-opensource.com>:

> There's one remaining major issue I noticed after the conversion of the
> media books to Sphinx:
> 
> While sphinx complains if a cross-reference (using :ref:) points to an
> undefined reference, the same doesn't happen if the reference uses
> :c:func: and :c:type:.
> 
> In practice, it means that, if we do some typo there, or if we forget to
> add the function/struct prototype (or use the wrong domain, like :cpp:),
> Sphinx won't generate the proper cross-reference, nor warning the user.
> 
> That's specially bad for media, as, while we're using the c domain for
> the kAPI and driver-specific books, we need to use the cpp domain on the 
> uAPI book - as the c domain doesn't allow multiple declarations for
> syscalls, and we have multiple pages for read, write, open, close, 
> poll and ioctl.
> 
> It would be good to have a way to run Sphinx on some "pedantic"
> mode or have something similar to xmlint that would be complaining
> about invalid c/cpp domain references.
> 
> Thanks,
> Mauro

Hi Mauro,

there is a nit-picky mode [1], which could be activated by setting
"nitpicky=True" in the conf.py or alternative, set "-n" to the 
SPHINXOPTS:

  make SPHINXOPTS=-n htmldocs

Within nit-picky mode, Sphinx will warn about **all** references. This
might be more then you want. For this, in the conf.py you could
assemble a "nitpick_ignore" list [2]. But I think, assemble the
ignore list is quite a lot of work.

[1] http://www.sphinx-doc.org/en/stable/config.html#confval-nitpicky
[2] http://www.sphinx-doc.org/en/stable/config.html#confval-nitpick_ignore

-- Markus 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Functions and data structure cross references with Sphinx
  2016-08-05  7:29 ` Markus Heiser
@ 2016-08-05 10:47   ` Mauro Carvalho Chehab
  2016-08-05 12:22     ` Markus Heiser
  0 siblings, 1 reply; 5+ messages in thread
From: Mauro Carvalho Chehab @ 2016-08-05 10:47 UTC (permalink / raw)
  To: Markus Heiser
  Cc: Jani Nikula, Jonathan Corbet, Linux Media Mailing List, linux-doc

Em Fri, 5 Aug 2016 09:29:23 +0200
Markus Heiser <markus.heiser@darmarit.de> escreveu:

> Am 01.08.2016 um 13:25 schrieb Mauro Carvalho Chehab <mchehab@s-opensource.com>:
> 
> > There's one remaining major issue I noticed after the conversion of the
> > media books to Sphinx:
> > 
> > While sphinx complains if a cross-reference (using :ref:) points to an
> > undefined reference, the same doesn't happen if the reference uses
> > :c:func: and :c:type:.
> > 
> > In practice, it means that, if we do some typo there, or if we forget to
> > add the function/struct prototype (or use the wrong domain, like :cpp:),
> > Sphinx won't generate the proper cross-reference, nor warning the user.
> > 
> > That's specially bad for media, as, while we're using the c domain for
> > the kAPI and driver-specific books, we need to use the cpp domain on the 
> > uAPI book - as the c domain doesn't allow multiple declarations for
> > syscalls, and we have multiple pages for read, write, open, close, 
> > poll and ioctl.
> > 
> > It would be good to have a way to run Sphinx on some "pedantic"
> > mode or have something similar to xmlint that would be complaining
> > about invalid c/cpp domain references.
> > 
> > Thanks,
> > Mauro  
> 
> Hi Mauro,
> 
> there is a nit-picky mode [1], which could be activated by setting
> "nitpicky=True" in the conf.py or alternative, set "-n" to the 
> SPHINXOPTS:
> 
>   make SPHINXOPTS=-n htmldocs
> 
> Within nit-picky mode, Sphinx will warn about **all** references. This
> might be more then you want. For this, in the conf.py you could
> assemble a "nitpick_ignore" list [2]. But I think, assemble the
> ignore list is quite a lot of work.
> 
> [1] http://www.sphinx-doc.org/en/stable/config.html#confval-nitpicky
> [2] http://www.sphinx-doc.org/en/stable/config.html#confval-nitpick_ignore

Yeah, this is what I was looking for.

We indeed want to use this option on media, but there are some things
that need to be addressed. From some quick tests here, what I noticed
is:

1) Sphinx will generate several references that should be safely ignored
for everyone, like "enum", "u32", "int32_t", "bool", "NULL", etc;

2) the usage of cpp domain for system calls make several symbols to
not match, as the cpp function prototype will generate cross references
for the cpp domain, instead of using the c domain. So, we need a
better way to fix it using the c domain, or convert everything to the
cpp domain;

3) The references generated from the header files I'm parsing don't
use the c (or cpp) domain. They're declared at the media book as a
normal reference:
	Documentation/media/uapi/v4l/field-order.rst:.. _v4l2-field:

and cross-referenced with:
	ref:`v4l2_field <v4l2-field>`

Is there a way to change it to the c domain?


4) there are several references that, IMHO, should be nitpick-ignored
only when the book is generated stand alone. For example, at the
media docbooks, we have references for things like:

- pci_dev, mutex, off_t, container_of, etc - those are generic
  references for the symbols that every driver uses, but, as we
  don't have the books with those converted yet, nitpick complains.
  Once we have such references, they should be ignored *only* when
  the book is generated standalone. As those are "core" symbols,
  they should be already be documented, but the book was not
  ported from DocBook yet. Once we have everything ported to
  Sphinx, I would expect that they all will vanish (and, if not,
  IMHO, documenting them should be prioritized).

- References for subsystem-specific symbols like: spi_board_info,
  led_classdev_flash, i2c_adapter, etc. Those would require that
  the maintainers of the specific subsystems to add documentation
  to them, as I bet several such symbols won't be currently
  documented. So, even after the port, I afraid that we'll still
  have several such symbols missing.

To address (3), we need different sets of nitpick ignore lists.

At least in my case, I have two different procedures, depending
on the time at the Kernel release cycle:

a) daily patch merge workflow
   --------------------------

In any case, for (3), I don't want to see those warnings during
my daily patch handling process where I rebuild documentation for
every patch that touches a documented file. I want to see only
things like:
	Documentation/media/uapi/v4l/hist-v4l2.rst:1295: WARNING: c:type reference target not found: struct v4l2_buffer

With indicates that a new patch would be introducing documentation
gaps.

So, we need a way to have a per-subsystem nitpick_ignore list
(or a way to pass such list via command line), for us to be able to
ignore "alien" symbols that aren't part of the subsystem we're
maintaining.

b) preparation for the merge window
   --------------------------------

Late at the patch handling cycle, I run a very long task here that
builds the media subsystem for 50+ different archs. I also check and
fix smatch/sparse warnings. During such time, I would love to view
the full list of missing symbols, in order to be able to handle
eventual cross-subsystem wrong references (or eventually help documenting
something that we use at the media subsystem).

So, I would need to use a different nitpick_ignore list.

Is there a way for us to specify the nitpick_ignore list (or a different
conf.py) via command line?

Btw, I'm enclosing a patch adding several of those references that are
alien to the media subsystem and currently causes nitpick complains.


doc-rst: ignore several undefined symbols in nitpick mode
    
using Sphinx in nitpick mode is too verbose to make it useful.
So, we need to make it less verbose, in order to be able to
actually use it.
    
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>

diff --git a/Documentation/conf.py b/Documentation/conf.py
index 96b7aa66c89c..d1805b8710c3 100644
--- a/Documentation/conf.py
+++ b/Documentation/conf.py
@@ -419,3 +419,88 @@ pdf_documents = [
 # line arguments.
 kerneldoc_bin = '../scripts/kernel-doc'
 kerneldoc_srctree = '..'
+
+#
+# It is possible to run Sphinx in nickpick mode with:
+#	make SPHINXOPTS=-n htmldocs
+# In such case, it will complain about lots of missing references that
+#	1) are just typedefs like: bool, __u32, etc;
+#	2) It will complain for things like: enum, NULL;
+#	3) It will complain for symbols that should be on different
+#	   books (but currently aren't ported to ReST)
+# The list below has a list of such symbols to be ignored in nitpick mode
+#
+nitpick_ignore = [
+	("c:func", "clock_gettime"),
+	("c:func", "close"),
+	("c:func", "container_of"),
+	("c:func", "determine_valid_ioctls"),
+	("c:func", "ERR_PTR"),
+	("c:func", "ioctl"),
+	("c:func", "IS_ERR"),
+	("c:func", "mmap"),
+	("c:func", "open"),
+	("c:func", "pci_name"),
+	("c:func", "poll"),
+	("c:func", "PTR_ERR"),
+	("c:func", "read"),
+	("c:func", "release"),
+	("c:func", "set"),
+	("c:func", "struct fd_set"),
+	("c:func", "struct pollfd"),
+	("c:func", "usb_make_path"),
+	("c:func", "write"),
+	("c:type", "atomic_t"),
+	("c:type", "bool"),
+	("c:type", "buf_queue"),
+	("c:type", "device"),
+	("c:type", "device_driver"),
+	("c:type", "device_node"),
+	("c:type", "enum"),
+	("c:type", "file"),
+	("c:type", "i2c_adapter"),
+	("c:type", "i2c_board_info"),
+	("c:type", "i2c_client"),
+	("c:type", "ktime_t"),
+	("c:type", "led_classdev_flash"),
+	("c:type", "list_head"),
+	("c:type", "lock_class_key"),
+	("c:type", "module"),
+	("c:type", "mutex"),
+	("c:type", "pci_dev"),
+	("c:type", "pdvbdev"),
+	("c:type", "poll_table_struct"),
+	("c:type", "s32"),
+	("c:type", "s64"),
+	("c:type", "sd"),
+	("c:type", "spi_board_info"),
+	("c:type", "spi_device"),
+	("c:type", "spi_master"),
+	("c:type", "struct fb_fix_screeninfo"),
+	("c:type", "struct pollfd"),
+	("c:type", "struct timeval"),
+	("c:type", "struct video_capability"),
+	("c:type", "u16"),
+	("c:type", "u32"),
+	("c:type", "u64"),
+	("c:type", "u8"),
+	("c:type", "union"),
+	("c:type", "usb_device"),
+
+	("cpp:type", "boolean"),
+	("cpp:type", "fd"),
+	("cpp:type", "fd_set"),
+	("cpp:type", "int16_t"),
+	("cpp:type", "NULL"),
+	("cpp:type", "off_t"),
+	("cpp:type", "pollfd"),
+	("cpp:type", "size_t"),
+	("cpp:type", "ssize_t"),
+	("cpp:type", "timeval"),
+	("cpp:type", "__u16"),
+	("cpp:type", "__u32"),
+	("cpp:type", "__u64"),
+	("cpp:type", "uint16_t"),
+	("cpp:type", "uint32_t"),
+	("cpp:type", "video_system_t"),
+]




^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: Functions and data structure cross references with Sphinx
  2016-08-05 10:47   ` Mauro Carvalho Chehab
@ 2016-08-05 12:22     ` Markus Heiser
  2016-08-05 12:43       ` Mauro Carvalho Chehab
  0 siblings, 1 reply; 5+ messages in thread
From: Markus Heiser @ 2016-08-05 12:22 UTC (permalink / raw)
  To: Mauro Carvalho Chehab
  Cc: Jani Nikula, Jonathan Corbet, Linux Media Mailing List, linux-doc


Am 05.08.2016 um 12:47 schrieb Mauro Carvalho Chehab <mchehab@s-opensource.com>:

> Em Fri, 5 Aug 2016 09:29:23 +0200
> Markus Heiser <markus.heiser@darmarit.de> escreveu:
> 
>> Am 01.08.2016 um 13:25 schrieb Mauro Carvalho Chehab <mchehab@s-opensource.com>:
>> 
>>> There's one remaining major issue I noticed after the conversion of the
>>> media books to Sphinx:
>>> 
>>> While sphinx complains if a cross-reference (using :ref:) points to an
>>> undefined reference, the same doesn't happen if the reference uses
>>> :c:func: and :c:type:.
>>> 
>>> In practice, it means that, if we do some typo there, or if we forget to
>>> add the function/struct prototype (or use the wrong domain, like :cpp:),
>>> Sphinx won't generate the proper cross-reference, nor warning the user.
>>> 
>>> That's specially bad for media, as, while we're using the c domain for
>>> the kAPI and driver-specific books, we need to use the cpp domain on the 
>>> uAPI book - as the c domain doesn't allow multiple declarations for
>>> syscalls, and we have multiple pages for read, write, open, close, 
>>> poll and ioctl.
>>> 
>>> It would be good to have a way to run Sphinx on some "pedantic"
>>> mode or have something similar to xmlint that would be complaining
>>> about invalid c/cpp domain references.
>>> 
>>> Thanks,
>>> Mauro  
>> 
>> Hi Mauro,
>> 
>> there is a nit-picky mode [1], which could be activated by setting
>> "nitpicky=True" in the conf.py or alternative, set "-n" to the 
>> SPHINXOPTS:
>> 
>> make SPHINXOPTS=-n htmldocs
>> 
>> Within nit-picky mode, Sphinx will warn about **all** references. This
>> might be more then you want. For this, in the conf.py you could
>> assemble a "nitpick_ignore" list [2]. But I think, assemble the
>> ignore list is quite a lot of work.
>> 
>> [1] http://www.sphinx-doc.org/en/stable/config.html#confval-nitpicky
>> [2] http://www.sphinx-doc.org/en/stable/config.html#confval-nitpick_ignore
> 
> Yeah, this is what I was looking for.
> 
> We indeed want to use this option on media, but there are some things
> that need to be addressed. From some quick tests here, what I noticed
> is:
> 
> 1) Sphinx will generate several references that should be safely ignored
> for everyone, like "enum", "u32", "int32_t", "bool", "NULL", etc;
> 
> 2) the usage of cpp domain for system calls make several symbols to
> not match, as the cpp function prototype will generate cross references
> for the cpp domain, instead of using the c domain. So, we need a
> better way to fix it using the c domain, or convert everything to the
> cpp domain;
> 
> 3) The references generated from the header files I'm parsing don't
> use the c (or cpp) domain. They're declared at the media book as a
> normal reference:
> 	Documentation/media/uapi/v4l/field-order.rst:.. _v4l2-field:
> 
> and cross-referenced with:
> 	ref:`v4l2_field <v4l2-field>`
> 
> Is there a way to change it to the c domain?
> 
> 
> 4) there are several references that, IMHO, should be nitpick-ignored
> only when the book is generated stand alone. For example, at the
> media docbooks, we have references for things like:
> 
> - pci_dev, mutex, off_t, container_of, etc - those are generic
> references for the symbols that every driver uses, but, as we
> don't have the books with those converted yet, nitpick complains.
> Once we have such references, they should be ignored *only* when
> the book is generated standalone. As those are "core" symbols,
> they should be already be documented, but the book was not
> ported from DocBook yet. Once we have everything ported to
> Sphinx, I would expect that they all will vanish (and, if not,
> IMHO, documenting them should be prioritized).
> 
> - References for subsystem-specific symbols like: spi_board_info,
> led_classdev_flash, i2c_adapter, etc. Those would require that
> the maintainers of the specific subsystems to add documentation
> to them, as I bet several such symbols won't be currently
> documented. So, even after the port, I afraid that we'll still
> have several such symbols missing.
> 
> To address (3), we need different sets of nitpick ignore lists.
> 
> At least in my case, I have two different procedures, depending
> on the time at the Kernel release cycle:
> 
> a) daily patch merge workflow
> --------------------------
> 
> In any case, for (3), I don't want to see those warnings during
> my daily patch handling process where I rebuild documentation for
> every patch that touches a documented file. I want to see only
> things like:
> 	Documentation/media/uapi/v4l/hist-v4l2.rst:1295: WARNING: c:type reference target not found: struct v4l2_buffer
> 
> With indicates that a new patch would be introducing documentation
> gaps.
> 
> So, we need a way to have a per-subsystem nitpick_ignore list
> (or a way to pass such list via command line), for us to be able to
> ignore "alien" symbols that aren't part of the subsystem we're
> maintaining.
> 
> b) preparation for the merge window
> --------------------------------
> 
> Late at the patch handling cycle, I run a very long task here that
> builds the media subsystem for 50+ different archs. I also check and
> fix smatch/sparse warnings. During such time, I would love to view
> the full list of missing symbols, in order to be able to handle
> eventual cross-subsystem wrong references (or eventually help documenting
> something that we use at the media subsystem).
> 
> So, I would need to use a different nitpick_ignore list.
> 
> Is there a way for us to specify the nitpick_ignore list (or a different
> conf.py) via command line?

Since conf.py is python, we could implement something, which loads a
"conditional configuration", e.g. loading a config with a nitpick_ignore
list in. Depending on an environment 

 "SPHINX_BUILD_CONF=[strong|lazy]-nit-picking.py"

we could load individual build-configs overwriting the default settings
from the origin conf.py.

On which repo/branch you are working? .. I send you a RFC patch 
for "conditional configurations".

Back to (3) ... as far as I know, there is no way to add a 
*Internal Hyperlink Target* (e.g. "_v4l2-field:") to the C or 
CPP domain.

There is a ":any:" directive does something vice versa.

http://www.sphinx-doc.org/en/stable/markup/inline.html#role-any

But I think, this will not help referencing a type from a function
prototype to a *Internal Hyperlink Target*, like the struct described
under the "_v4l2-field:" target.

If ":any:" does not help, we might find a solution with an additional
crossref-type or something similar:

http://www.sphinx-doc.org/en/stable/extdev/appapi.html#sphinx.application.Sphinx.add_crossref_type

But this needs some more thoughts.

-- Markus --


> Btw, I'm enclosing a patch adding several of those references that are
> alien to the media subsystem and currently causes nitpick complains.
> 
> 
> doc-rst: ignore several undefined symbols in nitpick mode
> 
> using Sphinx in nitpick mode is too verbose to make it useful.
> So, we need to make it less verbose, in order to be able to
> actually use it.
> 
> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
> 
> diff --git a/Documentation/conf.py b/Documentation/conf.py
> index 96b7aa66c89c..d1805b8710c3 100644
> --- a/Documentation/conf.py
> +++ b/Documentation/conf.py
> @@ -419,3 +419,88 @@ pdf_documents = [
> # line arguments.
> kerneldoc_bin = '../scripts/kernel-doc'
> kerneldoc_srctree = '..'
> +
> +#
> +# It is possible to run Sphinx in nickpick mode with:
> +#	make SPHINXOPTS=-n htmldocs
> +# In such case, it will complain about lots of missing references that
> +#	1) are just typedefs like: bool, __u32, etc;
> +#	2) It will complain for things like: enum, NULL;
> +#	3) It will complain for symbols that should be on different
> +#	   books (but currently aren't ported to ReST)
> +# The list below has a list of such symbols to be ignored in nitpick mode
> +#
> +nitpick_ignore = [
> +	("c:func", "clock_gettime"),
> +	("c:func", "close"),
> +	("c:func", "container_of"),
> +	("c:func", "determine_valid_ioctls"),
> +	("c:func", "ERR_PTR"),
> +	("c:func", "ioctl"),
> +	("c:func", "IS_ERR"),
> +	("c:func", "mmap"),
> +	("c:func", "open"),
> +	("c:func", "pci_name"),
> +	("c:func", "poll"),
> +	("c:func", "PTR_ERR"),
> +	("c:func", "read"),
> +	("c:func", "release"),
> +	("c:func", "set"),
> +	("c:func", "struct fd_set"),
> +	("c:func", "struct pollfd"),
> +	("c:func", "usb_make_path"),
> +	("c:func", "write"),
> +	("c:type", "atomic_t"),
> +	("c:type", "bool"),
> +	("c:type", "buf_queue"),
> +	("c:type", "device"),
> +	("c:type", "device_driver"),
> +	("c:type", "device_node"),
> +	("c:type", "enum"),
> +	("c:type", "file"),
> +	("c:type", "i2c_adapter"),
> +	("c:type", "i2c_board_info"),
> +	("c:type", "i2c_client"),
> +	("c:type", "ktime_t"),
> +	("c:type", "led_classdev_flash"),
> +	("c:type", "list_head"),
> +	("c:type", "lock_class_key"),
> +	("c:type", "module"),
> +	("c:type", "mutex"),
> +	("c:type", "pci_dev"),
> +	("c:type", "pdvbdev"),
> +	("c:type", "poll_table_struct"),
> +	("c:type", "s32"),
> +	("c:type", "s64"),
> +	("c:type", "sd"),
> +	("c:type", "spi_board_info"),
> +	("c:type", "spi_device"),
> +	("c:type", "spi_master"),
> +	("c:type", "struct fb_fix_screeninfo"),
> +	("c:type", "struct pollfd"),
> +	("c:type", "struct timeval"),
> +	("c:type", "struct video_capability"),
> +	("c:type", "u16"),
> +	("c:type", "u32"),
> +	("c:type", "u64"),
> +	("c:type", "u8"),
> +	("c:type", "union"),
> +	("c:type", "usb_device"),
> +
> +	("cpp:type", "boolean"),
> +	("cpp:type", "fd"),
> +	("cpp:type", "fd_set"),
> +	("cpp:type", "int16_t"),
> +	("cpp:type", "NULL"),
> +	("cpp:type", "off_t"),
> +	("cpp:type", "pollfd"),
> +	("cpp:type", "size_t"),
> +	("cpp:type", "ssize_t"),
> +	("cpp:type", "timeval"),
> +	("cpp:type", "__u16"),
> +	("cpp:type", "__u32"),
> +	("cpp:type", "__u64"),
> +	("cpp:type", "uint16_t"),
> +	("cpp:type", "uint32_t"),
> +	("cpp:type", "video_system_t"),
> +]
> 
> 
> 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Functions and data structure cross references with Sphinx
  2016-08-05 12:22     ` Markus Heiser
@ 2016-08-05 12:43       ` Mauro Carvalho Chehab
  0 siblings, 0 replies; 5+ messages in thread
From: Mauro Carvalho Chehab @ 2016-08-05 12:43 UTC (permalink / raw)
  To: Markus Heiser
  Cc: Jani Nikula, Jonathan Corbet, Linux Media Mailing List, linux-doc

Em Fri, 5 Aug 2016 14:22:19 +0200
Markus Heiser <markus.heiser@darmarit.de> escreveu:

> Am 05.08.2016 um 12:47 schrieb Mauro Carvalho Chehab <mchehab@s-opensource.com>:
> 
> > Em Fri, 5 Aug 2016 09:29:23 +0200
> > Markus Heiser <markus.heiser@darmarit.de> escreveu:
> >   

> > Is there a way for us to specify the nitpick_ignore list (or a different
> > conf.py) via command line?  
> 
> Since conf.py is python, we could implement something, which loads a
> "conditional configuration", e.g. loading a config with a nitpick_ignore
> list in. Depending on an environment 
> 
>  "SPHINX_BUILD_CONF=[strong|lazy]-nit-picking.py"
> 
> we could load individual build-configs overwriting the default settings
> from the origin conf.py.

That would be interesting!

> On which repo/branch you are working? .. I send you a RFC patch 
> for "conditional configurations".

You can send it against either the media_tree.git[1] or the upstream 
one[2]. All Sphinx patches I have were merged there already (except for 
the experimental nickpick patch I attached on the previous e-mail).

[1] https://git.linuxtv.org/media_tree.git/log/
[2] https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/

> > 3) The references generated from the header files I'm parsing don't
> > use the c (or cpp) domain. They're declared at the media book as a
> > normal reference:
> > 	Documentation/media/uapi/v4l/field-order.rst:.. _v4l2-field:
> > 

> Back to (3) ... as far as I know, there is no way to add a 
> *Internal Hyperlink Target* (e.g. "_v4l2-field:") to the C or 
> CPP domain.

Argh!

> 
> There is a ":any:" directive does something vice versa.
> 
> http://www.sphinx-doc.org/en/stable/markup/inline.html#role-any
> 
> But I think, this will not help referencing a type from a function
> prototype to a *Internal Hyperlink Target*, like the struct described
> under the "_v4l2-field:" target.

Hmm... it might help, but this is Sphinx 1.3 or upper only.
As we decide to set the minimal version bar to 1.2, we should
avoid using it.

> 
> If ":any:" does not help, we might find a solution with an additional
> crossref-type or something similar:
> 
> http://www.sphinx-doc.org/en/stable/extdev/appapi.html#sphinx.application.Sphinx.add_crossref_type
> 
> But this needs some more thoughts.

That sounds more promising, but we'll need a replacement for the
:c:func: tag to use it.


Thanks,
Mauro

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-08-05 12:44 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-01 11:25 Functions and data structure cross references with Sphinx Mauro Carvalho Chehab
2016-08-05  7:29 ` Markus Heiser
2016-08-05 10:47   ` Mauro Carvalho Chehab
2016-08-05 12:22     ` Markus Heiser
2016-08-05 12:43       ` Mauro Carvalho Chehab

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.