| Andrew Geissler | 517393d | 2023-01-13 08:55:19 -0600 | [diff] [blame] | 1 | .. SPDX-License-Identifier: CC-BY-SA-2.0-UK | 
|  | 2 |  | 
|  | 3 | Using Quilt in Your Workflow | 
|  | 4 | **************************** | 
|  | 5 |  | 
|  | 6 | `Quilt <https://savannah.nongnu.org/projects/quilt>`__ is a powerful tool | 
|  | 7 | that allows you to capture source code changes without having a clean | 
|  | 8 | source tree. This section outlines the typical workflow you can use to | 
|  | 9 | modify source code, test changes, and then preserve the changes in the | 
|  | 10 | form of a patch all using Quilt. | 
|  | 11 |  | 
|  | 12 | .. note:: | 
|  | 13 |  | 
|  | 14 | With regard to preserving changes to source files, if you clean a | 
|  | 15 | recipe or have :ref:`ref-classes-rm-work` enabled, the | 
|  | 16 | :ref:`devtool workflow <sdk-manual/extensible:using \`\`devtool\`\` in your sdk workflow>` | 
|  | 17 | as described in the Yocto Project Application Development and the | 
|  | 18 | Extensible Software Development Kit (eSDK) manual is a safer | 
|  | 19 | development flow than the flow that uses Quilt. | 
|  | 20 |  | 
|  | 21 | Follow these general steps: | 
|  | 22 |  | 
|  | 23 | #. *Find the Source Code:* Temporary source code used by the | 
|  | 24 | OpenEmbedded build system is kept in the :term:`Build Directory`. See the | 
|  | 25 | ":ref:`dev-manual/temporary-source-code:finding temporary source code`" section to | 
|  | 26 | learn how to locate the directory that has the temporary source code for a | 
|  | 27 | particular package. | 
|  | 28 |  | 
|  | 29 | #. *Change Your Working Directory:* You need to be in the directory that | 
|  | 30 | has the temporary source code. That directory is defined by the | 
|  | 31 | :term:`S` variable. | 
|  | 32 |  | 
|  | 33 | #. *Create a New Patch:* Before modifying source code, you need to | 
|  | 34 | create a new patch. To create a new patch file, use ``quilt new`` as | 
|  | 35 | below:: | 
|  | 36 |  | 
|  | 37 | $ quilt new my_changes.patch | 
|  | 38 |  | 
|  | 39 | #. *Notify Quilt and Add Files:* After creating the patch, you need to | 
|  | 40 | notify Quilt about the files you plan to edit. You notify Quilt by | 
|  | 41 | adding the files to the patch you just created:: | 
|  | 42 |  | 
|  | 43 | $ quilt add file1.c file2.c file3.c | 
|  | 44 |  | 
|  | 45 | #. *Edit the Files:* Make your changes in the source code to the files | 
|  | 46 | you added to the patch. | 
|  | 47 |  | 
|  | 48 | #. *Test Your Changes:* Once you have modified the source code, the | 
|  | 49 | easiest way to test your changes is by calling the :ref:`ref-tasks-compile` | 
|  | 50 | task as shown in the following example:: | 
|  | 51 |  | 
|  | 52 | $ bitbake -c compile -f package | 
|  | 53 |  | 
|  | 54 | The ``-f`` or ``--force`` option forces the specified task to | 
|  | 55 | execute. If you find problems with your code, you can just keep | 
|  | 56 | editing and re-testing iteratively until things work as expected. | 
|  | 57 |  | 
|  | 58 | .. note:: | 
|  | 59 |  | 
|  | 60 | All the modifications you make to the temporary source code disappear | 
|  | 61 | once you run the :ref:`ref-tasks-clean` or :ref:`ref-tasks-cleanall` | 
|  | 62 | tasks using BitBake (i.e. ``bitbake -c clean package`` and | 
|  | 63 | ``bitbake -c cleanall package``). Modifications will also disappear if | 
|  | 64 | you use the :ref:`ref-classes-rm-work` feature as described in | 
|  | 65 | the ":ref:`dev-manual/disk-space:conserving disk space during builds`" | 
|  | 66 | section. | 
|  | 67 |  | 
|  | 68 | #. *Generate the Patch:* Once your changes work as expected, you need to | 
|  | 69 | use Quilt to generate the final patch that contains all your | 
|  | 70 | modifications:: | 
|  | 71 |  | 
|  | 72 | $ quilt refresh | 
|  | 73 |  | 
|  | 74 | At this point, the | 
|  | 75 | ``my_changes.patch`` file has all your edits made to the ``file1.c``, | 
|  | 76 | ``file2.c``, and ``file3.c`` files. | 
|  | 77 |  | 
|  | 78 | You can find the resulting patch file in the ``patches/`` | 
|  | 79 | subdirectory of the source (:term:`S`) directory. | 
|  | 80 |  | 
|  | 81 | #. *Copy the Patch File:* For simplicity, copy the patch file into a | 
|  | 82 | directory named ``files``, which you can create in the same directory | 
|  | 83 | that holds the recipe (``.bb``) file or the append (``.bbappend``) | 
|  | 84 | file. Placing the patch here guarantees that the OpenEmbedded build | 
|  | 85 | system will find the patch. Next, add the patch into the :term:`SRC_URI` | 
|  | 86 | of the recipe. Here is an example:: | 
|  | 87 |  | 
|  | 88 | SRC_URI += "file://my_changes.patch" | 
|  | 89 |  |