GStreamer documentation notes OVERVIEW ======== Our documentation uses hotdoc, you should usually refer to the [hotdoc documentation](http://hotdoc.github.io/). GStreamer has two sets of documentation but both are controlled and aggregated in the `gst-docs` module: * API references, using hotdoc (gstreamer, gstreamer-libs) - maintained in each GStreamer modules repository * FAQ / Application Development Manual / Plugin Writer's Guide / Tutorials - these are maintained in markdown format and live in the gst-docs repository. To build the full documentation you should make sure to have `hotdoc` installed and build [gst-build](https://cgit.freedesktop.org/gstreamer/gst-build/) configuring it with: ``` meson -Ddoc=enabled build/ ``` And building the documentation: ``` ninja -C build/ subprojects/gst-docs/GStreamer-doc`, this will result in two documentation sets: ``` This will generate two outputs: - the html in `build/subprojects/gst-docs/GStreamer-doc/html` - the [devhelp](https://wiki.gnome.org/Apps/Devhelp) in `build/subprojects/gst-docs/GStreamer-doc/devhelp` HOW THE BUILD SYSTEM IS SET UP ------------------------------ Hotdoc build targets are generated for each documentation 'components' (ie. hotdoc subprojects). This includes libraries documentation and one target per GStreamer plugin. One can build a specific documentation target by explicitly building the target, for example to build the GStreamer core library documentation (adapt the paths if you are using `gst-build`): ninja docs/libgstreamer-doc Then the documentation will be available in `docs/libgstreamer-doc/html/`. SPELL CHECKING -------------- FILL ME. HOTDOC NOTES ============= * files under revision control: - sitemap.txt: defines the overall structure of the documentation - gst_plugins_cache.json: Automatically generated information about plugins * what to do when adding a new piece of API: - Just let hotdoc generate the documentation and decide where to put it - Make sure to add a `SECTION` documentation section in the file where the documentation should land (hotdoc will use that to create its "smart index" and list symbols from other files that should land on that page in that section. - document functions, signals in the .c files - document structs, typedefs, enums in the .h files * what to do when trying to improve the docs - compare the output of grep "_get_type" gstreamer-sections.txt | sort with the types in XXX.types to detect entries that are maybe missing - hotdoc does not warns about empty member docs!, run find . -name "*.[c,h]" -exec egrep -Hn "^ +\* +@.*: *$" {} \; in the project root to find them - hotdoc does not warns about empty Returns: docs!, run find . -name "*.[c,h]" -exec egrep -Hn "^ +\* +@Returns: *$" {} \; in the project root to find them * what happens during a hotdoc build ? - Read the GIR and scan the sources files for the docstrings and generate the documentation laying out pages the way they are documented. - The meson build definition is set in a way that makes it so all plugins in `plugins_doc` are introspected and documented STYLE GUIDE FOR HOTDOC ======================= - this is in addition to gtk-doc's style-guide.txt - function/macro descriptions are descriptive, not imperative ie, it uses the third person verb - synopsis and description should have most-used/application functions at the top - functions that can return FALSE/NULL or fail should describe their failure conditions like this: * Returns NULL if no element with the given name is found in the bin, if * the frobble was stuck in the froob, or the frizzle was frazzed. - a line with function attributes should be added before Returns: - can contain: "MT safe." - the function is verified to be multithreadingsafe "Caller owns returned reference" for refcounted classes "Caller owns returned value" for other types (iterators, ..) - we do this because, in contrast with GLib/GTK, we are more explicit about threadsafety and related issues WEBSITE DOCUMENTATION ===================== Updating the online documentation is done from with the `gst-docs` repository DOCUMENTING ELEMENTS ==================== A hotdoc plugin is provided by GStreamer to document GStreamer plugins. - to add a plugin to be documented: - make sure the plugin is added to the `plugins_doc` variable in meson - to add an element to be documented: - add a gtk-doc section to the source code like: /** * SECTION:element-multifdsink and fill it with documentation about the element - add an example: - either a few pipelines, inside a codeblock - or a piece of code inside a codeblock or in `tests/examples/(pluginname)` - to build the doc for a plugin, do: `ninja docs/(pluginname)-doc` DEVHELP INTEGRATION ------------------- Check https://wiki.gnome.org/Apps/Devhelp It's a really nice development app allowing you to look up API stuff from various hotdoc/gtk-doc'd libraries. GStreamer is one of these ;) hotdoc generates both html API docs and the matching .devhelp(2) books. IMAGES ------ It's important to keep the original source format for images, to be able to change and regenerate later on. Original files go in docs/images