doxygen: show corresponding #include files.
This is again a superset of the functionality that stock Doxygen
supports (well of course, I'm full-assing things as usual):
* Classes (structs, unions) show their corresponding include file right
in the header (that's what Doxygen does, too)
* Besides that, namespaces that are fully contained in one file show
the corresponding include file as well
* In case of modules (groups) or when namespace contents are spread
over multiple files, each member shows its own specific include file
in the detailed docs (because not doing that would be very confusing
for users, especially if the mapping to files is not trivial). This
means that functions/enums/typedefs/variables/defines that were
previously just a brief docs may now get expanded to full docs just
to contain the include file information. This also unfortunately hits
a bug in Doxygen, where it doesn't properly report the header
location for declarations of free (non-member) functions and
variables (but uses the definition location, which is in most cases
in an (otherwise undocumented) *.cpp file). I need to report and/or
PR that, ugh.
* Files don't provide the include file information, because there it's
known implicitly.
* The SHOW_INCLUDE_FILES setting (which defaults to YES and is meant
to be for "a list of the files that are included by a file in the
documentation of that file" which is just absolutely fucking useless
in every way imaginable) is reused to toggle showing of the include
information.
* To make the rendering a bit more compact, in case the struct or
member contains template parameters, the include information is put
next to these instead of after the signature.
* As with everything else in m.css, if the corresponding header is not
documented at all, the include file information is not present.
The \headerfile Doxygen command is not supported, because (what
a surprise! this is totally shitty as well! who would have thought!):
* it works only for classes, you can't override the include name for
the file itself!
* and forget about doing anything like that for free functions,
typedefs or the like!
* (minor) it doesn't support #include A_MACRO
* it doesn't seem to be exposed in the XML at all (ahahahahah AAAARGH)
Co-authored-by: Ryohei Machida <machida_mn@complex.ist.hokudai.ac.jp>