# Introduction This is a collection of design documents, formerly maintained in various different locations and formats, now grouped together and converted to commonmark. # Contributing ## Style We will follow the commonmark specification. We *should* try to follow this [style guide](http://www.cirosantilli.com/markdown-style-guide/#about), but are still [evaluating solutions](https://github.com/jgm/cmark/issues/131) for *stable* automatic formatting. 80 columns line width is thus not yet enforced, but strongly suggested. # Build the documentation ## Install dependencies * Follow [hotdoc's installation guide](https://hotdoc.github.io/installing.html), preferably in a virtualenv. * We *experimentally* use the hotdoc C extension to include functions by name, follow the steps outlined [here](https://github.com/hotdoc/hotdoc_c_extension) ## Build the portal without the API documentation ``` meson build ninja -C build/ GStreamer-doc ``` And browse it: ``` gio open build/GStreamer-doc/html/index.html ``` ## API documentation Building the API documentation in the portal implies using [gst-build](https://gitlab.freedesktop.org/gstreamer/gst-build/) which allows us to aggregate the documentation from all GStreamer modules using the hotdoc subproject feature. From `gst-build`: ``` meson build/ ninja -C build subprojects/gst-docs/GStreamer-doc ``` And browse the doc: ``` gio open build/subprojects/gst-docs/GStreamer-doc/html/index.html ``` You can also generate a release tarball of the portal with: ``` ninja -C build gst-docs@release ``` ### Adding a newly written plugin to the documentation To add a plugin to the documentation you need to add the given meson target to the `plugins` list present in each GStreamer module for example: ``` meson gst_elements = library('gstcoreelements', gst_elements_sources, c_args : gst_c_args, include_directories : [configinc], dependencies : [gobject_dep, glib_dep, gst_dep, gst_base_dep], install : true, install_dir : plugins_install_dir, ) plugins += [gst_elements] ``` Then when rebuilding, the `gst_plugins_cache.json` file will be updated in the given module and this change should be commited to the git repository. The plugins documentation is generated exclusively based on that file to avoid needing to have built all plugins to get the documentation generated. NOTE: When moving plugins from one module to another, the `gst_plugins_cache.json` from the module where the plugin has been removed should be manually edited to reflect the removal. ## Licensing The content of this module comes from a number of different sources and is licensed in different ways: ### Tutorial source code All tutorial code is licensed under any of the following licenses (your choice): - 2-clause BSD license ("simplified BSD license") (`LICENSE.BSD`) - MIT license (`LICENSE.MIT`) - LGPL v2.1 (`LICENSE.LGPL-2.1`) This means developers have maximum flexibility and can pick the right license for any derivative work. ### Application Developer Manual and Plugin Writer's Guide These are licensed under the [Open Publication License v1.0][op-license] (`LICENSE.OPL`), for historical reasons. [op-license]: http://www.opencontent.org/openpub/ ### Documentation Mostly licensed under the [Creative Commons CC-BY-SA-4.0 license][cc-by-sa-4.0], but some parts of the documentation may still be licensed differently (e.g. LGPLv2.1) for historical reasons. [cc-by-sa-4.0]: https://creativecommons.org/licenses/by-sa/4.0/