Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 1 | documentation |
| 2 | ============= |
| 3 | |
| 4 | This is the directory that contains the Yocto Project documentation. The Yocto |
Andrew Geissler | d1e8949 | 2021-02-12 15:35:20 -0600 | [diff] [blame] | 5 | Project source repositories at https://git.yoctoproject.org/cgit.cgi have two |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 6 | instances of the "documentation" directory. You should understand each of |
| 7 | these instances. |
| 8 | |
| 9 | poky/documentation - The directory within the poky Git repository containing |
| 10 | the set of Yocto Project manuals. When you clone the |
| 11 | poky Git repository, the documentation directory |
| 12 | contains the manuals. The state of the manuals in this |
| 13 | directory is guaranteed to reflect the latest Yocto |
| 14 | Project release. The manuals at the tip of this |
| 15 | directory will also likely contain most manual |
| 16 | development changes. |
| 17 | |
| 18 | yocto-docs/documentation - The Git repository for the Yocto Project manuals. |
| 19 | This repository is where manual development |
| 20 | occurs. If you plan on contributing back to the |
| 21 | Yocto Project documentation, you should set up |
| 22 | a local Git repository based on this upstream |
| 23 | repository as follows: |
| 24 | |
| 25 | git clone git://git.yoctoproject.org/yocto-docs |
| 26 | |
| 27 | Changes and patches are first pushed to the |
| 28 | yocto-docs Git repository. Later, they make it |
| 29 | into the poky Git repository found at |
| 30 | git://git.yoctoproject.org/poky. |
| 31 | |
| 32 | Manual Organization |
| 33 | =================== |
| 34 | |
William A. Kennington III | ac69b48 | 2021-06-02 12:28:27 -0700 | [diff] [blame] | 35 | Here the folders corresponding to individual manuals: |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 36 | |
Andrew Geissler | 5199d83 | 2021-09-24 16:47:35 -0500 | [diff] [blame] | 37 | * overview-manual - Yocto Project Overview and Concepts Manual |
| 38 | * sdk-manual - Yocto Project Software Development Kit (SDK) Developer's Guide. |
| 39 | * bsp-guide - Yocto Project Board Support Package (BSP) Developer's Guide |
| 40 | * dev-manual - Yocto Project Development Tasks Manual |
| 41 | * kernel-dev - Yocto Project Linux Kernel Development Manual |
| 42 | * ref-manual - Yocto Project Reference Manual |
| 43 | * brief-yoctoprojectqs - Yocto Project Quick Start |
| 44 | * profile-manual - Yocto Project Profiling and Tracing Manual |
| 45 | * toaster-manual - Toaster User Manual |
| 46 | * test-manual - Yocto Project Test Environment Manual |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 47 | |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 48 | Each folder is self-contained regarding content and figures. |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 49 | |
| 50 | If you want to find HTML versions of the Yocto Project manuals on the web, |
Andrew Geissler | 5199d83 | 2021-09-24 16:47:35 -0500 | [diff] [blame] | 51 | the current versions reside at https://docs.yoctoproject.org. |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 52 | |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 53 | poky.yaml |
| 54 | ========= |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 55 | |
| 56 | This file defines variables used for documentation production. The variables |
| 57 | are used to define release pathnames, URLs for the published manuals, etc. |
| 58 | |
| 59 | template |
| 60 | ======== |
| 61 | Contains various templates, fonts, and some old PNG files. |
| 62 | |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 63 | Sphinx |
| 64 | ====== |
| 65 | |
| 66 | The Yocto Project documentation was migrated from the original DocBook |
| 67 | format to Sphinx based documentation for the Yocto Project 3.2 |
| 68 | release. This section will provide additional information related to |
| 69 | the Sphinx migration, and guidelines for developers willing to |
| 70 | contribute to the Yocto Project documentation. |
| 71 | |
| 72 | Sphinx is a tool that makes it easy to create intelligent and |
| 73 | beautiful documentation, written by Georg Brandl and licensed under |
| 74 | the BSD license. It was originally created for the Python |
| 75 | documentation. |
| 76 | |
| 77 | Extensive documentation is available on the Sphinx website: |
| 78 | https://www.sphinx-doc.org/en/master/. Sphinx is designed to be |
| 79 | extensible thanks to the ability to write our own custom extensions, |
| 80 | as Python modules, which will be executed during the generation of the |
| 81 | documentation. |
| 82 | |
| 83 | Yocto Project documentation website |
| 84 | =================================== |
| 85 | |
Andrew Geissler | 0903674 | 2021-06-25 14:25:14 -0500 | [diff] [blame] | 86 | The website hosting the Yocto Project documentation, can be found |
| 87 | at: https://docs.yoctoproject.org/. |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 88 | |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 89 | The entire Yocto Project documentation, as well as the BitBake manual, |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 90 | is published on this website, including all previously released |
| 91 | versions. A version switcher was added, as a drop-down menu on the top |
| 92 | of the page to switch back and forth between the various versions of |
| 93 | the current active Yocto Project releases. |
| 94 | |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 95 | Transition pages have been added (as rst files) to show links to old |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 96 | versions of the Yocto Project documentation with links to each manual |
| 97 | generated with DocBook. |
| 98 | |
| 99 | How to build the Yocto Project documentation |
| 100 | ============================================ |
| 101 | |
| 102 | Sphinx is written in Python. While it might work with Python2, for |
| 103 | obvious reasons, we will only support building the Yocto Project |
| 104 | documentation with Python3. |
| 105 | |
| 106 | Sphinx might be available in your Linux distro packages repositories, |
Andrew Geissler | 3b8a17c | 2021-04-15 15:55:55 -0500 | [diff] [blame] | 107 | however it is not recommended to use distro packages, as they might be |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 108 | old versions, especially if you are using an LTS version of your |
| 109 | distro. The recommended method to install Sphinx and all required |
| 110 | dependencies is to use the Python Package Index (pip). |
| 111 | |
| 112 | To install all required packages run: |
| 113 | |
| 114 | $ pip3 install sphinx sphinx_rtd_theme pyyaml |
| 115 | |
| 116 | To build the documentation locally, run: |
| 117 | |
| 118 | $ cd documentation |
Andrew Geissler | f034379 | 2020-11-18 10:42:21 -0600 | [diff] [blame] | 119 | $ make html |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 120 | |
| 121 | The resulting HTML index page will be _build/html/index.html, and you |
| 122 | can browse your own copy of the locally generated documentation with |
| 123 | your browser. |
| 124 | |
Andrew Geissler | 6ce62a2 | 2020-11-30 19:58:47 -0600 | [diff] [blame] | 125 | Alternatively, you can use Pipenv to automatically install all required |
| 126 | dependencies in a virtual environment: |
| 127 | |
| 128 | $ cd documentation |
| 129 | $ pipenv install |
| 130 | $ pipenv run make html |
| 131 | |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 132 | Sphinx theme and CSS customization |
| 133 | ================================== |
| 134 | |
| 135 | The Yocto Project documentation is currently based on the "Read the |
| 136 | Docs" Sphinx theme, with a few changes to make sure the look and feel |
| 137 | of the project documentation is preserved. |
| 138 | |
| 139 | Most of the theme changes can be done using the file |
| 140 | 'sphinx-static/theme_overrides.css'. Most CSS changes in this file |
| 141 | were inherited from the DocBook CSS stylesheets. |
| 142 | |
| 143 | Sphinx design guidelines and principles |
| 144 | ======================================= |
| 145 | |
| 146 | The initial Docbook to Sphinx migration was done with an automated |
| 147 | tool called Pandoc (https://pandoc.org/). The tool produced some clean |
| 148 | output markdown text files. After the initial automated conversion |
| 149 | additional changes were done to fix up headings, images and links. In |
| 150 | addition Sphinx has built in mechanisms (directives) which were used |
| 151 | to replace similar functions implemented in Docbook such as glossary, |
| 152 | variables substitutions, notes and references. |
| 153 | |
| 154 | Headings |
| 155 | ======== |
| 156 | |
| 157 | The layout of the Yocto Project manuals is organized as follows |
| 158 | |
| 159 | Book |
| 160 | Chapter |
| 161 | Section |
| 162 | Section |
| 163 | Section |
| 164 | |
William A. Kennington III | ac69b48 | 2021-06-02 12:28:27 -0700 | [diff] [blame] | 165 | Here are the heading styles defined in Sphinx: |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 166 | |
| 167 | Book => overline === |
| 168 | Chapter => overline *** |
| 169 | Section => ==== |
| 170 | Section => ---- |
| 171 | Section => ^^^^ |
| 172 | Section => """" or ~~~~ |
| 173 | |
| 174 | With this proposal, we preserve the same TOCs between Sphinx and Docbook. |
| 175 | |
| 176 | Built-in glossary |
| 177 | ================= |
| 178 | |
| 179 | Sphinx has a glossary directive. From |
| 180 | https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#glossary: |
| 181 | |
| 182 | This directive must contain a reST definition list with terms and |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 183 | definitions. It's then possible to refer to each definition through the |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 184 | [https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-term |
| 185 | 'term' role]. |
| 186 | |
| 187 | So anywhere in any of the Yocto Project manuals, :term:`VAR` can be |
| 188 | used to refer to an item from the glossary, and a link is created |
| 189 | automatically. A general index of terms is also generated by Sphinx |
| 190 | automatically. |
| 191 | |
| 192 | Global substitutions |
| 193 | ==================== |
| 194 | |
| 195 | The Yocto Project documentation makes heavy use of global |
| 196 | variables. In Docbook these variables are stored in the file |
| 197 | poky.ent. This Docbook feature is not handled automatically with |
| 198 | Pandoc. Sphinx has builtin support for substitutions |
| 199 | (https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#substitutions), |
| 200 | however there are important shortcomings. For example they cannot be |
| 201 | used/nested inside code-block sections. |
| 202 | |
| 203 | A Sphinx extension was implemented to support variable substitutions |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 204 | to mimic the DocBook based documentation behavior. Variable |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 205 | substitutions are done while reading/parsing the .rst files. The |
| 206 | pattern for variables substitutions is the same as with DocBook, |
| 207 | e.g. `&VAR;`. |
| 208 | |
| 209 | The implementation of the extension can be found here in the file |
| 210 | documentation/sphinx/yocto-vars.py, this extension is enabled by |
| 211 | default when building the Yocto Project documentation. All variables |
| 212 | are set in a file call poky.yaml, which was initially generated from |
| 213 | poky.ent. The file was converted into YAML so that it is easier to |
| 214 | process by the custom Sphinx extension (which is a Python module). |
| 215 | |
| 216 | For example, the following .rst content will produce the 'expected' |
| 217 | content: |
| 218 | |
| 219 | .. code-block:: |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 220 | $ mkdir poky-&DISTRO; |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 221 | or |
| 222 | $ git clone &YOCTO_GIT_URL;/git/poky -b &DISTRO_NAME_NO_CAP; |
| 223 | |
| 224 | Variables can be nested, like it was the case for DocBook: |
| 225 | |
Andrew Geissler | d1e8949 | 2021-02-12 15:35:20 -0600 | [diff] [blame] | 226 | YOCTO_HOME_URL : "https://www.yoctoproject.org" |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 227 | YOCTO_DOCS_URL : "&YOCTO_HOME_URL;/docs" |
| 228 | |
| 229 | Note directive |
| 230 | ============== |
| 231 | |
| 232 | Sphinx has a builtin 'note' directive that produces clean Note section |
| 233 | in the output file. There are various types of directives such as |
| 234 | "attention", "caution", "danger", "error", "hint", "important", "tip", |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 235 | "warning", "admonition" that are supported, and additional directives |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 236 | can be added as Sphinx extension if needed. |
| 237 | |
| 238 | Figures |
| 239 | ======= |
| 240 | |
| 241 | The Yocto Project documentation has many figures/images. Sphinx has a |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 242 | 'figure' directive which is straightforward to use. To include a |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 243 | figure in the body of the documentation: |
| 244 | |
| 245 | .. image:: figures/YP-flow-diagram.png |
| 246 | |
| 247 | Links and References |
| 248 | ==================== |
| 249 | |
| 250 | The following types of links can be used: links to other locations in |
| 251 | the same document, to locations in other documents and to external |
| 252 | websites. |
| 253 | |
| 254 | More information can be found here: |
| 255 | https://sublime-and-sphinx-guide.readthedocs.io/en/latest/references.html. |
| 256 | |
Andrew Geissler | 3b8a17c | 2021-04-15 15:55:55 -0500 | [diff] [blame] | 257 | Anchor (<#link>) links are forbidden as they are not checked by Sphinx during |
| 258 | the build and may be broken without knowing about it. |
| 259 | |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 260 | References |
| 261 | ========== |
| 262 | |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 263 | The following extension is enabled by default: |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 264 | sphinx.ext.autosectionlabel |
| 265 | (https://www.sphinx-doc.org/en/master/usage/extensions/autosectionlabel.html). |
| 266 | |
| 267 | This extension allows you to refer sections by their titles. Note that |
| 268 | autosectionlabel_prefix_document is enabled by default, so that we can |
| 269 | insert references from any document. |
| 270 | |
| 271 | For example, to insert an HTML link to a section from |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 272 | documentation/manual/intro.rst, use: |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 273 | |
| 274 | Please check this :ref:`manual/intro:Cross-References to Locations in the Same Document` |
| 275 | |
| 276 | Alternatively a custom text can be used instead of using the section |
| 277 | text: |
| 278 | |
| 279 | Please check this :ref:`section <manual/intro:Cross-References to Locations in the Same Document>` |
| 280 | |
| 281 | TIP: The following command can be used to dump all the references that |
| 282 | are defined in the project documentation: |
| 283 | |
| 284 | python -msphinx.ext.intersphinx <path to build folder>/html/objects.inv |
| 285 | |
| 286 | This dump contains all links and for each link it shows the default |
| 287 | "Link Text" that Sphinx would use. If the default link text is not |
| 288 | appropriate, a custom link text can be used in the ':ref:' directive. |
| 289 | |
| 290 | Extlinks |
| 291 | ======== |
| 292 | |
| 293 | The sphinx.ext.extlinks extension is enabled by default |
| 294 | (https://sublime-and-sphinx-guide.readthedocs.io/en/latest/references.html#use-the-external-links-extension), |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 295 | and it is configured with the 'extlinks' definitions in |
| 296 | the 'documentation/conf.py' file: |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 297 | |
| 298 | 'yocto_home': ('https://yoctoproject.org%s', None), |
| 299 | 'yocto_wiki': ('https://wiki.yoctoproject.org%s', None), |
| 300 | 'yocto_dl': ('https://downloads.yoctoproject.org%s', None), |
| 301 | 'yocto_lists': ('https://lists.yoctoproject.org%s', None), |
| 302 | 'yocto_bugs': ('https://bugzilla.yoctoproject.org%s', None), |
| 303 | 'yocto_ab': ('https://autobuilder.yoctoproject.org%s', None), |
| 304 | 'yocto_docs': ('https://docs.yoctoproject.org%s', None), |
| 305 | 'yocto_git': ('https://git.yoctoproject.org%s', None), |
| 306 | 'oe_home': ('https://www.openembedded.org%s', None), |
| 307 | 'oe_lists': ('https://lists.openembedded.org%s', None), |
Andrew Geissler | 95ac1b8 | 2021-03-31 14:34:31 -0500 | [diff] [blame] | 308 | 'oe_git': ('https://git.openembedded.org%s', None), |
| 309 | 'oe_wiki': ('https://www.openembedded.org/wiki%s', None), |
| 310 | 'oe_layerindex': ('https://layers.openembedded.org%s', None), |
| 311 | 'oe_layer': ('https://layers.openembedded.org/layerindex/branch/master/layer%s', None), |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 312 | |
| 313 | It creates convenient shortcuts which can be used throughout the |
| 314 | documentation rst files, as: |
| 315 | |
| 316 | Please check this :yocto_wiki:`wiki page </Weekly_Status>` |
| 317 | |
| 318 | Intersphinx links |
| 319 | ================= |
| 320 | |
| 321 | The sphinx.ext.intersphinx extension is enabled by default |
| 322 | (https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html), |
| 323 | so that we can cross reference content from other Sphinx based |
| 324 | documentation projects, such as the BitBake manual. |
| 325 | |
Patrick Williams | 213cb26 | 2021-08-07 19:21:33 -0500 | [diff] [blame] | 326 | References to the BitBake manual can be done: |
| 327 | - With a specific description instead of the section name: |
| 328 | :ref:`Azure Storage fetcher (az://) <bitbake:bitbake-user-manual/bitbake-user-manual-fetching:fetchers>` |
| 329 | - With the section name: |
| 330 | ":ref:`bitbake:bitbake-user-manual/bitbake-user-manual-intro:usage and syntax` option |
| 331 | - Linking to the entire BitBake manual: |
| 332 | :doc:`BitBake User Manual <bitbake:index>` |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 333 | |
Patrick Williams | 213cb26 | 2021-08-07 19:21:33 -0500 | [diff] [blame] | 334 | Note that a reference to a variable (:term:`VARIABLE`) automatically points to |
| 335 | the BitBake manual if the variable is not described in the Reference Manual's Variable Glossary. |
| 336 | However, if you need to bypass this, you can explicitely refer to a description in the |
| 337 | BitBake manual as follows: |
| 338 | |
Andrew Geissler | c3d88e4 | 2020-10-02 09:45:00 -0500 | [diff] [blame] | 339 | :term:`bitbake:BB_NUMBER_PARSE_THREADS` |
Andrew Geissler | 6ce62a2 | 2020-11-30 19:58:47 -0600 | [diff] [blame] | 340 | |
| 341 | Submitting documentation changes |
| 342 | ================================ |
| 343 | |
| 344 | Please see the top level README file in this repository for details of where |
| 345 | to send patches. |